{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module GHC.Util.SrcLoc (
    stripLocs
  , SrcSpanD(..)
  ) where

import SrcLoc
import Outputable

import Data.Default
import Data.Data
import Data.Generics.Uniplate.DataOnly

-- 'stripLocs x' is 'x' with all contained source locs replaced by
-- 'noSrcSpan'.
stripLocs :: (Data from, HasSrcSpan from) => from -> from
stripLocs :: from -> from
stripLocs = (SrcSpan -> SrcSpan) -> from -> from
forall from to. Biplate from to => (to -> to) -> from -> from
transformBi (SrcSpan -> SrcSpan -> SrcSpan
forall a b. a -> b -> a
const SrcSpan
noSrcSpan)

-- 'Duplicates.hs' requires 'SrcSpan' be in 'Default'.
newtype SrcSpanD = SrcSpanD SrcSpan
  deriving (Rational -> SrcSpanD -> SDoc
SrcSpanD -> SDoc
(SrcSpanD -> SDoc)
-> (Rational -> SrcSpanD -> SDoc) -> Outputable SrcSpanD
forall a. (a -> SDoc) -> (Rational -> a -> SDoc) -> Outputable a
pprPrec :: Rational -> SrcSpanD -> SDoc
$cpprPrec :: Rational -> SrcSpanD -> SDoc
ppr :: SrcSpanD -> SDoc
$cppr :: SrcSpanD -> SDoc
Outputable, SrcSpanD -> SrcSpanD -> Bool
(SrcSpanD -> SrcSpanD -> Bool)
-> (SrcSpanD -> SrcSpanD -> Bool) -> Eq SrcSpanD
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SrcSpanD -> SrcSpanD -> Bool
$c/= :: SrcSpanD -> SrcSpanD -> Bool
== :: SrcSpanD -> SrcSpanD -> Bool
$c== :: SrcSpanD -> SrcSpanD -> Bool
Eq, Eq SrcSpanD
Eq SrcSpanD
-> (SrcSpanD -> SrcSpanD -> Ordering)
-> (SrcSpanD -> SrcSpanD -> Bool)
-> (SrcSpanD -> SrcSpanD -> Bool)
-> (SrcSpanD -> SrcSpanD -> Bool)
-> (SrcSpanD -> SrcSpanD -> Bool)
-> (SrcSpanD -> SrcSpanD -> SrcSpanD)
-> (SrcSpanD -> SrcSpanD -> SrcSpanD)
-> Ord SrcSpanD
SrcSpanD -> SrcSpanD -> Bool
SrcSpanD -> SrcSpanD -> Ordering
SrcSpanD -> SrcSpanD -> SrcSpanD
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: SrcSpanD -> SrcSpanD -> SrcSpanD
$cmin :: SrcSpanD -> SrcSpanD -> SrcSpanD
max :: SrcSpanD -> SrcSpanD -> SrcSpanD
$cmax :: SrcSpanD -> SrcSpanD -> SrcSpanD
>= :: SrcSpanD -> SrcSpanD -> Bool
$c>= :: SrcSpanD -> SrcSpanD -> Bool
> :: SrcSpanD -> SrcSpanD -> Bool
$c> :: SrcSpanD -> SrcSpanD -> Bool
<= :: SrcSpanD -> SrcSpanD -> Bool
$c<= :: SrcSpanD -> SrcSpanD -> Bool
< :: SrcSpanD -> SrcSpanD -> Bool
$c< :: SrcSpanD -> SrcSpanD -> Bool
compare :: SrcSpanD -> SrcSpanD -> Ordering
$ccompare :: SrcSpanD -> SrcSpanD -> Ordering
$cp1Ord :: Eq SrcSpanD
Ord)
instance Default SrcSpanD where def :: SrcSpanD
def = SrcSpan -> SrcSpanD
SrcSpanD SrcSpan
noSrcSpan