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]