@@ -44,7 +44,8 @@ instance Unifiable Kind where
44 KUnknown u ~~ k = replace u k
44 KUnknown u ~~ k = replace u k
45 k ~~ KUnknown u = replace u k
45 k ~~ KUnknown u = replace u k
46 Star ~~ Star = return ()
46 Star ~~ Star = return ()
47− Row ~~ Row = return ()
47+ Bang ~~ Bang = return ()
48+ Row k1 ~~ Row k2 = k1 ~~ k2
48 FunKind k1 k2 ~~ FunKind k3 k4 = do
49 FunKind k1 k2 ~~ FunKind k3 k4 = do
@@ -100,7 +101,7 @@ infer (Array t) = do
100 return Star
101 return Star
101infer (Object row) = do
102infer (Object row) = do
102 k <- infer row
103 k <- infer row
103− k ~~ Row
104+ k ~~ Row Star
104 return Star
105 return Star
105infer (Function args ret) = do
106infer (Function args ret) = do
106 ks <- mapM infer args
107 ks <- mapM infer args
@@ -127,11 +128,12 @@ infer (ForAll ident ty) = do
127 k <- fresh
128 k <- fresh
128 moduleName <- substCurrentModule <$> ask
129 moduleName <- substCurrentModule <$> ask
129 bindLocalTypeVariables moduleName [(ProperName ident, k)] $ infer ty
130 bindLocalTypeVariables moduleName [(ProperName ident, k)] $ infer ty
130−infer REmpty = return Row
131+infer REmpty = do
131infer (RCons _ ty row) = do
134infer (RCons _ ty row) = do
132 k1 <- infer ty
135 k1 <- infer ty
133 k2 <- infer row
136 k2 <- infer row
135− k2 ~~ Row
137+ k2 ~~ Row k1
136− return Row
138+ return $ Row k1
137infer _ = error "Invalid argument to infer"
139infer _ = error "Invalid argument to infer"