【发布时间】:2018-12-27 16:39:35
【问题描述】:
我可以很容易地在 Haskell 中定义一般的 Functor 和 Monad 类:
class (Category s, Category t) => Functor s t f where
map :: s a b -> t (f a) (f b)
class Functor s s m => Monad s m where
pure :: s a (m a)
join :: s (m (m a)) (m a)
join = bind id
bind :: s a (m b) -> s (m a) (m b)
bind f = join . map f
我正在阅读this post,它解释了一个应用函子是一个松散的(封闭的或单曲面的)函子。它是根据(指数或幺半群)双函子来实现的。我知道在 Haskell 类别中,每个Monad 都是Applicative;我们如何概括?我们应该如何选择定义Applicative的(指数或幺半群)函子?让我困惑的是我们的 Monad 类似乎没有任何(封闭或单面)结构的概念。
编辑:一位评论者说这通常是不可能的,所以现在我的部分问题是它可能在哪里。
【问题讨论】:
-
我似乎记得这不是通常是正确的,并且依赖于 Hask 的额外(封闭等)结构。
标签: haskell categories functor applicative category-theory