acme-safe-0.1.0.0: Acme/Safe.hs
module Acme.Safe where
import Acme.Dont
-- | Safely extract a value from a Just
safeFromJust :: Maybe a -> Maybe a
safeFromJust Nothing = Nothing
safeFromJust (Just x) = Just x
-- | Safely extract a value from a Left
safeFromLeft :: Either a b -> Either a b
safeFromLeft (Left x) = Left x
safeFromLeft (Right x) = Right x
-- | Safely doesn't perform IO with the help of acme-dont. Side-effects-free!
safePerformIO :: IO a -> Maybe (IO ())
safePerformIO = Just . don't
--safePerformIO launchMissiles = Nothing --ready for the upcoming function-pattern-matching
-- | Doesn't print the provided debug string. But it's 100% safe!
safeTrace :: String -> a -> Maybe (IO ())
safeTrace s x = safePerformIO $ do
putStrLn s
return x
-- | Safely converts a value from any type to any other type.
safeCoerce :: a -> Maybe b
safeCoerce _ = Nothing