相关疑难解决方法(0)

在where子句中键入签名

我写了一个类似的函数,Data.Enumerator.List.mapIterateeEnumerator一个不同Stream类型的函数兼容.

import Data.Enumerator

test :: Monad m => (ao -> ai) -> Iteratee ai m b -> Iteratee ao m b
test f iter = go $$ iter
   where go (Continue k) = continue $
            \stream -> go $$ k (fmap f stream)
         go (Yield res _) = yield res EOF
Run Code Online (Sandbox Code Playgroud)

如果我省略了类型签名go,这将工作得很好.但是,我想包括它,但我无法确定正确的签名应该是什么.这是我认为它应该是:

go :: Monad m => Step ai m b -> Iteratee ao m b

但这不起作用.
我需要一些关于找到正确类型签名的建议go.

haskell enumerator parametric-polymorphism

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