git.iko.soy/typeable/stackage2nix
on 596bf03 help sign in
63 lines 1.3 kB history raw
1{-# LANGUAGE TemplateHaskell #-}
2{-# LANGUAGE OverloadedStrings #-}
4module Stack.Config.Yaml where
6import Control.Applicative
7import Control.Lens
8import Data.Aeson
9import Data.Text as T
11data Location a = Location
12 { _lLocation :: a
13 , _lExtraDep :: Maybe Bool
14 } deriving (Eq, Show)
16makeLenses ''Location
18instance FromJSON a => FromJSON (Location a) where
19 parseJSON = withObject "Location" $ \v ->
20 Location <$>
21 v .: "location" <*>
22 v .:? "extra-dep"
24data Git = Git
25 { _gGit :: Text
26 , _gCommit :: Text
27 } deriving (Eq, Show)
29makeLenses ''Git
31instance FromJSON Git where
32 parseJSON = withObject "Git" $ \v ->
33 Git <$>
34 v .: "git" <*>
35 v .: "commit"
37data Package
38 = Simple Text
39 | LocationSimple (Location Text)
40 | LocationGit (Location Git)
41 deriving (Eq, Show)
42makePrisms ''Package
44instance FromJSON Package where
45 parseJSON v =
46 (Simple <$> parseJSON v) <|>
47 (LocationSimple <$> parseJSON v) <|>
48 (LocationGit <$> parseJSON v)
50data Config = Config
51 { _cResolver :: Text
52 , _cPackages :: [Package]
53 , _cExtraDeps :: [Text]
54 } deriving (Eq, Show)
56makeLenses ''Config
58instance FromJSON Config where
59 parseJSON = withObject "Config" $ \v ->
60 Config <$>
61 v .: "resolver" <*>
62 v .: "packages" <*>
63 v .: "extra-deps"