packages feed

text-builder-lawful-conversions (empty) → 0.1

raw patch · 12 files changed

+445/−0 lines, 12 filesdep +QuickCheckdep +basedep +hspec

Dependencies added: QuickCheck, base, hspec, lawful-conversions, quickcheck-instances, text, text-builder, text-builder-core, text-builder-lawful-conversions

Files

+ LICENSE view
@@ -0,0 +1,22 @@+Copyright (c) 2025, Nikita Volkov++Permission is hereby granted, free of charge, to any person+obtaining a copy of this software and associated documentation+files (the "Software"), to deal in the Software without+restriction, including without limitation the rights to use,+copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the+Software is furnished to do so, subject to the following+conditions:++The above copyright notice and this permission notice shall be+included in all copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR+OTHER DEALINGS IN THE SOFTWARE.
+ src/hspec/Main.hs view
@@ -0,0 +1,37 @@+{-# OPTIONS_GHC -Wno-orphans #-}++module Main (main) where++import Data.Proxy (Proxy (..))+import qualified Data.Text+import qualified Data.Text.Lazy+import qualified Data.Text.Lazy.Builder+import qualified Main.Conversions.StrictBuilder+import qualified Main.Conversions.StrictTextBuilder+import Main.LawfulConversionsHspec+import Test.Hspec+import Test.QuickCheck.Arbitrary+import Test.QuickCheck.Instances ()+import TextBuilder (TextBuilder)+import TextBuilderLawfulConversions ()+import Prelude++main :: IO ()+main = hspec do+  describe "Data.Text.Text" do+    allIs (Proxy @Data.Text.Text) (Proxy @TextBuilder)++  describe "Data.Text.Lazy.Text" do+    allIs (Proxy @Data.Text.Lazy.Text) (Proxy @TextBuilder)++  describe "Data.Text.Lazy.Builder.Builder" do+    allIs (Proxy @Data.Text.Lazy.Builder.Builder) (Proxy @TextBuilder)++  describe "Data.Text.Encoding.StrictBuilder" do+    Main.Conversions.StrictBuilder.spec++  describe "Data.Text.Encoding.StrictTextBuilder" do+    Main.Conversions.StrictTextBuilder.spec++instance Arbitrary Data.Text.Lazy.Builder.Builder where+  arbitrary = Data.Text.Lazy.Builder.fromText <$> arbitrary
+ src/hspec/Main/Conversions/StrictBuilder.hs view
@@ -0,0 +1,40 @@+{-# LANGUAGE CPP #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Main.Conversions.StrictBuilder (spec) where++#if MIN_VERSION_text(2,0,2) && !MIN_VERSION_text(2,1,2)++import Data.Function+import Data.Proxy+import qualified Data.Text.Encoding as TextEncoding+import Main.LawfulConversionsHspec+import Test.Hspec+import Test.QuickCheck.Arbitrary+import TextBuilder (TextBuilder)+import Prelude++spec :: Spec+spec = allIs (Proxy @TextBuilder) (Proxy @TextEncoding.StrictBuilder)++instance Eq TextEncoding.StrictBuilder where+  a == b =+    on (==) TextEncoding.strictBuilderToText a b++instance Show TextEncoding.StrictBuilder where+  showsPrec d =+    showsPrec d . TextEncoding.strictBuilderToText++instance Arbitrary TextEncoding.StrictBuilder where+  arbitrary =+    TextEncoding.textToStrictBuilder <$> arbitrary++#else++import Test.Hspec+import Prelude++spec :: Spec+spec = pure ()++#endif
+ src/hspec/Main/Conversions/StrictTextBuilder.hs view
@@ -0,0 +1,40 @@+{-# LANGUAGE CPP #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module Main.Conversions.StrictTextBuilder (spec) where++#if MIN_VERSION_text(2,1,2)++import Data.Function+import Data.Proxy+import qualified Data.Text.Encoding as TextEncoding+import Main.LawfulConversionsHspec+import Test.Hspec+import Test.QuickCheck.Arbitrary+import TextBuilder (TextBuilder)+import Prelude++spec :: Spec+spec = allIs (Proxy @TextBuilder) (Proxy @TextEncoding.StrictTextBuilder)++instance Eq TextEncoding.StrictTextBuilder where+  a == b =+    on (==) TextEncoding.strictBuilderToText a b++instance Show TextEncoding.StrictTextBuilder where+  showsPrec d =+    showsPrec d . TextEncoding.strictBuilderToText++instance Arbitrary TextEncoding.StrictTextBuilder where+  arbitrary =+    TextEncoding.textToStrictBuilder <$> arbitrary++#else++import Test.Hspec+import Prelude++spec :: Spec+spec = pure ()++#endif
+ src/hspec/Main/LawfulConversionsHspec.hs view
@@ -0,0 +1,38 @@+module Main.LawfulConversionsHspec where++import Control.Monad (forM_)+import Data.Proxy (Proxy (..))+import qualified LawfulConversions+import Test.Hspec+import Test.Hspec.QuickCheck+import Test.QuickCheck (Arbitrary)+import Test.QuickCheck.Instances ()+import TextBuilderLawfulConversions ()+import Prelude++isSome :: (LawfulConversions.IsSome a b, Eq a, Eq b, Show a, Show b, Arbitrary b) => Proxy a -> Proxy b -> Spec+isSome a b = describe "IsSome" do+  forM_ (LawfulConversions.isSomeProperties a b) \(name, property) ->+    prop name property++isMany :: (LawfulConversions.IsMany a b, Eq a, Eq b, Show a, Show b, Arbitrary b) => Proxy a -> Proxy b -> Spec+isMany a b = describe "IsMany" do+  forM_ (LawfulConversions.isManyProperties a b) \(name, property) ->+    prop name property++is :: (LawfulConversions.Is a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) => Proxy a -> Proxy b -> Spec+is a b = describe "Is" do+  forM_ (LawfulConversions.isProperties a b) \(name, property) ->+    prop name property++allIs :: (LawfulConversions.Is a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) => Proxy a -> Proxy b -> Spec+allIs a b = do+  describe "Forward" do+    isSome a b+    isMany a b+    is a b++  describe "Backward" do+    isSome b a+    isMany b a+    is b a
+ src/library/TextBuilderLawfulConversions.hs view
@@ -0,0 +1,7 @@+module TextBuilderLawfulConversions () where++import TextBuilderLawfulConversions.LazyBuilder ()+import TextBuilderLawfulConversions.LazyText ()+import TextBuilderLawfulConversions.StrictBuilder ()+import TextBuilderLawfulConversions.StrictText ()+import TextBuilderLawfulConversions.StrictTextBuilder ()
+ src/library/TextBuilderLawfulConversions/LazyBuilder.hs view
@@ -0,0 +1,22 @@+{-# OPTIONS_GHC -Wno-orphans #-}++module TextBuilderLawfulConversions.LazyBuilder where++import qualified Data.Text.Lazy.Builder+import LawfulConversions+import TextBuilder+import Prelude++instance IsSome Data.Text.Lazy.Builder.Builder TextBuilder where+  to = Data.Text.Lazy.Builder.fromText . toText++instance IsSome TextBuilder Data.Text.Lazy.Builder.Builder where+  to = lazyText . Data.Text.Lazy.Builder.toLazyText++instance IsMany Data.Text.Lazy.Builder.Builder TextBuilder++instance IsMany TextBuilder Data.Text.Lazy.Builder.Builder++instance Is Data.Text.Lazy.Builder.Builder TextBuilder++instance Is TextBuilder Data.Text.Lazy.Builder.Builder
+ src/library/TextBuilderLawfulConversions/LazyText.hs view
@@ -0,0 +1,22 @@+{-# OPTIONS_GHC -Wno-orphans #-}++module TextBuilderLawfulConversions.LazyText where++import qualified Data.Text.Lazy+import LawfulConversions+import TextBuilder+import Prelude++instance IsSome Data.Text.Lazy.Text TextBuilder where+  to = to . toText++instance IsSome TextBuilder Data.Text.Lazy.Text where+  to = lazyText++instance IsMany Data.Text.Lazy.Text TextBuilder++instance IsMany TextBuilder Data.Text.Lazy.Text++instance Is Data.Text.Lazy.Text TextBuilder++instance Is TextBuilder Data.Text.Lazy.Text
+ src/library/TextBuilderLawfulConversions/StrictBuilder.hs view
@@ -0,0 +1,41 @@+{-# LANGUAGE CPP #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module TextBuilderLawfulConversions.StrictBuilder where++#if MIN_VERSION_text(2,0,2) && !MIN_VERSION_text(2,1,2)++import Data.Functor+import Data.Text.Internal.StrictBuilder+import LawfulConversions+import TextBuilder (TextBuilder)+import qualified TextBuilderCore+import Prelude++instance IsSome StrictBuilder TextBuilder where+  {-# INLINE to #-}+  to (TextBuilderCore.TextBuilder size write) =+    StrictBuilder+      size+      ( \array offset ->+          write array offset $> ()+      )++instance IsSome TextBuilder StrictBuilder where+  {-# INLINE to #-}+  to (StrictBuilder size write) =+    TextBuilderCore.TextBuilder+      size+      ( \array offset ->+          write array offset $> offset + size+      )++instance IsMany StrictBuilder TextBuilder++instance IsMany TextBuilder StrictBuilder++instance Is StrictBuilder TextBuilder++instance Is TextBuilder StrictBuilder++#endif
+ src/library/TextBuilderLawfulConversions/StrictText.hs view
@@ -0,0 +1,21 @@+{-# OPTIONS_GHC -Wno-orphans #-}++module TextBuilderLawfulConversions.StrictText where++import qualified Data.Text+import LawfulConversions+import TextBuilder++instance IsSome Data.Text.Text TextBuilder where+  to = toText++instance IsSome TextBuilder Data.Text.Text where+  to = text++instance IsMany Data.Text.Text TextBuilder++instance IsMany TextBuilder Data.Text.Text++instance Is Data.Text.Text TextBuilder++instance Is TextBuilder Data.Text.Text
+ src/library/TextBuilderLawfulConversions/StrictTextBuilder.hs view
@@ -0,0 +1,41 @@+{-# LANGUAGE CPP #-}+{-# OPTIONS_GHC -Wno-orphans #-}++module TextBuilderLawfulConversions.StrictTextBuilder where++#if MIN_VERSION_text(2,1,2)++import Data.Functor+import Data.Text.Internal.StrictBuilder+import LawfulConversions+import TextBuilder (TextBuilder)+import qualified TextBuilderCore+import Prelude++instance IsSome StrictTextBuilder TextBuilder where+  {-# INLINE to #-}+  to (TextBuilderCore.TextBuilder size write) =+    StrictTextBuilder+      size+      ( \array offset ->+          write array offset $> ()+      )++instance IsSome TextBuilder StrictTextBuilder where+  {-# INLINE to #-}+  to (StrictTextBuilder size write) =+    TextBuilderCore.TextBuilder+      size+      ( \array offset ->+          write array offset $> offset + size+      )++instance IsMany StrictTextBuilder TextBuilder++instance IsMany TextBuilder StrictTextBuilder++instance Is StrictTextBuilder TextBuilder++instance Is TextBuilder StrictTextBuilder++#endif
+ text-builder-lawful-conversions.cabal view
@@ -0,0 +1,114 @@+cabal-version: 3.0+name: text-builder-lawful-conversions+version: 0.1+category: Text, Builders, Conversions+synopsis: Orphan instances of "lawful-conversions" for "text-builder"+homepage: https://github.com/nikita-volkov/text-builder-lawful-conversions+bug-reports: https://github.com/nikita-volkov/text-builder-lawful-conversions/issues+author: Nikita Volkov <nikita.y.volkov@mail.ru>+maintainer: Nikita Volkov <nikita.y.volkov@mail.ru>+copyright: (c) 2025, Nikita Volkov+license: MIT+license-file: LICENSE++source-repository head+  type: git+  location: https://github.com/nikita-volkov/text-builder-lawful-conversions++common base+  default-language: Haskell2010+  default-extensions:+    BangPatterns+    BlockArguments+    ConstraintKinds+    DataKinds+    DefaultSignatures+    DeriveDataTypeable+    DeriveFoldable+    DeriveFunctor+    DeriveGeneric+    DeriveTraversable+    DerivingStrategies+    EmptyDataDecls+    FlexibleContexts+    FlexibleInstances+    FunctionalDependencies+    GADTs+    GeneralizedNewtypeDeriving+    LambdaCase+    LiberalTypeSynonyms+    MagicHash+    MultiParamTypeClasses+    MultiWayIf+    NoImplicitPrelude+    NoMonomorphismRestriction+    NumericUnderscores+    OverloadedStrings+    ParallelListComp+    PatternGuards+    QuasiQuotes+    RankNTypes+    RecordWildCards+    ScopedTypeVariables+    StandaloneDeriving+    StrictData+    TemplateHaskell+    TupleSections+    TypeApplications+    TypeFamilies+    TypeOperators+    UnboxedTuples+    ViewPatterns++common executable+  import: base+  ghc-options:+    -O2+    -threaded+    "-with-rtsopts=-N -I0 -qg"++common test+  import: base+  ghc-options:+    -threaded+    "-with-rtsopts=-N -I0 -qg"++library+  import: base+  hs-source-dirs: src/library+  exposed-modules:+    TextBuilderLawfulConversions++  other-modules:+    TextBuilderLawfulConversions.LazyBuilder+    TextBuilderLawfulConversions.LazyText+    TextBuilderLawfulConversions.StrictBuilder+    TextBuilderLawfulConversions.StrictText+    TextBuilderLawfulConversions.StrictTextBuilder++  build-depends:+    base >=4.13 && <5,+    lawful-conversions ^>=0.1.7,+    text >=1.2 && <3,+    text-builder ^>=1.0.0.1,+    text-builder-core ^>=0.1.1.1,++test-suite hspec+  import: test+  type: exitcode-stdio-1.0+  hs-source-dirs: src/hspec+  main-is: Main.hs+  other-modules:+    Main.Conversions.StrictBuilder+    Main.Conversions.StrictTextBuilder+    Main.LawfulConversionsHspec++  build-depends:+    QuickCheck >=2.15 && <3,+    base,+    hspec >=2.11 && <3,+    lawful-conversions,+    quickcheck-instances ^>=0.3.32,+    text,+    text-builder,+    text-builder-lawful-conversions,