我们从类别理论中知道,并非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中出现问题 ?