Почему так происходит вполне понятно. Если посмотреть на определения:
rest :: (MonadIO m, MonadBaseControl IO m) => Cursor -> Action m [Document]
-- ^ Return remaining documents in query result
rest c = loop (next c)
loop :: (Functor m, Monad m) => m (Maybe a) -> m [a]
-- ^ Repeatedy execute action, collecting results, until it returns Nothing
loop act = act >>= maybe (return []) (\a -> (a :) <$> loop act)
видно, что loop рекурсивно вызывается через (>>=), а он скорее всего
не ленивый (думаю это справедливо почти для всех инстансов MonadIO).
Что с этим делать?
Можно вывод результатов положить внутрь loop.
run = do
cur <- find (select [] clname)
let loop' = next cur >>= \case
Nothing -> return ()
Just doc -> liftIO (print $ exclude ["_id"] doc) >> loop'
liftIO $ putStrLn "Opa"
loop'
10 октября 2014 г., 14:17 пользователь Александр Замараев
<
tonal.p...@gmail.com> написал:
> --
> Вы получили это сообщение, поскольку подписаны на группу "Русский Haskell".
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения,
> отправьте письмо на электронный адрес
>
haskell-russi...@googlegroups.com.
> Чтобы отправлять сообщения в эту группу, отправьте письмо на электронный
> адрес
haskell...@googlegroups.com.
> Чтобы посмотреть обсуждение на веб-странице, перейдите по ссылке
>
https://groups.google.com/d/msgid/haskell-russian/214644a9-9ba8-4b13-a149-9ceebd3501e3%40googlegroups.com.
> Чтобы настроить другие параметры, перейдите по ссылке
>
https://groups.google.com/d/optout.