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 a new issue