@@ -418,13 +418,20 @@ pSimpleExpr syn =
418418 <|> try (do x <- pfName; fc <- pfc; return (PRef fc x))
419419 <|> try (pPair syn)
420420 <|> try (do lchar '('; e <- pExpr syn; lchar ')'; return e)
421− <|> try (do c <- pConstant; return (PConstant c))
421+ <|> try (do c <- pConstant; fc <- pfc
422+ return (modifyConst syn fc (PConstant c)))
422423 <|> do reserved "Set"; return PSet
423424 <|> try (do symbol "()"; fc <- pfc; return (PTrue fc))
424425 <|> try (do symbol "_|_"; fc <- pfc; return (PFalse fc))
425426 <|> do lchar '_'; return Placeholder
426427 <|> pSimpleExtExpr syn
427428
429+modifyConst :: SyntaxInfo -> FC -> PTerm -> PTerm
430+modifyConst syn fc (PConstant (I x))
431+ | not (inPattern syn)
432+ = PApp fc (PRef fc (UN ["fromInteger"])) [pexp (PConstant (I x))]
433+modifyConst syn fc x = x
434+
428435pPair syn = do lchar '('; l <- pExpr syn; op <- pairOp
429436 fc <- pfc
430437 r <- pExpr syn; lchar ')';
@@ -470,9 +477,11 @@ pLambda syn = do lchar '\\';
470477 sc <- pExpr syn
471478 return (bindList PLam xt sc)
472479
473−pLet syn = do reserved "let"; n <- pName; lchar '='; v <- pExpr syn
480+pLet syn = do reserved "let"; n <- pName;
481+ ty <- option Placeholder (do lchar ':'; pExpr' syn)
482+ lchar '='; v <- pExpr syn
474483 reserved "in"; sc <- pExpr syn
475− return (PLet n Placeholder v sc)
484+ return (PLet n ty v sc)
476485
477486pPi syn =
478487 try (do lazy <- option False (do lchar '|'; return True)