Função Monad de seqüência dentro de Haskell

Estou tendo alguns problemas reais para projetar a contra-função de Haskellsequence função, que Hoogle me diz ainda não existe. É assim que 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]

Meu problema é criar uma função como esta:

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

Para que se comporte assim:

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

Na verdade, não sei se isso é possível, porque eu estaria escapando da mônada em algum momento, mas comecei, embora não saiba como definir um ponto de interrupção para essa função recursiva:

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

Percebo que preciso de um ponto de interrupção quando om aqui é igual areturn [], mas nem todas as mônadas têmEq instâncias, então como posso fazer isso? Isso é possível? Se sim, por que e por que não? Por favor me diga isso.

questionAnswers(2)

yourAnswerToTheQuestion