@@ -18,7 +18,7 @@ import qualified SourceSyntax.Literal as Literal
1818import SourceSyntax.Expression
1919import SourceSyntax.Declaration (Declaration(Definition))
2020
21−import Guid
21+import Unique
2222import Types.Types (Type (VarT), Scheme (Forall))
2323
2424import System.IO.Unsafe
@@ -26,14 +26,14 @@ import System.IO.Unsafe
2626
2727-------- Basic Terms --------
2828
29−varTerm :: IParser Expr
29+varTerm :: IParser (Expr t v)
3030varTerm = toVar <$> var <?> "variable"
3131
3232toVar v = case v of "True" -> Literal (Literal.Boolean True)
3333 "False" -> Literal (Literal.Boolean False)
3434 _ -> Var v
3535
36−accessor :: IParser Expr
36+accessor :: IParser (Expr t v)
3737accessor = do
3838 start <- getPosition
3939 lbl <- try (string "." >> rLabel)
@@ -44,7 +44,7 @@ accessor = do
4444
4545-------- Complex Terms --------
4646
47−listTerm :: IParser Expr
47+listTerm :: IParser (Expr t v)
4848listTerm =
4949 (do { try $ string "[markdown|"
5050 ; md <- filter (/='\r') <$> manyTill anyChar (try $ string "|]")
@@ -56,7 +56,7 @@ listTerm =
5656 return e
5757 ])
5858
59−parensTerm :: IParser LExpr
59+parensTerm :: IParser (LExpr t v)
6060parensTerm = parens $ choice
6161 [ do start <- getPosition
6262 op <- try anyOp
@@ -79,7 +79,7 @@ parensTerm = parens $ choice
7979 _ -> Location.at start end (tuple es)
8080 ]
8181
82−recordTerm :: IParser LExpr
82+recordTerm :: IParser (LExpr t v)
8383recordTerm = brackets $ choice [ misc, addLocation record ]
8484 where field = do
8585 fDefs <- (:) <$> (PVar <$> rLabel) <*> spacePrefix Pattern.term
@@ -111,14 +111,14 @@ recordTerm = brackets $ choice [ misc, addLocation record ]
111111 Nothing -> try (insert record) <|> try (modify record)
112112
113113
114−term :: IParser LExpr
114+term :: IParser (LExpr t v)
115115term = addLocation (choice [ Literal <$> literal, listTerm, accessor ])
116116 <|> accessible (addLocation varTerm <|> parensTerm <|> recordTerm)
117117 <?> "basic term (4, x, 'c', etc.)"
118118
119119-------- Applications --------
120120
121−appExpr :: IParser LExpr
121+appExpr :: IParser (LExpr t v)
122122appExpr = do
123123 tlist <- spaceSep1 term
124124 return $ case tlist of
@@ -127,10 +127,10 @@ appExpr = do
127127
128128-------- Normal Expressions --------
129129
130−binaryExpr :: IParser LExpr
130+binaryExpr :: IParser (LExpr t v)
131131binaryExpr = binops [] appExpr anyOp
132132
133−ifExpr :: IParser Expr
133+ifExpr :: IParser (Expr t v)
134134ifExpr = reserved "if" >> whitespace >> (normal <|> multiIf)
135135 where
136136 normal = do
@@ -145,7 +145,7 @@ ifExpr = reserved "if" >> whitespace >> (normal <|> multiIf)
145145 b <- expr ; whitespace ; string "->" ; whitespace
146146 (,) b <$> expr
147147
148−lambdaExpr :: IParser LExpr
148+lambdaExpr :: IParser (LExpr t v)
149149lambdaExpr = do char '\\' <|> char '\x03BB' <?> "anonymous function"
150150 whitespace
151151 pats <- spaceSep1 Pattern.term
@@ -153,17 +153,17 @@ lambdaExpr = do char '\\' <|> char '\x03BB' <?> "anonymous function"
153153 e <- expr
154154 return . run $ Pattern.makeLambda pats e
155155
156−defSet :: IParser [Def]
156+defSet :: IParser [Def t v]
157157defSet = concat <$> block (do d <- anyDef ; whitespace ; return d)
158158
159−letExpr :: IParser Expr
159+letExpr :: IParser (Expr t v)
160160letExpr = do
161161 reserved "let" ; whitespace
162162 defs <- defSet
163163 whitespace ; reserved "in" ; whitespace
164164 Let defs <$> expr
165165
166−caseExpr :: IParser Expr
166+caseExpr :: IParser (Expr t v)
167167caseExpr = do
168168 reserved "case"; whitespace; e <- expr; whitespace; reserved "of"; whitespace
169169 Case e <$> (with <|> without)
@@ -189,7 +189,7 @@ funcDef = try (do p1 <- try Pattern.term ; infics p1 <|> func p1)
189189 return $ if o == '`' then [ PVar $ takeWhile (/='`') p, p1, p2 ]
190190 else [ PVar (o:p), p1, p2 ]
191191
192−assignExpr :: IParser [Def]
192+assignExpr :: IParser [Def t v]
193193assignExpr = withPos $ do
194194 fDefs <- funcDef
195195 whitespace