这是Haskell 中Monad定律的解释.
如何解释F#中的Monad法则?
bind(M,return)相当于M.
bind((返回x),f)等价于f x.
bind(bind(m,f),g)相当于bind(m,(fun x - > bind(fx,g))).
Tom*_*cek 13
我认为在F#中理解它们的一个好方法是使用计算表达式语法来查看它们的含义.我会写m
一些计算构建器,但你可以想象这是async
或任何其他计算类型.
左派身份
m { let! x' = m { return x } = m { let x' = x
return! f x' } return! f x' }
Run Code Online (Sandbox Code Playgroud)
正确的身份
m { let! x = comp = m { return! comp }
return x }
Run Code Online (Sandbox Code Playgroud)
关联性
m { let! x = comp = m { let! y = m { let! x = comp
let! y = f x return! f x }
return! g y } return! g y }
Run Code Online (Sandbox Code Playgroud)
法律基本上告诉你,你应该能够在不改变含义的情况下将一个版本的程序重构到另一个版本 - 就像你可以重构普通的F#程序一样.
归档时间: |
|
查看次数: |
581 次 |
最近记录: |