module Control.LensFunction.Exception
(
SomeLensFunctionException(..),
NoLUBException(..),
ChangedObservationException(..),
ShapeMismatchException(..),
ConstantUpdateException(..)
) where
import Control.Exception
import Data.Typeable (cast, Typeable)
data SomeLensFunctionException
= forall e. Exception e => SomeLensFunctionException e
deriving Typeable
instance Show SomeLensFunctionException where
show (SomeLensFunctionException e) = show e
instance Exception SomeLensFunctionException
lfToException :: Exception e => e -> SomeException
lfToException = toException . SomeLensFunctionException
lfFromException :: Exception e => SomeException -> Maybe e
lfFromException x = do
SomeLensFunctionException a <- fromException x
cast a
data NoLUBException = NoLUBException String deriving (Typeable)
instance Show NoLUBException where
show (NoLUBException s) = s ++ ": No LUB"
instance Exception NoLUBException where
toException = lfToException
fromException = lfFromException
data ChangedObservationException
= ChangedObservationException String
deriving Typeable
instance Show ChangedObservationException where
show (ChangedObservationException s) = s ++ ": Changed Observation"
instance Exception ChangedObservationException where
toException = lfToException
fromException = lfFromException
data ShapeMismatchException = ShapeMismatchException String
deriving Typeable
instance Show ShapeMismatchException where
show (ShapeMismatchException s) = s ++ ": Shape Mismatch"
instance Exception ShapeMismatchException where
toException = lfToException
fromException = lfFromException
data ConstantUpdateException = ConstantUpdateException String
deriving Typeable
instance Show ConstantUpdateException where
show (ConstantUpdateException s) = s ++ ": Update on Constant"
instance Exception ConstantUpdateException where
toException = lfToException
fromException = lfFromException