Función Mónada sin secuencia dentro de Haskell

Tengo verdaderos problemas para diseñar la contrafunción de Haskellsequence función, que Hoogle me dice que aún no existe. Así es como se comporta:

ghci> sequence [Just 7, Just 8, Just 9]
Just [7,8,9]
ghci> sequence [getLine, getLine, getLine]
hey
there
stack exchange
["hey","there","stack exchange"] :: IO [String]

Mi problema es hacer una función como esta:

unsequence :: (Monad m) => m [a] -> [m a]

Para que se comporte así:

ghci> unsequence (Just [7, 8, 9])
[Just 7, Just 8, Just 9]
ghci> sequence getLine
hey
['h','e','y'] :: [IO Char] --(This would actually cause an error, but hey-ho.)

Realmente no sé si eso es posible, porque en algún momento estaría escapando de la mónada, pero he comenzado, aunque no sé cómo establecer un punto de interrupción para esta función recursiva:

unsequence m = (m >>= return . head) : unsequence (m >>= return . tail)

Me doy cuenta de que necesito un punto de interrupción cuandom aquí es igual areturn [], pero no todas las mónadas tienenEq instancias, entonces, ¿cómo puedo hacer esto? ¿Es esto posible? Si es así, ¿por qué y por qué no? Por favor dime eso.

Respuestas a la pregunta(2)

Su respuesta a la pregunta