packages feed

mmzk-env 0.1.1.1 → 0.1.2.0

raw patch · 4 files changed

+35/−1 lines, 4 filesdep +textPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: text

API changes (from Hackage documentation)

- Data.Env.EnumParser: instance (GHC.Enum.Enum a, GHC.Show.Show a, GHC.Enum.Bounded a) => Data.Env.TypeParser.TypeParser (Data.Env.EnumParser.EnumParser a)
- Data.Env.EnumParser: instance GHC.Show.Show a => GHC.Show.Show (Data.Env.EnumParser.EnumParser a)
- Data.Env.ExtractFields: instance (GHC.Generics.Generic a, Data.Env.ExtractFields.GExtractFields (GHC.Generics.Rep a)) => Data.Env.ExtractFields.ExtractFields a
- Data.Env.ExtractFields: instance GHC.Generics.Selector s => Data.Env.ExtractFields.GExtractFields (GHC.Generics.M1 GHC.Generics.S s (GHC.Generics.K1 i a))
- Data.Env.ExtractFields: instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Data.Env.ExtractFields.GExtractFields f => Data.Env.ExtractFields.GExtractFields (GHC.Generics.M1 GHC.Generics.C c f)
- Data.Env.ExtractFields: instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Data.Env.ExtractFields.GExtractFields f => Data.Env.ExtractFields.GExtractFields (GHC.Generics.M1 GHC.Generics.D c f)
- Data.Env.ExtractFields: instance forall k (f :: k -> *) (g :: k -> *). (Data.Env.ExtractFields.GExtractFields f, Data.Env.ExtractFields.GExtractFields g) => Data.Env.ExtractFields.GExtractFields (f GHC.Generics.:*: g)
- Data.Env.RecordParser: instance (Data.Env.TypeParser.TypeParser a, GHC.Generics.Selector s) => Data.Env.RecordParser.GRecordParser (GHC.Generics.M1 GHC.Generics.S s (GHC.Generics.K1 i a))
- Data.Env.RecordParser: instance (GHC.Generics.Generic a, Data.Env.RecordParser.GRecordParser (GHC.Generics.Rep a)) => Data.Env.RecordParser.RecordParser a
- Data.Env.RecordParser: instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Data.Env.RecordParser.GRecordParser f => Data.Env.RecordParser.GRecordParser (GHC.Generics.M1 GHC.Generics.C c f)
- Data.Env.RecordParser: instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Data.Env.RecordParser.GRecordParser f => Data.Env.RecordParser.GRecordParser (GHC.Generics.M1 GHC.Generics.D c f)
- Data.Env.RecordParser: instance forall k (f :: k -> *) (g :: k -> *). (Data.Env.RecordParser.GRecordParser f, Data.Env.RecordParser.GRecordParser g) => Data.Env.RecordParser.GRecordParser (f GHC.Generics.:*: g)
- Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Base.String
- Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Int.Int16
- Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Int.Int32
- Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Int.Int64
- Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Int.Int8
- Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Word.Word16
- Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Word.Word32
- Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Word.Word64
- Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Word.Word8
- Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser a => Data.Env.TypeParser.TypeParser (GHC.Maybe.Maybe a)
+ Data.Env.EnumParser: instance (GHC.Internal.Enum.Enum a, GHC.Internal.Show.Show a, GHC.Internal.Enum.Bounded a) => Data.Env.TypeParser.TypeParser (Data.Env.EnumParser.EnumParser a)
+ Data.Env.EnumParser: instance GHC.Internal.Show.Show a => GHC.Internal.Show.Show (Data.Env.EnumParser.EnumParser a)
+ Data.Env.ExtractFields: instance (GHC.Internal.Generics.Generic a, Data.Env.ExtractFields.GExtractFields (GHC.Internal.Generics.Rep a)) => Data.Env.ExtractFields.ExtractFields a
+ Data.Env.ExtractFields: instance GHC.Internal.Generics.Selector s => Data.Env.ExtractFields.GExtractFields (GHC.Internal.Generics.M1 GHC.Internal.Generics.S s (GHC.Internal.Generics.K1 i a))
+ Data.Env.ExtractFields: instance forall k (f :: k -> *) (c :: GHC.Internal.Generics.Meta). Data.Env.ExtractFields.GExtractFields f => Data.Env.ExtractFields.GExtractFields (GHC.Internal.Generics.M1 GHC.Internal.Generics.C c f)
+ Data.Env.ExtractFields: instance forall k (f :: k -> *) (c :: GHC.Internal.Generics.Meta). Data.Env.ExtractFields.GExtractFields f => Data.Env.ExtractFields.GExtractFields (GHC.Internal.Generics.M1 GHC.Internal.Generics.D c f)
+ Data.Env.ExtractFields: instance forall k (f :: k -> *) (g :: k -> *). (Data.Env.ExtractFields.GExtractFields f, Data.Env.ExtractFields.GExtractFields g) => Data.Env.ExtractFields.GExtractFields (f GHC.Internal.Generics.:*: g)
+ Data.Env.RecordParser: instance (Data.Env.TypeParser.TypeParser a, GHC.Internal.Generics.Selector s) => Data.Env.RecordParser.GRecordParser (GHC.Internal.Generics.M1 GHC.Internal.Generics.S s (GHC.Internal.Generics.K1 i a))
+ Data.Env.RecordParser: instance (GHC.Internal.Generics.Generic a, Data.Env.RecordParser.GRecordParser (GHC.Internal.Generics.Rep a)) => Data.Env.RecordParser.RecordParser a
+ Data.Env.RecordParser: instance forall k (f :: k -> *) (c :: GHC.Internal.Generics.Meta). Data.Env.RecordParser.GRecordParser f => Data.Env.RecordParser.GRecordParser (GHC.Internal.Generics.M1 GHC.Internal.Generics.C c f)
+ Data.Env.RecordParser: instance forall k (f :: k -> *) (c :: GHC.Internal.Generics.Meta). Data.Env.RecordParser.GRecordParser f => Data.Env.RecordParser.GRecordParser (GHC.Internal.Generics.M1 GHC.Internal.Generics.D c f)
+ Data.Env.RecordParser: instance forall k (f :: k -> *) (g :: k -> *). (Data.Env.RecordParser.GRecordParser f, Data.Env.RecordParser.GRecordParser g) => Data.Env.RecordParser.GRecordParser (f GHC.Internal.Generics.:*: g)
+ Data.Env.TypeParser: ($dmparseType) :: (TypeParser a, Generic a, GTypeParser (Rep a)) => String -> Either String a
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser Data.Text.Internal.Lazy.Text
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser Data.Text.Internal.Text
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Internal.Base.String
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Internal.Int.Int16
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Internal.Int.Int32
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Internal.Int.Int64
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Internal.Int.Int8
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Internal.Word.Word16
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Internal.Word.Word32
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Internal.Word.Word64
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser GHC.Internal.Word.Word8
+ Data.Env.TypeParser: instance Data.Env.TypeParser.TypeParser a => Data.Env.TypeParser.TypeParser (GHC.Internal.Maybe.Maybe a)
- Data.Env.ExtractFields: class ExtractFields a
+ Data.Env.ExtractFields: class ExtractFields (a :: k)
- Data.Env.ExtractFields: extractFields :: forall a. ExtractFields a => [String]
+ Data.Env.ExtractFields: extractFields :: forall {k} (a :: k). ExtractFields a => [String]
- Data.Env.ExtractFields: getEnvRaw :: forall a m. (MonadIO m, ExtractFields a) => (String -> String) -> m (Map String String)
+ Data.Env.ExtractFields: getEnvRaw :: forall {k} (a :: k) m. (MonadIO m, ExtractFields a) => (String -> String) -> m (Map String String)
- Data.Env.ExtractFields: getEnvRawCamelCaseToUpperSnake :: forall a m. (MonadIO m, ExtractFields a) => m (Map String String)
+ Data.Env.ExtractFields: getEnvRawCamelCaseToUpperSnake :: forall {k} (a :: k) m. (MonadIO m, ExtractFields a) => m (Map String String)
- Data.Env.ExtractFields: getEnvRawLowerToUpperSnake :: forall a m. (MonadIO m, ExtractFields a) => m (Map String String)
+ Data.Env.ExtractFields: getEnvRawLowerToUpperSnake :: forall {k} (a :: k) m. (MonadIO m, ExtractFields a) => m (Map String String)
- Data.Env.TypeParser: parseType :: (TypeParser a, Generic a, GTypeParser (Rep a)) => String -> Either String a
+ Data.Env.TypeParser: parseType :: TypeParser a => String -> Either String a

