{- |

Error handling for FSMs.

-}

-- Copyright (c) 2009 Andy Gimblett - http://www.cs.swan.ac.uk/~csandy/
-- BSD Licence (see http://www.opensource.org/licenses/bsd-license.php)

module Data.FsmActions.Error (
  MxError(..),
  ReadMxMonad
) where

import Control.Monad.Error

-- | Errors when reading matrices from strings.
data MxError = MxError { 
      -- | Explanatory message
      msg :: String,
      -- | Offending value
      value :: String
    } deriving (Eq)

instance Error MxError where
    noMsg    = MxError "Matrix error" ""
    strMsg s = MxError s ""

instance Show MxError where
    show (MxError message val) = message ++ " (" ++ val ++ ")"

-- | Error monad for reading matrices from strings.
type ReadMxMonad = Either MxError