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) ()