packages feed

feature-flipper-0.1.0.0: examples/environment-config/Main.hs

module Main where

import Control.Monad.State
import qualified Data.Map.Strict as Map
import Data.Maybe (maybe)
import qualified System.Environment as Env

import Control.Flipper

main :: IO ()
main = do
    features <- loadFeatures

    -- StateT has a HasFeatureFlags instance defined
    evalStateT runWithFeatureFlags features

runWithFeatureFlags :: (MonadIO m, HasFeatureFlags m)
                    => m ()
runWithFeatureFlags = do
    whenEnabled
        "SOME_FEATURE"
        (liftIO $ putStrLn "We're running SOME_FEATURE!")

    whenEnabled
        "SOME_OTHER_FEATURE"
        (liftIO $ putStrLn "We're running SOME_OTHER_FEATURE!")

    liftIO $ putStrLn "Done!"

loadFeatures :: IO Features
loadFeatures = do
    -- load feature flags from the environment
    someFeatureEnabled <- maybe False read <$> Env.lookupEnv "SOME_FEATURE"
    someOtherFeatureEnabled <- maybe False read <$> Env.lookupEnv "SOME_OTHER_FEATURE"

    -- build flipper feature type
    pure . Features $ Map.fromList
        [ ("SOME_FEATURE", someFeatureEnabled)
        , ("SOME_OTHER_FEATURE", someOtherFeatureEnabled)
        ]