intro 0.2.0.1 → 0.2.0.2
raw patch · 9 files changed
+132/−83 lines, 9 filesdep +aesondep +asyncdep +attoparsecPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: aeson, async, attoparsec, cassava, contravariant, filepath, megaparsec, profunctors
API changes (from Hackage documentation)
- Intro: mplus :: MonadPlus m => m a -> m a -> m a
- Intro: mzero :: MonadPlus m => m a
Files
- README.md +2/−2
- intro.cabal +14/−2
- src/Intro.hs +3/−3
- src/Intro/ConvertString.hs +76/−75
- test/AesonCompat.hs +7/−0
- test/AttoparsecCompat.hs +7/−0
- test/LibCompat.hs +11/−0
- test/MegaparsecCompat.hs +8/−0
- test/test.hs +4/−1
README.md view
@@ -15,7 +15,7 @@ List of design decisions: -* Keep everything at one place (There are one two modules and Intro.Trustworthy is only there for Safe Haskell)+* Keep everything at one place (There are three modules and Intro.Trustworthy is only there for Safe Haskell) * Conservative extension over the base Prelude * Rely only on very common external libraries * Avoid writing custom functions@@ -27,4 +27,4 @@ * Prefer generic functions * Debugging functions, like 'Intro.Trustworthy.trace' and 'undefined' are available but produce compile time warnings * Don't provide error, only panic instead-* Compatibility with Control.Lens+* Compatibility with unqualified import of Control.Lens
intro.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack name: intro-version: 0.2.0.1+version: 0.2.0.2 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@@ -91,14 +91,26 @@ , transformers >= 0.4 && < 0.6 , unordered-containers >= 0.2 && < 0.3 , writer-cps-mtl >= 0.1.1.2 && < 0.2+ , QuickCheck+ , aeson+ , async+ , attoparsec+ , cassava+ , contravariant+ , filepath , intro , lens- , QuickCheck+ , megaparsec+ , profunctors , quickcheck-instances if impl(ghc < 8.0) build-depends: semigroups >= 0.9 && < 1 other-modules:+ AesonCompat+ AttoparsecCompat BaseCompat LensCompat+ LibCompat+ MegaparsecCompat default-language: Haskell2010
src/Intro.hs view
@@ -28,7 +28,7 @@ -- -- List of design decisions: ----- * Keep everything at one place (There are one two modules and Intro.Trustworthy is only there for Safe Haskell)+-- * Keep everything at one place (There are only three modules and Intro.Trustworthy is only there for Safe Haskell) -- * Conservative extension over the base Prelude -- * Rely only on very common external libraries -- * Avoid writing custom functions@@ -40,7 +40,7 @@ -- * Prefer generic functions -- * Debugging functions, like 'trace' and 'undefined' are available but produce compile time warnings -- * Don't provide error, only panic instead--- * Compatibility with Control.Lens+-- * Compatibility with unqualified import of Control.Lens -- -- Some 'Prelude' functions are missing from 'Intro'. More general variants are available for the following functions: --@@ -502,7 +502,7 @@ , (Control.Monad.=<<) , (Control.Monad.<=<) , (Control.Monad.>=>)- , Control.Monad.MonadPlus(mzero, mplus)+ , Control.Monad.MonadPlus , Control.Monad.join , Control.Monad.guard , Control.Monad.when
src/Intro/ConvertString.hs view
@@ -31,6 +31,7 @@ import Control.DeepSeq (NFData) import Data.Binary (Binary) import Data.ByteString (ByteString)+import Data.ByteString.Short (ShortByteString) import Data.Either.Extra (eitherToMaybe) import Data.Eq (Eq) import Data.Foldable (Foldable)@@ -44,11 +45,11 @@ import Data.Traversable (Traversable) import Data.Word (Word8) import GHC.Generics (Generic, Generic1)-import Text.Show (Show) import Text.Read (Read)+import Text.Show (Show) import qualified Data.ByteString as B-import qualified Data.ByteString.Short as S import qualified Data.ByteString.Lazy as BL+import qualified Data.ByteString.Short as S import qualified Data.Text as T import qualified Data.Text.Encoding as TE import qualified Data.Text.Lazy as TL@@ -99,77 +100,77 @@ instance Binary a => Binary (Lenient a) instance NFData a => NFData (Lenient a) -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 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 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 ShortByteString where {-# INLINE convertString #-}; convertString = S.toShort+instance ConvertString ByteString [Word8] where {-# INLINE convertString #-}; convertString = B.unpack+instance ConvertString ShortByteString (Lenient String) where {-# INLINE convertString #-}; convertString = Lenient . T.unpack . TE.decodeUtf8With lenientDecode . S.fromShort+instance ConvertString ShortByteString (Lenient TL.Text) where {-# INLINE convertString #-}; convertString = Lenient . TLE.decodeUtf8With lenientDecode . BL.fromStrict . S.fromShort+instance ConvertString ShortByteString (Lenient Text) where {-# INLINE convertString #-}; convertString = Lenient . TE.decodeUtf8With lenientDecode . S.fromShort+instance ConvertString ShortByteString (Maybe String) where {-# INLINE convertString #-}; convertString = fmap T.unpack . eitherToMaybe . TE.decodeUtf8' . S.fromShort+instance ConvertString ShortByteString (Maybe TL.Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TLE.decodeUtf8' . BL.fromStrict . S.fromShort+instance ConvertString ShortByteString (Maybe Text) where {-# INLINE convertString #-}; convertString = eitherToMaybe . TE.decodeUtf8' . S.fromShort+instance ConvertString ShortByteString BL.ByteString where {-# INLINE convertString #-}; convertString = BL.fromStrict . S.fromShort+instance ConvertString ShortByteString ByteString where {-# INLINE convertString #-}; convertString = S.fromShort+instance ConvertString ShortByteString ShortByteString where {-# INLINE convertString #-}; convertString = id+instance ConvertString 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 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 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 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] 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]+instance EncodeString String BL.ByteString+instance EncodeString String ByteString+instance EncodeString String ShortByteString+instance EncodeString String [Word8]+instance EncodeString TL.Text BL.ByteString+instance EncodeString TL.Text ByteString+instance EncodeString TL.Text ShortByteString+instance EncodeString TL.Text [Word8]+instance EncodeString Text BL.ByteString+instance EncodeString Text ByteString+instance EncodeString Text ShortByteString+instance EncodeString Text [Word8]
+ test/AesonCompat.hs view
@@ -0,0 +1,7 @@+{-# LANGUAGE NoImplicitPrelude #-}+module AesonCompat (+ module X+) where++import Intro as X+import Data.Aeson as X hiding ((.:))
+ test/AttoparsecCompat.hs view
@@ -0,0 +1,7 @@+{-# LANGUAGE NoImplicitPrelude #-}+module AttoparsecCompat (+ module X+) where++import Intro as X+import Data.Attoparsec.ByteString as X hiding (take, skip, takeWhile)
+ test/LibCompat.hs view
@@ -0,0 +1,11 @@+{-# LANGUAGE NoImplicitPrelude #-}+module LibCompat (+ module X+) where++import Control.Concurrent.Async as X+import Data.Functor.Contravariant as X+import Data.Csv as X hiding (lookup, (.:))+import Data.Profunctor as X+import Intro as X+import System.FilePath as X
+ test/MegaparsecCompat.hs view
@@ -0,0 +1,8 @@+{-# LANGUAGE NoImplicitPrelude #-}+module MegaparsecCompat (+ module X+) where++import Intro as X+import Text.Megaparsec.Text as X+import Text.Megaparsec.Lexer as X
test/test.hs view
@@ -5,10 +5,13 @@ {-# LANGUAGE ScopedTypeVariables #-} module Main where -import BaseCompat () import Data.ByteString.Short (ShortByteString) import Intro+import LibCompat () import LensCompat ()+import AesonCompat ()+import AttoparsecCompat ()+import MegaparsecCompat () import Test.QuickCheck import Test.QuickCheck.Instances ()