@@ -53,7 +53,6 @@ instance Unifiable Type where
5353 apply s (TUnknown u) = runSubstitution s u
5454 apply s (SaturatedTypeSynonym name tys) = SaturatedTypeSynonym name $ map (apply s) tys
5555 apply s (ForAll idents ty) = ForAll idents $ apply s ty
56- apply s (Array t) = Array (apply s t)
5756 apply s (Object r) = Object (apply s r)
5857 apply s (Function args ret) = Function (map (apply s) args) (apply s ret)
5958 apply s (TypeApp t1 t2) = TypeApp (apply s t1) (apply s t2)
@@ -62,7 +61,6 @@ instance Unifiable Type where
6261 unknowns (TUnknown (Unknown u)) = [u]
6362 unknowns (SaturatedTypeSynonym _ tys) = concatMap unknowns tys
6463 unknowns (ForAll _ ty) = unknowns ty
65- unknowns (Array t) = unknowns t
6664 unknowns (Object r) = unknowns r
6765 unknowns (Function args ret) = concatMap unknowns args ++ unknowns ret
6866 unknowns (TypeApp t1 t2) = unknowns t1 ++ unknowns t2
@@ -91,7 +89,7 @@ unifyTypes t1 t2 = rethrow (\e -> "Error unifying type " ++ prettyPrintType t1 +
9189 unifyTypes' Number Number = return ()
9290 unifyTypes' String String = return ()
9391 unifyTypes' Boolean Boolean = return ()
94- unifyTypes' ( Array s) ( Array t) = s `unifyTypes` t
92+ unifyTypes' Array Array = return ()
9593 unifyTypes' (Object row1) (Object row2) = row1 ~~ row2
9694 unifyTypes' (Function args1 ret1) (Function args2 ret2) = do
9795 guardWith " Function applied to incorrect number of args" $ length args1 == length args2
@@ -218,9 +216,7 @@ typeHeadsAreEqual _ _ String String = Just []
218216typeHeadsAreEqual _ _ Number Number = Just []
219217typeHeadsAreEqual _ _ Boolean Boolean = Just []
220218typeHeadsAreEqual _ _ (Skolem s1) (Skolem s2) | s1 == s2 = Just []
221- typeHeadsAreEqual _ _ (Array (TypeVar v)) (Array ty) = Just [(v, ty)]
222- typeHeadsAreEqual _ _ (Array ty) (Array (TypeVar v)) = Just [(v, ty)]
223- typeHeadsAreEqual m e (Array ty1) (Array ty2) = typeHeadsAreEqual m e ty1 ty2
219+ typeHeadsAreEqual _ _ Array Array = Just []
224220typeHeadsAreEqual m e (TypeConstructor c1) (TypeConstructor c2) | typeConstructorsAreEqual e m c1 c2 = Just []
225221typeHeadsAreEqual m e (TypeApp h1 (TypeVar v)) (TypeApp h2 arg) = (:) (v, arg) <$> typeHeadsAreEqual m e h1 h2
226222typeHeadsAreEqual m e t1@ (TypeApp _ _) t2@ (TypeApp _ (TypeVar _)) = typeHeadsAreEqual m e t2 t1
@@ -312,7 +308,7 @@ infer' v@(BooleanLiteral _) = return $ TypedValue True v Boolean
312308infer' (ArrayLiteral vals) = do
313309 ts <- mapM infer vals
314310 els <- fresh
315- forM_ ts $ \ (TypedValue _ _ t) -> els ~~ Array t
311+ forM_ ts $ \ (TypedValue _ _ t) -> els ~~ TypeApp Array t
316312 return $ TypedValue True (ArrayLiteral ts) els
317313infer' (Unary op val) = do
318314 v <- infer val
@@ -338,8 +334,8 @@ infer' (ObjectUpdate o ps) = do
338334infer' (Indexer index val) = do
339335 el <- fresh
340336 index' <- check index Number
341- val' <- check val (Array el)
342- return $ TypedValue True (Indexer (TypedValue True index' Number ) (TypedValue True val' (Array el))) el
337+ val' <- check val (TypeApp Array el)
338+ return $ TypedValue True (Indexer (TypedValue True index' Number ) (TypedValue True val' (TypeApp Array el))) el
343339infer' (Accessor prop val) = do
344340 typed@ (TypedValue _ _ objTy) <- infer val
345341 propTy <- inferProperty objTy prop
@@ -533,13 +529,13 @@ inferBinder val (ObjectBinder props) = do
533529inferBinder val (ArrayBinder binders) = do
534530 el <- fresh
535531 m1 <- M. unions <$> mapM (inferBinder el) binders
536- val ~~ Array el
532+ val ~~ TypeApp Array el
537533 return m1
538534inferBinder val (ConsBinder headBinder tailBinder) = do
539535 el <- fresh
540536 m1 <- inferBinder el headBinder
541537 m2 <- inferBinder val tailBinder
542- val ~~ Array el
538+ val ~~ TypeApp Array el
543539 return $ m1 `M.union` m2
544540inferBinder val (NamedBinder name binder) = do
545541 m <- inferBinder val binder
@@ -668,10 +664,10 @@ check' v@(StringLiteral _) String = return v
668664check' v@ (BooleanLiteral _) Boolean = return v
669665check' (Unary op val) ty = checkUnary op val ty
670666check' (Binary op left right) ty = checkBinary op left right ty
671- check' (ArrayLiteral vals) (Array ty) = ArrayLiteral <$> forM vals (\ val -> check val ty)
667+ check' (ArrayLiteral vals) (TypeApp Array ty) = ArrayLiteral <$> forM vals (\ val -> check val ty)
672668check' (Indexer index vals) ty = do
673669 index' <- check index Number
674- vals' <- check vals (Array ty)
670+ vals' <- check vals (TypeApp Array ty)
675671 return $ Indexer index' vals'
676672check' (Abs args ret) (Function argTys retTy) = do
677673 moduleName <- substCurrentModule <$> ask
0 commit comments