git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix meet check when ForAll is on right
d1cdc98Phil Freeman
examples/passing/IfThenElseMaybe.purs+3−1
@@ -2,6 +2,8 @@ module Main where
2
2
3data Maybe a = Nothing | Just a
3data Maybe a = Nothing | Just a
4
4
5−test = if true then Just 10 else Nothing
5+test1 = if true then Just 10 else Nothing
6+
7+test2 = if true then Nothing else Just 10
6
8
7main = Debug.Trace.trace "Done"
9main = Debug.Trace.trace "Done"
src/Language/PureScript/TypeChecker/Types.hs+3−1
@@ -1131,7 +1131,9 @@ subsumes' val ty1 ty2 = do
1131-- TODO: handle constrained types
1131-- TODO: handle constrained types
1132--
1132--
1133meet :: Expr -> Expr -> Type -> Type -> UnifyT Type Check (Expr, Expr, Type)
1133meet :: Expr -> Expr -> Type -> Type -> UnifyT Type Check (Expr, Expr, Type)
1134−meet e1 e2 t1@(ForAll _ _ _) t2 = meet e1 e2 t1 t2
1134+meet e1 e2 (ForAll ident t1 _) t2 = do
1135+ t1' <- replaceVarWithUnknown ident t1
1136+ meet e1 e2 t1' t2
1135meet e1 e2 t1 (ForAll ident t2 _) = do
1137meet e1 e2 t1 (ForAll ident t2 _) = do
1136 t2' <- replaceVarWithUnknown ident t2
1138 t2' <- replaceVarWithUnknown ident t2
1137 meet e1 e2 t1 t2'
1139 meet e1 e2 t1 t2'