!v     8Yet another error monad but for people who are not crazy(c) Erick Gonzalez, 2019BSD3erick@codemonkeylabs.deSafe &'=?@ACPfailableA C is a type that can be "promoted" or "hoisted" to a Failable monad.failableAGiven a transformation function to obtain an error in the target c context from an eventual errored value from the value being hoisted, It promotes such value to a  operation. For example: Ifoo :: (Failable m) => String -> m Int foo = hoist BadValue . readEither > runExceptT $ foo "5"Right 5 > foo "X5"0*** Exception: BadValue "Prelude.read: no parse"> runMaybeT $ foo "X5"NothingfailableThe  class. A Monad which is an instance of this class can be used as a context in a function running in one with this class constraint, in order to report error conditionsfailabletrigger a failure. It takes an exception value as argument and it returns whatever might be used to abort a monadic computation in the monad instantiating this class.failable9recover from a possible failure. Basically a generalized catch for a Failable.failableUtility function to capture the idiom `hoist id` .. which is used to promote a type to a failable without requiring any error transformationfailable!Perform a set of IO actions in a   instance, triggering a  upon an IO exception, instead of blindly triggering an asynchronos exception. This serves ultimately to unify error handling in the  context. For example: qfoo :: (Failable m, MonadIO m) => m () foo = do failableIO $ do txt <- readFile "foo.txt" putStrLn txt > runExceptT fooBLeft foo.txt: openFile: does not exist (No such file or directory)> runMaybeT fooNothing> fooL*** Exception: foo.txt: openFile: does not exist (No such file or directory)  Safe{ !      !"#$%&'failable-1.2.3.0-CJguXh3F12ZIYGTrhfXnXwControl.Monad.FailablePaths_failableRunnableStateTrunS HoistablehoistFailablefailurerecover autohoist failableIO $fException()$fFailableReaderT$fFailableWriterT$fFailableExceptT$fFailableMaybeT$fFailableEither$fFailableMaybe $fFailable[] $fFailableIO$fHoistablemEithere'$fHoistablemMaybe() $fFailablet$fRunnableStateTWriterTwm$fRunnableStateTReaderTrm$fRunnableStateTStateTsmbaseControl.Monad.IO.ClassMonadIOversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName