gpt4 book ai didi

haskell - 为什么连续单子(monad)不能有 MonadFix 的实例?

转载 作者:行者123 更新时间:2023-12-03 20:56:51 27 4
gpt4 key购买 nike

我们如何证明 the continuation monad没有 MonadFix 的有效实例?

最佳答案

实际上,并不是说不能有 MonadFix例如,只是库的类型有点太受限制了。如果您定义 ContT在所有可能的r s,那么不仅MonadFix成为可能,但直到 Monad 的所有实例不需要任何底层仿函数:

newtype ContT m a = ContT { runContT :: forall r. (a -> m r) -> m r }
instance Functor (ContT m) where
fmap f (ContT k) = ContT (\kb -> k (kb . f))
instance Monad (ContT m) where
return a = ContT ($a)
join (ContT kk) = ContT (\ka -> kk (\(ContT k) -> k ka))
instance MonadFix m => MonadFix (ContT m) where
mfix f = ContT (\ka -> mfixing (\a -> runContT (f a) ka<&>(,a)))
where mfixing f = fst <$> mfix (\ ~(_,a) -> f a )

关于haskell - 为什么连续单子(monad)不能有 MonadFix 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25827227/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com