{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module GHC.Util.HsExtendInstances (
HsExtendInstances(..)
, extendInstances', unExtendInstances'
, astEq', astListEq') where
import Outputable
import Data.Function
newtype HsExtendInstances a =
HsExtendInstances a deriving Outputable
toStr :: Outputable a => HsExtendInstances a -> String
toStr (HsExtendInstances e) = Outputable.showSDocUnsafe $ Outputable.ppr e
instance Outputable a => Eq (HsExtendInstances a) where (==) a b = toStr a == toStr b
instance Outputable a => Ord (HsExtendInstances a) where compare = compare `on` toStr
instance Outputable a => Show (HsExtendInstances a) where show = toStr
extendInstances' :: a -> HsExtendInstances a
extendInstances' = HsExtendInstances
unExtendInstances' :: HsExtendInstances a -> a
unExtendInstances' (HsExtendInstances x) = x
astEq' :: Outputable a => a -> a -> Bool
astEq' a b = extendInstances' a == extendInstances' b
astListEq' :: Outputable a => [a] -> [a] -> Bool
astListEq' as bs = length as == length bs && all (uncurry astEq') (zip as bs)