fugafuga.write

日々のログ

すごいH本 part85

do 記法

do 記法は IOモナドだけでなく、他のモナドにも使える

*Main Lib> Just 3 >>= (\x -> Just (show x ++ "!"))
Just "3!"

入れ子にする

*Main Lib> Just 3 >>= (\x -> Just "!" >>= (\y -> Just (show x ++ y)))
Just "3!"

let式と似ている

*Main Lib> let x = 3; y = "!" in show x ++ y
"3!"

letと異なる点は文脈を持っているかどうか

*Main Lib> Just 3 >>= (\x -> Nothing >>= (\y -> Just (show x ++ y)))
Nothing

Nothingを途中で与えるとちゃんとNothingを返す

この式をスクリプト風に書きなおしてみる

foo :: Maybe String
foo = Just 3 >>= (\x ->
      Just "!" >>= (\y ->
      Just (show x ++ y)))

ラムダ式が煩わしいので do を使って書き直す

foo :: Maybe String
foo = do
        x <- Just 3
        y <- Just "!"
        Just (show x ++ y)

Maybe値がNothingかどうか気にせずMaybe値から生の値がとれそうな書き方になっている。 もし、Nothingだった場合は、do 式全体がNothingになる。

所感

doで糊付けしている中身がわかった。