@@ -84,16 +84,23 @@ typeAlias = do
8484 Left msg -> fail msg
8585 Right t -> return (TypeAlias alias [1..n] t : ctor)
8686 where ctor = case tipe of
87− RecordPT _ kvs -> [toConstructor start end alias kvs]
87+ RecordPT extension kvs ->
88+ [toConstructor start end alias extension kvs]
8889 _ -> []
8990
90−toConstructor start end alias kvs =
91+toConstructor start end alias Nothing kvs =
9192 Definition (FnDef alias args (loc (Record rec)))
9293 where
9394 loc = pos start end
9495 args = map fst kvs
9596 rec = map (\a -> (a, [], loc (Var a))) args
96−
97+toConstructor start end alias (Just _) kvs =
98+ Definition (FnDef alias (args++["_ext_"]) (loc rec))
99+ where
100+ loc = pos start end
101+ args = map fst kvs
102+ rec = foldl insert (Var "_ext_") (zip args (map (loc . Var) args))
103+ insert e (k,v) = Insert (loc e) k v
97104
98105typeAnnotation :: IParser Def
99106typeAnnotation = TypeAnnotation <$> try start <*> (toType <$> typeExpr)