on master help sign in
Properly recognize supers during unification
bd2ab82Evan Czaplicki
src/Type/Solve.hs+8−1
@@ -501,8 +501,15 @@ unit1 =
501srcTypeToVariable :: Int -> Pools -> Map.Map N.Name () -> Can.Type -> IO Variable
501srcTypeToVariable :: Int -> Pools -> Map.Map N.Name () -> Can.Type -> IO Variable
502srcTypeToVariable rank pools freeVars srcType =
502srcTypeToVariable rank pools freeVars srcType =
503 let
503 let
504+ nameToContent name
505+ | N.startsWith "number" name = FlexSuper Number (Just name)
506+ | N.startsWith "comparable" name = FlexSuper Comparable (Just name)
507+ | N.startsWith "appendable" name = FlexSuper Appendable (Just name)
508+ | N.startsWith "compappend" name = FlexSuper CompAppend (Just name)
509+ | otherwise = FlexVar (Just name)
510+
504 makeVar name _ =
511 makeVar name _ =
505− UF.fresh (Descriptor (FlexVar (Just name)) rank noMark Nothing)
512+ UF.fresh (Descriptor (nameToContent name) rank noMark Nothing)
506 in
513 in
507 do flexVars <- Map.traverseWithKey makeVar freeVars
514 do flexVars <- Map.traverseWithKey makeVar freeVars
508 MVector.modify pools (Map.elems flexVars ++) rank
515 MVector.modify pools (Map.elems flexVars ++) rank