{-# LANGUAGE DeriveLift #-}

module Database.Persist.Types.Span (Span (..)) where

import Data.Text (Text)
import Language.Haskell.TH.Syntax (Lift)

-- | A pair of (start line/col, end line/col) coordinates. The end column will
-- be one past the final character (i.e. the span (1,1)->(1,1) is zero
-- characters long).
--
-- Spans are 1-indexed in both lines and columns.
--
-- Conceptually identical to GHC's @RealSourceSpan@.
--
-- @since 2.15.0.0
data Span = Span
    { Span -> Text
spanFile :: !Text
    , Span -> Int
spanStartLine :: !Int
    , Span -> Int
spanStartCol :: !Int
    , Span -> Int
spanEndLine :: !Int
    , Span -> Int
spanEndCol :: !Int
    }
    deriving (Int -> Span -> ShowS
[Span] -> ShowS
Span -> String
(Int -> Span -> ShowS)
-> (Span -> String) -> ([Span] -> ShowS) -> Show Span
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Span -> ShowS
showsPrec :: Int -> Span -> ShowS
$cshow :: Span -> String
show :: Span -> String
$cshowList :: [Span] -> ShowS
showList :: [Span] -> ShowS
Show, Span -> Span -> Bool
(Span -> Span -> Bool) -> (Span -> Span -> Bool) -> Eq Span
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Span -> Span -> Bool
== :: Span -> Span -> Bool
$c/= :: Span -> Span -> Bool
/= :: Span -> Span -> Bool
Eq, ReadPrec [Span]
ReadPrec Span
Int -> ReadS Span
ReadS [Span]
(Int -> ReadS Span)
-> ReadS [Span] -> ReadPrec Span -> ReadPrec [Span] -> Read Span
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS Span
readsPrec :: Int -> ReadS Span
$creadList :: ReadS [Span]
readList :: ReadS [Span]
$creadPrec :: ReadPrec Span
readPrec :: ReadPrec Span
$creadListPrec :: ReadPrec [Span]
readListPrec :: ReadPrec [Span]
Read, Eq Span
Eq Span =>
(Span -> Span -> Ordering)
-> (Span -> Span -> Bool)
-> (Span -> Span -> Bool)
-> (Span -> Span -> Bool)
-> (Span -> Span -> Bool)
-> (Span -> Span -> Span)
-> (Span -> Span -> Span)
-> Ord Span
Span -> Span -> Bool
Span -> Span -> Ordering
Span -> Span -> Span
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 :: Span -> Span -> Ordering
compare :: Span -> Span -> Ordering
$c< :: Span -> Span -> Bool
< :: Span -> Span -> Bool
$c<= :: Span -> Span -> Bool
<= :: Span -> Span -> Bool
$c> :: Span -> Span -> Bool
> :: Span -> Span -> Bool
$c>= :: Span -> Span -> Bool
>= :: Span -> Span -> Bool
$cmax :: Span -> Span -> Span
max :: Span -> Span -> Span
$cmin :: Span -> Span -> Span
min :: Span -> Span -> Span
Ord, (forall (m :: * -> *). Quote m => Span -> m Exp)
-> (forall (m :: * -> *). Quote m => Span -> Code m Span)
-> Lift Span
forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => Span -> m Exp
forall (m :: * -> *). Quote m => Span -> Code m Span
$clift :: forall (m :: * -> *). Quote m => Span -> m Exp
lift :: forall (m :: * -> *). Quote m => Span -> m Exp
$cliftTyped :: forall (m :: * -> *). Quote m => Span -> Code m Span
liftTyped :: forall (m :: * -> *). Quote m => Span -> Code m Span
Lift)