使用 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
。
我有一个关于概括的问题。从这个函数开始:
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
。