module Record.Syntax.Position where
import Record.Syntax.Prelude
import qualified Text.Parsec as Parsec
import qualified Language.Haskell.Exts as SrcExts
type Position =
(Int, Int)
subtract :: Position -> Position -> Position
subtract (l1, c1) (l2, c2) =
if l1 <= l2
then (,) (l2 l1) c2
else (,) 0 (max (c2 c1) 0)
add :: Position -> Position -> Position
add (l1, c1) (l2, c2) =
if l2 <= 0
then (,) (l1 + l2) (c1 + c2)
else (,) (l1 + l2) c2
zero :: Position
zero =
(0, 0)
fromParsec :: Parsec.SourcePos -> Position
fromParsec p =
(,) (pred $ fromIntegral $ Parsec.sourceLine p) (pred $ fromIntegral $ Parsec.sourceColumn p)
fromSrcExts :: SrcExts.SrcLoc -> Position
fromSrcExts (SrcExts.SrcLoc _ l c) =
(,) (fromIntegral l) (fromIntegral c)