packages feed

mmzk-env-0.2.0.0: app/WitnessExample.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}

module Main where

import Data.Env.RecordParserW
import Data.Env.Witness.DefaultNum
import qualified Data.Map as M
import Data.Word
import GHC.Generics
import Data.Env.TypeParserW

data Config c = Config
  { psqlPort :: Column c (DefaultNum 5432 Word16) Word16  -- Defaults to 5432
  , dbName   :: Column c (Solo String) String }
  deriving (Generic)

deriving stock instance Show (Config 'Res)  -- For printing the result

-- Parse with defaults
main :: IO ()
main = do
  -- Example 1: Empty environment (uses defaults)
  let emptyEnv = M.empty
  case parseRecordW @(Config 'Dec) emptyEnv of
    Left err  -> putStrLn $ "Parse failed: " ++ err
    Right cfg -> putStrLn $ "Config with defaults: " ++ show cfg

  -- Example 2: Custom values
  let customEnv = M.fromList [("psqlPort", "8080"), ("dbName", "mydb")]
  case parseRecordW @(Config 'Dec) customEnv of
    Left err  -> putStrLn $ "Parse failed: " ++ err
    Right cfg -> putStrLn $ "Config with custom values: " ++ show cfg