Van*_*uel 10 monads dictionary haskell monad-transformers maybe
我将通过以下论文:Monad Transformers Step by Step.在第2.1节"转换为一元样式",一个函数转换为返回Value在Eval1单子.这部分功能对我来说没有意义:
eval1 env (Var n) = Map.lookup n env
Run Code Online (Sandbox Code Playgroud)
然而,结果将是Maybe Value函数的类型签名是:
eval1 :: Env ? Exp ? Eval1 Value
Run Code Online (Sandbox Code Playgroud)
该函数无法键入检查,错误对我来说似乎很明显.然而,作者明确指出这将有效:
... Var的情况不再需要一个fromJust调用了:原因是Map.lookup被定义为只需调用monad的失败函数就可以在任何monad中工作 - 这非常适合我们的monadic公式.
Map.lookup的签名看起来不像是用于任何monad:
lookup :: Ord k => k -> Map k a -> Maybe a
Run Code Online (Sandbox Code Playgroud)
这篇论文是否已过时或者我遗失了什么?如果论文实际上已经过时,为什么lookup改为只能使用Maybe.
谢谢!
dup*_*ode 14
你的教程是从2006年开始的.它使用了一个很老的版本,Data.Map其中lookup的类型确实是:
lookup :: (Monad m, Ord k) => k -> Map k a -> m a
Run Code Online (Sandbox Code Playgroud)
我认为发生了这种变化,因为fail人们普遍认为这是一种疣Monad.返回a Maybe a使查找失败明确且易于管理.通过隐藏它fail只是为了让一个稍微更方便的类型隐藏它是非常脏的IMO.(另见与Ørjan有关的问题.)
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |