witch/source/library/Witch/TryFromException.hs
2022-09-08 13:55:50 +00:00

43 lines
1.3 KiB
Haskell

{-# LANGUAGE ScopedTypeVariables #-}
module Witch.TryFromException where
import qualified Control.Exception as Exception
import qualified Data.Proxy as Proxy
import qualified Data.Typeable as Typeable
-- | This exception is thrown when a @TryFrom@ conversion fails. It has the
-- original @source@ value that caused the failure and it knows the @target@
-- type it was trying to convert into. It also has an optional
-- 'Exception.SomeException' for communicating what went wrong while
-- converting.
data TryFromException source target
= TryFromException
source
(Maybe Exception.SomeException)
instance
( Show source,
Typeable.Typeable source,
Typeable.Typeable target
) =>
Show (TryFromException source target)
where
showsPrec d (TryFromException x e) =
showParen (d > 10) $
showString "TryFromException @"
. showsPrec 11 (Typeable.typeRep (Proxy.Proxy :: Proxy.Proxy source))
. showString " @"
. showsPrec 11 (Typeable.typeRep (Proxy.Proxy :: Proxy.Proxy target))
. showChar ' '
. showsPrec 11 x
. showChar ' '
. showsPrec 11 e
instance
( Show source,
Typeable.Typeable source,
Typeable.Typeable target
) =>
Exception.Exception (TryFromException source target)