もしa,bがどちらも多相型変数なのであれば
a -> m bはかなり特殊な型
ググってみたがforeverとか何に使うんだこれ
unsafeCoerce :: a -> b
forever :: Monad m => m a -> m b

mがリストなら
(a,a)->(m b,m b)ならぬ
[a] -> [[b],[b]]ときて
sequence :: Monad m => [m a] -> m [a]が使えそうな