@@ -814,7 +814,8 @@ check' v@(Var var) ty = do
814814 Just moduleName <- checkCurrentModule <$> get
815815 ty1 <- lookupVariable moduleName var
816816 repl <- replaceAllTypeSynonyms ty1
817− v' <- subsumes (Just v) repl ty
817+ ty' <- replaceAllTypeSynonyms ty
818+ v' <- subsumes (Just v) repl ty'
818819 case v' of
819820 Nothing -> throwError "Unable to check type subsumption"
820821 Just v'' -> return v''
@@ -973,6 +974,12 @@ subsumes' val (TypeApp (TypeApp f1 arg1) ret1) (TypeApp (TypeApp f2 arg2) ret2)
973974 subsumes Nothing arg2 arg1
974975 subsumes Nothing ret1 ret2
975976 return val
977+subsumes' val (SaturatedTypeSynonym name tyArgs) ty2 = do
978+ ty1 <- expandTypeSynonym name tyArgs
979+ subsumes val ty1 ty2
980+subsumes' val ty1 (SaturatedTypeSynonym name tyArgs) = do
981+ ty2 <- expandTypeSynonym name tyArgs
982+ subsumes val ty1 ty2
976983subsumes' (Just val) (ConstrainedType constraints ty1) ty2 = do
977984 env <- getEnv
978985 dicts <- getTypeClassDictionaries