@@ -780,23 +780,32 @@ TypeSig' ::=
782let_ :: SyntaxInfo -> IdrisParser PTerm
782let_ :: SyntaxInfo -> IdrisParser PTerm
783−let_ syn = try (do reserved "let"; fc <- getFC; n <- name;
783+let_ syn = try (do reserved "let"
784− ty <- option Placeholder (do lchar ':'; expr' syn)
784+ ls <- indentedBlock (let_binding syn)
787− ts <- option [] (do lchar '|'
788− sepBy1 (do_alt syn) (lchar '|'))
789 reserved "in"; sc <- expr syn
785 reserved "in"; sc <- expr syn
790− case ts of
786+ return (buildLets ls sc))
791− [] -> return (PLet n ty v sc)
792− alts -> return (PCase fc v ((PRef fc n, sc) : ts)))
793− <|> (do reserved "let"; fc <- getFC; pat <- expr' (syn { inPattern = True } )
787+-- <|> (do reserved "let"; fc <- getFC; pat <- expr' (syn { inPattern = True } )
794− symbol "="; v <- expr syn
788+-- symbol "="; v <- expr syn
795− ts <- option [] (do lchar '|'
789+-- ts <- option [] (do lchar '|'
796− sepBy1 (do_alt syn) (lchar '|'))
790+-- sepBy1 (do_alt syn) (lchar '|'))
797− reserved "in"; sc <- expr syn
791+-- reserved "in"; sc <- expr syn
798− return (PCase fc v ((pat, sc) : ts)))
792+-- return (PCase fc v ((pat, sc) : ts)))
799 <?> "let binding"
793 <?> "let binding"
794+ where buildLets [] sc = sc
795+ buildLets ((fc,PRef _ n,ty,v,[]):ls) sc
796+ = PLet n ty v (buildLets ls sc)
797+ buildLets ((fc,pat,ty,v,alts):ls) sc
798+ = PCase fc v ((pat, buildLets ls sc) : alts)
800+let_binding syn = do fc <- getFC;
801+ pat <- expr' (syn { inPattern = True })
802+ ty <- option Placeholder (do lchar ':'; expr' syn)
805+ ts <- option [] (do lchar '|'
806+ sepBy1 (do_alt syn) (lchar '|'))
807+ return (fc,pat,ty,v,ts)
801{- | Parses a quote goal
810{- | Parses a quote goal