-- | Like the spoon package, but for catching one specific exception -- type and returning it. module Control.Spork ( spork ) where import Control.Exception import System.IO.Unsafe -- | Evaluate `a` and return left if it throws a pure exception. spork :: Exception e => a -> Either e a spork a = unsafePerformIO $ (Right `fmap` evaluate a) `catches` [Handler (\e -> pure (Left e))] {-# INLINEABLE spork #-}