trifecta-0.1: Text/Trifecta/Cursor.hs
module Text.Trifecta.Cursor
( Cursor(..)
) where
import Data.Hashable
import Data.Monoid
import Data.Sequence
import Data.Interned
import Data.Semigroup
import Data.Foldable
import Text.Trifecta.Delta
data Cursor = Cursor
{ cursorBytes :: {-# UNPACK #-} !Int
, cursorDelta :: !Delta
, cursorSeqHash :: {-# UNPACK #-} !Int
, cursorSeq :: !(Seq Id)
} deriving Show
instance Eq Cursor where
Cursor _ _ h k == Cursor _ _ h' k' = h == h' && k == k'
instance Hashable Cursor where
hash (Cursor _ _ _ s) = hash (toList s)
instance Monoid Cursor where
mempty = Cursor 0 mempty 0 mempty
Cursor s d l q `mappend` Cursor s' d' l' q' = Cursor (s + s') (d <> d') (l + l') (q <> q')
instance Semigroup Cursor where
Cursor s d l q <> Cursor s' d' l' q' = Cursor (s + s') (d <> d') (l + l') (q <> q')