envy 2.0.0.0 → 2.1.0.0
raw patch · 3 files changed
+25/−3 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ System.Envy: ReadShowVar :: a -> ReadShowVar a
+ System.Envy: [unReadShowVar] :: ReadShowVar a -> a
+ System.Envy: instance (Data.Typeable.Internal.Typeable a, GHC.Show.Show a, GHC.Read.Read a) => System.Envy.Var (System.Envy.ReadShowVar a)
+ System.Envy: instance (System.Envy.Var a, Data.Typeable.Internal.Typeable a) => System.Envy.Var (Data.Functor.Identity.Identity a)
+ System.Envy: instance (System.Envy.Var a, Data.Typeable.Internal.Typeable a) => System.Envy.Var (Data.Monoid.First a)
+ System.Envy: instance (System.Envy.Var a, Data.Typeable.Internal.Typeable a) => System.Envy.Var (Data.Monoid.Last a)
+ System.Envy: instance Control.Monad.Fail.MonadFail System.Envy.Parser
+ System.Envy: newtype ReadShowVar a
Files
- envy.cabal +1/−1
- examples/Test.hs +2/−2
- src/System/Envy.hs +22/−0
envy.cabal view
@@ -1,5 +1,5 @@ name: envy-version: 2.0.0.0+version: 2.1.0.0 synopsis: An environmentally friendly way to deal with environment variables license: BSD3 license-file: LICENSE
examples/Test.hs view
@@ -13,10 +13,10 @@ defConfig = PGConfig "localhost" 5432 instance FromEnv PGConfig where- fromEnv = fromEnvCustom (Option 7 "PG")+ fromEnv = gFromEnvCustom (Option 7 "PG") -- Generically creates instance for retrieving environment variables (PG_HOST, PG_PORT) main :: IO () main =- print =<< decodeEnv :: IO (Either String PGConfig)+ print =<< (decodeEnv :: IO (Either String PGConfig)) -- PGConfig { pgHost = "foobah", pgPort = 5432 }
src/System/Envy.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-}@@ -67,6 +68,8 @@ , envMaybe , (.=) , (.!=)+ -- * Utility Types+ , ReadShowVar (..) -- * Generics , DefConfig (..) , Option (..)@@ -77,8 +80,11 @@ ------------------------------------------------------------------------------ import Control.Applicative import Control.Monad.Except+import Control.Monad.Fail import Control.Exception+import Data.Functor.Identity import Data.Maybe+import Data.Monoid import Data.Char import Data.Time import GHC.Generics@@ -98,6 +104,9 @@ deriving ( Functor, Monad, Applicative, MonadError String , MonadIO, Alternative, MonadPlus ) +instance MonadFail Parser where+ fail = Parser . throwError+ ------------------------------------------------------------------------------ -- | Variable type, smart constructor for handling environment variables. data EnvVar = EnvVar {@@ -310,6 +319,19 @@ fromVar "" = Nothing fromVar s = Just <$> fromVar s +------------------------------------------------------------------------------+deriving instance (Var a, Typeable a) => Var (Last a)+deriving instance (Var a, Typeable a) => Var (First a)+deriving instance (Var a, Typeable a) => Var (Identity a)++------------------------------------------------------------------------------+-- | A utility type to use any instance of 'Read' and 'Show' as an instance of+-- 'Var'.+newtype ReadShowVar a = ReadShowVar { unReadShowVar :: a }++instance (Typeable a, Show a, Read a) => Var (ReadShowVar a) where+ toVar = show . unReadShowVar+ fromVar = fmap ReadShowVar . readMaybe ------------------------------------------------------------------------------ -- | Environment retrieval with failure info decodeEnv :: FromEnv a => IO (Either String a)