{-# LANGUAGE DeriveGeneric #-} module Distribution.Parsec.Position ( Position (..), incPos, retPos, showPos, zeroPos, positionCol, positionRow, ) where import Distribution.Compat.Prelude import Prelude () -- | 1-indexed row and column positions in a file. data Position = Position {-# UNPACK #-} !Int -- row {-# UNPACK #-} !Int -- column deriving (Eq, Ord, Show, Generic) instance Binary Position instance NFData Position where rnf = genericRnf -- | Shift position by n columns to the right. incPos :: Int -> Position -> Position incPos n (Position row col) = Position row (col + n) -- | Shift position to beginning of next row. retPos :: Position -> Position retPos (Position row _col) = Position (row + 1) 1 showPos :: Position -> String showPos (Position row col) = show row ++ ":" ++ show col zeroPos :: Position zeroPos = Position 0 0 -- | @since 3.0.0.0 positionCol :: Position -> Int positionCol (Position _ c) = c -- | @since 3.0.0.0 positionRow :: Position -> Int positionRow (Position r _) = r