úÎ!¿     8Yet another error monad but for people who are not crazy(c) Erick Gonzalez, 2019BSD3erick@codemonkeylabs.deSafe &'=?@ACPX€failableA 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 conditionsfailable§trigger 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.failable!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.1.0-L9wU3iueD1QAb9tTGUFcUYControl.Monad.FailablePaths_failable HoistablehoistFailablefailurerecover 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