【问题标题】:Every monad is monoid?每个单子都是幺半群?
【发布时间】:2013-05-14 16:30:30
【问题描述】:

因为每个Monad 在排序操作上都是Monoid。 为什么Monad 不继承haskell 中的Monoid

【问题讨论】:

  • 这里的“测序操作”到底是什么意思?
  • @Rhymoid:我很确定是>>
  • @TikhonJelvis:>> 的有限形式,对吧?
  • @Rhymoid:类型必须专门用于Monad m => m () -> m (),是的。

标签: haskell category-theory


【解决方案1】:

它甚至不必是Monad,这适用于每个Applicative。所以是的,你可以定义:

class (Functor f, Monoid (f ())) => Applicative f where

但这意味着每次编写Applicative 实例时都必须提供Monoid 实例。这可能很烦人,当然因为这个Monoid 实例不会经常使用。

更好的解决方案是围绕f () 创建一个新类型包装器,然后您可以一劳永逸地为所有应用函子提供Monoid 实例。 the reducers package 有一个现成的。

【讨论】:

    猜你喜欢
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多