Maybe ユーティリティ

Maybe 型を便利に操作する関数「Haskell 98 言語とライブラリ 改訂レポート / 18 Maybe ユーティリティ」を写経してみます。今まで自分で作っていました・・・Orz

isJust                 :: Maybe a -> Bool
> isJust (Just 10) -- > True
> isJust  Nothing  -- > False

isNothing        :: Maybe a -> Bool
> isNothing (Just 2) -- > False
> isNothing  Nothing -- > True

fromJust               :: Maybe a -> a
> fromJust (Just 10) -- > 10
> fromJust Nothing   -- > *** Exception: Maybe.fromJust: Nothing

fromMaybe              :: a -> Maybe a -> a
> fromMaybe 0 Nothing   -- > 0
> fromMaybe 0 (Just 10) -- > 10

要素が一つだけのリストならMaybeと相互変換が可能です。

maybeToList            :: Maybe a -> [a]
> maybeToList Nothing   -- > []
> maybeToList (Just 10) -- > [10]

listToMaybe            :: [a] -> Maybe a
> listToMaybe []        -- > Nothing
> listToMaybe [7]       -- > Just 7
> listToMaybe [1,2,3,4] -- > Just 1

-- リストが縮みます。
catMaybes              :: [Maybe a] -> [a]
> catMaybes [Nothing, Just 1,Just 2,Nothing] --> [1,2]
> catMaybes $ map (\x-> if (even x) then (Just x) else Nothing) [1..10]
 -- > [2,4,6,8,10]
 
mapMaybe               :: (a -> Maybe b) -> [a] -> [b]
>  mapMaybe (\x-> if (even x) then (Just x) else Nothing) [1..10]
 -- > [2,4,6,8,10]