为什么Haskell中的仿函数上的monoids没有类型类?

时间:2015-04-15 14:41:02

标签: haskell functional-programming typeclass functor monoids

我承认这个问题有点不明确,但我想知道为什么我从来没有偶然发现Haskell中的仿函数上的monoids类型类。我是否错过了它,是否有充分的理由要求这种缺席,还是完全归因于历史原因?恕我直言,下面的继承图表看起来有点奇怪而没有右上角:

  Functor
     |
     V
Applicative ––> Alternative
     |               |
     V               V
   Monad    ––>  MonadPlus

1 个答案:

答案 0 :(得分:7)

这里要考虑的一个关键因素是,“Functor的箭头究竟是什么意思?”如果没有公理FunctorFunctorPlus统一起来,那么您也可以定义instance Monoid (F t) where ...并完成它。那么你在寻找什么样的公理 - 只是fmap f fempty = femptyfmap f x <|> fmap f y == fmap f (x <|> y) ......?

另一个关键因素是缺乏有趣的结构,这些结构是仿函数而不是应用程序。可能有一个论点与泛型编程(元编程deriving关键字)有关,其中所有内容都是产品的总和,因此我们可以为任何类型的Applicative派生* -> *,但我不知道细节。唯一的值FunctorPlus可能具有“做同一个替代品对于非应用的Functors做的事情”,因此如果该集合非常小,那么显然没有太多的附加值。