Maybeモナド
ふつうのHaskellプログラミング p263
書籍中ではlookup関数を使った例が示してあるので、別の例をやってみる。
リファレンスマニュアルを探したところ、
find :: (a -> Bool) -> [a] -> Maybe a
ってのが、それっぽかったので、やってみる。
リスト[a]から、関数(a -> Bool)がTrueとなる最初の要素を返すという仕様らしい。
import List main = print $ find test [1,2,3] test x = if x > 1 then True else False
結果はこう。
Just 2
おお、なんか動いた。しかし、なんかJustってのがジャマっぽい。(なんじゃそら)
ので、取ってみる。
import List import Data.Maybe main = print $ fromJust $ find test [1,2,3] test x = if x > 1 then True else False
結果はこう。
2
Just取れた。
せっかくなので、>>=を使ってモナドっぽいのを書いてみる。
文字列のリストからbで始まってcで終わる要素を取り出してみる。
import List main = print $ return ["aaa", "bbc", "ccc"] >>= find startsWithB >>= find endsWi thC startsWithB xs = if (head xs) == 'b' then True else False endsWithC x = if x == 'c' then True else False
結果はこう。
Just 'c'
ちなみに、
["aaa", "bbb", "ccc"]
にすると、
Nothing
となるが、
["aaa", "bbb", "ccc", "bbc"]
としても、
Nothing
となる。
bで始まる最初の要素は"bbb"なので、これに対して'c'で終わるかの判定が入り、結果Nothingとなります。うーん、いまいち。全く実用的じゃないね。これ。