@@ -474,7 +474,12 @@ pExt syn (Rule (s:ssym) ptm _)
474 update ns (PDoBlock ds) = PDoBlock $ upd ns ds
474 update ns (PDoBlock ds) = PDoBlock $ upd ns ds
475 where upd ns (DoExp fc t : ds) = DoExp fc (update ns t) : upd ns ds
475 where upd ns (DoExp fc t : ds) = DoExp fc (update ns t) : upd ns ds
476 upd ns (DoBind fc n t : ds) = DoBind fc n (update ns t) : upd (dropn n ns) ds
476 upd ns (DoBind fc n t : ds) = DoBind fc n (update ns t) : upd (dropn n ns) ds
477− upd ns (DoLet fc n t : ds) = DoLet fc n (update ns t) : upd (dropn n ns) ds
477+ upd ns (DoLet fc n ty t : ds) = DoLet fc n (update ns ty) (update ns t)
478+ : upd (dropn n ns) ds
479+ upd ns (DoBindP fc i t : ds) = DoBindP fc (update ns i) (update ns t)
481+ upd ns (DoLetP fc i t : ds) = DoLetP fc (update ns i) (update ns t)
478 update ns t = t
483 update ns t = t
480pName = do i <- getState
485pName = do i <- getState
@@ -702,9 +707,11 @@ pDoBlock syn
702 return (PDoBlock ds)
707 return (PDoBlock ds)
705− = try (do reserved "let"; i <- pName; reservedOp "="; fc <- pfc
710+ = try (do reserved "let"; i <- pName;
711+ ty <- option Placeholder (do lchar ':'; pExpr' syn)
712+ reservedOp "="; fc <- pfc
706 e <- pExpr syn
713 e <- pExpr syn
707− return (DoLet fc i e))
714+ return (DoLet fc i ty e))
708 <|> try (do reserved "let"; i <- pExpr' syn; reservedOp "="; fc <- pfc
715 <|> try (do reserved "let"; i <- pExpr' syn; reservedOp "="; fc <- pfc
709 sc <- pExpr syn
716 sc <- pExpr syn
710 return (DoLetP fc i sc))
717 return (DoLetP fc i sc))
@@ -1048,8 +1055,8 @@ expandDo dsl (PDoBlock ds) = expandDo dsl $ block (dsl_bind dsl) ds
1048 = PApp fc b [pexp tm, pexp (PLam (MN 0 "bpat") Placeholder
1055 = PApp fc b [pexp tm, pexp (PLam (MN 0 "bpat") Placeholder
1049 (PCase fc (PRef fc (MN 0 "bpat"))
1056 (PCase fc (PRef fc (MN 0 "bpat"))
1050 [(p, block b rest)]))]
1057 [(p, block b rest)]))]
1051− block b (DoLet fc n tm : rest)
1058+ block b (DoLet fc n ty tm : rest)
1052− = PLet n Placeholder tm (block b rest)
1059+ = PLet n ty tm (block b rest)
1053 block b (DoLetP fc p tm : rest)
1060 block b (DoLetP fc p tm : rest)
1054 = PCase fc tm [(p, block b rest)]
1061 = PCase fc tm [(p, block b rest)]
1055 block b (DoExp fc tm : rest)
1062 block b (DoExp fc tm : rest)