相关疑难解决方法(0)

如何使callCC更具动态性?

我认为ContT的正确类型应该是

newtype ContT m a = ContT {runContT :: forall r. (a -> m r) -> m r}
Run Code Online (Sandbox Code Playgroud)

和其他控制操作员

shift :: Monad m => (forall r. (a -> ContT m r) -> ContT m r) -> ContT m a
reset :: Monad m => ContT m a -> ContT m a
callCC :: ((a -> (forall r. ContT m r)) -> ContT m a) -> ContT m a
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法进行callCC类型检查,也不知道该怎么做.我设法制作shiftreset打字检查

reset :: Monad m => …
Run Code Online (Sandbox Code Playgroud)

continuations haskell callcc

22
推荐指数
1
解决办法
828
查看次数

Monad有没有MonadFix的实例?

问题主要在标题中.似乎mfix可以为任何monadic计算定义,即使它可能有所不同:

mfix :: (a -> m a) -> m a
mfix f = fix (join . liftM f)
Run Code Online (Sandbox Code Playgroud)

这个结构有什么问题?另外,为什么MonadMonadFixtypeclass分开(即什么类型有一个实例Monad但没有MonadFix?)?

monads haskell monadfix

13
推荐指数
2
解决办法
463
查看次数

标签 统计

haskell ×2

callcc ×1

continuations ×1

monadfix ×1

monads ×1