@@ -428,6 +428,7 @@ pSimpleExtExpr syn = do i <- getState
428428
429429pNoExtExpr syn =
430430 try (pApp syn)
431+ <|> try (pComprehension syn)
431432 <|> pSimpleExpr syn
432433 <|> pLambda syn
433434 <|> pLet syn
@@ -700,6 +701,16 @@ tyOptDeclList syn = sepBy1 (do x <- pfName;
700701bindList b [] sc = sc
701702bindList b ((n, t):bs) sc = b n t (bindList b bs sc)
702703
704+pComprehension syn
705+ = do lchar '['; fc <- pfc; pat <- pExpr syn; lchar '|';
706+ qs <- sepBy1 (pDo syn) (lchar ','); lchar ']';
707+ return (PDoBlock (map addGuard qs ++
708+ [DoExp fc (PApp fc (PRef fc (NS (UN "return") ["prelude"]))
709+ [pexp pat])]))
710+ where addGuard (DoExp fc e) = DoExp fc (PApp fc (PRef fc (NS (UN "guard") ["prelude"]))
711+ [pexp e])
712+ addGuard x = x
713+
703714pDoBlock syn
704715 = do reserved "do"; lchar '{'
705716 ds <- endBy1 (pDo syn) (lchar ';')