packages feed

trifecta-0.12: Text/Trifecta/Parser/Err/State.hs

module Text.Trifecta.Parser.Err.State 
  ( ErrState(..)
  ) where

import Data.Functor.Plus
import Data.Set as Set
import Data.Sequence as Seq
import Data.Semigroup
import Data.Monoid
import Text.Trifecta.Parser.Err
import Text.Trifecta.Diagnostic

data ErrState e = ErrState
 { errExpected :: !(Set String)
 , errMessage  :: !(Err e)
 , errLog      :: !(Seq (Diagnostic e))
 }

instance Functor ErrState where
  fmap f (ErrState a b c) = ErrState a (fmap f b) (fmap (fmap f) c)

instance Alt ErrState where
  ErrState a b c <!> ErrState a' b' c' = ErrState (a <> a') (b <!> b') (c <!> c')
  {-# INLINE (<!>) #-}

instance Plus ErrState where
  zero = ErrState mempty zero zero
 
instance Semigroup (ErrState e) where
  (<>) = (<!>) 

instance Monoid (ErrState e) where
  mempty = zero
  mappend = (<!>)