{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE DerivingVia #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE OverloadedStrings #-} import Barbies.TH import Data.Proxy import Panfiguration passthroughBareB [d| data Bind = Bind { host :: String, port :: Int } data ServerArgs = ServerArgs { http :: Bind , enable_service_log :: Bool , environment :: String , extensions :: Collect String } |] deriving instance Show Bind deriving instance Show ServerArgs getServerArgs :: IO ServerArgs getServerArgs = run $ mconcat [ logger putStrLn , declCase snake , opts `asCase` kebab , envs , defaults ServerArgs { http = Bind (Just "0.0.0.0") (Just 8080) , enable_service_log = Just True , environment = Nothing , extensions = Just $ Collect [] } ] main :: IO () main = getServerArgs >>= print _unused :: () _unused = Proxy @BindH `seq` Proxy @ServerArgsH `seq` ()