packages feed

lex-applicative-0.0.0.0: src/Data/TextPos.hs

{-# LANGUAGE StrictData #-}
module Data.TextPos where

data Pos = Pos
  { char :: Word
  , line :: Word
  , col  :: Word
  } deriving (Eq, Ord, Read, Show)

move :: Char -> Pos -> Pos
move x = \ (Pos k m n) -> Pos (k+1) `uncurry` case x of
    '\n' -> (m+1, 0)
    '\r' -> (m,   0)
    '\b' -> (m, case n of 0 -> 0; _ -> n-1)
    _    -> (m, n+1)