【发布时间】:2019-02-17 12:06:18
【问题描述】:
从学你一个haskell:http://learnyouahaskell.com/for-a-few-monads-more
函数的 Monad 实例是这样的:
instance Monad ((->) r) where
return x = \_ -> x
h >>= f = \w -> f (h w) w
我无法理解以下输出:
import Control.Monad.Instances
addStuff :: Int -> Int
addStuff = do
a <- (*2)
b <- (+10)
return (a+b)
addStuff 3 返回 19。书上说 3 作为参数传递给 (*2)and (+10)。怎么样?
从 h >>= f = \w -> f (h w) w 看来,(h w) 似乎被绑定到 a 或 b。
那么,为什么 6 没有被传入(+10)?
这里我对f的理解是当(*2)是h时,f就是addStuff的最后两行。当(+10) 是h 时,f 是addStuff 的最后一行(在本例中为return 语句)。
【问题讨论】: