{-# 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 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 = String
"(" String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
i String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")"
showInt Int
i = Int -> String
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
(SrcLoc -> SrcLoc -> Bool)
-> (SrcLoc -> SrcLoc -> Bool) -> Eq SrcLoc
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SrcLoc -> SrcLoc -> Bool
== :: SrcLoc -> SrcLoc -> Bool
$c/= :: SrcLoc -> SrcLoc -> Bool
/= :: SrcLoc -> SrcLoc -> Bool
Eq,Eq SrcLoc
Eq SrcLoc =>
(SrcLoc -> SrcLoc -> Ordering)
-> (SrcLoc -> SrcLoc -> Bool)
-> (SrcLoc -> SrcLoc -> Bool)
-> (SrcLoc -> SrcLoc -> Bool)
-> (SrcLoc -> SrcLoc -> Bool)
-> (SrcLoc -> SrcLoc -> SrcLoc)
-> (SrcLoc -> SrcLoc -> SrcLoc)
-> Ord 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
$ccompare :: SrcLoc -> SrcLoc -> Ordering
compare :: SrcLoc -> SrcLoc -> Ordering
$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
>= :: SrcLoc -> SrcLoc -> Bool
$cmax :: SrcLoc -> SrcLoc -> SrcLoc
max :: SrcLoc -> SrcLoc -> SrcLoc
$cmin :: SrcLoc -> SrcLoc -> SrcLoc
min :: SrcLoc -> SrcLoc -> SrcLoc
Ord,Typeable,Typeable SrcLoc
Typeable SrcLoc =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcLoc -> c SrcLoc)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcLoc)
-> (SrcLoc -> Constr)
-> (SrcLoc -> DataType)
-> (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))
-> ((forall b. Data b => b -> b) -> SrcLoc -> SrcLoc)
-> (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 u. (forall d. Data d => d -> u) -> SrcLoc -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> SrcLoc -> u)
-> (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 (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc)
-> Data 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)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcLoc -> c SrcLoc
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcLoc -> c SrcLoc
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcLoc
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcLoc
$ctoConstr :: SrcLoc -> Constr
toConstr :: SrcLoc -> Constr
$cdataTypeOf :: SrcLoc -> DataType
dataTypeOf :: SrcLoc -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcLoc)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcLoc)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcLoc)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcLoc)
$cgmapT :: (forall b. Data b => b -> b) -> SrcLoc -> SrcLoc
gmapT :: (forall b. Data b => b -> b) -> SrcLoc -> SrcLoc
$cgmapQl :: 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
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SrcLoc -> r
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SrcLoc -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> SrcLoc -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> SrcLoc -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcLoc -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcLoc -> u
$cgmapM :: forall (m :: * -> *).
Monad 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
$cgmapMp :: 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
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcLoc -> m SrcLoc
Data,(forall x. SrcLoc -> Rep SrcLoc x)
-> (forall x. Rep SrcLoc x -> SrcLoc) -> Generic SrcLoc
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
$cfrom :: forall x. SrcLoc -> Rep SrcLoc x
from :: forall x. SrcLoc -> Rep SrcLoc x
$cto :: forall x. Rep SrcLoc x -> SrcLoc
to :: forall x. Rep SrcLoc x -> SrcLoc
Generic)
instance Show SrcLoc where
showsPrec :: Int -> SrcLoc -> String -> String
showsPrec Int
n (SrcLoc String
fn Int
sl Int
sc) =
Bool -> (String -> String) -> String -> String
showParen (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
11) ((String -> String) -> String -> String)
-> (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$
String -> String -> String
showString (String -> String -> String) -> String -> String -> String
forall a b. (a -> b) -> a -> b
$ String
"SrcLoc " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
forall a. Show a => a -> String
show String
fn String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" " String -> String -> String
forall a. [a] -> [a] -> [a]
++ [String] -> String
unwords ((Int -> String) -> [Int] -> [String]
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
(SrcSpan -> SrcSpan -> Bool)
-> (SrcSpan -> SrcSpan -> Bool) -> Eq SrcSpan
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SrcSpan -> SrcSpan -> Bool
== :: SrcSpan -> SrcSpan -> Bool
$c/= :: SrcSpan -> SrcSpan -> Bool
/= :: SrcSpan -> SrcSpan -> Bool
Eq,Eq SrcSpan
Eq SrcSpan =>
(SrcSpan -> SrcSpan -> Ordering)
-> (SrcSpan -> SrcSpan -> Bool)
-> (SrcSpan -> SrcSpan -> Bool)
-> (SrcSpan -> SrcSpan -> Bool)
-> (SrcSpan -> SrcSpan -> Bool)
-> (SrcSpan -> SrcSpan -> SrcSpan)
-> (SrcSpan -> SrcSpan -> SrcSpan)
-> Ord 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
$ccompare :: SrcSpan -> SrcSpan -> Ordering
compare :: SrcSpan -> SrcSpan -> Ordering
$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
>= :: SrcSpan -> SrcSpan -> Bool
$cmax :: SrcSpan -> SrcSpan -> SrcSpan
max :: SrcSpan -> SrcSpan -> SrcSpan
$cmin :: SrcSpan -> SrcSpan -> SrcSpan
min :: SrcSpan -> SrcSpan -> SrcSpan
Ord,Typeable,Typeable SrcSpan
Typeable SrcSpan =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpan -> c SrcSpan)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpan)
-> (SrcSpan -> Constr)
-> (SrcSpan -> DataType)
-> (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))
-> ((forall b. Data b => b -> b) -> SrcSpan -> SrcSpan)
-> (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 u. (forall d. Data d => d -> u) -> SrcSpan -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> SrcSpan -> u)
-> (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 (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan)
-> Data 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)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpan -> c SrcSpan
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpan -> c SrcSpan
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpan
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpan
$ctoConstr :: SrcSpan -> Constr
toConstr :: SrcSpan -> Constr
$cdataTypeOf :: SrcSpan -> DataType
dataTypeOf :: SrcSpan -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcSpan)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcSpan)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcSpan)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SrcSpan)
$cgmapT :: (forall b. Data b => b -> b) -> SrcSpan -> SrcSpan
gmapT :: (forall b. Data b => b -> b) -> SrcSpan -> SrcSpan
$cgmapQl :: 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
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpan -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpan -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> SrcSpan -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> SrcSpan -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcSpan -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcSpan -> u
$cgmapM :: forall (m :: * -> *).
Monad 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
$cgmapMp :: 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
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpan -> m SrcSpan
Data,(forall x. SrcSpan -> Rep SrcSpan x)
-> (forall x. Rep SrcSpan x -> SrcSpan) -> Generic SrcSpan
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
$cfrom :: forall x. SrcSpan -> Rep SrcSpan x
from :: forall x. SrcSpan -> Rep SrcSpan x
$cto :: forall x. Rep SrcSpan x -> SrcSpan
to :: forall x. Rep SrcSpan x -> SrcSpan
Generic)
instance Show SrcSpan where
showsPrec :: Int -> SrcSpan -> String -> String
showsPrec Int
n (SrcSpan String
fn Int
sl Int
sc Int
el Int
ec) =
Bool -> (String -> String) -> String -> String
showParen (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
11) ((String -> String) -> String -> String)
-> (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$
String -> String -> String
showString (String -> String -> String) -> String -> String -> String
forall a b. (a -> b) -> a -> b
$ String
"SrcSpan " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String -> String
forall a. Show a => a -> String
show String
fn String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" " String -> String -> String
forall a. [a] -> [a] -> [a]
++ [String] -> String
unwords ((Int -> String) -> [Int] -> [String]
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) = (Int, Int) -> (Int, Int) -> (Int, Int)
forall a. Ord a => a -> a -> a
min (Int
sl1,Int
sc1) (Int
sl2,Int
sc2)
(Int
el,Int
ec) = (Int, Int) -> (Int, Int) -> (Int, Int)
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 (Int, Int) -> (Int, Int) -> Bool
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 Int -> Int -> Int
forall a. Num a => a -> a -> a
- SrcSpan -> Int
srcSpanStartLine SrcSpan
ss, Int -> Int -> Int
forall a. Ord a => a -> a -> a
max Int
0 (SrcSpan -> Int
srcSpanEndColumn SrcSpan
ss Int -> Int -> Int
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
(Loc a -> Loc a -> Bool) -> (Loc a -> Loc a -> Bool) -> Eq (Loc a)
forall a. Eq a => Loc a -> Loc a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$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
/= :: Loc a -> Loc a -> Bool
Eq,Eq (Loc a)
Eq (Loc a) =>
(Loc a -> Loc a -> Ordering)
-> (Loc a -> Loc a -> Bool)
-> (Loc a -> Loc a -> Bool)
-> (Loc a -> Loc a -> Bool)
-> (Loc a -> Loc a -> Bool)
-> (Loc a -> Loc a -> Loc a)
-> (Loc a -> Loc a -> Loc a)
-> Ord (Loc a)
Loc a -> Loc a -> Bool
Loc a -> Loc a -> Ordering
Loc a -> Loc a -> Loc a
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
$ccompare :: forall a. Ord a => Loc a -> Loc a -> Ordering
compare :: Loc a -> Loc a -> Ordering
$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
>= :: Loc a -> Loc a -> Bool
$cmax :: forall a. Ord a => Loc a -> Loc a -> Loc a
max :: Loc a -> Loc a -> Loc a
$cmin :: forall a. Ord a => Loc a -> Loc a -> Loc a
min :: Loc a -> Loc a -> Loc a
Ord,Int -> Loc a -> String -> String
[Loc a] -> String -> String
Loc a -> String
(Int -> Loc a -> String -> String)
-> (Loc a -> String)
-> ([Loc a] -> String -> String)
-> Show (Loc a)
forall a. Show a => Int -> Loc a -> String -> String
forall a. Show a => [Loc a] -> String -> String
forall a. Show a => Loc a -> String
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: forall a. Show a => Int -> Loc a -> String -> String
showsPrec :: Int -> Loc a -> String -> String
$cshow :: forall a. Show a => Loc a -> String
show :: Loc a -> String
$cshowList :: forall a. Show a => [Loc a] -> String -> String
showList :: [Loc a] -> String -> String
Show,(forall x. Loc a -> Rep (Loc a) x)
-> (forall x. Rep (Loc a) x -> Loc a) -> Generic (Loc a)
forall x. Rep (Loc a) x -> Loc a
forall x. Loc a -> Rep (Loc a) x
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
$cfrom :: forall a x. Loc a -> Rep (Loc a) x
from :: forall x. Loc a -> Rep (Loc a) x
$cto :: forall a x. Rep (Loc a) x -> Loc a
to :: forall x. Rep (Loc a) x -> Loc a
Generic)
data SrcSpanInfo = SrcSpanInfo
{ SrcSpanInfo -> SrcSpan
srcInfoSpan :: SrcSpan
, SrcSpanInfo -> [SrcSpan]
srcInfoPoints :: [SrcSpan]
}
deriving (SrcSpanInfo -> SrcSpanInfo -> Bool
(SrcSpanInfo -> SrcSpanInfo -> Bool)
-> (SrcSpanInfo -> SrcSpanInfo -> Bool) -> Eq SrcSpanInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SrcSpanInfo -> SrcSpanInfo -> Bool
== :: SrcSpanInfo -> SrcSpanInfo -> Bool
$c/= :: SrcSpanInfo -> SrcSpanInfo -> Bool
/= :: SrcSpanInfo -> SrcSpanInfo -> Bool
Eq,Eq SrcSpanInfo
Eq SrcSpanInfo =>
(SrcSpanInfo -> SrcSpanInfo -> Ordering)
-> (SrcSpanInfo -> SrcSpanInfo -> Bool)
-> (SrcSpanInfo -> SrcSpanInfo -> Bool)
-> (SrcSpanInfo -> SrcSpanInfo -> Bool)
-> (SrcSpanInfo -> SrcSpanInfo -> Bool)
-> (SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo)
-> (SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo)
-> Ord 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
$ccompare :: SrcSpanInfo -> SrcSpanInfo -> Ordering
compare :: SrcSpanInfo -> SrcSpanInfo -> Ordering
$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
>= :: SrcSpanInfo -> SrcSpanInfo -> Bool
$cmax :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
max :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
$cmin :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
min :: SrcSpanInfo -> SrcSpanInfo -> SrcSpanInfo
Ord,Typeable,Typeable SrcSpanInfo
Typeable SrcSpanInfo =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpanInfo -> c SrcSpanInfo)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpanInfo)
-> (SrcSpanInfo -> Constr)
-> (SrcSpanInfo -> DataType)
-> (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))
-> ((forall b. Data b => b -> b) -> SrcSpanInfo -> SrcSpanInfo)
-> (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 u. (forall d. Data d => d -> u) -> SrcSpanInfo -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> SrcSpanInfo -> u)
-> (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 (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo)
-> Data 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)
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpanInfo -> c SrcSpanInfo
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> SrcSpanInfo -> c SrcSpanInfo
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpanInfo
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c SrcSpanInfo
$ctoConstr :: SrcSpanInfo -> Constr
toConstr :: SrcSpanInfo -> Constr
$cdataTypeOf :: SrcSpanInfo -> DataType
dataTypeOf :: SrcSpanInfo -> DataType
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcSpanInfo)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c SrcSpanInfo)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c SrcSpanInfo)
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c SrcSpanInfo)
$cgmapT :: (forall b. Data b => b -> b) -> SrcSpanInfo -> SrcSpanInfo
gmapT :: (forall b. Data b => b -> b) -> SrcSpanInfo -> SrcSpanInfo
$cgmapQl :: 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
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpanInfo -> r
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> SrcSpanInfo -> r
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> SrcSpanInfo -> [u]
gmapQ :: forall u. (forall d. Data d => d -> u) -> SrcSpanInfo -> [u]
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcSpanInfo -> u
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> SrcSpanInfo -> u
$cgmapM :: forall (m :: * -> *).
Monad 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
$cgmapMp :: 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
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> SrcSpanInfo -> m SrcSpanInfo
Data,(forall x. SrcSpanInfo -> Rep SrcSpanInfo x)
-> (forall x. Rep SrcSpanInfo x -> SrcSpanInfo)
-> Generic SrcSpanInfo
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
$cfrom :: forall x. SrcSpanInfo -> Rep SrcSpanInfo x
from :: forall x. SrcSpanInfo -> Rep SrcSpanInfo x
$cto :: forall x. Rep SrcSpanInfo x -> SrcSpanInfo
to :: forall x. Rep SrcSpanInfo x -> SrcSpanInfo
Generic)
instance Show SrcSpanInfo where
showsPrec :: Int -> SrcSpanInfo -> String -> String
showsPrec Int
n (SrcSpanInfo SrcSpan
s [SrcSpan]
pts) = Bool -> (String -> String) -> String -> String
showParen (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
11) ((String -> String) -> String -> String)
-> (String -> String -> String) -> String -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> String
showString (String -> String -> String) -> String -> String -> String
forall a b. (a -> b) -> a -> b
$
String
"SrcSpanInfo {srcInfoSpan = " String -> String -> String
forall a. [a] -> [a] -> [a]
++ SrcSpan -> String
forall a. Show a => a -> String
show SrcSpan
s String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
", srcInfoPoints = " String -> String -> String
forall a. [a] -> [a] -> [a]
++ [SrcSpan] -> String
forall a. Show a => a -> String
show [SrcSpan]
pts String -> String -> String
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 [SrcSpan] -> [SrcSpan] -> [SrcSpan]
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 = ps ++ 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 (si -> String
forall si. SrcInfo si => si -> String
fileName si
si) (si -> Int
forall si. SrcInfo si => si -> Int
startLine si
si) (si -> Int
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 (SrcSpanInfo -> String
forall si. SrcInfo si => si -> String
fileName SrcSpanInfo
si) (SrcSpanInfo -> Int
forall si. SrcInfo si => si -> Int
startLine SrcSpanInfo
si) (SrcSpanInfo -> Int
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 = SrcSpanInfo -> SrcSpanInfo
forall a. a -> a
id
fileName :: SrcSpanInfo -> String
fileName = SrcSpan -> String
forall si. SrcInfo si => si -> String
fileName (SrcSpan -> String)
-> (SrcSpanInfo -> SrcSpan) -> SrcSpanInfo -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SrcSpanInfo -> SrcSpan
srcInfoSpan
startLine :: SrcSpanInfo -> Int
startLine = SrcSpan -> Int
forall si. SrcInfo si => si -> Int
startLine (SrcSpan -> Int) -> (SrcSpanInfo -> SrcSpan) -> SrcSpanInfo -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SrcSpanInfo -> SrcSpan
srcInfoSpan
startColumn :: SrcSpanInfo -> Int
startColumn = SrcSpan -> Int
forall si. SrcInfo si => si -> Int
startColumn (SrcSpan -> Int) -> (SrcSpanInfo -> SrcSpan) -> SrcSpanInfo -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SrcSpanInfo -> SrcSpan
srcInfoSpan