packages feed

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 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 ()