mike-neckのブログ

Java or Groovy or Swift or Golang

Haskellのdo記法

いまいちピンときていなかったから、少しだけ調べた。

Haskell/do notation - Wikibooks, open books for an open world

次のようなモナドっぽい値を返す関数があって、連続で利用するときに使うらしい。

monadicFun1 :: Maybe Int
monadicFun1 = return 1

monadicFun2 :: Maybe Int
monadicFun2 = return 2

monadicFun3 :: Num a => a -> a -> Maybe a
monadicFun3 x y = Just (x + y)
// Monadを返す関数
myFun :: Maybe Int
myFunc = monadicFun1 >>= \x -> monadicFun2 >>= \y -> monadicFun3 x y

// myFunと同じ
aFun :: Maybe Int
aFun = do
    x <- monadicFun1
    y <- monadicFun2
    monadicFun3 x y

おわり