【发布时间】:2013-11-07 06:04:19
【问题描述】:
这是一个普遍的问题,与任何一段代码无关。
假设您有一个类型T a,可以给它一个Monad 的实例。由于通过分配pure = return 和(<*>) = ap,每个monad 都是Applicative,然后每个应用程序都是Functor 通过fmap f x = pure f <*> x,所以最好先定义Monad 的实例,然后再简单地给出@ Applicative 和 Functor 的 987654329@ 实例?
对我来说感觉有点落后。如果我在做数学而不是编程,我会认为我会首先证明我的对象是一个仿函数,然后继续添加限制,直到我也证明它是一个 monad。我知道 Haskell 只是受到范畴论的启发,显然构建证明时使用的技术不是编写有用程序时使用的技术,但我想从 Haskell 社区获得意见。从Monad 降到Functor 会更好吗?或从Functor 到Monad?
【问题讨论】:
标签: haskell monads functor applicative