【问题标题】:Where is the official definition of 'bind' and 'return' for the Writer Monad in Haskell?Haskell 中 Writer Monad 的“绑定”和“返回”的官方定义在哪里?
【发布时间】:2013-11-23 02:12:47
【问题描述】:

到目前为止,我发现:

http://monads.haskell.cz/html/writermonad.html
http://en.wikipedia.org/wiki/Monad_(functional_programming)

给出>>=return 的定义

官方代码在哪里?

【问题讨论】:

    标签: haskell monads writer-monad


    【解决方案1】:

    标准转换器的Monad 实例可在transformers 包中找到。对于WriterT,请查看here。不幸的是,目前没有很好的工具支持来查找特定实例的定义位置——您只需要做一些有根据的猜测(或者巧妙地使用您最喜欢的grep 替换)。

    【讨论】:

    • 太棒了——就是这样。我只是在学习单个 monad 的详细信息,因此直接访问了他们的文件——还没有查看 transformers 包——看起来我需要把它放在我的 TODO 列表中。谢谢!
    • 顺便说一句:你的链接有#line-124。除了手动检查 HTML 源代码之外,还有其他方法可以获取这些锚点吗?
    • @haroldcarr 好吧,黑线鳕生产的锚只有几种不同的种类,而且可以全部了解。我并没有声称我这样做,但这里有一些有用的:#v:name 用于定义值 name 的地方; #t:name 用于定义类型name 的地方;和#line-n 用于n 行。由于实例没有定义新的值或类型,您必须使用#line 形式(并因此以某种方式找出行号),但其他两个更容易预测。
    • 我在 HTML 源代码中看到了这一点。我希望有一些魔法!非常有用的信息 - 谢谢!
    • 顺便说一句 @daniel-wagner:现在我明白没有魔法了,感谢您抽出宝贵时间在您的原始回复中挖掘出行号!
    【解决方案2】:

    所有来源都可以在Hackage上找到。

    【讨论】:

    • 是的,我去过那里。例如:hackage.haskell.org/package/mtl-2.1.2/docs/… --- 但我很难找到 bindreturn - 因此请求帮助。
    • 这是因为 mtl 的 2.x 版本采用了 transformers 的具体实现(注意源代码中的 Control.Monad.Trans.Writer.Lazy 导入)。 mtl 就其自身而言,只是添加了诸如 MonadWriter 之类的 monad 类。
    • @duplode 介意我窃取您的评论并将其用作答案吗?
    • @Tarrasch 一点也不,随意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    相关资源
    最近更新 更多