Skip to content

Commit f89b14f

Browse files
committed
Fix #810 and #814: don't infer polymorphic types for data constructors.
1 parent 5061808 commit f89b14f

2 files changed

Lines changed: 14 additions & 2 deletions

File tree

examples/passing/810.purs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import Language.PureScript.Errors
5252
import Language.PureScript.Kinds
5353
import Language.PureScript.Names
5454
import Language.PureScript.Pretty
55+
import Language.PureScript.Traversals
5556
import Language.PureScript.TypeChecker.Entailment
5657
import Language.PureScript.TypeChecker.Kinds
5758
import 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'
276277
infer' (Case vals binders) = do
277278
ts <- mapM infer vals
278279
ret <- fresh

0 commit comments

Comments
 (0)