Napisałem funkcję podobną do Data.Enumerator.List.map
, która sprawia, że Iteratee
jest kompatybilna z Enumerator
, która podaje inny typ Stream
.Wpisz podpis w miejscu gdzie klauzula
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
Jeśli pominąć podpis typu dla go
, to będzie działać dobrze. Chciałbym jednak dołączyć to, ale nie jestem w stanie określić, jaki powinien być poprawny podpis. Oto co myślę, że powinno być:
go :: Monad m => Step ai m b -> Iteratee ao m b
ale to nie działa.
Potrzebuję porady dotyczącej znalezienia poprawnego podpisu typu dla go
.
@hammar: Dzięki. Przysięgam, że robię głupią literówkę za każdym razem, gdy umieszczam więcej niż cztery linie kodu w odpowiedzi, bez wcześniejszego ładowania ich w GHCi. Westchnienie... –