intro 0.2.0.0 → 0.2.0.1
raw patch · 4 files changed
+95/−61 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- README.md +1/−1
- intro.cabal +1/−1
- src/Intro/ConvertString.hs +85/−58
- test/test.hs +8/−1
README.md view
@@ -21,7 +21,7 @@ * Avoid writing custom functions * Export everything explicitly to provide a stable interface and for good documentation * Export only total functions or provide safe alternatives (Very few exceptions like div etc.)-* Prefer Text over String, provide ConvertibleStrings+* Prefer Text over String, provide ConvertString and EncodeString * Provide Monad transformers * Provide container types * Prefer generic functions
intro.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack name: intro-version: 0.2.0.0+version: 0.2.0.1 synopsis: "Fixed Prelude" - Mostly total and safe, provides Text and Monad transformers description: Intro is a modern Prelude which provides safe alternatives for most of the partial functions and follows other
src/Intro/ConvertString.hs view
@@ -12,15 +12,15 @@ -- ----------------------------------------------------------------------------- -{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE DeriveFoldable #-} {-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE Safe #-}-{-# LANGUAGE DefaultSignatures #-} module Intro.ConvertString ( ConvertString(..)@@ -28,6 +28,8 @@ , Lenient(..) ) where +import Control.DeepSeq (NFData)+import Data.Binary (Binary) import Data.ByteString (ByteString) import Data.Either.Extra (eitherToMaybe) import Data.Eq (Eq)@@ -41,8 +43,11 @@ import Data.Text.Encoding.Error (lenientDecode) import Data.Traversable (Traversable) import Data.Word (Word8)+import GHC.Generics (Generic, Generic1) import Text.Show (Show)+import Text.Read (Read) import qualified Data.ByteString as B+import qualified Data.ByteString.Short as S import qualified Data.ByteString.Lazy as BL import qualified Data.Text as T import qualified Data.Text.Encoding as TE@@ -52,7 +57,7 @@ -- | Conversion of strings to other string types -- -- @--- ('convertString' :: b -> a) . ('convertString' :: a -> b) ≡ ('id' :: a -> a)+-- ('convertString' :: b -> a) . ('convertString' :: a -> b) ≡ ('id' :: a -> a) -- ('convertString' :: b -> 'Maybe' a) . ('convertString' :: a -> b) ≡ ('Just' :: a -> 'Maybe' a) -- ('convertString' :: b -> 'Lenient' a) . ('convertString' :: a -> b) ≡ ('Lenient' :: a -> 'Lenient' a) -- @@@ -89,60 +94,82 @@ -- | Newtype wrapper for a string which was decoded leniently. newtype Lenient a = Lenient { getLenient :: a }- deriving (Eq, Ord, Show, Functor, Foldable, Traversable)+ deriving (Eq, Ord, Read, Show, Functor, Foldable, Traversable, Generic, Generic1) -instance ConvertString BL.ByteString (Lenient String) where {-# INLINE convertString #-}; convertString = Lenient . TL.unpack . TLE.decodeUtf8With lenientDecode-instance ConvertString BL.ByteString (Lenient TL.Text) where {-# INLINE convertString #-}; convertString = Lenient . TLE.decodeUtf8With lenientDecode-instance ConvertString BL.ByteString (Lenient Text) where {-# INLINE convertString #-}; convertString = Lenient . TE.decodeUtf8With lenientDecode . BL.toStrict-instance ConvertString BL.ByteString (Maybe String) where {-# INLINE convertString #-}; convertString = fmap TL.unpack . eitherToMaybe . TLE.decodeUtf8'-instance ConvertString BL.ByteString (Maybe TL.Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TLE.decodeUtf8'-instance ConvertString BL.ByteString (Maybe Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TE.decodeUtf8' . BL.toStrict-instance ConvertString BL.ByteString BL.ByteString where {-# INLINE convertString #-}; convertString = id-instance ConvertString BL.ByteString ByteString where {-# INLINE convertString #-}; convertString = BL.toStrict-instance ConvertString BL.ByteString [Word8] where {-# INLINE convertString #-}; convertString = BL.unpack-instance ConvertString ByteString (Lenient String) where {-# INLINE convertString #-}; convertString = Lenient . T.unpack . TE.decodeUtf8With lenientDecode-instance ConvertString ByteString (Lenient TL.Text) where {-# INLINE convertString #-}; convertString = Lenient . TLE.decodeUtf8With lenientDecode . BL.fromStrict-instance ConvertString ByteString (Lenient Text) where {-# INLINE convertString #-}; convertString = Lenient . TE.decodeUtf8With lenientDecode-instance ConvertString ByteString (Maybe String) where {-# INLINE convertString #-}; convertString = fmap T.unpack . eitherToMaybe . TE.decodeUtf8'-instance ConvertString ByteString (Maybe TL.Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TLE.decodeUtf8' . BL.fromStrict-instance ConvertString ByteString (Maybe Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TE.decodeUtf8'-instance ConvertString ByteString BL.ByteString where {-# INLINE convertString #-}; convertString = BL.fromStrict-instance ConvertString ByteString ByteString where {-# INLINE convertString #-}; convertString = id-instance ConvertString ByteString [Word8] where {-# INLINE convertString #-}; convertString = B.unpack-instance ConvertString String BL.ByteString where {-# INLINE convertString #-}; convertString = TLE.encodeUtf8 . TL.pack-instance ConvertString String ByteString where {-# INLINE convertString #-}; convertString = TE.encodeUtf8 . T.pack-instance ConvertString String String where {-# INLINE convertString #-}; convertString = id-instance ConvertString String TL.Text where {-# INLINE convertString #-}; convertString = TL.pack-instance ConvertString String Text where {-# INLINE convertString #-}; convertString = T.pack-instance ConvertString String [Word8] where {-# INLINE convertString #-}; convertString = BL.unpack . TLE.encodeUtf8 . TL.pack-instance ConvertString TL.Text BL.ByteString where {-# INLINE convertString #-}; convertString = TLE.encodeUtf8-instance ConvertString TL.Text ByteString where {-# INLINE convertString #-}; convertString = BL.toStrict . TLE.encodeUtf8-instance ConvertString TL.Text String where {-# INLINE convertString #-}; convertString = TL.unpack-instance ConvertString TL.Text TL.Text where {-# INLINE convertString #-}; convertString = id-instance ConvertString TL.Text Text where {-# INLINE convertString #-}; convertString = TL.toStrict-instance ConvertString TL.Text [Word8] where {-# INLINE convertString #-}; convertString = BL.unpack . TLE.encodeUtf8-instance ConvertString Text BL.ByteString where {-# INLINE convertString #-}; convertString = BL.fromStrict . TE.encodeUtf8-instance ConvertString Text ByteString where {-# INLINE convertString #-}; convertString = TE.encodeUtf8-instance ConvertString Text String where {-# INLINE convertString #-}; convertString = T.unpack-instance ConvertString Text TL.Text where {-# INLINE convertString #-}; convertString = TL.fromStrict-instance ConvertString Text Text where {-# INLINE convertString #-}; convertString = id-instance ConvertString Text [Word8] where {-# INLINE convertString #-}; convertString = BL.unpack . BL.fromStrict . TE.encodeUtf8-instance ConvertString [Word8] (Lenient String) where {-# INLINE convertString #-}; convertString = Lenient . TL.unpack . TLE.decodeUtf8With lenientDecode . BL.pack-instance ConvertString [Word8] (Lenient TL.Text) where {-# INLINE convertString #-}; convertString = Lenient . TLE.decodeUtf8With lenientDecode . BL.pack-instance ConvertString [Word8] (Lenient Text) where {-# INLINE convertString #-}; convertString = Lenient . TE.decodeUtf8With lenientDecode . B.pack-instance ConvertString [Word8] (Maybe String) where {-# INLINE convertString #-}; convertString = fmap TL.unpack . eitherToMaybe . TLE.decodeUtf8' . BL.pack-instance ConvertString [Word8] (Maybe TL.Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TLE.decodeUtf8' . BL.pack-instance ConvertString [Word8] (Maybe Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TE.decodeUtf8' . B.pack-instance ConvertString [Word8] BL.ByteString where {-# INLINE convertString #-}; convertString = BL.pack-instance ConvertString [Word8] ByteString where {-# INLINE convertString #-}; convertString = B.pack-instance ConvertString [Word8] [Word8] where {-# INLINE convertString #-}; convertString = id+instance Binary a => Binary (Lenient a)+instance NFData a => NFData (Lenient a) -instance EncodeString String BL.ByteString-instance EncodeString String ByteString-instance EncodeString String [Word8]-instance EncodeString TL.Text BL.ByteString-instance EncodeString TL.Text ByteString-instance EncodeString TL.Text [Word8]-instance EncodeString Text BL.ByteString-instance EncodeString Text ByteString-instance EncodeString Text [Word8]+instance ConvertString BL.ByteString (Lenient String) where {-# INLINE convertString #-}; convertString = Lenient . TL.unpack . TLE.decodeUtf8With lenientDecode+instance ConvertString BL.ByteString (Lenient TL.Text) where {-# INLINE convertString #-}; convertString = Lenient . TLE.decodeUtf8With lenientDecode+instance ConvertString BL.ByteString (Lenient Text) where {-# INLINE convertString #-}; convertString = Lenient . TE.decodeUtf8With lenientDecode . BL.toStrict+instance ConvertString BL.ByteString (Maybe String) where {-# INLINE convertString #-}; convertString = fmap TL.unpack . eitherToMaybe . TLE.decodeUtf8'+instance ConvertString BL.ByteString (Maybe TL.Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TLE.decodeUtf8'+instance ConvertString BL.ByteString (Maybe Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TE.decodeUtf8' . BL.toStrict+instance ConvertString BL.ByteString BL.ByteString where {-# INLINE convertString #-}; convertString = id+instance ConvertString BL.ByteString ByteString where {-# INLINE convertString #-}; convertString = BL.toStrict+instance ConvertString BL.ByteString S.ShortByteString where {-# INLINE convertString #-}; convertString = S.toShort . BL.toStrict+instance ConvertString BL.ByteString [Word8] where {-# INLINE convertString #-}; convertString = BL.unpack+instance ConvertString ByteString (Lenient String) where {-# INLINE convertString #-}; convertString = Lenient . T.unpack . TE.decodeUtf8With lenientDecode+instance ConvertString ByteString (Lenient TL.Text) where {-# INLINE convertString #-}; convertString = Lenient . TLE.decodeUtf8With lenientDecode . BL.fromStrict+instance ConvertString ByteString (Lenient Text) where {-# INLINE convertString #-}; convertString = Lenient . TE.decodeUtf8With lenientDecode+instance ConvertString ByteString (Maybe String) where {-# INLINE convertString #-}; convertString = fmap T.unpack . eitherToMaybe . TE.decodeUtf8'+instance ConvertString ByteString (Maybe TL.Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TLE.decodeUtf8' . BL.fromStrict+instance ConvertString ByteString (Maybe Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TE.decodeUtf8'+instance ConvertString ByteString BL.ByteString where {-# INLINE convertString #-}; convertString = BL.fromStrict+instance ConvertString ByteString ByteString where {-# INLINE convertString #-}; convertString = id+instance ConvertString ByteString S.ShortByteString where {-# INLINE convertString #-}; convertString = S.toShort+instance ConvertString ByteString [Word8] where {-# INLINE convertString #-}; convertString = B.unpack+instance ConvertString S.ShortByteString (Lenient String) where {-# INLINE convertString #-}; convertString = Lenient . T.unpack . TE.decodeUtf8With lenientDecode . S.fromShort+instance ConvertString S.ShortByteString (Lenient TL.Text) where {-# INLINE convertString #-}; convertString = Lenient . TLE.decodeUtf8With lenientDecode . BL.fromStrict . S.fromShort+instance ConvertString S.ShortByteString (Lenient Text) where {-# INLINE convertString #-}; convertString = Lenient . TE.decodeUtf8With lenientDecode . S.fromShort+instance ConvertString S.ShortByteString (Maybe String) where {-# INLINE convertString #-}; convertString = fmap T.unpack . eitherToMaybe . TE.decodeUtf8' . S.fromShort+instance ConvertString S.ShortByteString (Maybe TL.Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TLE.decodeUtf8' . BL.fromStrict . S.fromShort+instance ConvertString S.ShortByteString (Maybe Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TE.decodeUtf8' . S.fromShort+instance ConvertString S.ShortByteString BL.ByteString where {-# INLINE convertString #-}; convertString = BL.fromStrict . S.fromShort+instance ConvertString S.ShortByteString ByteString where {-# INLINE convertString #-}; convertString = S.fromShort+instance ConvertString S.ShortByteString S.ShortByteString where {-# INLINE convertString #-}; convertString = id+instance ConvertString S.ShortByteString [Word8] where {-# INLINE convertString #-}; convertString = S.unpack+instance ConvertString String BL.ByteString where {-# INLINE convertString #-}; convertString = TLE.encodeUtf8 . TL.pack+instance ConvertString String ByteString where {-# INLINE convertString #-}; convertString = TE.encodeUtf8 . T.pack+instance ConvertString String S.ShortByteString where {-# INLINE convertString #-}; convertString = S.toShort . TE.encodeUtf8 . T.pack+instance ConvertString String String where {-# INLINE convertString #-}; convertString = id+instance ConvertString String TL.Text where {-# INLINE convertString #-}; convertString = TL.pack+instance ConvertString String Text where {-# INLINE convertString #-}; convertString = T.pack+instance ConvertString String [Word8] where {-# INLINE convertString #-}; convertString = BL.unpack . TLE.encodeUtf8 . TL.pack+instance ConvertString TL.Text BL.ByteString where {-# INLINE convertString #-}; convertString = TLE.encodeUtf8+instance ConvertString TL.Text ByteString where {-# INLINE convertString #-}; convertString = BL.toStrict . TLE.encodeUtf8+instance ConvertString TL.Text S.ShortByteString where {-# INLINE convertString #-}; convertString = S.toShort . BL.toStrict . TLE.encodeUtf8+instance ConvertString TL.Text String where {-# INLINE convertString #-}; convertString = TL.unpack+instance ConvertString TL.Text TL.Text where {-# INLINE convertString #-}; convertString = id+instance ConvertString TL.Text Text where {-# INLINE convertString #-}; convertString = TL.toStrict+instance ConvertString TL.Text [Word8] where {-# INLINE convertString #-}; convertString = BL.unpack . TLE.encodeUtf8+instance ConvertString Text BL.ByteString where {-# INLINE convertString #-}; convertString = BL.fromStrict . TE.encodeUtf8+instance ConvertString Text ByteString where {-# INLINE convertString #-}; convertString = TE.encodeUtf8+instance ConvertString Text S.ShortByteString where {-# INLINE convertString #-}; convertString = S.toShort . TE.encodeUtf8+instance ConvertString Text String where {-# INLINE convertString #-}; convertString = T.unpack+instance ConvertString Text TL.Text where {-# INLINE convertString #-}; convertString = TL.fromStrict+instance ConvertString Text Text where {-# INLINE convertString #-}; convertString = id+instance ConvertString Text [Word8] where {-# INLINE convertString #-}; convertString = BL.unpack . BL.fromStrict . TE.encodeUtf8+instance ConvertString [Word8] (Lenient String) where {-# INLINE convertString #-}; convertString = Lenient . TL.unpack . TLE.decodeUtf8With lenientDecode . BL.pack+instance ConvertString [Word8] (Lenient TL.Text) where {-# INLINE convertString #-}; convertString = Lenient . TLE.decodeUtf8With lenientDecode . BL.pack+instance ConvertString [Word8] (Lenient Text) where {-# INLINE convertString #-}; convertString = Lenient . TE.decodeUtf8With lenientDecode . B.pack+instance ConvertString [Word8] (Maybe String) where {-# INLINE convertString #-}; convertString = fmap TL.unpack . eitherToMaybe . TLE.decodeUtf8' . BL.pack+instance ConvertString [Word8] (Maybe TL.Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TLE.decodeUtf8' . BL.pack+instance ConvertString [Word8] (Maybe Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TE.decodeUtf8' . B.pack+instance ConvertString [Word8] BL.ByteString where {-# INLINE convertString #-}; convertString = BL.pack+instance ConvertString [Word8] ByteString where {-# INLINE convertString #-}; convertString = B.pack+instance ConvertString [Word8] S.ShortByteString where {-# INLINE convertString #-}; convertString = S.pack+instance ConvertString [Word8] [Word8] where {-# INLINE convertString #-}; convertString = id++instance EncodeString String BL.ByteString+instance EncodeString String ByteString+instance EncodeString String S.ShortByteString+instance EncodeString String [Word8]+instance EncodeString TL.Text BL.ByteString+instance EncodeString TL.Text ByteString+instance EncodeString TL.Text S.ShortByteString+instance EncodeString TL.Text [Word8]+instance EncodeString Text BL.ByteString+instance EncodeString Text ByteString+instance EncodeString Text S.ShortByteString+instance EncodeString Text [Word8]
test/test.hs view
@@ -5,8 +5,9 @@ {-# LANGUAGE ScopedTypeVariables #-} module Main where -import Intro import BaseCompat ()+import Data.ByteString.Short (ShortByteString)+import Intro import LensCompat () import Test.QuickCheck import Test.QuickCheck.Instances ()@@ -15,18 +16,23 @@ main = do encode (Proxy :: Proxy LText) (Proxy :: Proxy ByteString) encode (Proxy :: Proxy LText) (Proxy :: Proxy LByteString)+ encode (Proxy :: Proxy LText) (Proxy :: Proxy ShortByteString) encode (Proxy :: Proxy LText) (Proxy :: Proxy [Word8]) encode (Proxy :: Proxy String) (Proxy :: Proxy ByteString) encode (Proxy :: Proxy String) (Proxy :: Proxy LByteString)+ encode (Proxy :: Proxy String) (Proxy :: Proxy ShortByteString) encode (Proxy :: Proxy String) (Proxy :: Proxy [Word8]) encode (Proxy :: Proxy Text) (Proxy :: Proxy ByteString) encode (Proxy :: Proxy Text) (Proxy :: Proxy LByteString)+ encode (Proxy :: Proxy Text) (Proxy :: Proxy ShortByteString) encode (Proxy :: Proxy Text) (Proxy :: Proxy [Word8]) iso (Proxy :: Proxy ByteString) (Proxy :: Proxy ByteString) iso (Proxy :: Proxy ByteString) (Proxy :: Proxy LByteString)+ iso (Proxy :: Proxy ByteString) (Proxy :: Proxy ShortByteString) iso (Proxy :: Proxy ByteString) (Proxy :: Proxy [Word8]) iso (Proxy :: Proxy LByteString) (Proxy :: Proxy ByteString) iso (Proxy :: Proxy LByteString) (Proxy :: Proxy LByteString)+ iso (Proxy :: Proxy LByteString) (Proxy :: Proxy ShortByteString) iso (Proxy :: Proxy LByteString) (Proxy :: Proxy [Word8]) iso (Proxy :: Proxy LText) (Proxy :: Proxy LText) iso (Proxy :: Proxy LText) (Proxy :: Proxy String)@@ -39,6 +45,7 @@ iso (Proxy :: Proxy Text) (Proxy :: Proxy Text) iso (Proxy :: Proxy [Word8]) (Proxy :: Proxy ByteString) iso (Proxy :: Proxy [Word8]) (Proxy :: Proxy LByteString)+ iso (Proxy :: Proxy [Word8]) (Proxy :: Proxy ShortByteString) iso (Proxy :: Proxy [Word8]) (Proxy :: Proxy [Word8]) iso :: forall a b proxy. (Eq a, Show a, Arbitrary a, ConvertString a b, ConvertString b a) => proxy a -> proxy b -> IO ()