コンテキストでの型の操作 Monad型クラス Maybe版(>>=)の実装、bind関数
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT5(コンテキストでの型の操作)、LESSON 30(Monad型クラス)、30.5(練習問題)Q30-3の解答を求めてみる。
コード
lesson/app/Main.hs
module Main (main) where
import Lib
( bind,
)
nums :: [Maybe Int]
nums = Nothing : map Just [-4 .. 5]
f :: (Eq a, Num a, Show a) => a -> Maybe String
f 0 = Nothing
f n = Just $ show n
main :: IO ()
main = do
mapM_
(\x -> print $ bind x f)
nums
lesson/src/Lib.hs
module Lib
( bind,
)
where
bind :: Maybe a -> (a -> Maybe b) -> Maybe b
bind (Just x) f = f x
bind Nothing _ = Nothing
入出力結果(Terminal, Zsh)
% stack exec lesson-exe
Nothing
Just "-4"
Just "-3"
Just "-2"
Just "-1"
Nothing
Just "1"
Just "2"
Just "3"
Just "4"
Just "5"
%