Has*_*wn 5 monads haskell functor applicative default-method
让 Functor 成为 Applicative 和 Monad 的超类有什么意义呢?据我所知,Applicative 和 Monad 都立即暗示了 Functor 唯一遵守法律的实现。但我每次都必须输入相同的 Functor 实现。有没有办法避免这样做?
更进一步,Monad 暗示了 Applicative 唯一遵守法律的实现,那么为什么要让 Applicative 成为 Monad 的超类呢?它再次使得为新数据类型实现 Applicative 变得多余。
有没有一种方法可以制作一个 Monad,而不必实现 Applicative 和 Functor(因为它的操作已经是最通用的)。并且无需实现 Functor 即可创建 Applicative。
我看到了类层次结构的好处,因为我刚才所说的解释了它们之间的“是”关系。但同时必须实现每一个都是烦人的。我只想定义returnand>>=并获取所有 3 个操作的所有操作。
您可以通过以下方式获取这些实例:
import Control.Applicative
data Whatever a = {- ... -} deriving (Functor, Applicative) via (WrappedMonad Whatever)
Run Code Online (Sandbox Code Playgroud)
DefaultSignatures在编译器违反规范时向Functor和类添加默认值本来很好Applicative,这样您甚至不需要编写via WrappedMonad,但现在已经完成了,我怀疑我们永远不会得到它们。太糟糕了。