MonadBaseControl: как поднять ThreadGroup
Впотоки пакет в модулеControl.Concurrent.Thread.Group
есть функцияforkIO
:
forkIO :: ThreadGroup -> IO α -> IO (ThreadId, IO (Result α))
Я хотел бы поднять его с помощьюMonadBaseControl
отМонада-контроль, Вот моя попытка:
fork :: (MonadBase IO m) => TG.ThreadGroup -> m α -> m (ThreadId, m (Result α))
fork tg action = control (\runInBase -> TG.forkIO tg (runInBase action))
и вот сообщение об ошибке:
Couldn't match type `(ThreadId, IO (Result (StM m α)))'
with `StM m (ThreadId, m (Result α))'
Expected type: IO (StM m (ThreadId, m (Result α)))
Actual type: IO (ThreadId, IO (Result (StM m α)))
In the return type of a call of `TG.forkIO'
In the expression: TG.forkIO tg (runInBase action)
In the first argument of `control', namely
`(\ runInBase -> TG.forkIO tg (runInBase action))'
Что изменить, чтобы типы соответствовали?