{-# LANGUAGE TemplateHaskell, DeriveDataTypeable, ExistentialQuantification #-}
import Control.Exception
import Data.Typeable
import Control.Exception.Hierarchy
newtype GhostError = GhostError String deriving (Typeable, Show)
newtype MyException = MyException String deriving (Typeable, Show)
newtype ManError = ManError String deriving (Typeable, Show)
newtype WomanError = WomanError String deriving (Typeable, Show)
newtype WolfmanError = WolfmanError String deriving (Typeable, Show)
newtype MermaidError = MermaidError String deriving (Typeable, Show)
exceptionHierarchy Nothing (ExType ''MyException)
exceptionHierarchy Nothing (
ExNode "HumanError" [
ExType ''ManError,
ExNode "DemihumanError" [],
ExNode "NomanError" [
ExType ''GhostError ] ] )
exceptionHierarchy (Just ''HumanError) (ExType ''WomanError)
exceptionHierarchy (Just ''DemihumanError) (ExType ''WolfmanError)
instance Exception MermaidError where
toException = demihumanErrorToException
fromException = demihumanErrorFromException