我承认这个问题有点不具体,但我想知道为什么我从来没有在 Haskell 的仿函数上偶然发现一个类型类。我是否只是错过了它,这种缺席是否有充分的理由,还是完全是由于历史原因?恕我直言,下面的继承图看起来有点奇怪,没有右上角:
Functor
|
V
Applicative ––> Alternative
| |
V V
Monad ––> MonadPlus
我承认这个问题有点不具体,但我想知道为什么我从来没有在 Haskell 的仿函数上偶然发现一个类型类。我是否只是错过了它,这种缺席是否有充分的理由,还是完全是由于历史原因?恕我直言,下面的继承图看起来有点奇怪,没有右上角:
Functor
|
V
Applicative ––> Alternative
| |
V V
Monad ––> MonadPlus
这里要考虑的一个关键因素是,“箭头 from 的Functor
真正含义是什么?” 如果没有与之统一的公理,那么您不妨定义并完成它。那么你在寻找什么公理 - 只是还是......?Functor
FunctorPlus
instance Monoid (F t) where ...
fmap f fempty = fempty
fmap f x <|> fmap f y == fmap f (x <|> y)
另一个关键因素是缺乏有趣的结构,它们是函子而不是应用程序。可能有一个论点与泛型编程(对deriving
关键字进行元编程)有关,其中一切都是产品的总和,因此我们可以推导出Applicative
任何种类的东西* -> *
,但我不知道细节。唯一FunctorPlus
可能具有的价值是“与 Alternative 为非 Applicative 的 Functor 做同样的事情”,因此如果该集合真的很小,那么显然没有太多的附加值。