Switch from Monoid to Semigroup
This commit is contained in:
parent
65baf35d0c
commit
11ae185c83
@ -21,6 +21,8 @@ module Yesod.Default.Config2
|
|||||||
) where
|
) where
|
||||||
|
|
||||||
import Data.Monoid
|
import Data.Monoid
|
||||||
|
import Data.Semigroup
|
||||||
|
import Data.List.NonEmpty (nonEmpty)
|
||||||
import Data.Aeson
|
import Data.Aeson
|
||||||
import qualified Data.HashMap.Strict as H
|
import qualified Data.HashMap.Strict as H
|
||||||
import Data.Text (Text, pack)
|
import Data.Text (Text, pack)
|
||||||
@ -49,14 +51,12 @@ import System.Posix.Signals (installHandler, sigINT, Handler(Catch))
|
|||||||
|
|
||||||
newtype MergedValue = MergedValue { getMergedValue :: Value }
|
newtype MergedValue = MergedValue { getMergedValue :: Value }
|
||||||
|
|
||||||
instance Monoid MergedValue where
|
instance Semigroup MergedValue where
|
||||||
mempty = MergedValue $ Object H.empty
|
MergedValue x <> MergedValue y = MergedValue $ mergeValues x y
|
||||||
MergedValue x `mappend` MergedValue y = MergedValue $ mergeValues x y
|
|
||||||
|
|
||||||
-- | Left biased
|
-- | Left biased
|
||||||
mergeValues :: Value -> Value -> Value
|
mergeValues :: Value -> Value -> Value
|
||||||
mergeValues (Object x) (Object y) = Object $ H.unionWith mergeValues x y
|
mergeValues (Object x) (Object y) = Object $ H.unionWith mergeValues x y
|
||||||
mergeValues (Object x) y | H.null x = y
|
|
||||||
mergeValues x _ = x
|
mergeValues x _ = x
|
||||||
|
|
||||||
applyEnv :: Bool -- ^ require an environment variable to be present?
|
applyEnv :: Bool -- ^ require an environment variable to be present?
|
||||||
@ -119,13 +119,14 @@ loadAppSettings runTimeFiles compileValues envUsage = do
|
|||||||
eres <- Y.decodeFileEither fp
|
eres <- Y.decodeFileEither fp
|
||||||
case eres of
|
case eres of
|
||||||
Left e -> do
|
Left e -> do
|
||||||
putStrLn $ "Could not parse file as YAML: " ++ fp
|
putStrLn $ "loadAppSettings: Could not parse file as YAML: " ++ fp
|
||||||
throwIO e
|
throwIO e
|
||||||
Right value -> return value
|
Right value -> return value
|
||||||
let value' = getMergedValue
|
|
||||||
$ mconcat
|
value' <-
|
||||||
$ map MergedValue
|
case nonEmpty $ map MergedValue $ runValues ++ compileValues of
|
||||||
$ runValues ++ compileValues
|
Nothing -> error "loadAppSettings: No configuration provided"
|
||||||
|
Just ne -> return $ getMergedValue $ sconcat ne
|
||||||
value <-
|
value <-
|
||||||
case envUsage of
|
case envUsage of
|
||||||
IgnoreEnv -> return $ applyEnv False mempty value'
|
IgnoreEnv -> return $ applyEnv False mempty value'
|
||||||
|
|||||||
@ -48,6 +48,7 @@ library
|
|||||||
, shakespeare
|
, shakespeare
|
||||||
, streaming-commons
|
, streaming-commons
|
||||||
, wai-logger
|
, wai-logger
|
||||||
|
, semigroups
|
||||||
|
|
||||||
exposed-modules: Yesod
|
exposed-modules: Yesod
|
||||||
, Yesod.Default.Config
|
, Yesod.Default.Config
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user