使用 MonadAff 概括纯脚本函数

generalize purescript function using MonadAff

我有一个关于概括的问题。从这个函数开始:

test0 :: String -> String
test0 s = s

我们可以在它的论证中概括它:

test1 :: forall a. Show a => a -> String
test1 s = show s

或其功能结果:

test12 :: forall a. Show a => String -> a
test12 s = s

现在考虑以下函数:

test2 :: forall e. Aff e Int
test2 s = pure 0

我想概括一下它的功能结果:

test3 :: forall e m. MonadAff e m => m e Int
test3 s = pure 0

但是,我现在收到一个错误: 在检查值声明 test3.

中 MonadAff e m => m e Int 的种类时,无法将种类类型与种类匹配 # Control.Monad.Eff.Effect

我不明白为什么。此外,我在 Hyper.Node.Server 中找到了类似这种概括的示例,例如这种类型:

write :: forall m e. MonadAff e m => Buffer -> NodeResponse m e

约束 MonadAff e m 断言 monad m 以某种方式将 Aff e 包裹在内部某处。但它并没有断言 monad m 本身必须有一个类型参数 e。那将是非常严格的,不是吗?

因此,在构建 return 类型时,不要将 m 应用于 e:

test3 :: forall e m. MonadAff e m => m Int
test3 = pure 0

你找到的例子很不一样。在这里,该函数不是 returning m 中的值,就像您的 test3 中的值,而是 NodeResponse 中的值,它是 wrapper around a function that returns m Unit