witch 1.1.0.0 → 1.1.1.0
raw patch · 5 files changed
+278/−140 lines, 5 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Witch.Instances: instance Witch.From.From Data.Text.Internal.Lazy.Text (Data.Tagged.Tagged "UTF-8" Data.ByteString.Internal.ByteString)
- Witch.Instances: instance Witch.From.From Data.Text.Internal.Lazy.Text (Data.Tagged.Tagged "UTF-8" Data.ByteString.Lazy.Internal.ByteString)
- Witch.Instances: instance Witch.From.From Data.Text.Internal.Text (Data.Tagged.Tagged "UTF-8" Data.ByteString.Internal.ByteString)
- Witch.Instances: instance Witch.From.From Data.Text.Internal.Text (Data.Tagged.Tagged "UTF-8" Data.ByteString.Lazy.Internal.ByteString)
- Witch.Instances: instance Witch.From.From GHC.Base.String (Data.Tagged.Tagged "UTF-8" Data.ByteString.Internal.ByteString)
- Witch.Instances: instance Witch.From.From GHC.Base.String (Data.Tagged.Tagged "UTF-8" Data.ByteString.Lazy.Internal.ByteString)
- Witch.Instances: instance Witch.TryFrom.TryFrom (Data.Tagged.Tagged "UTF-8" Data.ByteString.Internal.ByteString) Data.Text.Internal.Lazy.Text
- Witch.Instances: instance Witch.TryFrom.TryFrom (Data.Tagged.Tagged "UTF-8" Data.ByteString.Internal.ByteString) Data.Text.Internal.Text
- Witch.Instances: instance Witch.TryFrom.TryFrom (Data.Tagged.Tagged "UTF-8" Data.ByteString.Internal.ByteString) GHC.Base.String
- Witch.Instances: instance Witch.TryFrom.TryFrom (Data.Tagged.Tagged "UTF-8" Data.ByteString.Lazy.Internal.ByteString) Data.Text.Internal.Lazy.Text
- Witch.Instances: instance Witch.TryFrom.TryFrom (Data.Tagged.Tagged "UTF-8" Data.ByteString.Lazy.Internal.ByteString) Data.Text.Internal.Text
- Witch.Instances: instance Witch.TryFrom.TryFrom (Data.Tagged.Tagged "UTF-8" Data.ByteString.Lazy.Internal.ByteString) GHC.Base.String
+ Witch.Encoding: type ISO_8859_1 = Tagged "ISO-8859-1"
+ Witch.Encoding: type UTF_8 = Tagged "UTF-8"
+ Witch.Instances: instance Witch.From.From (Witch.Encoding.ISO_8859_1 Data.ByteString.Internal.ByteString) Data.Text.Internal.Lazy.Text
+ Witch.Instances: instance Witch.From.From (Witch.Encoding.ISO_8859_1 Data.ByteString.Internal.ByteString) Data.Text.Internal.Text
+ Witch.Instances: instance Witch.From.From (Witch.Encoding.ISO_8859_1 Data.ByteString.Internal.ByteString) GHC.Base.String
+ Witch.Instances: instance Witch.From.From (Witch.Encoding.ISO_8859_1 Data.ByteString.Lazy.Internal.ByteString) Data.Text.Internal.Lazy.Text
+ Witch.Instances: instance Witch.From.From (Witch.Encoding.ISO_8859_1 Data.ByteString.Lazy.Internal.ByteString) Data.Text.Internal.Text
+ Witch.Instances: instance Witch.From.From (Witch.Encoding.ISO_8859_1 Data.ByteString.Lazy.Internal.ByteString) GHC.Base.String
+ Witch.Instances: instance Witch.From.From Data.Text.Internal.Lazy.Text (Witch.Encoding.UTF_8 Data.ByteString.Internal.ByteString)
+ Witch.Instances: instance Witch.From.From Data.Text.Internal.Lazy.Text (Witch.Encoding.UTF_8 Data.ByteString.Lazy.Internal.ByteString)
+ Witch.Instances: instance Witch.From.From Data.Text.Internal.Text (Witch.Encoding.UTF_8 Data.ByteString.Internal.ByteString)
+ Witch.Instances: instance Witch.From.From Data.Text.Internal.Text (Witch.Encoding.UTF_8 Data.ByteString.Lazy.Internal.ByteString)
+ Witch.Instances: instance Witch.From.From GHC.Base.String (Witch.Encoding.UTF_8 Data.ByteString.Internal.ByteString)
+ Witch.Instances: instance Witch.From.From GHC.Base.String (Witch.Encoding.UTF_8 Data.ByteString.Lazy.Internal.ByteString)
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_8 Data.ByteString.Internal.ByteString) Data.Text.Internal.Lazy.Text
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_8 Data.ByteString.Internal.ByteString) Data.Text.Internal.Text
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_8 Data.ByteString.Internal.ByteString) GHC.Base.String
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_8 Data.ByteString.Lazy.Internal.ByteString) Data.Text.Internal.Lazy.Text
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_8 Data.ByteString.Lazy.Internal.ByteString) Data.Text.Internal.Text
+ Witch.Instances: instance Witch.TryFrom.TryFrom (Witch.Encoding.UTF_8 Data.ByteString.Lazy.Internal.ByteString) GHC.Base.String
+ Witch.Instances: instance Witch.TryFrom.TryFrom Data.Text.Internal.Lazy.Text (Witch.Encoding.ISO_8859_1 Data.ByteString.Internal.ByteString)
+ Witch.Instances: instance Witch.TryFrom.TryFrom Data.Text.Internal.Lazy.Text (Witch.Encoding.ISO_8859_1 Data.ByteString.Lazy.Internal.ByteString)
+ Witch.Instances: instance Witch.TryFrom.TryFrom Data.Text.Internal.Text (Witch.Encoding.ISO_8859_1 Data.ByteString.Internal.ByteString)
+ Witch.Instances: instance Witch.TryFrom.TryFrom Data.Text.Internal.Text (Witch.Encoding.ISO_8859_1 Data.ByteString.Lazy.Internal.ByteString)
+ Witch.Instances: instance Witch.TryFrom.TryFrom GHC.Base.String (Witch.Encoding.ISO_8859_1 Data.ByteString.Internal.ByteString)
+ Witch.Instances: instance Witch.TryFrom.TryFrom GHC.Base.String (Witch.Encoding.ISO_8859_1 Data.ByteString.Lazy.Internal.ByteString)
Files
- source/library/Witch.hs +3/−0
- source/library/Witch/Encoding.hs +11/−0
- source/library/Witch/Instances.hs +109/−61
- source/test-suite/Main.hs +153/−78
- witch.cabal +2/−1
source/library/Witch.hs view
@@ -8,6 +8,9 @@ -- In typical usage, the functions that you will use most often are -- 'Witch.Utility.into' for conversions that always succeed and -- 'Witch.Utility.tryInto' for conversions that sometimes fail.+--+-- Please consider reading the blog post that announces this library:+-- <https://taylor.fausak.me/2021/07/13/witch/> module Witch ( -- * Type classes
+ source/library/Witch/Encoding.hs view
@@ -0,0 +1,11 @@+{-# LANGUAGE DataKinds #-}++module Witch.Encoding where++import qualified Data.Tagged as Tagged++-- | <https://en.wikipedia.org/wiki/ISO/IEC_8859-1>+type ISO_8859_1 = Tagged.Tagged "ISO-8859-1"++-- | <https://en.wikipedia.org/wiki/UTF-8>+type UTF_8 = Tagged.Tagged "UTF-8"
source/library/Witch/Instances.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PolyKinds #-}@@ -9,10 +8,14 @@ module Witch.Instances where import qualified Control.Exception as Exception+import qualified Control.Monad as Monad import qualified Data.Bits as Bits import qualified Data.ByteString as ByteString+import qualified Data.ByteString.Char8 as Char8 import qualified Data.ByteString.Lazy as LazyByteString+import qualified Data.ByteString.Lazy.Char8 as LazyChar8 import qualified Data.ByteString.Short as ShortByteString+import qualified Data.Char as Char import qualified Data.Complex as Complex import qualified Data.Fixed as Fixed import qualified Data.Foldable as Foldable@@ -38,6 +41,7 @@ import qualified GHC.Float as Float import qualified Numeric import qualified Numeric.Natural as Natural+import qualified Witch.Encoding as Encoding import qualified Witch.From as From import qualified Witch.TryFrom as TryFrom import qualified Witch.TryFromException as TryFromException@@ -1039,24 +1043,6 @@ instance From.From ByteString.ByteString ShortByteString.ShortByteString where from = ShortByteString.toShort --- | Uses 'Text.decodeUtf8''.-instance TryFrom.TryFrom (Tagged.Tagged "UTF-8" ByteString.ByteString) Text.Text where- tryFrom = Utility.eitherTryFrom $ Text.decodeUtf8' . From.from---- | Converts via 'Text.Text'.-instance TryFrom.TryFrom (Tagged.Tagged "UTF-8" ByteString.ByteString) LazyText.Text where- tryFrom =- Utility.eitherTryFrom $- fmap (Utility.into @LazyText.Text)- . Utility.tryInto @Text.Text---- | Converts via 'Text.Text'.-instance TryFrom.TryFrom (Tagged.Tagged "UTF-8" ByteString.ByteString) String where- tryFrom =- Utility.eitherTryFrom $- fmap (Utility.into @String)- . Utility.tryInto @Text.Text- -- LazyByteString -- | Uses 'LazyByteString.pack'.@@ -1071,24 +1057,6 @@ instance From.From LazyByteString.ByteString ByteString.ByteString where from = LazyByteString.toStrict --- | Uses 'LazyText.decodeUtf8''.-instance TryFrom.TryFrom (Tagged.Tagged "UTF-8" LazyByteString.ByteString) LazyText.Text where- tryFrom = Utility.eitherTryFrom $ LazyText.decodeUtf8' . From.from---- | Converts via 'LazyText.Text'.-instance TryFrom.TryFrom (Tagged.Tagged "UTF-8" LazyByteString.ByteString) Text.Text where- tryFrom =- Utility.eitherTryFrom $- fmap (Utility.into @Text.Text)- . Utility.tryInto @LazyText.Text---- | Converts via 'LazyText.Text'.-instance TryFrom.TryFrom (Tagged.Tagged "UTF-8" LazyByteString.ByteString) String where- tryFrom =- Utility.eitherTryFrom $- fmap (Utility.into @String)- . Utility.tryInto @LazyText.Text- -- ShortByteString -- | Uses 'ShortByteString.pack'.@@ -1109,28 +1077,12 @@ instance From.From Text.Text LazyText.Text where from = LazyText.fromStrict --- | Uses 'Text.encodeUtf8'.-instance From.From Text.Text (Tagged.Tagged "UTF-8" ByteString.ByteString) where- from = From.from . Text.encodeUtf8---- | Converts via 'ByteString.ByteString'.-instance From.From Text.Text (Tagged.Tagged "UTF-8" LazyByteString.ByteString) where- from = fmap From.from . Utility.into @(Tagged.Tagged "UTF-8" ByteString.ByteString)- -- LazyText -- | Uses 'LazyText.toStrict'. instance From.From LazyText.Text Text.Text where from = LazyText.toStrict --- | Uses 'LazyText.encodeUtf8'.-instance From.From LazyText.Text (Tagged.Tagged "UTF-8" LazyByteString.ByteString) where- from = From.from . LazyText.encodeUtf8---- | Converts via 'LazyByteString.ByteString'.-instance From.From LazyText.Text (Tagged.Tagged "UTF-8" ByteString.ByteString) where- from = fmap From.from . Utility.into @(Tagged.Tagged "UTF-8" LazyByteString.ByteString)- -- String -- | Uses 'Text.pack'. Some 'Char' values cannot be represented in 'Text.Text'@@ -1151,14 +1103,6 @@ instance From.From LazyText.Text String where from = LazyText.unpack --- | Converts via 'Text.Text'.-instance From.From String (Tagged.Tagged "UTF-8" ByteString.ByteString) where- from = Utility.via @Text.Text---- | Converts via 'LazyText.Text'.-instance From.From String (Tagged.Tagged "UTF-8" LazyByteString.ByteString) where- from = Utility.via @LazyText.Text- -- TryFromException -- | Uses @coerce@.@@ -1285,6 +1229,110 @@ -- | Uses @coerce@. Essentially the same as 'Tagged.retag'. instance From.From (Tagged.Tagged t a) (Tagged.Tagged u a)++-- ISO-8859-1++-- | Uses 'Text.decodeLatin1'.+instance From.From (Encoding.ISO_8859_1 ByteString.ByteString) Text.Text where+ from = Text.decodeLatin1 . From.from++-- | Converts via 'Text.Text'.+instance From.From (Encoding.ISO_8859_1 ByteString.ByteString) LazyText.Text where+ from = Utility.via @Text.Text++-- | Converts via 'Text.Text'.+instance From.From (Encoding.ISO_8859_1 ByteString.ByteString) String where+ from = Utility.via @Text.Text++-- | Uses 'LazyText.decodeLatin1'.+instance From.From (Encoding.ISO_8859_1 LazyByteString.ByteString) LazyText.Text where+ from = LazyText.decodeLatin1 . From.from++-- | Converts via 'LazyText.Text'.+instance From.From (Encoding.ISO_8859_1 LazyByteString.ByteString) Text.Text where+ from = Utility.via @LazyText.Text++-- | Converts via 'LazyText.Text'.+instance From.From (Encoding.ISO_8859_1 LazyByteString.ByteString) String where+ from = Utility.via @LazyText.Text++-- | Converts via 'String'.+instance TryFrom.TryFrom Text.Text (Encoding.ISO_8859_1 ByteString.ByteString) where+ tryFrom = Utility.eitherTryFrom $ TryFrom.tryFrom . Utility.into @String++-- | Converts via 'String'.+instance TryFrom.TryFrom Text.Text (Encoding.ISO_8859_1 LazyByteString.ByteString) where+ tryFrom = Utility.eitherTryFrom $ TryFrom.tryFrom . Utility.into @String++-- | Converts via 'String'.+instance TryFrom.TryFrom LazyText.Text (Encoding.ISO_8859_1 LazyByteString.ByteString) where+ tryFrom = Utility.eitherTryFrom $ TryFrom.tryFrom . Utility.into @String++-- | Converts via 'String'.+instance TryFrom.TryFrom LazyText.Text (Encoding.ISO_8859_1 ByteString.ByteString) where+ tryFrom = Utility.eitherTryFrom $ TryFrom.tryFrom . Utility.into @String++-- | Uses 'Char8.pack' when each character 'Char.isLatin1'.+instance TryFrom.TryFrom String (Encoding.ISO_8859_1 ByteString.ByteString) where+ tryFrom = Utility.maybeTryFrom $ \string -> do+ Monad.guard $ all Char.isLatin1 string+ pure . From.from $ Char8.pack string++-- | Uses 'LazyChar8.pack' when each character 'Char.isLatin1'.+instance TryFrom.TryFrom String (Encoding.ISO_8859_1 LazyByteString.ByteString) where+ tryFrom = Utility.maybeTryFrom $ \string -> do+ Monad.guard $ all Char.isLatin1 string+ pure . From.from $ LazyChar8.pack string++-- UTF-8++-- | Uses 'Text.decodeUtf8''.+instance TryFrom.TryFrom (Encoding.UTF_8 ByteString.ByteString) Text.Text where+ tryFrom = Utility.eitherTryFrom $ Text.decodeUtf8' . From.from++-- | Converts via 'Text.Text'.+instance TryFrom.TryFrom (Encoding.UTF_8 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_8 ByteString.ByteString) String where+ tryFrom = Utility.eitherTryFrom $ fmap (Utility.into @String) . Utility.tryInto @Text.Text++-- | Uses 'LazyText.decodeUtf8''.+instance TryFrom.TryFrom (Encoding.UTF_8 LazyByteString.ByteString) LazyText.Text where+ tryFrom = Utility.eitherTryFrom $ LazyText.decodeUtf8' . From.from++-- | Converts via 'LazyText.Text'.+instance TryFrom.TryFrom (Encoding.UTF_8 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_8 LazyByteString.ByteString) String where+ tryFrom = Utility.eitherTryFrom $ fmap (Utility.into @String) . Utility.tryInto @LazyText.Text++-- | Uses 'Text.encodeUtf8'.+instance From.From Text.Text (Encoding.UTF_8 ByteString.ByteString) where+ from = From.from . Text.encodeUtf8++-- | Converts via 'ByteString.ByteString'.+instance From.From Text.Text (Encoding.UTF_8 LazyByteString.ByteString) where+ from = fmap From.from . Utility.into @(Encoding.UTF_8 ByteString.ByteString)++-- | Uses 'LazyText.encodeUtf8'.+instance From.From LazyText.Text (Encoding.UTF_8 LazyByteString.ByteString) where+ from = From.from . LazyText.encodeUtf8++-- | Converts via 'LazyByteString.ByteString'.+instance From.From LazyText.Text (Encoding.UTF_8 ByteString.ByteString) where+ from = fmap From.from . Utility.into @(Encoding.UTF_8 LazyByteString.ByteString)++-- | Converts via 'Text.Text'.+instance From.From String (Encoding.UTF_8 ByteString.ByteString) where+ from = Utility.via @Text.Text++-- | Converts via 'LazyText.Text'.+instance From.From String (Encoding.UTF_8 LazyByteString.ByteString) where+ from = Utility.via @LazyText.Text --
source/test-suite/Main.hs view
@@ -33,6 +33,7 @@ import qualified Numeric.Natural as Natural import qualified Test.HUnit as HUnit import qualified Witch+import qualified Witch.Encoding as Encoding main :: IO () main = HUnit.runTestTTAndExit $ specToTest spec@@ -1800,27 +1801,6 @@ f (ByteString.pack [0x00]) `shouldBe` ShortByteString.pack [0x00] f (ByteString.pack [0x0f, 0xf0]) `shouldBe` ShortByteString.pack [0x0f, 0xf0] - describe "TryFrom ByteString Text" $ do- let f = hush . Witch.tryFrom @(Tagged.Tagged "UTF-8" ByteString.ByteString) @Text.Text- it "works" $ do- f (Tagged.Tagged (ByteString.pack [])) `shouldBe` Just (Text.pack "")- f (Tagged.Tagged (ByteString.pack [0x61])) `shouldBe` Just (Text.pack "a")- f (Tagged.Tagged (ByteString.pack [0xff])) `shouldBe` Nothing-- describe "TryFrom ByteString LazyText" $ do- let f = hush . Witch.tryFrom @(Tagged.Tagged "UTF-8" ByteString.ByteString) @LazyText.Text- it "works" $ do- f (Tagged.Tagged (ByteString.pack [])) `shouldBe` Just (LazyText.pack "")- f (Tagged.Tagged (ByteString.pack [0x61])) `shouldBe` Just (LazyText.pack "a")- f (Tagged.Tagged (ByteString.pack [0xff])) `shouldBe` Nothing-- describe "TryFrom ByteString String" $ do- let f = hush . Witch.tryFrom @(Tagged.Tagged "UTF-8" ByteString.ByteString) @String- it "works" $ do- f (Tagged.Tagged (ByteString.pack [])) `shouldBe` Just ""- f (Tagged.Tagged (ByteString.pack [0x61])) `shouldBe` Just "a"- f (Tagged.Tagged (ByteString.pack [0xff])) `shouldBe` Nothing- describe "From [Word8] LazyByteString" $ do let f = Witch.from @[Word.Word8] @LazyByteString.ByteString it "works" $ do@@ -1842,27 +1822,6 @@ f (LazyByteString.pack [0x00]) `shouldBe` ByteString.pack [0x00] f (LazyByteString.pack [0x0f, 0xf0]) `shouldBe` ByteString.pack [0x0f, 0xf0] - describe "TryFrom LazyByteString LazyText" $ do- let f = hush . Witch.tryFrom @(Tagged.Tagged "UTF-8" LazyByteString.ByteString) @LazyText.Text- it "works" $ do- f (Tagged.Tagged (LazyByteString.pack [])) `shouldBe` Just (LazyText.pack "")- f (Tagged.Tagged (LazyByteString.pack [0x61])) `shouldBe` Just (LazyText.pack "a")- f (Tagged.Tagged (LazyByteString.pack [0xff])) `shouldBe` Nothing-- describe "TryFrom LazyByteString Text" $ do- let f = hush . Witch.tryFrom @(Tagged.Tagged "UTF-8" LazyByteString.ByteString) @Text.Text- it "works" $ do- f (Tagged.Tagged (LazyByteString.pack [])) `shouldBe` Just (Text.pack "")- f (Tagged.Tagged (LazyByteString.pack [0x61])) `shouldBe` Just (Text.pack "a")- f (Tagged.Tagged (LazyByteString.pack [0xff])) `shouldBe` Nothing-- describe "TryFrom LazyByteString String" $ do- let f = hush . Witch.tryFrom @(Tagged.Tagged "UTF-8" LazyByteString.ByteString) @String- it "works" $ do- f (Tagged.Tagged (LazyByteString.pack [])) `shouldBe` Just ""- f (Tagged.Tagged (LazyByteString.pack [0x61])) `shouldBe` Just "a"- f (Tagged.Tagged (LazyByteString.pack [0xff])) `shouldBe` Nothing- describe "From [Word8] ShortByteString" $ do let f = Witch.from @[Word.Word8] @ShortByteString.ShortByteString it "works" $ do@@ -1891,18 +1850,6 @@ f (Text.pack "a") `shouldBe` LazyText.pack "a" f (Text.pack "ab") `shouldBe` LazyText.pack "ab" - describe "From Text ByteString" $ do- let f = Witch.from @Text.Text @(Tagged.Tagged "UTF-8" ByteString.ByteString)- it "works" $ do- f (Text.pack "") `shouldBe` Tagged.Tagged (ByteString.pack [])- f (Text.pack "a") `shouldBe` Tagged.Tagged (ByteString.pack [0x61])-- describe "From Text LazyByteString" $ do- let f = Witch.from @Text.Text @(Tagged.Tagged "UTF-8" LazyByteString.ByteString)- it "works" $ do- f (Text.pack "") `shouldBe` Tagged.Tagged (LazyByteString.pack [])- f (Text.pack "a") `shouldBe` Tagged.Tagged (LazyByteString.pack [0x61])- describe "From LazyText Text" $ do let f = Witch.from @LazyText.Text @Text.Text it "works" $ do@@ -1910,18 +1857,6 @@ f (LazyText.pack "a") `shouldBe` Text.pack "a" f (LazyText.pack "ab") `shouldBe` Text.pack "ab" - describe "From LazyText LazyByteString" $ do- let f = Witch.from @LazyText.Text @(Tagged.Tagged "UTF-8" LazyByteString.ByteString)- it "works" $ do- f (LazyText.pack "") `shouldBe` Tagged.Tagged (LazyByteString.pack [])- f (LazyText.pack "a") `shouldBe` Tagged.Tagged (LazyByteString.pack [0x61])-- describe "From LazyText ByteString" $ do- let f = Witch.from @LazyText.Text @(Tagged.Tagged "UTF-8" ByteString.ByteString)- it "works" $ do- f (LazyText.pack "") `shouldBe` Tagged.Tagged (ByteString.pack [])- f (LazyText.pack "a") `shouldBe` Tagged.Tagged (ByteString.pack [0x61])- describe "From String Text" $ do let f = Witch.from @String @Text.Text it "works" $ do@@ -1950,18 +1885,6 @@ f (LazyText.pack "a") `shouldBe` "a" f (LazyText.pack "ab") `shouldBe` "ab" - describe "From String ByteString" $ do- let f = Witch.from @String @(Tagged.Tagged "UTF-8" ByteString.ByteString)- it "works" $ do- f "" `shouldBe` Tagged.Tagged (ByteString.pack [])- f "a" `shouldBe` Tagged.Tagged (ByteString.pack [0x61])-- describe "From String LazyByteString" $ do- let f = Witch.from @String @(Tagged.Tagged "UTF-8" LazyByteString.ByteString)- it "works" $ do- f "" `shouldBe` Tagged.Tagged (LazyByteString.pack [])- f "a" `shouldBe` Tagged.Tagged (LazyByteString.pack [0x61])- describe "From Integer Day" $ do let f = Witch.from @Integer @Time.Day it "works" $ do@@ -2086,6 +2009,158 @@ let f = Witch.from @(Tagged.Tagged "old" Bool) @(Tagged.Tagged "new" Bool) it "works" $ do f (Tagged.Tagged False) `shouldBe` Tagged.Tagged False++ describe "From (ISO_8859_1 ByteString) Text" $ do+ let f = Witch.from @(Encoding.ISO_8859_1 ByteString.ByteString) @Text.Text+ it "works" $ do+ f (Tagged.Tagged (ByteString.pack [0x61])) `shouldBe` Text.pack "a"++ describe "From (ISO_8859_1 ByteString) LazyText" $ do+ let f = Witch.from @(Encoding.ISO_8859_1 ByteString.ByteString) @LazyText.Text+ it "works" $ do+ f (Tagged.Tagged (ByteString.pack [0x61])) `shouldBe` LazyText.pack "a"++ describe "From (ISO_8859_1 ByteString) String" $ do+ let f = Witch.from @(Encoding.ISO_8859_1 ByteString.ByteString) @String+ it "works" $ do+ f (Tagged.Tagged (ByteString.pack [0x61])) `shouldBe` "a"++ describe "From (ISO_8859_1 LazyByteString) LazyText" $ do+ let f = Witch.from @(Encoding.ISO_8859_1 LazyByteString.ByteString) @LazyText.Text+ it "works" $ do+ f (Tagged.Tagged (LazyByteString.pack [0x61])) `shouldBe` LazyText.pack "a"++ describe "From (ISO_8859_1 LazyByteString) Text" $ do+ let f = Witch.from @(Encoding.ISO_8859_1 LazyByteString.ByteString) @Text.Text+ it "works" $ do+ f (Tagged.Tagged (LazyByteString.pack [0x61])) `shouldBe` Text.pack "a"++ describe "From (ISO_8859_1 LazyByteString) String" $ do+ let f = Witch.from @(Encoding.ISO_8859_1 LazyByteString.ByteString) @String+ it "works" $ do+ f (Tagged.Tagged (LazyByteString.pack [0x61])) `shouldBe` "a"++ describe "TryFrom Text (ISO_8859_1 ByteString)" $ do+ let f = hush . Witch.tryFrom @Text.Text @(Encoding.ISO_8859_1 ByteString.ByteString)+ it "works" $ do+ f (Text.pack "a") `shouldBe` Just (Tagged.Tagged $ ByteString.pack [0x61])+ f (Text.pack "\x100") `shouldBe` Nothing++ describe "TryFrom Text (ISO_8859_1 LazyByteString)" $ do+ let f = hush . Witch.tryFrom @Text.Text @(Encoding.ISO_8859_1 LazyByteString.ByteString)+ it "works" $ do+ f (Text.pack "a") `shouldBe` Just (Tagged.Tagged $ LazyByteString.pack [0x61])+ f (Text.pack "\x100") `shouldBe` Nothing++ describe "TryFrom LazyText (ISO_8859_1 LazyByteString)" $ do+ let f = hush . Witch.tryFrom @LazyText.Text @(Encoding.ISO_8859_1 LazyByteString.ByteString)+ it "works" $ do+ f (LazyText.pack "a") `shouldBe` Just (Tagged.Tagged $ LazyByteString.pack [0x61])+ f (LazyText.pack "\x100") `shouldBe` Nothing++ describe "TryFrom LazyText (ISO_8859_1 ByteString)" $ do+ let f = hush . Witch.tryFrom @LazyText.Text @(Encoding.ISO_8859_1 ByteString.ByteString)+ it "works" $ do+ f (LazyText.pack "a") `shouldBe` Just (Tagged.Tagged $ ByteString.pack [0x61])+ f (LazyText.pack "\x100") `shouldBe` Nothing++ describe "TryFrom String (ISO_8859_1 ByteString)" $ do+ let f = hush . Witch.tryFrom @String @(Encoding.ISO_8859_1 ByteString.ByteString)+ it "works" $ do+ f "a" `shouldBe` Just (Tagged.Tagged $ ByteString.pack [0x61])+ f "\x100" `shouldBe` Nothing++ describe "TryFrom String (ISO_8859_1 LazyByteString)" $ do+ let f = hush . Witch.tryFrom @String @(Encoding.ISO_8859_1 LazyByteString.ByteString)+ it "works" $ do+ f "a" `shouldBe` Just (Tagged.Tagged $ LazyByteString.pack [0x61])+ f "\x100" `shouldBe` Nothing++ describe "TryFrom (UTF_8 ByteString) Text" $ do+ let f = hush . Witch.tryFrom @(Encoding.UTF_8 ByteString.ByteString) @Text.Text+ it "works" $ do+ f (Tagged.Tagged (ByteString.pack [])) `shouldBe` Just (Text.pack "")+ f (Tagged.Tagged (ByteString.pack [0x61])) `shouldBe` Just (Text.pack "a")+ f (Tagged.Tagged (ByteString.pack [0xff])) `shouldBe` Nothing+ f (Tagged.Tagged (ByteString.pack [0x24])) `shouldBe` Just (Text.pack "\x24")+ f (Tagged.Tagged (ByteString.pack [0xc2, 0xa3])) `shouldBe` Just (Text.pack "\xa3")+ f (Tagged.Tagged (ByteString.pack [0xe2, 0x82, 0xac])) `shouldBe` Just (Text.pack "\x20ac")+ f (Tagged.Tagged (ByteString.pack [0xf0, 0x90, 0x8d, 0x88])) `shouldBe` Just (Text.pack "\x10348")++ describe "TryFrom (UTF_8 ByteString) LazyText" $ do+ let f = hush . Witch.tryFrom @(Encoding.UTF_8 ByteString.ByteString) @LazyText.Text+ it "works" $ do+ f (Tagged.Tagged (ByteString.pack [])) `shouldBe` Just (LazyText.pack "")+ f (Tagged.Tagged (ByteString.pack [0x61])) `shouldBe` Just (LazyText.pack "a")+ f (Tagged.Tagged (ByteString.pack [0xff])) `shouldBe` Nothing++ describe "TryFrom (UTF_8 ByteString) String" $ do+ let f = hush . Witch.tryFrom @(Encoding.UTF_8 ByteString.ByteString) @String+ it "works" $ do+ f (Tagged.Tagged (ByteString.pack [])) `shouldBe` Just ""+ f (Tagged.Tagged (ByteString.pack [0x61])) `shouldBe` Just "a"+ f (Tagged.Tagged (ByteString.pack [0xff])) `shouldBe` Nothing++ describe "TryFrom (UTF_8 LazyByteString) LazyText" $ do+ let f = hush . Witch.tryFrom @(Encoding.UTF_8 LazyByteString.ByteString) @LazyText.Text+ it "works" $ do+ f (Tagged.Tagged (LazyByteString.pack [])) `shouldBe` Just (LazyText.pack "")+ f (Tagged.Tagged (LazyByteString.pack [0x61])) `shouldBe` Just (LazyText.pack "a")+ f (Tagged.Tagged (LazyByteString.pack [0xff])) `shouldBe` Nothing++ describe "TryFrom (UTF_8 LazyByteString) Text" $ do+ let f = hush . Witch.tryFrom @(Encoding.UTF_8 LazyByteString.ByteString) @Text.Text+ it "works" $ do+ f (Tagged.Tagged (LazyByteString.pack [])) `shouldBe` Just (Text.pack "")+ f (Tagged.Tagged (LazyByteString.pack [0x61])) `shouldBe` Just (Text.pack "a")+ f (Tagged.Tagged (LazyByteString.pack [0xff])) `shouldBe` Nothing++ describe "TryFrom (UTF_8 LazyByteString) String" $ do+ let f = hush . Witch.tryFrom @(Encoding.UTF_8 LazyByteString.ByteString) @String+ it "works" $ do+ f (Tagged.Tagged (LazyByteString.pack [])) `shouldBe` Just ""+ f (Tagged.Tagged (LazyByteString.pack [0x61])) `shouldBe` Just "a"+ f (Tagged.Tagged (LazyByteString.pack [0xff])) `shouldBe` Nothing++ describe "From Text (UTF_8 ByteString)" $ do+ let f = Witch.from @Text.Text @(Encoding.UTF_8 ByteString.ByteString)+ it "works" $ do+ f (Text.pack "") `shouldBe` Tagged.Tagged (ByteString.pack [])+ f (Text.pack "a") `shouldBe` Tagged.Tagged (ByteString.pack [0x61])+ f (Text.pack "\x24") `shouldBe` Tagged.Tagged (ByteString.pack [0x24])+ f (Text.pack "\xa3") `shouldBe` Tagged.Tagged (ByteString.pack [0xc2, 0xa3])+ f (Text.pack "\x20ac") `shouldBe` Tagged.Tagged (ByteString.pack [0xe2, 0x82, 0xac])+ f (Text.pack "\x10348") `shouldBe` Tagged.Tagged (ByteString.pack [0xf0, 0x90, 0x8d, 0x88])++ describe "From Text (UTF_8 LazyByteString)" $ do+ let f = Witch.from @Text.Text @(Encoding.UTF_8 LazyByteString.ByteString)+ it "works" $ do+ f (Text.pack "") `shouldBe` Tagged.Tagged (LazyByteString.pack [])+ f (Text.pack "a") `shouldBe` Tagged.Tagged (LazyByteString.pack [0x61])++ describe "From LazyText (UTF_8 LazyByteString)" $ do+ let f = Witch.from @LazyText.Text @(Encoding.UTF_8 LazyByteString.ByteString)+ it "works" $ do+ f (LazyText.pack "") `shouldBe` Tagged.Tagged (LazyByteString.pack [])+ f (LazyText.pack "a") `shouldBe` Tagged.Tagged (LazyByteString.pack [0x61])++ describe "From LazyText (UTF_8 ByteString)" $ do+ let f = Witch.from @LazyText.Text @(Encoding.UTF_8 ByteString.ByteString)+ it "works" $ do+ f (LazyText.pack "") `shouldBe` Tagged.Tagged (ByteString.pack [])+ f (LazyText.pack "a") `shouldBe` Tagged.Tagged (ByteString.pack [0x61])++ describe "From String (UTF_8 ByteString)" $ do+ let f = Witch.from @String @(Encoding.UTF_8 ByteString.ByteString)+ it "works" $ do+ f "" `shouldBe` Tagged.Tagged (ByteString.pack [])+ f "a" `shouldBe` Tagged.Tagged (ByteString.pack [0x61])++ describe "From String (UTF_8 LazyByteString)" $ do+ let f = Witch.from @String @(Encoding.UTF_8 LazyByteString.ByteString)+ it "works" $ do+ f "" `shouldBe` Tagged.Tagged (LazyByteString.pack [])+ f "a" `shouldBe` Tagged.Tagged (LazyByteString.pack [0x61]) newtype Age = Age Int.Int8
witch.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.2 name: witch-version: 1.1.0.0+version: 1.1.1.0 synopsis: Convert values from one type into another. description: Witch converts values from one type into another. @@ -76,6 +76,7 @@ , template-haskell >= 2.12 && < 2.20 exposed-modules: Witch+ Witch.Encoding Witch.From Witch.Instances Witch.Lift