vhdl-0.1.1: Language/VHDL/Error.hs
-----------------------------------------------------------------------------
-- |
-- Module : Language.VHDL.Error
-- Copyright : (c) SAM Group, KTH/ICT/ECS 2007-2008
-- License : BSD-style (see the file LICENSE)
--
-- Maintainer : christiaan.baaij@gmail.com
-- Stability : experimental
-- Portability : portable
--
-- ForSyDe error-related types and functions.
--
-----------------------------------------------------------------------------
module Language.VHDL.Error
(VHDLErr(..),
EProne,
module Control.Monad.Error,
module Debug.Trace) where
import Debug.Trace
import Control.Monad.Error
-------------
-- VHDLErr
-------------
-- | All Errors thrown or displayed in ForSyDe
data VHDLErr =
-- Used in ForSyDe.Backend.VHDL.*
-- | Empty VHDL identifier
EmptyVHDLId |
-- | Incorrect Basic VHDL Identifier
IncVHDLBasId String |
-- | Incorrect Extended VHDL Identifier
IncVHDLExtId String |
-- | Other Errors
Other String
-- | Show errors
instance Show VHDLErr where
show EmptyVHDLId = "Empty VHDL identifier"
show (IncVHDLBasId id) = "Incorrect VHDL basic identifier " ++
"`" ++ id ++ "'"
show (IncVHDLExtId id) = "Incorrect VHDL extended identifier " ++
"`" ++ id ++ "'"
--------------
-- Error Monad
--------------
-- | We make CLasHErr an instance of the Error class to be able to throw it
-- as an exception.
instance Error VHDLErr where
noMsg = Other "An Error has ocurred"
strMsg = Other
-- | 'EProne' represents failure using Left CLasHErr or a successful
-- result of type a using Right a
--
-- 'EProne' is implicitly an instance of
-- ['MonadError'] (@Error e => MonadError e (Either e)@)
-- ['Monad'] (@Error e => Monad (Either e)@)
type EProne = Either VHDLErr
-- FIXME: Rethink Eprone so that it takes contexts in account