{-# LANGUAGE MultiParamTypeClasses #-} module Witch.TryFrom where import qualified Witch.TryFromException as TryFromException -- | This type class is for converting values from some @source@ type into -- some other @target@ type. The constraint @'TryFrom' source target@ means -- that you may be able to convert from a value of type @source@ into a value -- of type @target@, but that conversion may fail at runtime. -- -- This type class is for conversions that can sometimes fail. If your -- conversion always succeeds, consider implementing @From@ instead. class TryFrom source target where -- | This method implements the conversion of a value between types. At call -- sites you may want to use @tryInto@ instead. -- -- > -- Avoid this: -- > tryFrom (x :: s) -- > -- > -- Prefer this: -- > tryFrom @s -- -- Consider using @maybeTryFrom@ or @eitherTryFrom@ to implement this -- method. tryFrom :: source -> Either (TryFromException.TryFromException source target) target