{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE CPP #-}
#include "ghclib_api.h"
module Language.Haskell.GhclibParserEx.GHC.Hs.ExtendInstances (
HsExtendInstances(..), extendInstances, astEq, astListEq)
where
#if defined (GHCLIB_API_811)
import GHC.Utils.Outputable
#else
import Outputable
#endif
import Data.Data
import Data.Function
import Language.Haskell.GhclibParserEx.Dump
newtype HsExtendInstances a =
HsExtendInstances { unextendInstances :: a }
deriving Outputable
extendInstances :: a -> HsExtendInstances a
extendInstances = HsExtendInstances
toStr :: Data a => HsExtendInstances a -> String
toStr (HsExtendInstances e) =
showSDocUnsafe $ showAstData BlankSrcSpan e
instance Data a => Eq (HsExtendInstances a) where (==) a b = toStr a == toStr b
instance Data a => Ord (HsExtendInstances a) where compare = compare `on` toStr
astEq :: Data a => a -> a -> Bool
astEq a b = extendInstances a == extendInstances b
astListEq :: Data a => [a] -> [a] -> Bool
astListEq as bs = length as == length bs && all (uncurry astEq) (zip as bs)
instance Outputable a => Show (HsExtendInstances a) where
show (HsExtendInstances e) = showSDocUnsafe $ ppr e