toml-parser-0.1.0.0: src/TOML/Located.hs
{-# Language DeriveTraversable #-}
{-|
Module : TOML.Located
Description : /Internal:/ Wrapper for tracking text-file location of things
Copyright : (c) Eric Mertens, 2017
License : ISC
Maintainer : emertens@gmail.com
-}
module TOML.Located where
-- | A position in a text file
data Position = Position
{ posIndex :: {-# UNPACK #-} !Int -- ^ zero-based character index
, posLine :: {-# UNPACK #-} !Int -- ^ one-based line number
, posColumn :: {-# UNPACK #-} !Int -- ^ one-based column number
}
deriving (Read, Show)
-- | A value annotated with its text file position
data Located a = Located
{ locPosition :: {-# UNPACK #-} !Position -- ^ position information
, locThing :: !a -- ^ annotated value
}
deriving (Read, Show, Functor, Foldable, Traversable)
-- | The initial 'Position' for the start of a file
startPos :: Position
startPos = Position { posIndex = 0, posLine = 1, posColumn = 1 }