git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #835 from purescript/810
18f3004Phil Freeman
examples/passing/810.pursnew file+11
@@ -0,0 +1,11 @@
1+module Main where
2+
3+data Maybe a = Nothing | Just a
4+
5+test :: forall a. Maybe a -> Maybe a
6+test m = o.x
7+ where
8+ o = case m of Nothing -> { x : Nothing }
9+ Just a -> { x : Just a }
10+
11+main = Debug.Trace.trace "Done"
src/Language/PureScript/TypeChecker/Types.hs+3−2
@@ -52,6 +52,7 @@ import Language.PureScript.Errors
52import Language.PureScript.Kinds
52import Language.PureScript.Kinds
53import Language.PureScript.Names
53import Language.PureScript.Names
54import Language.PureScript.Pretty
54import Language.PureScript.Pretty
55+import Language.PureScript.Traversals
55import Language.PureScript.TypeChecker.Entailment
56import Language.PureScript.TypeChecker.Entailment
56import Language.PureScript.TypeChecker.Kinds
57import Language.PureScript.TypeChecker.Kinds
57import Language.PureScript.TypeChecker.Monad
58import Language.PureScript.TypeChecker.Monad
@@ -271,8 +272,8 @@ infer' v@(Constructor c) = do
271 env <- getEnv
272 env <- getEnv
272 case M.lookup c (dataConstructors env) of
273 case M.lookup c (dataConstructors env) of
273 Nothing -> throwError . strMsg $ "Constructor " ++ show c ++ " is undefined"
274 Nothing -> throwError . strMsg $ "Constructor " ++ show c ++ " is undefined"
274− Just (_, _, ty) -> do ty' <- introduceSkolemScope <=< replaceAllTypeSynonyms $ ty
275+ Just (_, _, ty) -> do (v', ty') <- sndM (introduceSkolemScope <=< replaceAllTypeSynonyms) <=< instantiatePolyTypeWithUnknowns v $ ty
275− return $ TypedValue True v ty'
276+ return $ TypedValue True v' ty'
276infer' (Case vals binders) = do
277infer' (Case vals binders) = do
277 ts <- mapM infer vals
278 ts <- mapM infer vals
278 ret <- fresh
279 ret <- fresh