haskell Monad 3 Reader Monad


instance Monad ((->) r) where   
    return x = \_ -> x   
    h >>= f = \w -> f (h w) w
>>= 的类型 是 输入monadic value, 输出也是monadic value. 输入是 函数, 输出也应该是函数。 所以输出 lambda 函数。 

要从一个函数得到一个结果,我们必须喂给他一些东西,这也是为什么我们先用 (h w) 取得结果,然后将他丢给f。而 f 回传一个 monadic value,在这边这个 monadic value 也就是一个函数。我们再把 w 喂给他。<记录下, 没全明白>

import Control.Monad.Instances   
   
addStuff :: Int -> Int   
addStuff = do   
  a <- (*2)   
  b <- (+10)   
  return (a+b)
ghci> addStuff 3   
19
addStuff :: Int -> Int   
addStuff x = let   
    a = (*2) x   
    b = (+10) x   
    in a+b
function monad 也被称作 reader monad。所有函数都从一个固定的地方读取


我们见识了把函数视作具有 context 的值很自然的可以表达成 reader monad。只要我们当作我们知道函数会回传什么值就好。他作的就是把所有的函数都黏在一起做成一个大的函数,然后把这个函数的参数都喂给全部组成的函数,这有点取出他们未来的值的意味。实作做完了然后 >>= 就会保证一切都能正常运作。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值