on master help sign in
Fix aliasing bug revealed by tests!
501c607Evan Czaplicki
src/Type/Environment.hs+14−6
@@ -190,14 +190,22 @@ instantiatorHelp env aliasVars sourceType =
190 do args' <- mapM (\(arg,tipe) -> (,) arg <$> go tipe) args
190 do args' <- mapM (\(arg,tipe) -> (,) arg <$> go tipe) args
191 aliasedType' <- instantiatorHelp env (Set.fromList (map fst args)) aliasedType
191 aliasedType' <- instantiatorHelp env (Set.fromList (map fst args)) aliasedType
192 case aliasedType' of
192 case aliasedType' of
193− PlaceHolder x ->
193+ PlaceHolder _ ->
194− return (PlaceHolder x)
194+ error "problem instantiating type"
195
195
196− VarN _ v ->
196+ VarN maybeSubAlias v ->
197+ case maybeSubAlias of
198+ Nothing ->
197− return (VarN (Just (name,args')) v)
199+ return (VarN (Just (name,args')) v)
200+ Just subAlias ->
201+ return (TermN (Just (name,args')) (Var1 aliasedType'))
198
202
199− TermN _ t ->
203+ TermN maybeSubAlias t ->
204+ case maybeSubAlias of
205+ Nothing ->
200− return (TermN (Just (name, args')) t)
206+ return (TermN (Just (name, args')) t)
207+ Just subAlias ->
208+ return (TermN (Just (name,args')) (Var1 aliasedType'))
201
209
202 T.Type name ->
210 T.Type name ->
203 case Map.lookup (V.toString name) (types env) of
211 case Map.lookup (V.toString name) (types env) of