Section 3.11 in the Haskell report describes exactly what list comprehensions mean, and how to translate them away.
If you want monad comprehensions you basically need to replace [e]
by return e
, []
by mzero
, and concatMap
by (>>=)
in the translation.