cabal-version: 2.0 name: io-effects synopsis: Taming the IO monad description: Welcome to @io-effects@, a light-weight yet high performance effect library with the aim of /taming the 'IO' monad/. The 'IO' monad is the workhorse of any Haskell program - the entry point of our program is @main :: IO ()@, and there is no way to "leave" @IO@ once you're there. However, the @IO@ monad has a huge amount of power - it can open files, perform network requests, and - as they saying goes - launch the missiles. All of these are important functions, but as our programs grow it becomes increasingly difficult to reason about /what/ IO is being performed. For example, asking the question "does this program access my database?" is a difficult question to answer - with only @IO@, we have no option other than reading all of the source code. . Enter @io-effects@. Programs written using @io-effects@ are just like the 'IO' programs we're familiar with, but exactly what IO is being performed is explicitly described in the types of our programs. A program that has access to a database may have a type such as @Member Database es => Program es a@. In fact, if @es@ is truly polymorphic, this program can do nothing /but/ access a database. These constraints can be combined as well, so a program with the type @( Member Database es, Member HTTP es ) => Program es a@ is a program that may access a database or may make HTTP requests. . For more information, see the main "IO.Effects" module, which contains a brief demonstration. license: BSD3 license-file: LICENSE version: 0.1.0 build-type: Simple maintainer: Ollie Charles category: Control library default-language: Haskell2010 exposed-modules: IO.Effects IO.Effects.Exception IO.Effects.Internal IO.Effects.IORef IO.Effects.Lift -- IO.Effects.Base -- IO.Effects.Exception -- IO.Effects.Internal.Effect -- IO.Effects.Internal.EFFECT -- IO.Effects.Internal.Effects -- IO.Effects.Internal.Member -- IO.Effects.Internal.Program -- IO.Effects.IORefs hs-source-dirs: lib ghc-options: -Wall build-depends: base ^>= 4.11.0.0 || ^>= 4.12.0.0