boots-0.0.3: src/Boots.hs
-- |
-- Module: Boots
-- Copyright: 2019 Daniel YU
-- License: BSD3
-- Maintainer: leptonyu@gmail.com
-- Stability: experimental
-- Portability: portable
--
-- Boot application by using plugins.
--
-- * Motivation
--
-- Simplify to create an application in Haskell.
--
-- When we decide to create an application using Haskell.
-- We may need using configurations, loggers as basic functions.
-- If this application needs storages, caches, etc.,
-- then we have to weaving the management of connection of these facilities into the application.
-- Connections need to be created before and be destroyed after using them.
-- There is a common strategy to manage connections, that is using `Control.Monad.Cont`.
-- Then we can encapsulate the management of connections separately.
-- For example, we can write a database plugin `Plugin` @cxt@ @m@ @DBConnection@,
-- which can manage the database connections in monad @m@ with context @cxt@.
-- Context @cxt@ may be requested for getting configurations or logging functions.
-- When all the components of application are encapsulated by plugins, then building an application will be simplified.
--
-- * Have a Try
--
-- >>> booting (pluginSimple "application") (logInfo "hello")
-- 2019-07-27 19:35:30 INFO [application] Ghci1 - hello
-- >>> booting (pluginSimple "application") (require "user" >>= logInfo)
-- 2019-07-27 19:37:45 INFO [application] Ghci2 - daniel
--
-- Main
--
-- > main :: IO ()
-- > main = bootApp (pluginSimple "application") go
-- > where
-- > go = forever $ do
-- > user <- require "user" -- Request for configuration.
-- > logInfo $ "Hello, " <> user <> "!" -- Request for logging.
-- > liftIO $ threadDelay 1000000
--
module Boots(
module Boots.Internal
, module Boots.Plugin.Simple
) where
import Boots.Internal
import Boots.Plugin.Simple