計算機科学のブログ

コンテキストでの型の操作 Monad型クラス ApplicativeとFunctorの制限 Maybeに対するbind関数の実装

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT5(コンテキストでの型の操作)、LESSON30(ApplicativeとFunctorの制限)、30.5(練習問題)Q30-3の解答を求めてみる。

コード

bind :: Maybe a -> (a -> Maybe b) -> Maybe b
bind (Just x) f = f x
bind Nothing _ = Nothing

f :: (Ord a, Num a, Show a) => a -> Maybe String
f x =
  if x < 0
    then Nothing
    else Just $ show $ 2 * x

xs :: [Maybe Integer]
xs = [Just (-5), Nothing, Just 0, Just 11, Just 1]

main :: IO ()
main = do
  mapM_ (\x -> print $ bind x f) xs

入出力結果(Terminal, Zsh)

% runghc sample3.hs
Nothing
Nothing
Just "0"
Just "22"
Just "2"
%