Files

CHANGELOG.md view
@@ -1,5 +1,11 @@ # Revision history for mmzk-env ++## 0.1.2.0 -- 2025-11-16++* Add spport for parsing `Text`.++ ## 0.1.1.1 -- 2025-09-29  * Fix typo in the cabal file.
mmzk-env.cabal view
@@ -1,6 +1,6 @@ cabal-version:      2.4 name:               mmzk-env-version:            0.1.1.1+version:            0.1.2.0  synopsis:           Read environment variables into a user-defined data type description:@@ -56,6 +56,7 @@         base >=4.16 && <5,         containers >= 0.6.7 && < 0.7,         gigaparsec ^>=0.3.1,+        text >= 2.1.3 && < 2.2,     hs-source-dirs:   src  @@ -74,6 +75,7 @@         containers,         gigaparsec,         hspec ^>=2.11,+        text,     hs-source-dirs:         src         test
src/Data/Env/TypeParser.hs view
@@ -14,6 +14,8 @@ ) where  import           Data.Int (Int8, Int16, Int32, Int64)+import qualified Data.Text as T+import qualified Data.Text.Lazy as TL import           Data.Word (Word8, Word16, Word32, Word64) import           GHC.Generics import qualified Text.Gigaparsec as P@@ -126,6 +128,18 @@ instance TypeParser Word64 where   parseType :: String -> Either String Word64   parseType = parse (L.decimal64 naturalParser)+  {-# INLINE parseType #-}++-- | Required strict @Text@ field (parsed from String)+instance TypeParser T.Text where+  parseType :: String -> Either String T.Text+  parseType = fmap T.pack . parseType+  {-# INLINE parseType #-}++-- | Required lazy @Text@ field (parsed from String)+instance TypeParser TL.Text where+  parseType :: String -> Either String TL.Text+  parseType = fmap TL.pack . parseType   {-# INLINE parseType #-}  -- | Required @()@ field (parsed from String).
test/Spec.hs view
@@ -4,6 +4,8 @@ import           Data.Env.TypeParser import           Data.Int (Int8, Int16, Int32, Int64) import qualified Data.Map as M+import qualified Data.Text as T+import qualified Data.Text.Lazy as TL import           Data.Word (Word8, Word16, Word32, Word64) import           GHC.Generics import           Test.Hspec@@ -20,6 +22,16 @@       parseType @String "hello" `shouldBe` Right "hello"     it "does not parse empty string" do       parseType @String "" `shouldSatisfy` isLeft+  describe "parse strict Text" do+    it "parses non-empty string" do+      parseType @T.Text "hello" `shouldBe` Right "hello"+    it "does not parse empty string" do+      parseType @T.Text "" `shouldSatisfy` isLeft+  describe "parse lazy Text" do+    it "parses non-empty string" do+      parseType @TL.Text "hello" `shouldBe` Right "hello"+    it "does not parse empty string" do+      parseType @TL.Text "" `shouldSatisfy` isLeft   describe "parse Bool" do     it "parses True" do       parseType @Bool "True" `shouldBe` Right True