packages feed

witch 1.1.1.0 → 1.1.2.0

raw patch · 4 files changed

+128/−1 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Witch.Encoding: type UTF_16LE = Tagged "UTF-16LE"
+ Witch.Instances: instance Witch.From.From Data.Text.Internal.Lazy.Text (Witch.Encoding.UTF_16LE Data.ByteString.Internal.ByteString)
+ Witch.Instances: instance Witch.From.From Data.Text.Internal.Lazy.Text (Witch.Encoding.UTF_16LE Data.ByteString.Lazy.Internal.ByteString)
+ Witch.Instances: instance Witch.From.From Data.Text.Internal.Text (Witch.Encoding.UTF_16LE Data.ByteString.Internal.ByteString)
+ Witch.Instances: instance Witch.From.From Data.Text.Internal.Text (Witch.Encoding.UTF_16LE Data.ByteString.Lazy.Internal.ByteString)
+ Witch.Instances: instance Witch.From.From GHC.Base.String (Witch.Encoding.UTF_16LE Data.ByteString.Internal.ByteString)
+ Witch.Instances: instance Witch.From.From GHC.Base.String (Witch.Encoding.UTF_16LE Data.ByteString.Lazy.Internal.ByteString)
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_16LE Data.ByteString.Internal.ByteString) Data.Text.Internal.Lazy.Text
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_16LE Data.ByteString.Internal.ByteString) Data.Text.Internal.Text
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_16LE Data.ByteString.Internal.ByteString) GHC.Base.String
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_16LE Data.ByteString.Lazy.Internal.ByteString) Data.Text.Internal.Lazy.Text
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_16LE Data.ByteString.Lazy.Internal.ByteString) Data.Text.Internal.Text
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_16LE Data.ByteString.Lazy.Internal.ByteString) GHC.Base.String
+ Witch.Instances: tryEvaluate :: Exception e => a -> Either e a

Files

