@@ -167,7 +167,9 @@ extension syn (Rule ssym ptm _)
167 upd ns (DoBind fc n t : ds) = DoBind fc n (update ns t) : upd (dropn n ns) ds
167 upd ns (DoBind fc n t : ds) = DoBind fc n (update ns t) : upd (dropn n ns) ds
168 upd ns (DoLet fc n ty t : ds) = DoLet fc n (update ns ty) (update ns t)
168 upd ns (DoLet fc n ty t : ds) = DoLet fc n (update ns ty) (update ns t)
169 : upd (dropn n ns) ds
169 : upd (dropn n ns) ds
170+ upd ns (DoBindP fc i t ts : ds)
170− upd ns (DoBindP fc i t : ds) = DoBindP fc (update ns i) (update ns t)
171+ = DoBindP fc (update ns i) (update ns t)
172+ (map (\(l,r) -> (update ns l, update ns r)) ts)
171 : upd ns ds
173 : upd ns ds
172 upd ns (DoLetP fc i t : ds) = DoLetP fc (update ns i) (update ns t)
174 upd ns (DoLetP fc i t : ds) = DoLetP fc (update ns i) (update ns t)
173 : upd ns ds
175 : upd ns ds
@@ -736,16 +738,22 @@ TypeSig' ::=
738let_ :: SyntaxInfo -> IdrisParser PTerm
740let_ :: SyntaxInfo -> IdrisParser PTerm
739−let_ syn = try (do reserved "let"; n <- name;
741+let_ syn = try (do reserved "let"; fc <- getFC; n <- name;
740 ty <- option Placeholder (do lchar ':'; expr' syn)
742 ty <- option Placeholder (do lchar ':'; expr' syn)
741 lchar '='
743 lchar '='
742 v <- expr syn
744 v <- expr syn
745+ ts <- option [] (do lchar '|'
746+ sepBy1 (do_alt syn) (lchar '|'))
743 reserved "in"; sc <- expr syn
747 reserved "in"; sc <- expr syn
744− return (PLet n ty v sc))
749+ [] -> return (PLet n ty v sc)
750+ alts -> return (PCase fc v ((PRef fc n, sc) : ts)))
745 <|> (do reserved "let"; fc <- getFC; pat <- expr' (syn { inPattern = True } )
751 <|> (do reserved "let"; fc <- getFC; pat <- expr' (syn { inPattern = True } )
746 symbol "="; v <- expr syn
752 symbol "="; v <- expr syn
753+ ts <- option [] (do lchar '|'
754+ sepBy1 (do_alt syn) (lchar '|'))
747 reserved "in"; sc <- expr syn
755 reserved "in"; sc <- expr syn
748− return (PCase fc v [(pat, sc)]))
756+ return (PCase fc v ((pat, sc) : ts)))
749 <?> "let binding"
757 <?> "let binding"
751{- | Parses a quote goal
759{- | Parses a quote goal
@@ -967,17 +975,28 @@ do_ syn
967 symbol "<-"
975 symbol "<-"
968 fc <- getFC
976 fc <- getFC
969 e <- expr syn;
977 e <- expr syn;
970− return (DoBind fc i e))
978+ option (DoBind fc i e)
980+ ts <- sepBy1 (do_alt syn) (lchar '|')
981+ return (DoBindP fc (PRef fc i) e ts)))
971 <|> try (do i <- expr' syn
982 <|> try (do i <- expr' syn
972 symbol "<-"
983 symbol "<-"
973 fc <- getFC
984 fc <- getFC
974 e <- expr syn;
985 e <- expr syn;
986+ option (DoBindP fc i e [])
988+ ts <- sepBy1 (do_alt syn) (lchar '|')
975− return (DoBindP fc i e))
989+ return (DoBindP fc i e ts)))
976 <|> do e <- expr syn
990 <|> do e <- expr syn
977 fc <- getFC
991 fc <- getFC
978 return (DoExp fc e)
992 return (DoExp fc e)
979 <?> "do block expression"
993 <?> "do block expression"
995+do_alt syn = do l <- expr' syn
981{- | Parses an expression in idiom brackets
1000{- | Parses an expression in idiom brackets
983Idiom ::= '[|' Expr '|]';
1002Idiom ::= '[|' Expr '|]';