packages feed

th-env-0.1.0.3: src/Language/Haskell/TH/Env.hs

{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}

module Language.Haskell.TH.Env (envQ)

where

import Data.String
import Language.Haskell.TH
import Language.Haskell.TH.Syntax.Compat
import System.Environment

-- | Produce a typed expression with the current value of an
-- environment variable.
envQ :: IsString a
     => String
     -- ^ Environment variable name.
     -> SpliceQ (Maybe a)
envQ name = liftSplice $
  runIO (lookupEnv name) >>= \case
    Just v  -> fromCode $ toCode [|| Just (fromString v) ||]
    Nothing -> fromCode $ toCode [|| Nothing ||]