lawful-conversions 0.1.7 → 0.2
raw patch · 70 files changed
+256/−238 lines, 70 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- LawfulConversions: isManyProperties :: (IsMany a b, Eq a, Eq b, Show a, Show b, Arbitrary b) => Proxy a -> Proxy b -> [(String, Property)]
+ LawfulConversions: isManyProperties :: (IsMany a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) => Proxy a -> Proxy b -> [(String, Property)]
Files
- CHANGELOG.md +5/−0
- lawful-conversions.cabal +4/−2
- src/library/LawfulConversions.hs +1/−1
- src/library/LawfulConversions/Algebra.hs +158/−0
- src/library/LawfulConversions/Classes.hs +0/−158
- src/library/LawfulConversions/Optics.hs +1/−1
- src/library/LawfulConversions/Properties.hs +17/−6
- src/library/LawfulConversions/Proxies/ViaIsSome.hs +1/−1
- src/library/LawfulConversions/Relations/BoxedVectorAndList.hs +1/−1
- src/library/LawfulConversions/Relations/BoxedVectorAndSeq.hs +1/−1
- src/library/LawfulConversions/Relations/ByteArrayAndByteString.hs +1/−1
- src/library/LawfulConversions/Relations/ByteArrayAndLazyByteString.hs +1/−1
- src/library/LawfulConversions/Relations/ByteArrayAndLazyByteStringBuilder.hs +1/−1
- src/library/LawfulConversions/Relations/ByteArrayAndShortByteString.hs +1/−1
- src/library/LawfulConversions/Relations/ByteArrayAndTextArray.hs +1/−1
- src/library/LawfulConversions/Relations/ByteArrayAndWord8List.hs +1/−1
- src/library/LawfulConversions/Relations/ByteStringAndLazyByteString.hs +1/−1
- src/library/LawfulConversions/Relations/ByteStringAndLazyByteStringBuilder.hs +1/−1
- src/library/LawfulConversions/Relations/ByteStringAndLazyText.hs +1/−1
- src/library/LawfulConversions/Relations/ByteStringAndShortByteString.hs +1/−1
- src/library/LawfulConversions/Relations/ByteStringAndString.hs +1/−1
- src/library/LawfulConversions/Relations/ByteStringAndText.hs +1/−1
- src/library/LawfulConversions/Relations/ByteStringAndTextArray.hs +1/−1
- src/library/LawfulConversions/Relations/ByteStringAndWord8List.hs +1/−1
- src/library/LawfulConversions/Relations/DayAndLazyText.hs +1/−1
- src/library/LawfulConversions/Relations/DayAndLazyTextBuilder.hs +1/−1
- src/library/LawfulConversions/Relations/DayAndStrictTextBuilder.hs +2/−2
- src/library/LawfulConversions/Relations/DayAndString.hs +1/−1
- src/library/LawfulConversions/Relations/DayAndText.hs +1/−1
- src/library/LawfulConversions/Relations/Int16AndWord16.hs +1/−1
- src/library/LawfulConversions/Relations/Int32AndWord32.hs +1/−1
- src/library/LawfulConversions/Relations/Int64AndWord64.hs +1/−1
- src/library/LawfulConversions/Relations/Int8AndWord8.hs +1/−1
- src/library/LawfulConversions/Relations/IntAndWord.hs +1/−1
- src/library/LawfulConversions/Relations/IntMapAndMapOfInt.hs +1/−1
- src/library/LawfulConversions/Relations/IntSetAndSetOfInt.hs +1/−1
- src/library/LawfulConversions/Relations/LazyByteStringAndLazyByteStringBuilder.hs +1/−1
- src/library/LawfulConversions/Relations/LazyByteStringAndLazyText.hs +1/−1
- src/library/LawfulConversions/Relations/LazyByteStringAndShortByteString.hs +1/−1
- src/library/LawfulConversions/Relations/LazyByteStringAndString.hs +1/−1
- src/library/LawfulConversions/Relations/LazyByteStringAndText.hs +1/−1
- src/library/LawfulConversions/Relations/LazyByteStringAndTextArray.hs +1/−1
- src/library/LawfulConversions/Relations/LazyByteStringAndWord8List.hs +1/−1
- src/library/LawfulConversions/Relations/LazyByteStringBuilderAndShortByteString.hs +1/−1
- src/library/LawfulConversions/Relations/LazyByteStringBuilderAndTextArray.hs +1/−1
- src/library/LawfulConversions/Relations/LazyByteStringBuilderAndWord8List.hs +1/−1
- src/library/LawfulConversions/Relations/LazyTextAndLazyTextBuilder.hs +1/−1
- src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs +2/−2
- src/library/LawfulConversions/Relations/LazyTextAndString.hs +1/−1
- src/library/LawfulConversions/Relations/LazyTextAndText.hs +1/−1
- src/library/LawfulConversions/Relations/LazyTextAndUtcTime.hs +1/−1
- src/library/LawfulConversions/Relations/LazyTextAndUuid.hs +1/−1
- src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs +2/−2
- src/library/LawfulConversions/Relations/LazyTextBuilderAndString.hs +1/−1
- src/library/LawfulConversions/Relations/LazyTextBuilderAndText.hs +1/−1
- src/library/LawfulConversions/Relations/LazyTextBuilderAndUtcTime.hs +1/−1
- src/library/LawfulConversions/Relations/LazyTextBuilderAndUuid.hs +1/−1
- src/library/LawfulConversions/Relations/ListAndSeq.hs +1/−1
- src/library/LawfulConversions/Relations/ShortByteStringAndTextArray.hs +1/−1
- src/library/LawfulConversions/Relations/ShortByteStringAndWord8List.hs +1/−1
- src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs +2/−2
- src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs +2/−2
- src/library/LawfulConversions/Relations/StrictTextBuilderAndUtcTime.hs +2/−2
- src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs +2/−2
- src/library/LawfulConversions/Relations/StringAndText.hs +1/−1
- src/library/LawfulConversions/Relations/StringAndUtcTime.hs +1/−1
- src/library/LawfulConversions/Relations/StringAndUuid.hs +1/−1
- src/library/LawfulConversions/Relations/TextAndUtcTime.hs +1/−1
- src/library/LawfulConversions/Relations/TextAndUuid.hs +1/−1
- src/library/LawfulConversions/Relations/TextArrayAndWord8List.hs +1/−1
CHANGELOG.md view
@@ -0,0 +1,5 @@+# v0.2++## Breaking++- Added more tests in `isManyProperties` and an `Arbitrary` constraint on its parameter `a`
lawful-conversions.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: lawful-conversions-version: 0.1.7+version: 0.2 synopsis: Lawful typeclasses for bidirectional conversion between types category: Conversion homepage: https://github.com/nikita-volkov/lawful-conversions@@ -50,6 +50,8 @@ evident what any of its instances do and it provides property-tests for you to validate your instances. + The laws and the concepts are based on set and category theories.+ = Prior work and acknowledgements This library is an offspring of the "[isomorphism-class](https://hackage.haskell.org/package/isomorphism-class)" library, expanding upon the patterns discovered there. Both libraries are maintained letting their designs compete.@@ -83,7 +85,7 @@ hs-source-dirs: src/library exposed-modules: LawfulConversions other-modules:- LawfulConversions.Classes+ LawfulConversions.Algebra LawfulConversions.Optics LawfulConversions.Prelude LawfulConversions.Properties
src/library/LawfulConversions.hs view
@@ -105,7 +105,7 @@ ) where -import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Optics import LawfulConversions.Properties import LawfulConversions.Proxies
+ src/library/LawfulConversions/Algebra.hs view
@@ -0,0 +1,158 @@+module LawfulConversions.Algebra where++import LawfulConversions.Prelude++-- |+-- Evidence that all values of type @b@ form a subset of all values of type @a@.+--+-- [From Wikipedia](https://en.wikipedia.org/wiki/Subset):+--+-- In mathematics, a set A is a subset of a set B if all elements of A are also elements of B; B is then a superset of A. It is possible for A and B to be equal; if they are unequal, then A is a proper subset of B. The relationship of one set being a subset of another is called inclusion (or sometimes containment). A is a subset of B may also be expressed as B includes (or contains) A or A is included (or contained) in B. A k-subset is a subset with k elements.+--+-- === Laws+--+-- ==== 'to' is [injective](https://en.wikipedia.org/wiki/Injective_function)+--+-- For every two values of type @b@ that are not equal converting with 'to' produces values that are not equal as well:+--+-- > \(b1, b2) -> b1 == b2 || to @a b1 /= to @a b2+--+-- ==== 'maybeFrom' is a [partial inverse](https://en.wikipedia.org/wiki/Inverse_function#Partial_inverses) of 'to'+--+-- For all values of @b@ converting to @a@ and then attempting to convert back to @b@ always succeeds and produces a value that is equal to the original:+--+-- > \b -> maybeFrom (to @a b) == Just b+--+-- === Testing+--+-- For testing whether your instances conform to these laws use 'LawfulConversions.isSomeProperties'.+class IsSome a b where+ -- |+ -- Convert a value of a subset type to a superset type.+ to :: b -> a++ -- |+ -- [Partial inverse](https://en.wikipedia.org/wiki/Inverse_function#Partial_inverses) of 'to'.+ maybeFrom :: a -> Maybe b++ -- |+ -- Requires the presence of 'IsSome' in reverse direction.+ default maybeFrom :: (IsSome b a) => a -> Maybe b+ maybeFrom = Just . to++-- | Every type is isomorphic to itself.+instance IsSome a a where+ to = id+ maybeFrom = Just . id++-- | The empty set has no elements, and therefore is vacuously a subset of any set.+instance IsSome a Void where+ to = absurd+ maybeFrom = const Nothing++-- |+-- Lossy or canonicalizing conversion.+-- Captures mappings from multiple alternative inputs into one output.+--+-- E.g.,+--+-- - `ByteString` can be decoded into `Text` with UTF-8 leniently, replacing the invalid chars with a default char.+--+-- - `String` has a wider range of supported chars than `Text`, so some chars get replaced too.+--+-- === Laws+--+-- ==== 'from' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'to'+--+-- > \b -> b == from (to @a b)+--+-- === Testing+--+-- For testing whether your instances conform to these laws use 'LawfulConversions.isManyProperties'.+class (IsSome a b) => IsMany a b where+ -- |+ -- Possibly lossy inverse of 'to'.+ -- [Surjection](https://en.wikipedia.org/wiki/Surjective_function) from @a@ to @b@.+ --+ -- Particularly useful in combination with the @TypeApplications@ extension,+ -- where it allows to specify the input type, e.g.:+ --+ -- > fromText :: IsMany Text b => Text -> b+ -- > fromText = from @Text+ --+ -- The first type application of the 'to' function on the other hand specifies+ -- the output data type.+ --+ -- If you want to specify the output type instead, use 'onto'.+ from :: a -> b++ -- |+ -- Requires the presence of 'IsSome' in reverse direction.+ default from :: (IsSome b a) => a -> b+ from = to++-- |+-- Alias to 'from', which lets you specify the target type of the conversion first using @TypeApplications@.+--+-- In mathematics @onto@ is another name for [Surjective function](https://en.wikipedia.org/wiki/Surjective_function).+--+-- E.g.,+--+-- > lenientDecodeUtf8 = onto @Text+onto :: forall b a. (IsMany a b) => a -> b+onto = from++instance IsMany a a++-- | Bidirectional conversion between two types with no loss of information.+--+-- The bidirectionality is encoded via a recursive dependency with arguments+-- flipped.+--+-- You can read the signature @Is a b@ as \"/B/ is /A/\".+--+-- === Laws+--+-- ==== 'from' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'to'+--+-- For all values of /b/ converting from /b/ to /a/ and then converting from /a/ to /b/ produces the original value:+--+-- > \b -> b == from (to @a b)+--+-- ==== 'to' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'from'+--+-- For all values of /a/ converting from /a/ to /b/ and then converting from /b/ to /a/ produces the original value:+--+-- > \a -> a == to (from @a @b a)+--+-- === Testing+--+-- For testing whether your instances conform to these laws use 'LawfulConversions.isProperties'.+--+-- === Instance Definition+--+-- For each pair of isomorphic types (/A/ and /B/) the compiler will require you to define six instances, namely: @Is A B@ and @Is B A@, @IsMany A B@ and @IsMany B A@, @IsSome A B@ and @IsSome B A@.+--+-- Instances of @Is@ do not define any functions and serve merely as a statement that the laws are satisfied.+--+-- ==== Example: Lazy Text and Text+--+-- @+-- instance IsSome "Data.Text.Lazy.LazyText" "Data.Text.Text" where+-- to = LazyText.'Data.Text.Lazy.fromStrict'+--+-- instance IsSome "Data.Text.Text" "Data.Text.Lazy.LazyText" where+-- to = LazyText.'Data.Text.Lazy.toStrict'+--+-- instance IsMany "Data.Text.Lazy.LazyText" "Data.Text.Text"+--+-- instance IsMany "Data.Text.Text" "Data.Text.Lazy.LazyText"+--+-- instance Is "Data.Text.Lazy.LazyText" "Data.Text.Text"+--+-- instance Is "Data.Text.Text" "Data.Text.Lazy.LazyText"+-- @+class (IsMany a b, Is b a) => Is a b++-- | Any type is isomorphic to itself.+instance Is a a
− src/library/LawfulConversions/Classes.hs
@@ -1,158 +0,0 @@-module LawfulConversions.Classes where--import LawfulConversions.Prelude---- |--- Evidence that all values of type @b@ form a subset of all values of type @a@.------ [From Wikipedia](https://en.wikipedia.org/wiki/Subset):------ In mathematics, a set A is a subset of a set B if all elements of A are also elements of B; B is then a superset of A. It is possible for A and B to be equal; if they are unequal, then A is a proper subset of B. The relationship of one set being a subset of another is called inclusion (or sometimes containment). A is a subset of B may also be expressed as B includes (or contains) A or A is included (or contained) in B. A k-subset is a subset with k elements.------ === Laws------ ==== 'to' is [injective](https://en.wikipedia.org/wiki/Injective_function)------ For every two values of type @b@ that are not equal converting with 'to' produces values that are not equal as well:------ > \(b1, b2) -> b1 == b2 || to @a b1 /= to @a b2------ ==== 'maybeFrom' is a [partial inverse](https://en.wikipedia.org/wiki/Inverse_function#Partial_inverses) of 'to'------ For all values of @b@ converting to @a@ and then attempting to convert back to @b@ always succeeds and produces a value that is equal to the original:------ > \b -> maybeFrom (to @a b) == Just b------ === Testing------ For testing whether your instances conform to these laws use 'LawfulConversions.isSomeProperties'.-class IsSome a b where- -- |- -- Convert a value of a subset type to a superset type.- to :: b -> a-- -- |- -- [Partial inverse](https://en.wikipedia.org/wiki/Inverse_function#Partial_inverses) of 'to'.- maybeFrom :: a -> Maybe b-- -- |- -- Requires the presence of 'IsSome' in reverse direction.- default maybeFrom :: (IsSome b a) => a -> Maybe b- maybeFrom = Just . to---- | Every type is isomorphic to itself.-instance IsSome a a where- to = id- maybeFrom = Just . id---- | The empty set has no elements, and therefore is vacuously a subset of any set.-instance IsSome a Void where- to = absurd- maybeFrom = const Nothing---- |--- Lossy or canonicalizing conversion.--- Captures mappings from multiple alternative inputs into one output.------ E.g.,------ - `ByteString` can be decoded into `Text` with UTF-8 leniently, replacing the invalid chars with a default char.------ - `String` has a wider range of supported chars than `Text`, so some chars get replaced too.------ === Laws------ ==== 'from' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'to'------ > \b -> b == from (to @a b)------ === Testing------ For testing whether your instances conform to these laws use 'LawfulConversions.isManyProperties'.-class (IsSome a b) => IsMany a b where- -- |- -- Possibly lossy inverse of 'to'.- -- [Surjection](https://en.wikipedia.org/wiki/Surjective_function) from @a@ to @b@.- --- -- Particularly useful in combination with the @TypeApplications@ extension,- -- where it allows to specify the input type, e.g.:- --- -- > fromText :: IsMany Text b => Text -> b- -- > fromText = from @Text- --- -- The first type application of the 'to' function on the other hand specifies- -- the output data type.- --- -- If you want to specify the output type instead, use 'onto'.- from :: a -> b-- -- |- -- Requires the presence of 'IsSome' in reverse direction.- default from :: (IsSome b a) => a -> b- from = to---- |--- Alias to 'from', which lets you specify the target type of the conversion first using @TypeApplications@.------ In mathematics @onto@ is another name for [Surjective function](https://en.wikipedia.org/wiki/Surjective_function).------ E.g.,------ > lenientDecodeUtf8 = onto @Text-onto :: forall b a. (IsMany a b) => a -> b-onto = from--instance IsMany a a---- | Bidirectional conversion between two types with no loss of information.------ The bidirectionality is encoded via a recursive dependency with arguments--- flipped.------ You can read the signature @Is a b@ as \"/B/ is /A/\".------ === Laws------ ==== 'from' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'to'------ For all values of /b/ converting from /b/ to /a/ and then converting from /a/ to /b/ produces the original value:------ > \b -> b == from (to @a b)------ ==== 'to' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'from'------ For all values of /a/ converting from /a/ to /b/ and then converting from /b/ to /a/ produces the original value:------ > \a -> a == to (from @a @b a)------ === Testing------ For testing whether your instances conform to these laws use 'LawfulConversions.isProperties'.------ === Instance Definition------ For each pair of isomorphic types (/A/ and /B/) the compiler will require you to define six instances, namely: @Is A B@ and @Is B A@, @IsMany A B@ and @IsMany B A@, @IsSome A B@ and @IsSome B A@.------ Instances of @Is@ do not define any functions and serve merely as a statement that the laws are satisfied.------ ==== Example: Lazy Text and Text------ @--- instance IsSome "Data.Text.Lazy.LazyText" "Data.Text.Text" where--- to = LazyText.'Data.Text.Lazy.fromStrict'------ instance IsSome "Data.Text.Text" "Data.Text.Lazy.LazyText" where--- to = LazyText.'Data.Text.Lazy.toStrict'------ instance IsMany "Data.Text.Lazy.LazyText" "Data.Text.Text"------ instance IsMany "Data.Text.Text" "Data.Text.Lazy.LazyText"------ instance Is "Data.Text.Lazy.LazyText" "Data.Text.Text"------ instance Is "Data.Text.Text" "Data.Text.Lazy.LazyText"--- @-class (IsMany a b, Is b a) => Is a b---- | Any type is isomorphic to itself.-instance Is a a
src/library/LawfulConversions/Optics.hs view
@@ -1,7 +1,7 @@ module LawfulConversions.Optics where import Data.Profunctor-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude -- | Van-Laarhoven-style Prism, compatible with libraries like \"lens\" and \"optics\".
src/library/LawfulConversions/Properties.hs view
@@ -5,7 +5,7 @@ ) where -import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import Test.QuickCheck @@ -54,15 +54,26 @@ -- > (uncurry prop) -- > (isManyProperties @String @Text Proxy Proxy) isManyProperties ::- (IsMany a b, Eq a, Eq b, Show a, Show b, Arbitrary b) =>+ (IsMany a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) => Proxy a -> Proxy b -> [(String, Property)] isManyProperties aProxy bProxy =- ( "'from' is an inverse of 'to'",- property \b -> b === from' (to' b)- )- : isSomeProperties aProxy bProxy+ [ ( "'from' is an inverse of 'to'",+ property \b -> b === from' (to' b)+ ),+ ( "'from' is consistent with 'maybeFrom'",+ property \a -> case maybeFrom a of+ Nothing -> property Discard+ Just b -> b === from' a+ ),+ ( "'to' after 'from' always succeeds with 'maybeFrom'",+ property \a ->+ let b = from' a+ in maybeFrom (to' b) === Just b+ )+ ]+ <> isSomeProperties aProxy bProxy where to' = as aProxy . to . as bProxy from' = as bProxy . from . as aProxy
src/library/LawfulConversions/Proxies/ViaIsSome.hs view
@@ -1,6 +1,6 @@ module LawfulConversions.Proxies.ViaIsSome where -import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import qualified Test.QuickCheck as QuickCheck
src/library/LawfulConversions/Relations/BoxedVectorAndList.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.BoxedVectorAndList where import qualified Data.Vector-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome (Vector a) [a] where
src/library/LawfulConversions/Relations/BoxedVectorAndSeq.hs view
@@ -4,7 +4,7 @@ import qualified Data.Sequence import qualified Data.Vector-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome (Vector a) (Seq a) where
src/library/LawfulConversions/Relations/ByteArrayAndByteString.hs view
@@ -4,7 +4,7 @@ import qualified Data.ByteString.Short import qualified Data.Primitive.ByteArray-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.ByteArrayAndShortByteString () import LawfulConversions.Relations.ByteStringAndShortByteString ()
src/library/LawfulConversions/Relations/ByteArrayAndLazyByteString.hs view
@@ -5,7 +5,7 @@ import qualified Data.ByteString.Lazy import qualified Data.ByteString.Short import qualified Data.Primitive.ByteArray-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.ByteArrayAndShortByteString () import LawfulConversions.Relations.LazyByteStringAndShortByteString ()
src/library/LawfulConversions/Relations/ByteArrayAndLazyByteStringBuilder.hs view
@@ -5,7 +5,7 @@ import qualified Data.ByteString.Builder import qualified Data.ByteString.Short import qualified Data.Primitive.ByteArray-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.ByteArrayAndShortByteString () import LawfulConversions.Relations.LazyByteStringBuilderAndShortByteString ()
src/library/LawfulConversions/Relations/ByteArrayAndShortByteString.hs view
@@ -5,7 +5,7 @@ import qualified Data.ByteString.Short import qualified Data.ByteString.Short.Internal import qualified Data.Primitive.ByteArray-import LawfulConversions.Classes+import LawfulConversions.Algebra instance IsSome Data.ByteString.Short.ShortByteString Data.Primitive.ByteArray.ByteArray where to (Data.Primitive.ByteArray.ByteArray array) =
src/library/LawfulConversions/Relations/ByteArrayAndTextArray.hs view
@@ -7,7 +7,7 @@ import qualified Data.Primitive.ByteArray import qualified Data.Text.Array-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import qualified LawfulConversions.TextCompat.Array
src/library/LawfulConversions/Relations/ByteArrayAndWord8List.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.ByteArrayAndWord8List where import qualified Data.Primitive.ByteArray-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.ByteArrayAndShortByteString ()
src/library/LawfulConversions/Relations/ByteStringAndLazyByteString.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.ByteStringAndLazyByteString where import qualified Data.ByteString.Lazy-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome ByteString Data.ByteString.Lazy.ByteString where
src/library/LawfulConversions/Relations/ByteStringAndLazyByteStringBuilder.hs view
@@ -4,7 +4,7 @@ import qualified Data.ByteString.Builder import qualified Data.ByteString.Lazy-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome ByteString Data.ByteString.Builder.Builder where
src/library/LawfulConversions/Relations/ByteStringAndLazyText.hs view
@@ -6,7 +6,7 @@ import qualified Data.Text.Encoding.Error import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Encoding-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude -- | UTF-8 codec.
src/library/LawfulConversions/Relations/ByteStringAndShortByteString.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.ByteStringAndShortByteString where import qualified Data.ByteString.Short-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome ByteString Data.ByteString.Short.ShortByteString where
src/library/LawfulConversions/Relations/ByteStringAndString.hs view
@@ -5,7 +5,7 @@ import qualified Data.Text import qualified Data.Text.Encoding import qualified Data.Text.Encoding.Error-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude -- | UTF-8 codec.
src/library/LawfulConversions/Relations/ByteStringAndText.hs view
@@ -4,7 +4,7 @@ import qualified Data.Text.Encoding import qualified Data.Text.Encoding.Error-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude -- | UTF-8 codec.
src/library/LawfulConversions/Relations/ByteStringAndTextArray.hs view
@@ -7,7 +7,7 @@ import qualified Data.ByteString.Short import qualified Data.Text.Array-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import qualified LawfulConversions.TextCompat.Array
src/library/LawfulConversions/Relations/ByteStringAndWord8List.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.ByteStringAndWord8List where import qualified Data.ByteString-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome ByteString [Word8] where
src/library/LawfulConversions/Relations/DayAndLazyText.hs view
@@ -4,7 +4,7 @@ import qualified Data.Text.Lazy import Data.Time-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.DayAndString () import LawfulConversions.Relations.LazyTextAndString ()
src/library/LawfulConversions/Relations/DayAndLazyTextBuilder.hs view
@@ -4,7 +4,7 @@ import qualified Data.Text.Lazy.Builder import Data.Time-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.DayAndString () import LawfulConversions.Relations.LazyTextBuilderAndString ()
src/library/LawfulConversions/Relations/DayAndStrictTextBuilder.hs view
@@ -7,7 +7,7 @@ import qualified Data.Text.Encoding import Data.Time-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.StrictTextBuilderAndString () import LawfulConversions.Relations.StringAndText ()@@ -22,7 +22,7 @@ import qualified Data.Text.Encoding import Data.Time-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.StrictTextBuilderAndString () import LawfulConversions.Relations.StringAndText ()
src/library/LawfulConversions/Relations/DayAndString.hs view
@@ -4,7 +4,7 @@ import Data.Time import Data.Time.Format.ISO8601-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude -- | Implements ISO-8601.
src/library/LawfulConversions/Relations/DayAndText.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.DayAndText where import Data.Time-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.DayAndString () import LawfulConversions.Relations.StringAndText ()
src/library/LawfulConversions/Relations/Int16AndWord16.hs view
@@ -2,7 +2,7 @@ module LawfulConversions.Relations.Int16AndWord16 where -import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Int16 Word16 where
src/library/LawfulConversions/Relations/Int32AndWord32.hs view
@@ -2,7 +2,7 @@ module LawfulConversions.Relations.Int32AndWord32 where -import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Int32 Word32 where
src/library/LawfulConversions/Relations/Int64AndWord64.hs view
@@ -2,7 +2,7 @@ module LawfulConversions.Relations.Int64AndWord64 where -import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Int64 Word64 where
src/library/LawfulConversions/Relations/Int8AndWord8.hs view
@@ -2,7 +2,7 @@ module LawfulConversions.Relations.Int8AndWord8 where -import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Int8 Word8 where
src/library/LawfulConversions/Relations/IntAndWord.hs view
@@ -2,7 +2,7 @@ module LawfulConversions.Relations.IntAndWord where -import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Int Word where
src/library/LawfulConversions/Relations/IntMapAndMapOfInt.hs view
@@ -4,7 +4,7 @@ import qualified Data.IntMap.Strict import qualified Data.Map.Strict-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome (Map Int v) (IntMap v) where
src/library/LawfulConversions/Relations/IntSetAndSetOfInt.hs view
@@ -2,7 +2,7 @@ module LawfulConversions.Relations.IntSetAndSetOfInt where -import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome (Set Int) IntSet where
src/library/LawfulConversions/Relations/LazyByteStringAndLazyByteStringBuilder.hs view
@@ -4,7 +4,7 @@ import qualified Data.ByteString.Builder import qualified Data.ByteString.Lazy-import LawfulConversions.Classes+import LawfulConversions.Algebra instance IsSome Data.ByteString.Lazy.ByteString Data.ByteString.Builder.Builder where to = Data.ByteString.Builder.toLazyByteString
src/library/LawfulConversions/Relations/LazyByteStringAndLazyText.hs view
@@ -6,7 +6,7 @@ import qualified Data.Text.Encoding.Error import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Encoding-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude -- | UTF-8 codec.
src/library/LawfulConversions/Relations/LazyByteStringAndShortByteString.hs view
@@ -4,7 +4,7 @@ import qualified Data.ByteString.Lazy import qualified Data.ByteString.Short-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.ByteString.Lazy.ByteString Data.ByteString.Short.ShortByteString where
src/library/LawfulConversions/Relations/LazyByteStringAndString.hs view
@@ -6,7 +6,7 @@ import qualified Data.Text.Encoding.Error import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Encoding-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude -- | UTF-8 codec.
src/library/LawfulConversions/Relations/LazyByteStringAndText.hs view
@@ -7,7 +7,7 @@ import qualified Data.Text.Encoding.Error import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Encoding-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude -- | UTF-8 codec.
src/library/LawfulConversions/Relations/LazyByteStringAndTextArray.hs view
@@ -8,7 +8,7 @@ import qualified Data.ByteString.Lazy import qualified Data.ByteString.Short import qualified Data.Text.Array-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import qualified LawfulConversions.TextCompat.Array
src/library/LawfulConversions/Relations/LazyByteStringAndWord8List.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.LazyByteStringAndWord8List where import qualified Data.ByteString.Lazy-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.ByteString.Lazy.ByteString [Word8] where
src/library/LawfulConversions/Relations/LazyByteStringBuilderAndShortByteString.hs view
@@ -5,7 +5,7 @@ import qualified Data.ByteString.Builder import qualified Data.ByteString.Lazy import qualified Data.ByteString.Short-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.ByteString.Builder.Builder Data.ByteString.Short.ShortByteString where
src/library/LawfulConversions/Relations/LazyByteStringBuilderAndTextArray.hs view
@@ -9,7 +9,7 @@ import qualified Data.ByteString.Lazy import qualified Data.ByteString.Short import qualified Data.Text.Array-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import qualified LawfulConversions.TextCompat.Array
src/library/LawfulConversions/Relations/LazyByteStringBuilderAndWord8List.hs view
@@ -4,7 +4,7 @@ import qualified Data.ByteString.Builder import qualified Data.ByteString.Lazy-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.ByteString.Builder.Builder [Word8] where
src/library/LawfulConversions/Relations/LazyTextAndLazyTextBuilder.hs view
@@ -4,7 +4,7 @@ import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Builder-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.Text.Lazy.Text Data.Text.Lazy.Builder.Builder where
src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs view
@@ -7,7 +7,7 @@ import qualified Data.Text.Encoding import qualified Data.Text.Lazy-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.Text.Lazy.Text Data.Text.Encoding.StrictTextBuilder where@@ -28,7 +28,7 @@ import qualified Data.Text.Encoding import qualified Data.Text.Lazy-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.Text.Lazy.Text Data.Text.Encoding.StrictBuilder where
src/library/LawfulConversions/Relations/LazyTextAndString.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.LazyTextAndString where import qualified Data.Text.Lazy-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.StringAndText ()
src/library/LawfulConversions/Relations/LazyTextAndText.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.LazyTextAndText where import qualified Data.Text.Lazy-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.Text.Lazy.Text Text where
src/library/LawfulConversions/Relations/LazyTextAndUtcTime.hs view
@@ -4,7 +4,7 @@ import qualified Data.Text.Lazy import Data.Time-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.LazyTextAndString () import LawfulConversions.Relations.StringAndUtcTime ()
src/library/LawfulConversions/Relations/LazyTextAndUuid.hs view
@@ -4,7 +4,7 @@ import qualified Data.Text.Lazy import qualified Data.UUID.Types-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.Text.Lazy.Text UUID where
src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs view
@@ -8,7 +8,7 @@ import qualified Data.Text.Encoding import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Builder-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.Text.Lazy.Builder.Builder Data.Text.Encoding.StrictTextBuilder where@@ -30,7 +30,7 @@ import qualified Data.Text.Encoding import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Builder-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.Text.Lazy.Builder.Builder Data.Text.Encoding.StrictBuilder where
src/library/LawfulConversions/Relations/LazyTextBuilderAndString.hs view
@@ -4,7 +4,7 @@ import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Builder-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.StringAndText ()
src/library/LawfulConversions/Relations/LazyTextBuilderAndText.hs view
@@ -4,7 +4,7 @@ import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Builder-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.Text.Lazy.Builder.Builder Text where
src/library/LawfulConversions/Relations/LazyTextBuilderAndUtcTime.hs view
@@ -4,7 +4,7 @@ import qualified Data.Text.Lazy.Builder import Data.Time-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.LazyTextBuilderAndString () import LawfulConversions.Relations.StringAndUtcTime ()
src/library/LawfulConversions/Relations/LazyTextBuilderAndUuid.hs view
@@ -5,7 +5,7 @@ import qualified Data.Text.Lazy import qualified Data.Text.Lazy.Builder import qualified Data.UUID.Types-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.Text.Lazy.Builder.Builder UUID where
src/library/LawfulConversions/Relations/ListAndSeq.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.ListAndSeq where import qualified Data.Sequence-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome [a] (Seq a) where
src/library/LawfulConversions/Relations/ShortByteStringAndTextArray.hs view
@@ -7,7 +7,7 @@ import qualified Data.ByteString.Short import qualified Data.Text.Array-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import qualified LawfulConversions.TextCompat.Array
src/library/LawfulConversions/Relations/ShortByteStringAndWord8List.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.ShortByteStringAndWord8List where import qualified Data.ByteString.Short-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.ByteArrayAndShortByteString ()
src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs view
@@ -6,7 +6,7 @@ #if MIN_VERSION_text(2,1,2) import qualified Data.Text.Encoding-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Relations.StringAndText () import LawfulConversions.Prelude @@ -20,7 +20,7 @@ #elif MIN_VERSION_text(2,0,2) import qualified Data.Text.Encoding-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Relations.StringAndText () import LawfulConversions.Prelude
src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs view
@@ -6,7 +6,7 @@ #if MIN_VERSION_text(2,1,2) import qualified Data.Text.Encoding-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Text Data.Text.Encoding.StrictTextBuilder where@@ -26,7 +26,7 @@ #elif MIN_VERSION_text(2,0,2) import qualified Data.Text.Encoding-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Text Data.Text.Encoding.StrictBuilder where
src/library/LawfulConversions/Relations/StrictTextBuilderAndUtcTime.hs view
@@ -7,7 +7,7 @@ import qualified Data.Text.Encoding import Data.Time-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.StrictTextBuilderAndString () import LawfulConversions.Relations.StringAndText ()@@ -22,7 +22,7 @@ import qualified Data.Text.Encoding import Data.Time-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.StrictTextBuilderAndString () import LawfulConversions.Relations.StringAndText ()
src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs view
@@ -7,7 +7,7 @@ import qualified Data.UUID.Types import qualified Data.Text.Encoding-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.Text.Encoding.StrictTextBuilder UUID where@@ -18,7 +18,7 @@ import qualified Data.UUID.Types import qualified Data.Text.Encoding-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Data.Text.Encoding.StrictBuilder UUID where
src/library/LawfulConversions/Relations/StringAndText.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.StringAndText where import qualified Data.Text as Text-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome String Text where
src/library/LawfulConversions/Relations/StringAndUtcTime.hs view
@@ -4,7 +4,7 @@ import Data.Time import Data.Time.Format.ISO8601-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude -- | Implements ISO-8601.
src/library/LawfulConversions/Relations/StringAndUuid.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.StringAndUuid where import qualified Data.UUID.Types-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome String UUID where
src/library/LawfulConversions/Relations/TextAndUtcTime.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.TextAndUtcTime where import Data.Time-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import LawfulConversions.Relations.StringAndText () import LawfulConversions.Relations.StringAndUtcTime ()
src/library/LawfulConversions/Relations/TextAndUuid.hs view
@@ -3,7 +3,7 @@ module LawfulConversions.Relations.TextAndUuid where import qualified Data.UUID.Types as Uuid-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude instance IsSome Text UUID where
src/library/LawfulConversions/Relations/TextArrayAndWord8List.hs view
@@ -7,7 +7,7 @@ import qualified Data.ByteString.Short import qualified Data.Text.Array-import LawfulConversions.Classes+import LawfulConversions.Algebra import LawfulConversions.Prelude import qualified LawfulConversions.TextCompat.Array