source/library/Witch/Encoding.hs view
@@ -9,3 +9,6 @@  -- | <https://en.wikipedia.org/wiki/UTF-8> type UTF_8 = Tagged.Tagged "UTF-8"++-- | <https://en.wikipedia.org/wiki/UTF-16>+type UTF_16LE = Tagged.Tagged "UTF-16LE"
source/library/Witch/Instances.hs view
@@ -31,6 +31,7 @@ import qualified Data.Tagged as Tagged import qualified Data.Text as Text import qualified Data.Text.Encoding as Text+import qualified Data.Text.Encoding.Error as Text import qualified Data.Text.Lazy as LazyText import qualified Data.Text.Lazy.Encoding as LazyText import qualified Data.Time as Time@@ -41,6 +42,7 @@ import qualified GHC.Float as Float import qualified Numeric import qualified Numeric.Natural as Natural+import qualified System.IO.Unsafe as Unsafe import qualified Witch.Encoding as Encoding import qualified Witch.From as From import qualified Witch.TryFrom as TryFrom@@ -1334,6 +1336,56 @@ instance From.From String (Encoding.UTF_8 LazyByteString.ByteString) where   from = Utility.via @LazyText.Text +-- UTF-16LE++-- | Uses 'Text.decodeUtf16LE'.+instance TryFrom.TryFrom (Encoding.UTF_16LE ByteString.ByteString) Text.Text where+  tryFrom = Utility.eitherTryFrom $ tryEvaluate @Text.UnicodeException . Text.decodeUtf16LE . From.from++-- | Converts via 'Text.Text'.+instance TryFrom.TryFrom (Encoding.UTF_16LE ByteString.ByteString) LazyText.Text where+  tryFrom = Utility.eitherTryFrom $ fmap (Utility.into @LazyText.Text) . Utility.tryInto @Text.Text++-- | Converts via 'Text.Text'.+instance TryFrom.TryFrom (Encoding.UTF_16LE ByteString.ByteString) String where+  tryFrom = Utility.eitherTryFrom $ fmap (Utility.into @String) . Utility.tryInto @Text.Text++-- | Uses 'LazyText.decodeUtf16LE'.+instance TryFrom.TryFrom (Encoding.UTF_16LE LazyByteString.ByteString) LazyText.Text where+  tryFrom = Utility.eitherTryFrom $ tryEvaluate @Text.UnicodeException . LazyText.decodeUtf16LE . From.from++-- | Converts via 'LazyText.Text'.+instance TryFrom.TryFrom (Encoding.UTF_16LE LazyByteString.ByteString) Text.Text where+  tryFrom = Utility.eitherTryFrom $ fmap (Utility.into @Text.Text) . Utility.tryInto @LazyText.Text++-- | Converts via 'LazyText.Text'.+instance TryFrom.TryFrom (Encoding.UTF_16LE LazyByteString.ByteString) String where+  tryFrom = Utility.eitherTryFrom $ fmap (Utility.into @String) . Utility.tryInto @LazyText.Text++-- | Uses 'Text.encodeUtf16LE'.+instance From.From Text.Text (Encoding.UTF_16LE ByteString.ByteString) where+  from = From.from . Text.encodeUtf16LE++-- | Converts via 'ByteString.ByteString'.+instance From.From Text.Text (Encoding.UTF_16LE LazyByteString.ByteString) where+  from = fmap From.from . Utility.into @(Encoding.UTF_16LE ByteString.ByteString)++-- | Uses 'LazyText.encodeUtf16LE'.+instance From.From LazyText.Text (Encoding.UTF_16LE LazyByteString.ByteString) where+  from = From.from . LazyText.encodeUtf16LE++-- | Converts via 'LazyByteString.ByteString'.+instance From.From LazyText.Text (Encoding.UTF_16LE ByteString.ByteString) where+  from = fmap From.from . Utility.into @(Encoding.UTF_16LE LazyByteString.ByteString)++-- | Converts via 'Text.Text'.+instance From.From String (Encoding.UTF_16LE ByteString.ByteString) where+  from = Utility.via @Text.Text++-- | Converts via 'LazyText.Text'.+instance From.From String (Encoding.UTF_16LE LazyByteString.ByteString) where+  from = Utility.via @LazyText.Text+ --  realFloatToRational ::@@ -1374,3 +1426,6 @@ -- 'Double'. Equal to 9,007,199,254,740,991. maxDouble :: Num a => a maxDouble = 9007199254740991++tryEvaluate :: Exception.Exception e => a -> Either e a+tryEvaluate = Unsafe.unsafePerformIO . Exception.try . Exception.evaluate
source/test-suite/Main.hs view
@@ -2162,6 +2162,75 @@         f "" `shouldBe` Tagged.Tagged (LazyByteString.pack [])         f "a" `shouldBe` Tagged.Tagged (LazyByteString.pack [0x61]) +    describe "TryFrom (UTF_16LE ByteString) Text" $ do+      let f = hush . Witch.tryFrom @(Encoding.UTF_16LE ByteString.ByteString) @Text.Text+      it "works" $ do+        f (Tagged.Tagged (ByteString.pack [])) `shouldBe` Just (Text.pack "")+        f (Tagged.Tagged (ByteString.pack [0x24, 0x00])) `shouldBe` Just (Text.pack "\x24")+        f (Tagged.Tagged (ByteString.pack [0xa3, 0x00])) `shouldBe` Just (Text.pack "\xa3")+        f (Tagged.Tagged (ByteString.pack [0xac, 0x20])) `shouldBe` Just (Text.pack "\x20ac")+        f (Tagged.Tagged (ByteString.pack [0x00, 0xd8, 0x48, 0xdf])) `shouldBe` Just (Text.pack "\x10348")+        f (Tagged.Tagged (ByteString.pack [0x00])) `shouldBe` Nothing++    describe "TryFrom (UTF_16LE ByteString) LazyText" $ do+      let f = hush . Witch.tryFrom @(Encoding.UTF_16LE ByteString.ByteString) @LazyText.Text+      it "works" $ do+        f (Tagged.Tagged (ByteString.pack [0x61, 0x00])) `shouldBe` Just (LazyText.pack "a")++    describe "TryFrom (UTF_16LE ByteString) String" $ do+      let f = hush . Witch.tryFrom @(Encoding.UTF_16LE ByteString.ByteString) @String+      it "works" $ do+        f (Tagged.Tagged (ByteString.pack [0x61, 0x00])) `shouldBe` Just "a"++    describe "TryFrom (UTF_16LE LazyByteString) LazyText" $ do+      let f = hush . Witch.tryFrom @(Encoding.UTF_16LE LazyByteString.ByteString) @LazyText.Text+      it "works" $ do+        f (Tagged.Tagged (LazyByteString.pack [0x61, 0x00])) `shouldBe` Just (LazyText.pack "a")++    describe "TryFrom (UTF_16LE LazyByteString) Text" $ do+      let f = hush . Witch.tryFrom @(Encoding.UTF_16LE LazyByteString.ByteString) @Text.Text+      it "works" $ do+        f (Tagged.Tagged (LazyByteString.pack [0x61, 0x00])) `shouldBe` Just (Text.pack "a")++    describe "TryFrom (UTF_16LE LazyByteString) String" $ do+      let f = hush . Witch.tryFrom @(Encoding.UTF_16LE LazyByteString.ByteString) @String+      it "works" $ do+        f (Tagged.Tagged (LazyByteString.pack [0x61, 0x00])) `shouldBe` Just "a"++    describe "From Text (UTF_16LE ByteString)" $ do+      let f = Witch.from @Text.Text @(Encoding.UTF_16LE ByteString.ByteString)+      it "works" $ do+        f (Text.pack "") `shouldBe` Tagged.Tagged (ByteString.pack [])+        f (Text.pack "\x24") `shouldBe` Tagged.Tagged (ByteString.pack [0x24, 0x00])+        f (Text.pack "\xa3") `shouldBe` Tagged.Tagged (ByteString.pack [0xa3, 0x00])+        f (Text.pack "\x20ac") `shouldBe` Tagged.Tagged (ByteString.pack [0xac, 0x20])+        f (Text.pack "\x10348") `shouldBe` Tagged.Tagged (ByteString.pack [0x00, 0xd8, 0x48, 0xdf])++    describe "From Text (UTF_16LE LazyByteString)" $ do+      let f = Witch.from @Text.Text @(Encoding.UTF_16LE LazyByteString.ByteString)+      it "works" $ do+        f (Text.pack "a") `shouldBe` Tagged.Tagged (LazyByteString.pack [0x61, 0x00])++    describe "From LazyText (UTF_16LE LazyByteString)" $ do+      let f = Witch.from @LazyText.Text @(Encoding.UTF_16LE LazyByteString.ByteString)+      it "works" $ do+        f (LazyText.pack "a") `shouldBe` Tagged.Tagged (LazyByteString.pack [0x61, 0x00])++    describe "From LazyText (UTF_16LE ByteString)" $ do+      let f = Witch.from @LazyText.Text @(Encoding.UTF_16LE ByteString.ByteString)+      it "works" $ do+        f (LazyText.pack "a") `shouldBe` Tagged.Tagged (ByteString.pack [0x61, 0x00])++    describe "From String (UTF_16LE ByteString)" $ do+      let f = Witch.from @String @(Encoding.UTF_16LE ByteString.ByteString)+      it "works" $ do+        f "a" `shouldBe` Tagged.Tagged (ByteString.pack [0x61, 0x00])++    describe "From String (UTF_16LE LazyByteString)" $ do+      let f = Witch.from @String @(Encoding.UTF_16LE LazyByteString.ByteString)+      it "works" $ do+        f "a" `shouldBe` Tagged.Tagged (LazyByteString.pack [0x61, 0x00])+ newtype Age   = Age Int.Int8   deriving (Eq, Show)
witch.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.2  name: witch-version: 1.1.1.0+version: 1.1.2.0 synopsis: Convert values from one type into another. description: Witch converts values from one type into another.