@@ -144,7 +144,9 @@ collect (c@(PClauses _ _ _) : ds)
144 cname (PClauses fc _ [PWith n _ _ _ _]) = n
144 cname (PClauses fc _ [PWith n _ _ _ _]) = n
145 getfc (PClauses fc _ _) = fc
145 getfc (PClauses fc _ _) = fc
147−collect (PParams f ns ps : ds) = PParams f ns (collect ps) : (collect ds)
147+collect (PParams f ns ps : ds) = PParams f ns (collect ps) : collect ds
148+collect (PClass f n ps ds : ds') = PClass f n ps (collect ds) : collect ds'
149+collect (PInstance f n t ds : ds') = PInstance f n t (collect ds) : collect ds'
148collect (d : ds) = d : collect ds
150collect (d : ds) = d : collect ds
149collect [] = []
151collect [] = []
@@ -160,8 +162,10 @@ pDecl syn
160 i <- getState
162 i <- getState
161 let d' = fmap (desugar syn i) d
163 let d' = fmap (desugar syn i) d
162 return [d']
164 return [d']
163− <|> try (pUsing syn)
165+ <|> pUsing syn
164− <|> try (pParams syn)
166+ <|> pParams syn
165 <|> try (do reserved "import"
169 <|> try (do reserved "import"
166 fp <- identifier
170 fp <- identifier
167 lchar ';'
171 lchar ';'
@@ -278,6 +282,36 @@ fixity = try (do reserved "infixl"; return Infixl)
278 <|> try (do reserved "infix"; return InfixN)
282 <|> try (do reserved "infix"; return InfixN)
279 <|> try (do reserved "prefix"; return PrefixN)
283 <|> try (do reserved "prefix"; return PrefixN)
285+--------- Tyoe classes ---------
287+pClass :: SyntaxInfo -> IParser [PDecl]
288+pClass syn = do reserved "class"
292+ reserved "where"; lchar '{'
293+ ds <- many1 $ pFunDecl syn;
295+ return [PClass fc n cs (concat ds)]
297+ carg = do lchar '('; i <- pName; lchar ':'; ty <- pExpr syn; lchar ')'
302+pInstance :: SyntaxInfo -> IParser [PDecl]
303+pInstance syn = do reserved "instance"
305+ cs <- pConstList syn
307+ args <- many1 (pSimpleExpr syn)
308+ let sc = PApp fc (PRef fc cn) (map pexp args)
309+ let t = bindList (PPi constraint) (map (\x -> (MN 0 "c", x)) cs) sc
310+ reserved "where"; lchar '{'
311+ ds <- many1 $ pFunDecl syn;
313+ return [PInstance fc cn t (concat ds)]
281--------- Expressions ---------
315--------- Expressions ---------
283pExpr syn = do i <- getState
317pExpr syn = do i <- getState