tv th-env: init at 1.0.0
This commit is contained in:
parent
2299f49864
commit
0cbb18c16e
10
tv/5pkgs/haskell/th-env/default.nix
Normal file
10
tv/5pkgs/haskell/th-env/default.nix
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{ mkDerivation, base, stdenv, template-haskell, text }:
|
||||||
|
mkDerivation {
|
||||||
|
pname = "th-env";
|
||||||
|
version = "1.0.0";
|
||||||
|
src = ./.;
|
||||||
|
libraryHaskellDepends = [ base template-haskell text ];
|
||||||
|
homepage = "https://stackoverflow.com/q/57635686";
|
||||||
|
license = "unknown";
|
||||||
|
hydraPlatforms = stdenv.lib.platforms.none;
|
||||||
|
}
|
49
tv/5pkgs/haskell/th-env/src/THEnv.hs
Normal file
49
tv/5pkgs/haskell/th-env/src/THEnv.hs
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{-# LANGUAGE TemplateHaskell #-}
|
||||||
|
module THEnv
|
||||||
|
(
|
||||||
|
-- * Compile-time configuration
|
||||||
|
lookupCompileEnv
|
||||||
|
, lookupCompileEnvExp
|
||||||
|
, getCompileEnv
|
||||||
|
, getCompileEnvExp
|
||||||
|
, fileAsString
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Control.Monad
|
||||||
|
import qualified Data.Text as T
|
||||||
|
import qualified Data.Text.IO as T
|
||||||
|
import Language.Haskell.TH
|
||||||
|
import Language.Haskell.TH.Syntax (Lift(..))
|
||||||
|
import System.Environment (getEnvironment)
|
||||||
|
|
||||||
|
-- Functions that work with compile-time configuration
|
||||||
|
|
||||||
|
-- | Looks up a compile-time environment variable.
|
||||||
|
lookupCompileEnv :: String -> Q (Maybe String)
|
||||||
|
lookupCompileEnv key = lookup key `liftM` runIO getEnvironment
|
||||||
|
|
||||||
|
-- | Looks up a compile-time environment variable. The result is a TH
|
||||||
|
-- expression of type @Maybe String@.
|
||||||
|
lookupCompileEnvExp :: String -> Q Exp
|
||||||
|
lookupCompileEnvExp = (`sigE` [t| Maybe String |]) . lift <=< lookupCompileEnv
|
||||||
|
-- We need to explicly type the result so that things like `print Nothing`
|
||||||
|
-- work.
|
||||||
|
|
||||||
|
-- | Looks up an compile-time environment variable and fail, if it's not
|
||||||
|
-- present.
|
||||||
|
getCompileEnv :: String -> Q String
|
||||||
|
getCompileEnv key =
|
||||||
|
lookupCompileEnv key >>=
|
||||||
|
maybe (fail $ "Environment variable " ++ key ++ " not defined") return
|
||||||
|
|
||||||
|
-- | Looks up an compile-time environment variable and fail, if it's not
|
||||||
|
-- present. The result is a TH expression of type @String@.
|
||||||
|
getCompileEnvExp :: String -> Q Exp
|
||||||
|
getCompileEnvExp = lift <=< getCompileEnv
|
||||||
|
|
||||||
|
-- | Loads the content of a file as a string constant expression.
|
||||||
|
-- The given path is relative to the source directory.
|
||||||
|
fileAsString :: FilePath -> Q Exp
|
||||||
|
fileAsString = do
|
||||||
|
-- addDependentFile path -- works only with template-haskell >= 2.7
|
||||||
|
stringE . T.unpack . T.strip <=< runIO . T.readFile
|
20
tv/5pkgs/haskell/th-env/th-env.cabal
Normal file
20
tv/5pkgs/haskell/th-env/th-env.cabal
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
name: th-env
|
||||||
|
version: 1.0.0
|
||||||
|
-- license: https://creativecommons.org/licenses/by-sa/4.0/
|
||||||
|
license: OtherLicense
|
||||||
|
author: https://stackoverflow.com/users/9348482
|
||||||
|
homepage: https://stackoverflow.com/q/57635686
|
||||||
|
maintainer: tv <tv@krebsco.de>
|
||||||
|
build-type: Simple
|
||||||
|
cabal-version: >=1.10
|
||||||
|
|
||||||
|
library
|
||||||
|
hs-source-dirs: src
|
||||||
|
build-depends:
|
||||||
|
base,
|
||||||
|
template-haskell,
|
||||||
|
text
|
||||||
|
exposed-modules:
|
||||||
|
THEnv
|
||||||
|
default-language: Haskell2010
|
||||||
|
ghc-options: -O2 -Wall
|
Loading…
Reference in New Issue
Block a user