言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

[haskell] 色々な 3 + 4 の書き方

import Control.Arrow

-- 普通に
functionExp =
    3 + 4

-- do 記法と IO モナドを使う。わざと同じ変数名を使ってみた。
monadExp1 = do x <- return 3
               y <- return 4
               x <- return (x + y)
               print x

-- 普通のモナド記法。Joy 記法 (3 4 +) に似ている!
monadExp2 =
    return 3 >>= \x -> return 4 >>= \y -> return (x + y) >>= print

-- Arrow 記法。>>> にはコンビネータを使う約束のような気がしたので、3 と 4 は別に束縛しないでタプルで投入。
arrowExp =
    runKleisli (arr (const (3, 4)) >>> arr (\(x, y) -> x + y) >>> Kleisli print) ()