module Language.Ginger.SourcePosition
where

import Data.Text (Text)
import qualified Data.Text as Text

data SourcePosition =
  SourcePosition
    { SourcePosition -> Text
sourceFile :: !Text
    , SourcePosition -> Int
sourceLine :: !Int
    , SourcePosition -> Int
sourceColumn :: !Int
    }
    deriving (Int -> SourcePosition -> ShowS
[SourcePosition] -> ShowS
SourcePosition -> String
(Int -> SourcePosition -> ShowS)
-> (SourcePosition -> String)
-> ([SourcePosition] -> ShowS)
-> Show SourcePosition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SourcePosition -> ShowS
showsPrec :: Int -> SourcePosition -> ShowS
$cshow :: SourcePosition -> String
show :: SourcePosition -> String
$cshowList :: [SourcePosition] -> ShowS
showList :: [SourcePosition] -> ShowS
Show, SourcePosition -> SourcePosition -> Bool
(SourcePosition -> SourcePosition -> Bool)
-> (SourcePosition -> SourcePosition -> Bool) -> Eq SourcePosition
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SourcePosition -> SourcePosition -> Bool
== :: SourcePosition -> SourcePosition -> Bool
$c/= :: SourcePosition -> SourcePosition -> Bool
/= :: SourcePosition -> SourcePosition -> Bool
Eq, Eq SourcePosition
Eq SourcePosition =>
(SourcePosition -> SourcePosition -> Ordering)
-> (SourcePosition -> SourcePosition -> Bool)
-> (SourcePosition -> SourcePosition -> Bool)
-> (SourcePosition -> SourcePosition -> Bool)
-> (SourcePosition -> SourcePosition -> Bool)
-> (SourcePosition -> SourcePosition -> SourcePosition)
-> (SourcePosition -> SourcePosition -> SourcePosition)
-> Ord SourcePosition
SourcePosition -> SourcePosition -> Bool
SourcePosition -> SourcePosition -> Ordering
SourcePosition -> SourcePosition -> SourcePosition
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 :: SourcePosition -> SourcePosition -> Ordering
compare :: SourcePosition -> SourcePosition -> Ordering
$c< :: SourcePosition -> SourcePosition -> Bool
< :: SourcePosition -> SourcePosition -> Bool
$c<= :: SourcePosition -> SourcePosition -> Bool
<= :: SourcePosition -> SourcePosition -> Bool
$c> :: SourcePosition -> SourcePosition -> Bool
> :: SourcePosition -> SourcePosition -> Bool
$c>= :: SourcePosition -> SourcePosition -> Bool
>= :: SourcePosition -> SourcePosition -> Bool
$cmax :: SourcePosition -> SourcePosition -> SourcePosition
max :: SourcePosition -> SourcePosition -> SourcePosition
$cmin :: SourcePosition -> SourcePosition -> SourcePosition
min :: SourcePosition -> SourcePosition -> SourcePosition
Ord)

prettySourcePosition :: SourcePosition -> String
prettySourcePosition :: SourcePosition -> String
prettySourcePosition SourcePosition
s =
  Text -> String
Text.unpack (SourcePosition -> Text
sourceFile SourcePosition
s) String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
":" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show (SourcePosition -> Int
sourceLine SourcePosition
s) String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
":" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show (SourcePosition -> Int
sourceColumn SourcePosition
s)