content: -- File generated by the BNF Converter (bnfc 2.9.6).
  
  {-# LANGUAGE CPP #-}
  
  -- | BNF Converter: Error Monad.
  --
  -- Module for backwards compatibility.
  --
  -- The generated parser now uses @'Either' String@ as error monad.
  -- This module defines a type synonym 'Err' and pattern synonyms
  -- 'Bad' and 'Ok' for 'Left' and 'Right'.
  
  {-# LANGUAGE PatternSynonyms #-}
  {-# LANGUAGE FlexibleInstances #-}
  
  module BNFC.ErrM where
  
  import Prelude             (id, const, Either(..), String)
  
  import Control.Monad       (MonadPlus(..))
  import Control.Applicative (Alternative(..))
  #if __GLASGOW_HASKELL__ >= 808
  import Control.Monad       (MonadFail(..))
  #endif
  
  -- | Error monad with 'String' error messages.
  type Err = Either String
  
  pattern Bad msg = Left msg
  pattern Ok  a   = Right a
  
  #if __GLASGOW_HASKELL__ >= 808
  instance MonadFail Err where
    fail = Bad
  #endif
  
  instance Alternative Err where
    empty           = Left "Err.empty"
    (<|>) Left{}    = id
    (<|>) x@Right{} = const x
  
  instance MonadPlus Err where
    mzero = empty
    mplus = (<|>)
  