git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix #2252, instantiate types in array literals before unification (#2258)
2d6087dPhil Freeman
examples/passing/2252.pursnew file+15
@@ -0,0 +1,15 @@
1+module Main where
2+
3+import Control.Monad.Eff.Console (log)
4+
5+data T a = T
6+
7+ti :: T Int
8+ti = T
9+
10+t :: forall a. T a
11+t = T
12+
13+xs = [ti, t, t]
14+
15+main = log "Done"
src/Language/PureScript/TypeChecker/Types.hs+5−2
@@ -245,8 +245,11 @@ infer' v@(Literal (BooleanLiteral _)) = return $ TypedValue True v tyBoolean
245infer' (Literal (ArrayLiteral vals)) = do
245infer' (Literal (ArrayLiteral vals)) = do
246 ts <- traverse infer vals
246 ts <- traverse infer vals
247 els <- freshType
247 els <- freshType
248+ ts' <- forM ts $ \(TypedValue ch val t) -> do
249+ (val', t') <- instantiatePolyTypeWithUnknowns val t
248− forM_ ts $ \(TypedValue _ _ t) -> unifyTypes els t
250+ unifyTypes els t'
251+ return (TypedValue ch val' t')
249− return $ TypedValue True (Literal (ArrayLiteral ts)) (TypeApp tyArray els)
252+ return $ TypedValue True (Literal (ArrayLiteral ts')) (TypeApp tyArray els)
250infer' (Literal (ObjectLiteral ps)) = do
253infer' (Literal (ObjectLiteral ps)) = do
251 ensureNoDuplicateProperties ps
254 ensureNoDuplicateProperties ps
252 ts <- traverse (infer . snd) ps
255 ts <- traverse (infer . snd) ps