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))'

Что изменить, чтобы типы соответствовали?

Ответы на вопрос(1)

Ваш ответ на вопрос