它不是单子,但它是什么?

时间:2013-06-10 23:30:34

标签: haskell monads category-theory

According to the Haskell wikibook,名为Monad的{​​{1}}是m,还有两项额外的操作:

Functor

这很好,但我有些不同。对血腥细节进行着色,我的类型具有良好的unit :: a -> m a join :: m (m a) -> m a unit函数,但其​​join表现不佳(fmap不一定是{{1} })。因此,它不能成为fmap g . fmap f的实例。尽管如此,我还是希望尽可能多地提供通用功能。

所以我的问题是,什么类别的理论结构与monad相似,因为他们有fmap (g.f)Monad

我意识到在某种程度上,上述问题是不明确的。对于monad,unitjoin定义仅对unit定义有意义。如果没有join,则无法定义任何monad法律,因此fmap / fmap的任何定义都同样“有效”。所以我正在寻找除unit以外的函数,在这些joinfmap函数中定义一些“非monad”定律可能是有意义的。

1 个答案:

答案 0 :(得分:3)

这里只有unitjoin的法律。给定x :: m a

join (unit x) = x

为了证明这不仅仅是从无到有,让我们从现有的monad法开始:

return x >>= f = f x

鉴于m >>= f = join (fmap f m)

join (fmap f (return x)) = f x

选择f = id

join (fmap id (return x)) = id x

使用fmap id = id

的仿函数法
join (id (return x)) = id x

使用明显的id a = a

join (return x) = x