lawful-conversions 0.1.2.2 → 0.1.3
raw patch · 12 files changed
+193/−12 lines, 12 filesdep +timePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: time
API changes (from Hackage documentation)
+ LawfulConversions: ($dmfrom) :: (IsMany a b, IsSome b a) => a -> b
+ LawfulConversions: ($dmmaybeFrom) :: (IsSome a b, IsSome b a) => a -> Maybe b
- LawfulConversions: class (IsSome a b) => IsMany a b
+ LawfulConversions: class IsSome a b => IsMany a b
- LawfulConversions: from :: (IsMany a b, IsSome b a) => a -> b
+ LawfulConversions: from :: IsMany a b => a -> b
- LawfulConversions: maybeFrom :: (IsSome a b, IsSome b a) => a -> Maybe b
+ LawfulConversions: maybeFrom :: IsSome a b => a -> Maybe b
Files
- lawful-conversions.cabal +10/−4
- src/library/LawfulConversions/Optics.hs +3/−3
- src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs +22/−1
- src/library/LawfulConversions/Relations/LazyTextAndUtcTime.hs +14/−0
- src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs +23/−1
- src/library/LawfulConversions/Relations/LazyTextBuilderAndUtcTime.hs +14/−0
- src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs +15/−1
- src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs +21/−1
- src/library/LawfulConversions/Relations/StrictTextBuilderAndUtcTime.hs +34/−0
- src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs +12/−1
- src/library/LawfulConversions/Relations/StringAndUtcTime.hs +12/−0
- src/library/LawfulConversions/Relations/TextAndUtcTime.hs +13/−0
lawful-conversions.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: lawful-conversions-version: 0.1.2.2+version: 0.1.3 synopsis: Lawful typeclasses for bidirectional conversion between types category: Conversion homepage: https://github.com/nikita-volkov/lawful-conversions@@ -18,11 +18,11 @@ Lawful typeclasses capturing three patterns of bidirectional mapping and forming a layered hierarchy with an ascending strictness of laws. - 1. `IsSome`: Smart constructor+ 1. Smart constructor - 2. `IsMany`: Lossy conversion+ 2. Canonicalization or lossy conversion - 3. `Is`: Isomorphism or lossless conversion+ 3. Isomorphism or lossless conversion = The conversion problem @@ -120,19 +120,24 @@ LawfulConversions.Relations.LazyTextAndStrictTextBuilder LawfulConversions.Relations.LazyTextAndString LawfulConversions.Relations.LazyTextAndText+ LawfulConversions.Relations.LazyTextAndUtcTime LawfulConversions.Relations.LazyTextAndUuid LawfulConversions.Relations.LazyTextBuilderAndStrictTextBuilder LawfulConversions.Relations.LazyTextBuilderAndString LawfulConversions.Relations.LazyTextBuilderAndText+ LawfulConversions.Relations.LazyTextBuilderAndUtcTime LawfulConversions.Relations.LazyTextBuilderAndUuid LawfulConversions.Relations.ListAndSeq LawfulConversions.Relations.ShortByteStringAndTextArray LawfulConversions.Relations.ShortByteStringAndWord8List LawfulConversions.Relations.StrictTextBuilderAndString LawfulConversions.Relations.StrictTextBuilderAndText+ LawfulConversions.Relations.StrictTextBuilderAndUtcTime LawfulConversions.Relations.StrictTextBuilderAndUuid LawfulConversions.Relations.StringAndText+ LawfulConversions.Relations.StringAndUtcTime LawfulConversions.Relations.StringAndUuid+ LawfulConversions.Relations.TextAndUtcTime LawfulConversions.Relations.TextAndUuid LawfulConversions.Relations.TextArrayAndWord8List LawfulConversions.TextCompat.Array@@ -146,6 +151,7 @@ primitive >=0.7 && <0.10, profunctors >=5 && <6, text >=1.2 && <2.2,+ time >=1.9 && <2, unordered-containers >=0.2 && <0.3, uuid-types >=1.0 && <1.1, vector >=0.12 && <0.14,
src/library/LawfulConversions/Optics.hs view
@@ -4,7 +4,7 @@ import LawfulConversions.Classes import LawfulConversions.Prelude --- | Van-Laarhoven-style Prism, compatible with the \"lens\" library.+-- | Van-Laarhoven-style Prism, compatible with libraries like \"lens\" and \"optics\". isSomePrism :: (IsSome a b, Choice p, Applicative f) => p b (f b) -> p a (f a) isSomePrism = dimap@@ -12,10 +12,10 @@ (either pure (fmap to)) . right' --- | Van-Laarhoven-style Isomorphism, compatible with the \"lens\" library.+-- | Van-Laarhoven-style Isomorphism, compatible with libraries like \"lens\" and \"optics\". isManyIso :: (IsMany a b, Profunctor p, Functor f) => p b (f b) -> p a (f a) isManyIso = dimap from (fmap to) --- | Van-Laarhoven-style Isomorphism, compatible with the \"lens\" library.+-- | Van-Laarhoven-style Isomorphism, compatible with libraries like \"lens\" and \"optics\". isIso :: (Is a b, Profunctor p, Functor f) => p b (f b) -> p a (f a) isIso = isManyIso
src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs view
@@ -3,7 +3,28 @@ module LawfulConversions.Relations.LazyTextAndStrictTextBuilder where -#if MIN_VERSION_text(2,0,2)+#if MIN_VERSION_text(2,1,2)++import qualified Data.Text.Encoding+import qualified Data.Text.Lazy+import LawfulConversions.Classes+import LawfulConversions.Prelude++instance IsSome Data.Text.Lazy.Text Data.Text.Encoding.StrictTextBuilder where+ to = Data.Text.Lazy.fromStrict . Data.Text.Encoding.strictBuilderToText++instance IsSome Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Text where+ to = Data.Text.Encoding.textToStrictBuilder . Data.Text.Lazy.toStrict++instance IsMany Data.Text.Lazy.Text Data.Text.Encoding.StrictTextBuilder++instance IsMany Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Text++instance Is Data.Text.Lazy.Text Data.Text.Encoding.StrictTextBuilder++instance Is Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Text++#elif MIN_VERSION_text(2,0,2) import qualified Data.Text.Encoding import qualified Data.Text.Lazy
+ src/library/LawfulConversions/Relations/LazyTextAndUtcTime.hs view
@@ -0,0 +1,14 @@+{-# OPTIONS_GHC -Wno-orphans #-}++module LawfulConversions.Relations.LazyTextAndUtcTime where++import qualified Data.Text.Lazy+import Data.Time+import LawfulConversions.Classes+import LawfulConversions.Prelude+import LawfulConversions.Relations.LazyTextAndString ()+import LawfulConversions.Relations.StringAndUtcTime ()++instance IsSome Data.Text.Lazy.Text UTCTime where+ to = fromString . to+ maybeFrom = maybeFrom @String . to
src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs view
@@ -3,7 +3,29 @@ module LawfulConversions.Relations.LazyTextBuilderAndStrictTextBuilder where -#if MIN_VERSION_text(2,0,2)+#if MIN_VERSION_text(2,1,2)++import qualified Data.Text.Encoding+import qualified Data.Text.Lazy+import qualified Data.Text.Lazy.Builder+import LawfulConversions.Classes+import LawfulConversions.Prelude++instance IsSome Data.Text.Lazy.Builder.Builder Data.Text.Encoding.StrictTextBuilder where+ to = Data.Text.Lazy.Builder.fromText . Data.Text.Encoding.strictBuilderToText++instance IsSome Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Builder.Builder where+ to = Data.Text.Encoding.textToStrictBuilder . Data.Text.Lazy.toStrict . Data.Text.Lazy.Builder.toLazyText++instance IsMany Data.Text.Lazy.Builder.Builder Data.Text.Encoding.StrictTextBuilder++instance IsMany Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Builder.Builder++instance Is Data.Text.Lazy.Builder.Builder Data.Text.Encoding.StrictTextBuilder++instance Is Data.Text.Encoding.StrictTextBuilder Data.Text.Lazy.Builder.Builder++#elif MIN_VERSION_text(2,0,2) import qualified Data.Text.Encoding import qualified Data.Text.Lazy
+ src/library/LawfulConversions/Relations/LazyTextBuilderAndUtcTime.hs view
@@ -0,0 +1,14 @@+{-# OPTIONS_GHC -Wno-orphans #-}++module LawfulConversions.Relations.LazyTextBuilderAndUtcTime where++import qualified Data.Text.Lazy.Builder+import Data.Time+import LawfulConversions.Classes+import LawfulConversions.Prelude+import LawfulConversions.Relations.LazyTextBuilderAndString ()+import LawfulConversions.Relations.StringAndUtcTime ()++instance IsSome Data.Text.Lazy.Builder.Builder UTCTime where+ to = fromString . to+ maybeFrom = maybeFrom @String . to
src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs view
@@ -3,7 +3,21 @@ module LawfulConversions.Relations.StrictTextBuilderAndString where -#if MIN_VERSION_text(2,0,2)+#if MIN_VERSION_text(2,1,2)++import qualified Data.Text.Encoding+import LawfulConversions.Classes+import LawfulConversions.Relations.StringAndText ()+import LawfulConversions.Prelude++instance IsSome String Data.Text.Encoding.StrictTextBuilder where+ to = to . Data.Text.Encoding.strictBuilderToText+ maybeFrom = fmap Data.Text.Encoding.textToStrictBuilder . maybeFrom++instance IsMany String Data.Text.Encoding.StrictTextBuilder where+ from = Data.Text.Encoding.textToStrictBuilder . from++#elif MIN_VERSION_text(2,0,2) import qualified Data.Text.Encoding import LawfulConversions.Classes
src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs view
@@ -3,7 +3,27 @@ module LawfulConversions.Relations.StrictTextBuilderAndText where -#if MIN_VERSION_text(2,0,2)+#if MIN_VERSION_text(2,1,2)++import qualified Data.Text.Encoding+import LawfulConversions.Classes+import LawfulConversions.Prelude++instance IsSome Text Data.Text.Encoding.StrictTextBuilder where+ to = Data.Text.Encoding.strictBuilderToText++instance IsSome Data.Text.Encoding.StrictTextBuilder Text where+ to = Data.Text.Encoding.textToStrictBuilder++instance IsMany Text Data.Text.Encoding.StrictTextBuilder++instance IsMany Data.Text.Encoding.StrictTextBuilder Text++instance Is Text Data.Text.Encoding.StrictTextBuilder++instance Is Data.Text.Encoding.StrictTextBuilder Text++#elif MIN_VERSION_text(2,0,2) import qualified Data.Text.Encoding import LawfulConversions.Classes
+ src/library/LawfulConversions/Relations/StrictTextBuilderAndUtcTime.hs view
@@ -0,0 +1,34 @@+{-# LANGUAGE CPP #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module LawfulConversions.Relations.StrictTextBuilderAndUtcTime where++#if MIN_VERSION_text(2,1,2)++import qualified Data.Text.Encoding+import Data.Time+import LawfulConversions.Classes+import LawfulConversions.Prelude+import LawfulConversions.Relations.StrictTextBuilderAndString ()+import LawfulConversions.Relations.StringAndText ()+import LawfulConversions.Relations.StringAndUtcTime ()++instance IsSome Data.Text.Encoding.StrictTextBuilder UTCTime where+ to = from . to @String+ maybeFrom = maybeFrom @String . to++#elif MIN_VERSION_text(2,0,2)++import qualified Data.Text.Encoding+import Data.Time+import LawfulConversions.Classes+import LawfulConversions.Prelude+import LawfulConversions.Relations.StrictTextBuilderAndString ()+import LawfulConversions.Relations.StringAndText ()+import LawfulConversions.Relations.StringAndUtcTime ()++instance IsSome Data.Text.Encoding.StrictBuilder UTCTime where+ to = from . to @String+ maybeFrom = maybeFrom @String . to++#endif
src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs view
@@ -3,7 +3,18 @@ module LawfulConversions.Relations.StrictTextBuilderAndUuid where -#if MIN_VERSION_text(2,0,2)+#if MIN_VERSION_text(2,1,2)++import qualified Data.UUID.Types+import qualified Data.Text.Encoding+import LawfulConversions.Classes+import LawfulConversions.Prelude++instance IsSome Data.Text.Encoding.StrictTextBuilder UUID where+ to = Data.Text.Encoding.textToStrictBuilder . Data.UUID.Types.toText+ maybeFrom = Data.UUID.Types.fromText . Data.Text.Encoding.strictBuilderToText++#elif MIN_VERSION_text(2,0,2) import qualified Data.UUID.Types import qualified Data.Text.Encoding
+ src/library/LawfulConversions/Relations/StringAndUtcTime.hs view
@@ -0,0 +1,12 @@+{-# OPTIONS_GHC -Wno-orphans #-}++module LawfulConversions.Relations.StringAndUtcTime where++import Data.Time+import Data.Time.Format.ISO8601+import LawfulConversions.Classes+import LawfulConversions.Prelude++instance IsSome String UTCTime where+ to = iso8601Show+ maybeFrom = iso8601ParseM
+ src/library/LawfulConversions/Relations/TextAndUtcTime.hs view
@@ -0,0 +1,13 @@+{-# OPTIONS_GHC -Wno-orphans #-}++module LawfulConversions.Relations.TextAndUtcTime where++import Data.Time+import LawfulConversions.Classes+import LawfulConversions.Prelude+import LawfulConversions.Relations.StringAndText ()+import LawfulConversions.Relations.StringAndUtcTime ()++instance IsSome Text UTCTime where+ to = fromString . to+ maybeFrom = maybeFrom @String . to