Я написал функцию, похожую на Data.Enumerator.List.map
, которая создает Iteratee
совместим с Enumerator
, который передает другой тип 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
Если я опущу подпись типа для go
, это будет работать нормально.
Однако я хотел бы включить его, но не могу определить, какой должна быть правильная подпись.
Вот что я думаю:
go :: Monad m => Step ai m b -> Iteratee ao m b
, но это не работает.
Мне нужен совет по поиску правильной сигнатуры типа для go
.