Tag: 分类理论

免费的monad是否永远存在?

我们从类别理论中知道,并非Set中的所有pipe理者都承认自由单子。 规范的反例是powerset函子。 但是Haskell可以把任何函子变成一个免费的monad。 data Free fa = Pure a | Free (f (Free fa)) instance Functor f => Monad (Free f) where return = Pure Pure a >>= f = fa Free m >>= f = Free ((>>= f) <$> m) 是什么让这个构造对于任何Haskell函数起作用,但在Set中出现问题 ?

有没有一个monad没有相应的monad变压器(IO除外)?

到目前为止,我所遇到的每个monad(可以表示为一个数据types)都有一个对应的monad变换器,或者可以有一个。 有没有这样的monad? 还是所有的monad都有相应的变压器? 通过对应于monad m的变换器t ,我的意思是t Identity同构同构于m 。 当然,它符合monad变压器法则,而且对于任何monad n来说都是monad。 我希望看到一个certificate(理想上是有build设性的),即每一个单子都有一个certificate,或者是一个没有certificate的单子的certificate。 我对哈斯克尔导向的答案以及(类别)理论答案都感兴趣。 作为一个后续的问题,是否有一个monad m有两个不同的变换器t1和t2 ? 也就是说, t1 Identity同构于t2 Identity和m ,但是有一个monad n使得t1 n不同构于t2 n 。 ( IO和ST有一个特殊的语义,所以我不考虑它们,让我们完全忽略它们,让我们只关注可以使用数据types构造的“纯”单子。

Monads作为附件

我一直在阅读有关monad的分类理论。 单子的一个定义使用一对伴随函数。 单子是通过使用这些函数的往返来定义的。 显然附加类在分类理论中是非常重要的,但是我还没有看到Haskell monads在伴随函数方面的任何解释。 有没有人给它一个想法?