1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
module Config where
import Data.Text (Text)
import qualified Data.Yaml as Y
import Data.Yaml (FromJSON(..), (.:))
import Text.RawString.QQ
import Data.ByteString (ByteString)
import Control.Applicative
import Prelude -- Ensure Applicative is in scope and we have no warnings, before/after AMP.
configYaml :: ByteString
configYaml = [r|
resolver: lts-3.7
packages:
- ./yesod-core
- ./yesod-static
- ./yesod-persistent
- ./yesod-newsfeed
- ./yesod-form
- ./yesod-auth
- ./yesod-auth-oauth
- ./yesod-sitemap
- ./yesod-test
- ./yesod-bin
- ./yesod
- ./yesod-eventsource
- ./yesod-websockets
# Needed for LTS 2
extra-deps:
- wai-app-static-3.1.4.1
|]
data Config =
Config {
resolver :: Text
, packages :: [FilePath]
, extraDeps :: [Text]
} deriving (Eq, Show)
instance FromJSON Config where
parseJSON (Y.Object v) =
Config <$>
v .: "resolver" <*>
v .: "packages" <*>
v .: "extra-deps"
parseJSON _ = fail "Expected Object for Config value"
main :: IO ()
main = do
config <- Y.decodeThrow configYaml
print (config :: Config)
|