Сигнатура типа в предложении where

Я написал функцию, похожую на 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 .

13
задан duplode 31 May 2019 в 23:17
поделиться