packages feed

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}