{-# LANGUAGE Safe #-} module Text.Gigaparsec.Position (Pos, line, col, pos, offset, withWidth) where import Text.Gigaparsec.Internal (Parsec) import Text.Gigaparsec.Internal qualified as Internal (Parsec(Parsec), line, col, consumed) import Control.Applicative (liftA2, liftA3) type Pos :: * type Pos = (Word, Word) line :: Parsec Word line :: Parsec Word line = (forall r. State -> (Word -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec Word forall a. (forall r. State -> (a -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec a Internal.Parsec ((forall r. State -> (Word -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec Word) -> (forall r. State -> (Word -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec Word forall a b. (a -> b) -> a -> b $ \State st Word -> State -> RT r good Error -> State -> RT r _ -> Word -> State -> RT r good (State -> Word Internal.line State st) State st col :: Parsec Word col :: Parsec Word col = (forall r. State -> (Word -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec Word forall a. (forall r. State -> (a -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec a Internal.Parsec ((forall r. State -> (Word -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec Word) -> (forall r. State -> (Word -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec Word forall a b. (a -> b) -> a -> b $ \State st Word -> State -> RT r good Error -> State -> RT r _ -> Word -> State -> RT r good (State -> Word Internal.col State st) State st offset :: Parsec Word offset :: Parsec Word offset = (forall r. State -> (Word -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec Word forall a. (forall r. State -> (a -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec a Internal.Parsec ((forall r. State -> (Word -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec Word) -> (forall r. State -> (Word -> State -> RT r) -> (Error -> State -> RT r) -> RT r) -> Parsec Word forall a b. (a -> b) -> a -> b $ \State st Word -> State -> RT r good Error -> State -> RT r _ -> Word -> State -> RT r good (State -> Word Internal.consumed State st) State st pos :: Parsec Pos pos :: Parsec Pos pos = (Word -> Word -> Pos) -> Parsec Word -> Parsec Word -> Parsec Pos forall a b c. (a -> b -> c) -> Parsec a -> Parsec b -> Parsec c forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 (,) Parsec Word line Parsec Word col withWidth :: Parsec a -> Parsec (a, Word) withWidth :: forall a. Parsec a -> Parsec (a, Word) withWidth Parsec a p = (Word -> a -> Word -> (a, Word)) -> Parsec Word -> Parsec a -> Parsec Word -> Parsec (a, Word) forall (f :: * -> *) a b c d. Applicative f => (a -> b -> c -> d) -> f a -> f b -> f c -> f d liftA3 (\Word s a x Word e -> (a x, Word eWord -> Word -> Word forall a. Num a => a -> a -> a -Word s)) Parsec Word offset Parsec a p Parsec Word offset