計算機科学のブログ

コンテキストでの型の操作 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"
%