@@ -43,10 +43,8 @@ module Language.PureScript.TypeChecker.Types (
4343
4444import Data.List
4545import Data.Maybe (maybeToList, isNothing, isJust, fromMaybe)
46−import qualified Data.Data as D
4746import Data.Generics
48− (everythingWithContext, mkM, everywhereM,
49− everything, mkT, something, everywhere, mkQ)
47+ (everythingWithContext, mkM, mkT, something, everywhere, mkQ)
5048import Data.Generics.Extras
5149
5250import Language.PureScript.Declarations
@@ -373,7 +371,7 @@ entails env moduleName context = solve (sortedNubBy canonicalizeDictionary (filt
373371 return $ map head grps
374372 -- Apply a substitution to a type
375373 applySubst :: [(String, Type)] -> Type -> Maybe Type
376− applySubst subst = everywhereM (mkM replace)
374+ applySubst subst = everywhereOnTypesM replace
377375 where
378376 replace (TypeVar v) = lookup v subst
379377 replace other = Just other
@@ -463,7 +461,7 @@ skolemEscapeCheck root@TypedValue{} =
463461 _ -> ([], scos)
464462 where
465463 collectSkolems :: Type -> [SkolemScope]
466− collectSkolems = nub . everything (++) (mkQ [] collect)
464+ collectSkolems = nub . everythingOnTypes (++) collect
467465 where
468466 collect (Skolem _ _ scope) = [scope]
469467 collect _ = []
@@ -484,8 +482,8 @@ setify = rowFromList . first (M.toList . M.fromList) . rowToList
484482-- |
485483-- \"Setify\" all rows occuring inside a value
486484--
487−setifyAll :: (D.Data d) => d -> d
488−setifyAll = everywhere (mkT setify)
485+setifyAll :: Type -> Type
486+setifyAll = everywhereOnTypes setify
489487
490488-- |
491489-- Replace outermost unsolved unification variables with named type variables
@@ -494,7 +492,7 @@ varIfUnknown :: Type -> Type
494492varIfUnknown ty =
495493 let unks = nub $ unknowns ty
496494 toName = (:) 't' . show
497− ty' = everywhere (mkT typeToVar) ty
495+ ty' = everywhereOnTypes typeToVar ty
498496 typeToVar :: Type -> Type
499497 typeToVar (TUnknown (Unknown u)) = TypeVar (toName u)
500498 typeToVar t = t
@@ -529,14 +527,14 @@ replaceVarWithUnknown ident ty = do
529527-- Replace fully applied type synonyms with the @SaturatedTypeSynonym@ data constructor, which helps generate
530528-- better error messages during unification.
531529--
532−replaceAllTypeSynonyms' :: (D.Data d) => Environment -> d -> Either String d
530+replaceAllTypeSynonyms' :: Environment -> Type -> Either String Type
533531replaceAllTypeSynonyms' env d =
534532 let
535533 syns = map (\(name, (args, _)) -> (name, length args)) . M.toList $ typeSynonyms env
536534 in
537535 saturateAllTypeSynonyms syns d
538536
539−replaceAllTypeSynonyms :: (Error e, Functor m, Monad m, MonadState CheckState m, MonadError e m) => (D.Data d) => d -> m d
537+replaceAllTypeSynonyms :: (Error e, Functor m, Monad m, MonadState CheckState m, MonadError e m) => Type -> m Type
540538replaceAllTypeSynonyms d = do
541539 env <- getEnv
542540 either (throwError . strMsg) return $ replaceAllTypeSynonyms' env d
@@ -544,8 +542,8 @@ replaceAllTypeSynonyms d = do
544542-- |
545543-- \"Desaturate\" @SaturatedTypeSynonym@s
546544--
547−desaturateAllTypeSynonyms :: (D.Data d) => d -> d
548−desaturateAllTypeSynonyms = everywhere (mkT replaceSaturatedTypeSynonym)
545+desaturateAllTypeSynonyms :: Type -> Type
546+desaturateAllTypeSynonyms = everywhereOnTypes replaceSaturatedTypeSynonym
549547 where
550548 replaceSaturatedTypeSynonym (SaturatedTypeSynonym name args) = foldl TypeApp (TypeConstructor name) args
551549 replaceSaturatedTypeSynonym t = t
@@ -566,8 +564,8 @@ expandTypeSynonym name args = do
566564 env <- getEnv
567565 either (throwError . strMsg) return $ expandTypeSynonym' env name args
568566
569−expandAllTypeSynonyms :: (Error e, Functor m, Monad m, MonadState CheckState m, MonadError e m) => Type -> m Type
570−expandAllTypeSynonyms = everywhereM' (mkM go)
567+expandAllTypeSynonyms :: (Error e, Functor m, Applicative m, Monad m, MonadState CheckState m, MonadError e m) => Type -> m Type
568+expandAllTypeSynonyms = everywhereOnTypesTopDownM go
571569 where
572570 go (SaturatedTypeSynonym name args) = expandTypeSynonym name args
573571 go other = return other
@@ -822,7 +820,7 @@ skolemizeTypesInValue ident sko scope = everywhere (mkT go)
822820-- Introduce skolem scope at every occurence of a ForAll
823821--
824822introduceSkolemScope :: Type -> UnifyT Type Check Type
825−introduceSkolemScope = everywhereM (mkM go)
823+introduceSkolemScope = everywhereOnTypesM go
826824 where
827825 go (ForAll ident ty Nothing) = ForAll ident ty <$> (Just <$> newSkolemScope)
828826 go other = return other
@@ -964,7 +962,7 @@ check' (PositionedValue pos val) ty =
964962check' val ty = throwError $ mkErrorStack ("Value does not have type " ++ prettyPrintType ty) (Just (ValueError val))
965963
966964containsTypeSynonyms :: Type -> Bool
967−containsTypeSynonyms = everything (||) (mkQ False go) where
965+containsTypeSynonyms = everythingOnTypes (||) go where
968966 go (SaturatedTypeSynonym _ _) = True
969967 go _ = False
970968