on master help sign in
Add Data.Yaml.TH
9f9a651Mitchell Rosen
Data/Yaml/TH.hsnew file+39
@@ -0,0 +1,39 @@
1+{-# LANGUAGE LambdaCase #-}
2+{-# LANGUAGE ScopedTypeVariables #-}
3+{-# LANGUAGE TemplateHaskell #-}
4+
5+module Data.Yaml.TH
6+ ( -- * Decoding
7+ decodeFile
8+ -- * Re-exports from "Data.Yaml"
9+ , Value (..)
10+ , Parser
11+ , Object
12+ , Array
13+ , object
14+ , array
15+ , (.=)
16+ , (.:)
17+ , (.:?)
18+ , (.!=)
19+ , FromJSON (..)
20+ ) where
21+
22+import Data.Yaml hiding (decodeFile)
23+import Language.Haskell.TH
24+import Language.Haskell.TH.Syntax
25+
26+-- | Decode a @yaml@ file at compile time.
27+--
28+-- @
29+-- {-# LANGUAGE TemplateHaskell #-}
30+--
31+-- config :: Config
32+-- config = $$('decodeFile' "config.yaml")
33+-- @
34+decodeFile :: forall a. (Lift a, FromJSON a) => FilePath -> Q (TExp a)
35+decodeFile path = do
36+ addDependentFile path
37+ runIO (decodeFileEither path) >>= \case
38+ Left err -> fail (prettyPrintParseException err)
39+ Right x -> TExp <$> lift (x :: a)
yaml.cabal+4−2
@@ -59,14 +59,16 @@ library
59 , directory
59 , directory
60 , enclosed-exceptions
60 , enclosed-exceptions
61 , semigroups
61 , semigroups
62+ , template-haskell
62 exposed-modules: Text.Libyaml
63 exposed-modules: Text.Libyaml
63 Data.Yaml
64 Data.Yaml
64 Data.Yaml.Aeson
65 Data.Yaml.Aeson
65 Data.Yaml.Builder
66 Data.Yaml.Builder
66 Data.Yaml.Config
67 Data.Yaml.Config
67− Data.Yaml.Pretty
68− Data.Yaml.Parser
69 Data.Yaml.Include
68 Data.Yaml.Include
69+ Data.Yaml.Parser
70+ Data.Yaml.Pretty
71+ Data.Yaml.TH
70 other-modules:
72 other-modules:
71 Data.Yaml.Internal
73 Data.Yaml.Internal
72 ghc-options: -Wall
74 ghc-options: -Wall