計算機科学のブログ

コンテキストでの型の操作 Functor型クラス Functor型クラスのコンテキストで関数を使用する fmap関数、<$>演算子

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT5(コンテキストでの型の操作)、LESSON27(Functor型クラス)、27.2(Functor型クラスのコンテキストで関数を使用する)、クイックチェック 27-2の解答を求めてみる。

コード

reverseMaybe1 :: Maybe String -> Maybe String
reverseMaybe1 = fmap reverse

reverseMaybe2 :: Maybe String -> Maybe String
reverseMaybe2 s = reverse <$> s

s :: [Maybe String]
s =
  [ Just "",
    Just "a",
    Just "Haskell",
    Nothing
  ]

fs :: [Maybe String -> Maybe String]
fs = [reverseMaybe1, reverseMaybe2]

main :: IO ()
main = do
  mapM_
    (\f -> mapM_ (print . f) s)
    fs

入出力結果(Terminal, Zsh)

% runghc sample02.hs 
Just ""
Just "a"
Just "lleksaH"
Nothing
Just ""
Just "a"
Just "lleksaH"
Nothing
%