hid-examples-0.2: reader.hs
{-# LANGUAGE NamedFieldPuns #-}
import Control.Monad.Reader
data Config = Config {
flag1 :: Bool,
flag2 :: Bool
-- ...
}
type ConfigM = Reader Config
main = do
let c = Config True False
pure $ runReader work c
print "OK"
work :: ConfigM ()
work = do
-- ...
f1
-- ...
f1 :: ConfigM ()
f1 = do
-- ...
f11
-- ...
f11 :: ConfigM ()
f11 = do
-- ...
c <- ask
-- ...
pure ()
nc = \c @ Config {flag1} -> c {flag1 = not flag1}
nc2 = \c -> c {flag1 = False}