{-# LANGUAGE DeriveDataTypeable, DeriveGeneric #-}
module Language.Haskell.Exts.SrcLoc where
import Data.Data
import GHC.Generics (Generic)
showInt :: Int -> String
showInt :: Int -> String
showInt Int
i | Int
i forall a. Ord a => a -> a -> Bool
< Int
0 = String
"(" forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show Int
i forall a. [a] -> [a] -> [a]
++ String
")"
showInt Int
i = forall a. Show a => a -> String
show Int
i
data SrcLoc = SrcLoc
{ SrcLoc -> String
srcFilename :: String
, SrcLoc -> Int
srcLine :: Int
, SrcLoc -> Int
srcColumn :: Int
}
deriving (SrcLoc -> SrcLoc -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SrcLoc -> SrcLoc -> Bool
$c/= :: SrcLoc -> SrcLoc -> Bool
== :: SrcLoc -> SrcLoc -> Bool
$c== :: SrcLoc -> SrcLoc -> Bool
Eq,Eq SrcLoc
SrcLoc -> SrcLoc -> Bool
SrcLoc -> SrcLoc -> Ordering
SrcLoc -> SrcLoc -> SrcLoc
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 :: SrcLoc -> SrcLoc -> SrcLoc
$cmin :: SrcLoc -> SrcLoc -> SrcLoc
max :: SrcLoc -> SrcLoc -> SrcLoc
$cmax :: SrcLoc -> SrcLoc -> SrcLoc
>= :: SrcLoc -> SrcLoc -> Bool
$c>= :: SrcLoc -> SrcLoc -> Bool
> :: SrcLoc -> SrcLoc -> Bool
$c> :: SrcLoc -> SrcLoc -> Bool
<= :: SrcLoc -> SrcLoc -> Bool
$c<= :: SrcLoc -> SrcLoc -> Bool
< :: SrcLoc -> SrcLoc -> Bool
$c< :: SrcLoc -> SrcLoc -> Bool
compare :: SrcLoc -> SrcLoc -> Ordering
$ccompare :: SrcLoc -> SrcLoc -> Ordering
Ord,Typeable,Typeable SrcLoc
SrcLoc -> Constr
SrcLoc -> DataType
(forall b. Data b => b -> b) -> SrcLoc -> SrcLoc
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> SrcLoc -> u
forall u. (forall d. Data d => d -> u) -> SrcLoc -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SrcLoc -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SrcLoc -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcLoc
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcLoc -> c SrcLoc
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcLoc)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcLoc)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcLoc -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcLoc -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> SrcLoc -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> SrcLoc -> [u]
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SrcLoc -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SrcLoc -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SrcLoc -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SrcLoc -> r
gmapT :: (forall b. Data b => b -> b) -> SrcLoc -> SrcLoc
$cgmapT :: (forall b. Data b => b -> b) -> SrcLoc -> SrcLoc
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcLoc)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcLoc)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcLoc)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcLoc)
dataTypeOf :: SrcLoc -> DataType
$cdataTypeOf :: SrcLoc -> DataType
toConstr :: SrcLoc -> Constr
$ctoConstr :: SrcLoc -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcLoc
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcLoc
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcLoc -> c SrcLoc
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcLoc -> c SrcLoc
Data,forall x. Rep SrcLoc x -> SrcLoc
forall x. SrcLoc -> Rep SrcLoc x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SrcLoc x -> SrcLoc
$cfrom :: forall x. SrcLoc -> Rep SrcLoc x
Generic)
instance Show SrcLoc where
showsPrec :: Int -> SrcLoc -> ShowS
showsPrec Int
n (SrcLoc String
fn Int
sl Int
sc) =
Bool -> ShowS -> ShowS
showParen (Int
n forall a. Ord a => a -> a -> Bool
>= Int
11) forall a b. (a -> b) -> a -> b
$
String -> ShowS
showString forall a b. (a -> b) -> a -> b
$ String
"SrcLoc " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show String
fn forall a. [a] -> [a] -> [a]
++ String
" " forall a. [a] -> [a] -> [a]
++ [String] -> String
unwords (forall a b. (a -> b) -> [a] -> [b]
map Int -> String
showInt [Int
sl,Int
sc])
noLoc :: SrcLoc
noLoc :: SrcLoc
noLoc = String -> Int -> Int -> SrcLoc
SrcLoc String
"" (-Int
1) (-Int
1)
data SrcSpan = SrcSpan
{ SrcSpan -> String
srcSpanFilename :: String
, SrcSpan -> Int
srcSpanStartLine :: Int
, SrcSpan -> Int
srcSpanStartColumn :: Int
, SrcSpan -> Int
srcSpanEndLine :: Int
, SrcSpan -> Int
srcSpanEndColumn :: Int
}
deriving (SrcSpan -> SrcSpan -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SrcSpan -> SrcSpan -> Bool
$c/= :: SrcSpan -> SrcSpan -> Bool
== :: SrcSpan -> SrcSpan -> Bool
$c== :: SrcSpan -> SrcSpan -> Bool
Eq,Eq SrcSpan
SrcSpan -> SrcSpan -> Bool
SrcSpan -> SrcSpan -> Ordering
SrcSpan -> SrcSpan -> SrcSpan
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 :: SrcSpan -> SrcSpan -> SrcSpan
$cmin :: SrcSpan -> SrcSpan -> SrcSpan
max :: SrcSpan -> SrcSpan -> SrcSpan
$cmax :: SrcSpan -> SrcSpan -> SrcSpan
>= :: SrcSpan -> SrcSpan -> Bool
$c>= :: SrcSpan -> SrcSpan -> Bool
> :: SrcSpan -> SrcSpan -> Bool
$c> :: SrcSpan -> SrcSpan -> Bool
<= :: SrcSpan -> SrcSpan -> Bool
$c<= :: SrcSpan -> SrcSpan -> Bool
< :: SrcSpan -> SrcSpan -> Bool
$c< :: SrcSpan -> SrcSpan -> Bool
compare :: SrcSpan -> SrcSpan -> Ordering
$ccompare :: SrcSpan -> SrcSpan -> Ordering
Ord,Typeable,Typeable SrcSpan
SrcSpan -> Constr
SrcSpan -> DataType
(forall b. Data b => b -> b) -> SrcSpan -> SrcSpan
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> SrcSpan -> u
forall u. (forall d. Data d => d -> u) -> SrcSpan -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpan -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpan -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpan
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpan -> c SrcSpan
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcSpan)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcSpan)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcSpan -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcSpan -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> SrcSpan -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> SrcSpan -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpan -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpan -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpan -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpan -> r
gmapT :: (forall b. Data b => b -> b) -> SrcSpan -> SrcSpan
$cgmapT :: (forall b. Data b => b -> b) -> SrcSpan -> SrcSpan
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcSpan)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcSpan)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcSpan)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcSpan)
dataTypeOf :: SrcSpan -> DataType
$cdataTypeOf :: SrcSpan -> DataType
toConstr :: SrcSpan -> Constr
$ctoConstr :: SrcSpan -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpan
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpan
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpan -> c SrcSpan
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpan -> c SrcSpan
Data,forall x. Rep SrcSpan x -> SrcSpan
forall x. SrcSpan -> Rep SrcSpan x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SrcSpan x -> SrcSpan
$cfrom :: forall x. SrcSpan -> Rep SrcSpan x
Generic)
instance Show SrcSpan where
showsPrec :: Int -> SrcSpan -> ShowS
showsPrec Int
n (SrcSpan String
fn Int
sl Int
sc Int
el Int
ec) =
Bool -> ShowS -> ShowS
showParen (Int
n forall a. Ord a => a -> a -> Bool
>= Int
11) forall a b. (a -> b) -> a -> b
$
String -> ShowS
showString forall a b. (a -> b) -> a -> b
$ String
"SrcSpan " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show String
fn forall a. [a] -> [a] -> [a]
++ String
" " forall a. [a] -> [a] -> [a]
++ [String] -> String
unwords (forall a b. (a -> b) -> [a] -> [b]
map Int -> String
showInt [Int
sl,Int
sc,Int
el,Int
ec])
srcSpanStart :: SrcSpan -> (Int,Int)
srcSpanStart :: SrcSpan -> (Int, Int)
srcSpanStart SrcSpan
x = (SrcSpan -> Int
srcSpanStartLine SrcSpan
x, SrcSpan -> Int
srcSpanStartColumn SrcSpan
x)
srcSpanEnd :: SrcSpan -> (Int,Int)
srcSpanEnd :: SrcSpan -> (Int, Int)
srcSpanEnd SrcSpan
x = (SrcSpan -> Int
srcSpanEndLine SrcSpan
x, SrcSpan -> Int
srcSpanEndColumn SrcSpan
x)
mkSrcSpan :: SrcLoc -> SrcLoc -> SrcSpan
mkSrcSpan :: SrcLoc -> SrcLoc -> SrcSpan
mkSrcSpan (SrcLoc String
fn Int
sl Int
sc) (SrcLoc String
_ Int
el Int
ec) = String -> Int -> Int -> Int -> Int -> SrcSpan
SrcSpan String
fn Int
sl Int
sc Int
el Int
ec
mergeSrcSpan :: SrcSpan -> SrcSpan -> SrcSpan
mergeSrcSpan :: SrcSpan -> SrcSpan -> SrcSpan
mergeSrcSpan (SrcSpan String
fn Int
sl1 Int
sc1 Int
el1 Int
ec1) (SrcSpan String
_ Int
sl2 Int
sc2 Int
el2 Int
ec2) =
let (Int
sl,Int
sc) = forall a. Ord a => a -> a -> a
min (Int
sl1,Int
sc1) (Int
sl2,Int
sc2)
(Int
el,Int
ec) = forall a. Ord a => a -> a -> a
max (Int
el1,Int
ec1) (Int
el2,Int
ec2)
in String -> Int -> Int -> Int -> Int -> SrcSpan
SrcSpan String
fn Int
sl Int
sc Int
el Int
ec
isNullSpan :: SrcSpan -> Bool
isNullSpan :: SrcSpan -> Bool
isNullSpan SrcSpan
ss = SrcSpan -> (Int, Int)
spanSize SrcSpan
ss forall a. Eq a => a -> a -> Bool
== (Int
0,Int
0)
spanSize :: SrcSpan -> (Int, Int)
spanSize :: SrcSpan -> (Int, Int)
spanSize SrcSpan
ss = (SrcSpan -> Int
srcSpanEndLine SrcSpan
ss forall a. Num a => a -> a -> a
- SrcSpan -> Int
srcSpanStartLine SrcSpan
ss, forall a. Ord a => a -> a -> a
max Int
0 (SrcSpan -> Int
srcSpanEndColumn SrcSpan
ss forall a. Num a => a -> a -> a
- SrcSpan -> Int
srcSpanStartColumn SrcSpan
ss))
data Loc a = Loc
{ forall a. Loc a -> SrcSpan
loc :: SrcSpan
, forall a. Loc a -> a
unLoc :: a
}
deriving (Loc a -> Loc a -> Bool
forall a. Eq a => Loc a -> Loc a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Loc a -> Loc a -> Bool
$c/= :: forall a. Eq a => Loc a -> Loc a -> Bool
== :: Loc a -> Loc a -> Bool
$c== :: forall a. Eq a => Loc a -> Loc a -> Bool
Eq,Loc a -> Loc a -> Bool
Loc a -> Loc a -> Ordering
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
forall {a}. Ord a => Eq (Loc a)
forall a. Ord a => Loc a -> Loc a -> Bool
forall a. Ord a => Loc a -> Loc a -> Ordering
forall a. Ord a => Loc a -> Loc a -> Loc a
min :: Loc a -> Loc a -> Loc a
$cmin :: forall a. Ord a => Loc a -> Loc a -> Loc a
max :: Loc a -> Loc a -> Loc a
$cmax :: forall a. Ord a => Loc a -> Loc a -> Loc a
>= :: Loc a -> Loc a -> Bool
$c>= :: forall a. Ord a => Loc a -> Loc a -> Bool
> :: Loc a -> Loc a -> Bool
$c> :: forall a. Ord a => Loc a -> Loc a -> Bool
<= :: Loc a -> Loc a -> Bool
$c<= :: forall a. Ord a => Loc a -> Loc a -> Bool
< :: Loc a -> Loc a -> Bool
$c< :: forall a. Ord a => Loc a -> Loc a -> Bool
compare :: Loc a -> Loc a -> Ordering
$ccompare :: forall a. Ord a => Loc a -> Loc a -> Ordering
Ord,Int -> Loc a -> ShowS
forall a. Show a => Int -> Loc a -> ShowS
forall a. Show a => [Loc a] -> ShowS
forall a. Show a => Loc a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Loc a] -> ShowS
$cshowList :: forall a. Show a => [Loc a] -> ShowS
show :: Loc a -> String
$cshow :: forall a. Show a => Loc a -> String
showsPrec :: Int -> Loc a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Loc a -> ShowS
Show,forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Loc a) x -> Loc a
forall a x. Loc a -> Rep (Loc a) x
$cto :: forall a x. Rep (Loc a) x -> Loc a
$cfrom :: forall a x. Loc a -> Rep (Loc a) x
Generic)
data SrcSpanInfo = SrcSpanInfo
{ SrcSpanInfo -> SrcSpan
srcInfoSpan :: SrcSpan
, SrcSpanInfo -> [SrcSpan]
srcInfoPoints :: [SrcSpan]
}
deriving (SrcSpanInfo -> SrcSpanInfo -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SrcSpanInfo -> SrcSpanInfo -> Bool
$c/= :: SrcSpanInfo -> SrcSpanInfo -> Bool
== :: SrcSpanInfo -> SrcSpanInfo -> Bool
$c== :: SrcSpanInfo -> SrcSpanInfo -> Bool
Eq,Eq SrcSpanInfo
SrcSpanInfo -> SrcSpanInfo -> Bool
SrcSpanInfo -> SrcSpanInfo -> Ordering
SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
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 :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
$cmin :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
max :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
$cmax :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
>= :: SrcSpanInfo -> SrcSpanInfo -> Bool
$c>= :: SrcSpanInfo -> SrcSpanInfo -> Bool
> :: SrcSpanInfo -> SrcSpanInfo -> Bool
$c> :: SrcSpanInfo -> SrcSpanInfo -> Bool
<= :: SrcSpanInfo -> SrcSpanInfo -> Bool
$c<= :: SrcSpanInfo -> SrcSpanInfo -> Bool
< :: SrcSpanInfo -> SrcSpanInfo -> Bool
$c< :: SrcSpanInfo -> SrcSpanInfo -> Bool
compare :: SrcSpanInfo -> SrcSpanInfo -> Ordering
$ccompare :: SrcSpanInfo -> SrcSpanInfo -> Ordering
Ord,Typeable,Typeable SrcSpanInfo
SrcSpanInfo -> Constr
SrcSpanInfo -> DataType
(forall b. Data b => b -> b) -> SrcSpanInfo -> SrcSpanInfo
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> SrcSpanInfo -> u
forall u. (forall d. Data d => d -> u) -> SrcSpanInfo -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpanInfo -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpanInfo -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpanInfo
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpanInfo -> c SrcSpanInfo
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcSpanInfo)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c SrcSpanInfo)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcSpanInfo -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcSpanInfo -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> SrcSpanInfo -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> SrcSpanInfo -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpanInfo -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpanInfo -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpanInfo -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpanInfo -> r
gmapT :: (forall b. Data b => b -> b) -> SrcSpanInfo -> SrcSpanInfo
$cgmapT :: (forall b. Data b => b -> b) -> SrcSpanInfo -> SrcSpanInfo
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c SrcSpanInfo)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c SrcSpanInfo)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcSpanInfo)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcSpanInfo)
dataTypeOf :: SrcSpanInfo -> DataType
$cdataTypeOf :: SrcSpanInfo -> DataType
toConstr :: SrcSpanInfo -> Constr
$ctoConstr :: SrcSpanInfo -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpanInfo
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpanInfo
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpanInfo -> c SrcSpanInfo
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpanInfo -> c SrcSpanInfo
Data,forall x. Rep SrcSpanInfo x -> SrcSpanInfo
forall x. SrcSpanInfo -> Rep SrcSpanInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep SrcSpanInfo x -> SrcSpanInfo
$cfrom :: forall x. SrcSpanInfo -> Rep SrcSpanInfo x
Generic)
instance Show SrcSpanInfo where
showsPrec :: Int -> SrcSpanInfo -> ShowS
showsPrec Int
n (SrcSpanInfo SrcSpan
s [SrcSpan]
pts) = Bool -> ShowS -> ShowS
showParen (Int
n forall a. Ord a => a -> a -> Bool
>= Int
11) forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString forall a b. (a -> b) -> a -> b
$
String
"SrcSpanInfo {srcInfoSpan = " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show SrcSpan
s forall a. [a] -> [a] -> [a]
++ String
", srcInfoPoints = " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show [SrcSpan]
pts forall a. [a] -> [a] -> [a]
++ String
"}"
noInfoSpan :: SrcSpan -> SrcSpanInfo
noInfoSpan :: SrcSpan -> SrcSpanInfo
noInfoSpan SrcSpan
ss = SrcSpan -> [SrcSpan] -> SrcSpanInfo
SrcSpanInfo SrcSpan
ss []
noSrcSpan :: SrcSpanInfo
noSrcSpan :: SrcSpanInfo
noSrcSpan = SrcSpan -> SrcSpanInfo
noInfoSpan (SrcLoc -> SrcLoc -> SrcSpan
mkSrcSpan SrcLoc
noLoc SrcLoc
noLoc)
infoSpan :: SrcSpan -> [SrcSpan] -> SrcSpanInfo
infoSpan :: SrcSpan -> [SrcSpan] -> SrcSpanInfo
infoSpan = SrcSpan -> [SrcSpan] -> SrcSpanInfo
SrcSpanInfo
combSpanInfo :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
combSpanInfo :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
combSpanInfo SrcSpanInfo
s1 SrcSpanInfo
s2 = SrcSpan -> [SrcSpan] -> SrcSpanInfo
SrcSpanInfo
(SrcSpan -> SrcSpan -> SrcSpan
mergeSrcSpan (SrcSpanInfo -> SrcSpan
srcInfoSpan SrcSpanInfo
s1) (SrcSpanInfo -> SrcSpan
srcInfoSpan SrcSpanInfo
s2))
[]
combSpanMaybe :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo
combSpanMaybe :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo
combSpanMaybe SrcSpanInfo
s1 Maybe SrcSpanInfo
Nothing = SrcSpanInfo
s1
combSpanMaybe SrcSpanInfo
s1 (Just SrcSpanInfo
s2) = SrcSpan -> [SrcSpan] -> SrcSpanInfo
SrcSpanInfo
(SrcSpan -> SrcSpan -> SrcSpan
mergeSrcSpan (SrcSpanInfo -> SrcSpan
srcInfoSpan SrcSpanInfo
s1) (SrcSpanInfo -> SrcSpan
srcInfoSpan SrcSpanInfo
s2))
(SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
s1 forall a. [a] -> [a] -> [a]
++ SrcSpanInfo -> [SrcSpan]
srcInfoPoints SrcSpanInfo
s2)
(<++>) :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
<++> :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
(<++>) = SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
combSpanInfo
(<+?>) :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo
SrcSpanInfo
a <+?> :: SrcSpanInfo -> Maybe SrcSpanInfo -> SrcSpanInfo
<+?> Maybe SrcSpanInfo
b = case Maybe SrcSpanInfo
b of {Maybe SrcSpanInfo
Nothing -> SrcSpanInfo
a; Just SrcSpanInfo
b' -> SrcSpanInfo
a SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
<++> SrcSpanInfo
b'}
(<?+>) :: Maybe SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
Maybe SrcSpanInfo
a <?+> :: Maybe SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
<?+> SrcSpanInfo
b = case Maybe SrcSpanInfo
a of {Maybe SrcSpanInfo
Nothing -> SrcSpanInfo
b; Just SrcSpanInfo
a' -> SrcSpanInfo
a' SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
<++> SrcSpanInfo
b}
(<**) :: SrcSpanInfo -> [SrcSpan] -> SrcSpanInfo
ss :: SrcSpanInfo
ss@(SrcSpanInfo {srcInfoPoints :: SrcSpanInfo -> [SrcSpan]
srcInfoPoints = [SrcSpan]
ps}) <** :: SrcSpanInfo -> [SrcSpan] -> SrcSpanInfo
<** [SrcSpan]
xs = SrcSpanInfo
ss {srcInfoPoints :: [SrcSpan]
srcInfoPoints = [SrcSpan]
ps forall a. [a] -> [a] -> [a]
++ [SrcSpan]
xs}
(<^^>) :: SrcSpan -> SrcSpan -> SrcSpanInfo
SrcSpan
a <^^> :: SrcSpan -> SrcSpan -> SrcSpanInfo
<^^> SrcSpan
b = SrcSpan -> SrcSpanInfo
noInfoSpan (SrcSpan -> SrcSpan -> SrcSpan
mergeSrcSpan SrcSpan
a SrcSpan
b)
infixl 6 <^^>
infixl 5 <++>
infixl 4 <**, <+?>, <?+>
class SrcInfo si where
toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> si
fromSrcInfo :: SrcSpanInfo -> si
getPointLoc :: si -> SrcLoc
fileName :: si -> String
startLine :: si -> Int
startColumn :: si -> Int
getPointLoc si
si = String -> Int -> Int -> SrcLoc
SrcLoc (forall si. SrcInfo si => si -> String
fileName si
si) (forall si. SrcInfo si => si -> Int
startLine si
si) (forall si. SrcInfo si => si -> Int
startColumn si
si)
instance SrcInfo SrcLoc where
toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> SrcLoc
toSrcInfo SrcLoc
s [SrcSpan]
_ SrcLoc
_ = SrcLoc
s
fromSrcInfo :: SrcSpanInfo -> SrcLoc
fromSrcInfo SrcSpanInfo
si = String -> Int -> Int -> SrcLoc
SrcLoc (forall si. SrcInfo si => si -> String
fileName SrcSpanInfo
si) (forall si. SrcInfo si => si -> Int
startLine SrcSpanInfo
si) (forall si. SrcInfo si => si -> Int
startColumn SrcSpanInfo
si)
fileName :: SrcLoc -> String
fileName = SrcLoc -> String
srcFilename
startLine :: SrcLoc -> Int
startLine = SrcLoc -> Int
srcLine
startColumn :: SrcLoc -> Int
startColumn = SrcLoc -> Int
srcColumn
instance SrcInfo SrcSpan where
toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> SrcSpan
toSrcInfo SrcLoc
st [SrcSpan]
_ SrcLoc
end = SrcLoc -> SrcLoc -> SrcSpan
mkSrcSpan SrcLoc
st SrcLoc
end
fromSrcInfo :: SrcSpanInfo -> SrcSpan
fromSrcInfo = SrcSpanInfo -> SrcSpan
srcInfoSpan
fileName :: SrcSpan -> String
fileName = SrcSpan -> String
srcSpanFilename
startLine :: SrcSpan -> Int
startLine = SrcSpan -> Int
srcSpanStartLine
startColumn :: SrcSpan -> Int
startColumn = SrcSpan -> Int
srcSpanStartColumn
instance SrcInfo SrcSpanInfo where
toSrcInfo :: SrcLoc -> [SrcSpan] -> SrcLoc -> SrcSpanInfo
toSrcInfo SrcLoc
st [SrcSpan]
pts SrcLoc
end = SrcSpan -> [SrcSpan] -> SrcSpanInfo
SrcSpanInfo (SrcLoc -> SrcLoc -> SrcSpan
mkSrcSpan SrcLoc
st SrcLoc
end) [SrcSpan]
pts
fromSrcInfo :: SrcSpanInfo -> SrcSpanInfo
fromSrcInfo = forall a. a -> a
id
fileName :: SrcSpanInfo -> String
fileName = forall si. SrcInfo si => si -> String
fileName forall b c a. (b -> c) -> (a -> b) -> a -> c
. SrcSpanInfo -> SrcSpan
srcInfoSpan
startLine :: SrcSpanInfo -> Int
startLine = forall si. SrcInfo si => si -> Int
startLine forall b c a. (b -> c) -> (a -> b) -> a -> c
. SrcSpanInfo -> SrcSpan
srcInfoSpan
startColumn :: SrcSpanInfo -> Int
startColumn = forall si. SrcInfo si => si -> Int
startColumn forall b c a. (b -> c) -> (a -> b) -> a -> c
. SrcSpanInfo -> SrcSpan
srcInfoSpan