我有一个函数,可以组合两个单子:
现在如果我尝试将
我遇到了这个错误:
这段文字的意思是:规定在Monad m中,ms :: Monad m => m a必须是任意类型的a。是否有一种方法可以将tma与特定参数的monad组合起来?
hoist的签名如下:
comp :: Monad m => m a -> m b -> m b
我会帮助翻译文本。以下是需要翻译的内容:
有两个这样的单子实例,其中一个在“内部”是一个Mfunctor
。
ms :: Monad m => m String
ms = undefined
tma :: (Monad m, MFunctor t) => t m a
tma = undefined
现在如果我尝试将
ms
与tma
组合起来:
tmas = hoist (\ma -> comp ma ms) tma
我遇到了这个错误:
Could not deduce (a ~ [Char])
from the context (Monad m, MFunctor t)
bound by the inferred type of
comp :: (Monad m, MFunctor t) => t m b
at Coroutine.hs:607:1-40
`a' is a rigid type variable bound by
a type expected by the context: m a -> m a at Coroutine.hs:607:8
Expected type: m a
Actual type: m String
这段文字的意思是:规定在Monad m中,ms :: Monad m => m a必须是任意类型的a。是否有一种方法可以将tma与特定参数的monad组合起来?
hoist的签名如下:
hoist :: (Monad m, MFunctor t) => (forall a. m a -> n a) -> t m b -> t n b
但是我无法想象 forall
如何影响我正在尝试做的事情,如果它有任何影响。
forall
的存在是否能够保证某种程度的正确性呢? - xiaolingxiao