git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #835 from purescript/810

Fix #810 and #814: don't infer polymorphic types for data constructors.

commit18f30046047128c266a63515846b310f5f0752cd authorPhil Freeman <paf31@cantab.net> dateTue 3 Feb 2015, 08:31 (12 years ago) parentbbed315f89b14f
2 files changed+14−2
examples/passing/810.purs+11 src/Language/PureScript/TypeChecker/Types.hs+3−2
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
5252import Language.PureScript.Kinds
5353import Language.PureScript.Names
5454import Language.PureScript.Pretty
55+import Language.PureScript.Traversals
5556import Language.PureScript.TypeChecker.Entailment
5657import Language.PureScript.TypeChecker.Kinds
5758import Language.PureScript.TypeChecker.Monad
@@ -271,8 +272,8 @@ infer' v@(Constructor c) = do
271272 env <- getEnv
272273 case M.lookup c (dataConstructors env) of
273274 Nothing -> throwError . strMsg $ "Constructor " ++ show c ++ " is undefined"
274− Just (_, _, ty) -> do ty' <- introduceSkolemScope <=< replaceAllTypeSynonyms $ ty
275− return $ TypedValue True v ty'
275+ Just (_, _, ty) -> do (v', ty') <- sndM (introduceSkolemScope <=< replaceAllTypeSynonyms) <=< instantiatePolyTypeWithUnknowns v $ ty
276+ return $ TypedValue True v' ty'
276277infer' (Case vals binders) = do
277278 ts <- mapM infer vals
278279 ret <- fresh