packages feed

universum 0.7.1.1 → 0.8.0

raw patch · 7 files changed

+233/−207 lines, 7 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Conv: class ConvertUtf8 a b
- Conv: class ToLText a
- Conv: class ToString a
- Conv: class ToText a
- Conv: decodeUtf8 :: ConvertUtf8 a b => b -> a
- Conv: decodeUtf8Strict :: ConvertUtf8 a b => b -> Either UnicodeException a
- Conv: encodeUtf8 :: ConvertUtf8 a b => a -> b
- Conv: instance Conv.ConvertUtf8 Data.Text.Internal.Lazy.Text Data.ByteString.Internal.ByteString
- Conv: instance Conv.ConvertUtf8 Data.Text.Internal.Lazy.Text Data.ByteString.Lazy.Internal.ByteString
- Conv: instance Conv.ConvertUtf8 Data.Text.Internal.Text Data.ByteString.Internal.ByteString
- Conv: instance Conv.ConvertUtf8 Data.Text.Internal.Text Data.ByteString.Lazy.Internal.ByteString
- Conv: instance Conv.ConvertUtf8 GHC.Base.String Data.ByteString.Internal.ByteString
- Conv: instance Conv.ConvertUtf8 GHC.Base.String Data.ByteString.Lazy.Internal.ByteString
- Conv: instance Conv.ToLText Data.Text.Internal.Lazy.Text
- Conv: instance Conv.ToLText Data.Text.Internal.Text
- Conv: instance Conv.ToLText GHC.Base.String
- Conv: instance Conv.ToString Data.Text.Internal.Lazy.Text
- Conv: instance Conv.ToString Data.Text.Internal.Text
- Conv: instance Conv.ToString GHC.Base.String
- Conv: instance Conv.ToText Data.Text.Internal.Lazy.Text
- Conv: instance Conv.ToText Data.Text.Internal.Text
- Conv: instance Conv.ToText GHC.Base.String
- Conv: toLText :: ToLText a => a -> Text
- Conv: toString :: ToString a => a -> String
- Conv: toText :: ToText a => a -> Text
- Universum: class Buildable p
- Universum: pretty :: Buildable a => a -> Text
- Universum: prettyL :: Buildable a => a -> LText
- Universum: print :: (MonadIO m, Show a) => a -> m ()
- Universum: readEither :: (ToString a, Read b) => a -> Either Text b
- Universum: show :: (Show a, IsString b) => a -> b
- Universum: type LByteString = ByteString
- Universum: type LText = Text
+ Print: print :: forall a m. (MonadIO m, Show a) => a -> m ()
+ String: class Buildable p
+ String: class ConvertUtf8 a b
+ String: class ToLText a
+ String: class ToString a
+ String: class ToText a
+ String: decodeUtf8 :: ConvertUtf8 a b => b -> a
+ String: decodeUtf8Strict :: ConvertUtf8 a b => b -> Either UnicodeException a
+ String: encodeUtf8 :: ConvertUtf8 a b => a -> b
+ String: instance String.ConvertUtf8 Data.Text.Internal.Lazy.Text Data.ByteString.Internal.ByteString
+ String: instance String.ConvertUtf8 Data.Text.Internal.Lazy.Text Data.ByteString.Lazy.Internal.ByteString
+ String: instance String.ConvertUtf8 Data.Text.Internal.Text Data.ByteString.Internal.ByteString
+ String: instance String.ConvertUtf8 Data.Text.Internal.Text Data.ByteString.Lazy.Internal.ByteString
+ String: instance String.ConvertUtf8 GHC.Base.String Data.ByteString.Internal.ByteString
+ String: instance String.ConvertUtf8 GHC.Base.String Data.ByteString.Lazy.Internal.ByteString
+ String: instance String.ToLText Data.Text.Internal.Lazy.Text
+ String: instance String.ToLText Data.Text.Internal.Text
+ String: instance String.ToLText GHC.Base.String
+ String: instance String.ToString Data.Text.Internal.Lazy.Text
+ String: instance String.ToString Data.Text.Internal.Text
+ String: instance String.ToString GHC.Base.String
+ String: instance String.ToText Data.Text.Internal.Lazy.Text
+ String: instance String.ToText Data.Text.Internal.Text
+ String: instance String.ToText GHC.Base.String
+ String: pretty :: Buildable a => a -> Text
+ String: prettyL :: Buildable a => a -> LText
+ String: readEither :: (ToString a, Read b) => a -> Either Text b
+ String: show :: forall b a. (Show a, IsString b) => a -> b
+ String: toLText :: ToLText a => a -> Text
+ String: toString :: ToString a => a -> String
+ String: toText :: ToText a => a -> Text
+ String: type LByteString = ByteString
+ String: type LText = Text

Files

CHANGES.md view
@@ -1,3 +1,18 @@+0.8.0+=====++* [#83](https://github.com/serokell/universum/issues/83):+  Change the order of types in `show` and `print` functions.+* Move string related reexports and functions to `Conv` module.+* Rename `Conv` module to `String`.+* Move `print` function to `Print` module.++0.7.2+=======++* [#77](https://github.com/serokell/universum/issues/77):+  Add `modify'` function to export list.+ 0.7.1.1 ======= 
− src/Conv.hs
@@ -1,121 +0,0 @@-{-# LANGUAGE FlexibleInstances     #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE Safe                  #-}-{-# LANGUAGE TypeSynonymInstances  #-}---- | Type classes for convertion between different string representations.--module Conv-       ( ConvertUtf8 (..)-       , ToString (..)-       , ToLText (..)-       , ToText (..)-       ) where--import qualified Data.ByteString           as B-import qualified Data.ByteString.Lazy      as LB-import qualified Data.ByteString.Lazy.UTF8 as LBU-import qualified Data.ByteString.UTF8      as BU-import qualified Data.Text                 as T-import qualified Data.Text.Encoding        as T-import qualified Data.Text.Encoding.Error  as T-import qualified Data.Text.Lazy            as LT-import qualified Data.Text.Lazy.Encoding   as LT--import           Data.Either               (Either)-import           Data.Function             (id, (.))-import           Data.String               (String)-import           Functor                   ((<$>))---- | Type class for conversion to utf8 representation of text.-class ConvertUtf8 a b where-    -- | Encode as utf8 string (usually 'B.ByteString').-    ---    -- >>> encodeUtf8 @Text @ByteString "патак"-    -- "\208\191\208\176\209\130\208\176\208\186"-    encodeUtf8 :: a -> b--    -- | Decode from utf8 string.-    ---    -- >>> decodeUtf8 @Text @ByteString "\208\191\208\176\209\130\208\176\208\186"-    -- "\1087\1072\1090\1072\1082"-    -- >>> putStrLn $ decodeUtf8 @Text @ByteString "\208\191\208\176\209\130\208\176\208\186"-    -- патак-    decodeUtf8 :: b -> a--    -- | Decode as utf8 string but returning execption if byte sequence is malformed.-    ---    -- >>> decodeUtf8 @Text @ByteString "\208\208\176\209\130\208\176\208\186"-    -- "\65533\65533\1090\1072\1082"-    -- >>> decodeUtf8Strict @Text @ByteString "\208\208\176\209\130\208\176\208\186"-    -- Left Cannot decode byte '\xd0': Data.Text.Internal.Encoding.decodeUtf8: Invalid UTF-8 stream-    decodeUtf8Strict :: b -> Either T.UnicodeException a--instance ConvertUtf8 String B.ByteString where-    encodeUtf8 = BU.fromString-    decodeUtf8 = BU.toString-    decodeUtf8Strict = (T.unpack <$>) . decodeUtf8Strict--instance ConvertUtf8 T.Text B.ByteString where-    encodeUtf8 = T.encodeUtf8-    decodeUtf8 = T.decodeUtf8With T.lenientDecode-    decodeUtf8Strict = T.decodeUtf8'--instance ConvertUtf8 LT.Text B.ByteString where-    encodeUtf8 = LB.toStrict . encodeUtf8-    decodeUtf8 = LT.decodeUtf8With T.lenientDecode . LB.fromStrict-    decodeUtf8Strict = decodeUtf8Strict . LB.fromStrict--instance ConvertUtf8 String LB.ByteString where-    encodeUtf8 = LBU.fromString-    decodeUtf8 = LBU.toString-    decodeUtf8Strict = (T.unpack <$>) . decodeUtf8Strict--instance ConvertUtf8 T.Text LB.ByteString where-    encodeUtf8 = LB.fromStrict . T.encodeUtf8-    decodeUtf8 = T.decodeUtf8With T.lenientDecode . LB.toStrict-    decodeUtf8Strict = T.decodeUtf8' . LB.toStrict--instance ConvertUtf8 LT.Text LB.ByteString where-    encodeUtf8 = LT.encodeUtf8-    decodeUtf8 = LT.decodeUtf8With T.lenientDecode-    decodeUtf8Strict = LT.decodeUtf8'---- | Type class for converting other strings to 'T.Text'.-class ToText a where-    toText :: a -> T.Text--instance ToText String where-    toText = T.pack--instance ToText T.Text where-    toText = id--instance ToText LT.Text where-    toText = LT.toStrict---- | Type class for converting other strings to 'LT.Text'.-class ToLText a where-    toLText :: a -> LT.Text--instance ToLText String where-    toLText = LT.pack--instance ToLText T.Text where-    toLText = LT.fromStrict--instance ToLText LT.Text where-    toLText = id---- | Type class for converting other strings to 'String'.-class ToString a where-    toString :: a -> String--instance ToString String where-    toString = id--instance ToString T.Text where-    toString = T.unpack--instance ToString LT.Text where-    toString = LT.unpack
src/Monad/Trans.hs view
@@ -30,8 +30,8 @@                                                asks, local, reader, runReader) import           Control.Monad.State.Strict   (MonadState, State, StateT (..), evalState,                                                evalStateT, execState, execStateT, get,-                                               gets, modify, put, runState, state,-                                               withState)+                                               gets, modify, modify', put, runState,+                                               state, withState) import           Control.Monad.Trans          (MonadIO, MonadTrans, lift, liftIO) import           Control.Monad.Trans.Identity (IdentityT (runIdentityT)) import           Control.Monad.Trans.Maybe    (MaybeT (..), exceptToMaybeT,
src/Print.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE ExplicitForAll    #-} {-# LANGUAGE FlexibleContexts  #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE Trustworthy       #-}@@ -6,24 +7,26 @@  module Print        ( Print (..)+       , print        , putText        , putLText        ) where +import Data.Function ((.))++import Monad.Trans (MonadIO, liftIO)+ import qualified Base-import           Data.Function              ((.))-import qualified Prelude                    as Prelude+import qualified Prelude (print, putStr, putStrLn) -import           Control.Monad.IO.Class     (MonadIO, liftIO)-import qualified Data.ByteString.Char8      as BS+import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Lazy.Char8 as BL -import qualified Data.Text                  as T-import qualified Data.Text.IO               as T--import qualified Data.Text.Lazy             as TL-import qualified Data.Text.Lazy.IO          as TL+import qualified Data.Text as T+import qualified Data.Text.IO as T +import qualified Data.Text.Lazy as TL+import qualified Data.Text.Lazy.IO as TL  -- | Polymorfic over string and lifted to 'MonadIO' printing functions. class Print a where@@ -49,6 +52,10 @@ instance Print [Base.Char] where   putStr = liftIO . Prelude.putStr   putStrLn = liftIO . Prelude.putStrLn++-- | Lifted version of 'Prelude.print'.+print :: forall a m . (MonadIO m, Base.Show a) => a -> m ()+print = liftIO . Prelude.print  -- | Specialized to 'T.Text' version of 'putStrLn' or forcing type inference. putText :: MonadIO m => T.Text -> m ()
+ src/String.hs view
@@ -0,0 +1,196 @@+{-# LANGUAGE ExplicitForAll        #-}+{-# LANGUAGE FlexibleInstances     #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeSynonymInstances  #-}++-- | Type classes for convertion between different string representations.++module String+       ( module Data.String++         -- * Text+       , module Text.Read+       , module Data.Text+       , module Data.Text.Lazy+       , module Data.Text.Encoding+       , module Data.Text.Encoding.Error++       , module Data.ByteString++       , ConvertUtf8 (..)+       , ToString (..)+       , ToLText (..)+       , ToText (..)++         -- * Buildable class+       , Buildable++         -- * Show and read functions+       , readEither+       , show+       , pretty+       , prettyL++         -- * Convenient type aliases+       , LText+       , LByteString+       ) where+++-- for reexport+import Data.ByteString (ByteString)+import Data.String (IsString (..))+import Data.Text (Text, lines, unlines, unwords, words)+import Data.Text.Buildable (Buildable (build))+import Data.Text.Encoding (decodeUtf8', decodeUtf8With)+import Data.Text.Encoding.Error (OnDecodeError, OnError, UnicodeException, lenientDecode,+                                 strictDecode)+import Data.Text.Lazy (fromStrict, toStrict)+import Text.Read (Read, readMaybe, reads)++-- for internal usage+import Data.Bifunctor (first)+import Data.Either (Either)+import Data.Function (id, (.))+import Data.String (String)+import Data.Text.Lazy.Builder (toLazyText)++import Functor ((<$>))++import qualified Base as Base (Show (show))+import qualified Data.ByteString as B+import qualified Data.ByteString.Lazy as LB+import qualified Data.ByteString.Lazy.UTF8 as LBU+import qualified Data.ByteString.UTF8 as BU+import qualified Data.Text as T+import qualified Data.Text.Encoding as T+import qualified Data.Text.Encoding.Error as T+import qualified Data.Text.Lazy as LT+import qualified Data.Text.Lazy.Encoding as LT+import qualified Text.Read (readEither)++-- | Type synonym for 'Data.Text.Lazy.Text'.+type LText = LT.Text++-- | Type synonym for 'Data.ByteString.Lazy.ByteString'.+type LByteString = LB.ByteString+++-- | Type class for conversion to utf8 representation of text.+class ConvertUtf8 a b where+    -- | Encode as utf8 string (usually 'B.ByteString').+    --+    -- >>> encodeUtf8 @Text @ByteString "патак"+    -- "\208\191\208\176\209\130\208\176\208\186"+    encodeUtf8 :: a -> b++    -- | Decode from utf8 string.+    --+    -- >>> decodeUtf8 @Text @ByteString "\208\191\208\176\209\130\208\176\208\186"+    -- "\1087\1072\1090\1072\1082"+    -- >>> putStrLn $ decodeUtf8 @Text @ByteString "\208\191\208\176\209\130\208\176\208\186"+    -- патак+    decodeUtf8 :: b -> a++    -- | Decode as utf8 string but returning execption if byte sequence is malformed.+    --+    -- >>> decodeUtf8 @Text @ByteString "\208\208\176\209\130\208\176\208\186"+    -- "\65533\65533\1090\1072\1082"+    -- >>> decodeUtf8Strict @Text @ByteString "\208\208\176\209\130\208\176\208\186"+    -- Left Cannot decode byte '\xd0': Data.Text.Internal.Encoding.decodeUtf8: Invalid UTF-8 stream+    decodeUtf8Strict :: b -> Either T.UnicodeException a++instance ConvertUtf8 String B.ByteString where+    encodeUtf8 = BU.fromString+    decodeUtf8 = BU.toString+    decodeUtf8Strict = (T.unpack <$>) . decodeUtf8Strict++instance ConvertUtf8 T.Text B.ByteString where+    encodeUtf8 = T.encodeUtf8+    decodeUtf8 = T.decodeUtf8With T.lenientDecode+    decodeUtf8Strict = T.decodeUtf8'++instance ConvertUtf8 LT.Text B.ByteString where+    encodeUtf8 = LB.toStrict . encodeUtf8+    decodeUtf8 = LT.decodeUtf8With T.lenientDecode . LB.fromStrict+    decodeUtf8Strict = decodeUtf8Strict . LB.fromStrict++instance ConvertUtf8 String LB.ByteString where+    encodeUtf8 = LBU.fromString+    decodeUtf8 = LBU.toString+    decodeUtf8Strict = (T.unpack <$>) . decodeUtf8Strict++instance ConvertUtf8 T.Text LB.ByteString where+    encodeUtf8 = LB.fromStrict . T.encodeUtf8+    decodeUtf8 = T.decodeUtf8With T.lenientDecode . LB.toStrict+    decodeUtf8Strict = T.decodeUtf8' . LB.toStrict++instance ConvertUtf8 LT.Text LB.ByteString where+    encodeUtf8 = LT.encodeUtf8+    decodeUtf8 = LT.decodeUtf8With T.lenientDecode+    decodeUtf8Strict = LT.decodeUtf8'++-- | Type class for converting other strings to 'T.Text'.+class ToText a where+    toText :: a -> T.Text++instance ToText String where+    toText = T.pack++instance ToText T.Text where+    toText = id++instance ToText LT.Text where+    toText = LT.toStrict++-- | Type class for converting other strings to 'LT.Text'.+class ToLText a where+    toLText :: a -> LT.Text++instance ToLText String where+    toLText = LT.pack++instance ToLText T.Text where+    toLText = LT.fromStrict++instance ToLText LT.Text where+    toLText = id++-- | Type class for converting other strings to 'String'.+class ToString a where+    toString :: a -> String++instance ToString String where+    toString = id++instance ToString T.Text where+    toString = T.unpack++instance ToString LT.Text where+    toString = LT.unpack++-- | Polymorhpic version of 'Text.Read.readEither'.+--+-- >>> readEither @Text @Int "123"+-- Right 123+-- >>> readEither @Text @Int "aa"+-- Left "Prelude.read: no parse"+readEither :: (ToString a, Read b) => a -> Either Text b+readEither = first toText . Text.Read.readEither . toString++-- | Generalized version of 'Prelude.show'.+show :: forall b a . (Base.Show a, IsString b) => a -> b+show x = fromString (Base.show x)+{-# SPECIALIZE show :: Base.Show  a => a -> Text  #-}+{-# SPECIALIZE show :: Base.Show  a => a -> LText  #-}+{-# SPECIALIZE show :: Base.Show  a => a -> ByteString  #-}+{-# SPECIALIZE show :: Base.Show  a => a -> LByteString  #-}+{-# SPECIALIZE show :: Base.Show  a => a -> String  #-}++-- | Functions to show pretty output for buildable data types.+pretty :: Buildable a => a -> Text+pretty = toStrict . prettyL++-- | Similar to 'pretty' but for 'LText'.+prettyL :: Buildable a => a -> LText+prettyL = toLazyText . build
src/Universum.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP                   #-}+{-# LANGUAGE ExplicitForAll        #-} {-# LANGUAGE FlexibleContexts      #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE Trustworthy           #-}@@ -18,9 +19,6 @@          module X  -- Should I expand this to all modules to remove haddock warnings?        , module Base -         -- * Useful classes-       , Buildable-          -- * Useful standard unclassifed functions        , evaluateNF        , evaluateNF_@@ -28,23 +26,13 @@        , evaluateWHNF_        , identity        , map-       , pretty-       , prettyL-       , print-       , readEither-       , show        , uncons        , unsnoc--         -- * Convenient type aliases-       , LText-       , LByteString        ) where  import           Applicative              as X import           Bool                     as X import           Containers               as X-import           Conv                     as X import           Debug                    as X import           Exceptions               as X import           Functor                  as X@@ -52,16 +40,14 @@ import           List                     as X import           Monad                    as X import           Print                    as X+import           String                   as X import           TypeOps                  as X import           VarArg                   as X  import           Base                     as Base hiding (error, show, showFloat,                                                    showList, showSigned, showSignedFloat,                                                    showsPrec, undefined)-import qualified Base                     as PBase -import           Data.String              as X (IsString (..))- -- Maybe'ized version of partial functions import           Safe                     as X (atDef, atMay, foldl1May, foldr1May,                                                 headDef, headMay, initDef, initMay,@@ -131,25 +117,6 @@ -- Generics import           GHC.Generics             as X (Generic) --- Buildable-import           Data.Text.Buildable      (Buildable (build))-import           Data.Text.Lazy.Builder   (toLazyText)---- ByteString-import           Data.ByteString          as X (ByteString)-import qualified Data.ByteString.Lazy---- Text-import           Data.Text                as X (Text, lines, unlines, unwords, words)-import qualified Data.Text.Lazy--import           Data.Text.Lazy           as X (fromStrict, toStrict)--import           Data.Text.Encoding       as X (decodeUtf8', decodeUtf8With)-import           Data.Text.Encoding.Error as X (OnDecodeError, OnError, UnicodeException,-                                                lenientDecode, strictDecode)-import           Text.Read                as X (Read, readMaybe, reads)- -- IO import           System.IO                as X (FilePath, Handle, IOMode (..), stderr,                                                 stdin, stdout, withFile)@@ -162,15 +129,7 @@  -- For internal usage only import qualified Control.Exception.Base   (evaluate)-import qualified Prelude                  (print)-import qualified Text.Read                (readEither) --- | Type synonym for 'Data.Text.Lazy.Text'.-type LText = Data.Text.Lazy.Text---- | Type synonym for 'Data.ByteString.Lazy.ByteString'.-type LByteString = Data.ByteString.Lazy.ByteString- -- | Renamed version of 'Prelude.id'. identity :: a -> a identity x = x@@ -199,36 +158,6 @@     go x mxs = Just (case mxs of        Nothing      -> ([], x)        Just (xs, e) -> (x:xs, e))---- | Lifted version of 'Prelude.print'.-print :: (X.MonadIO m, PBase.Show a) => a -> m ()-print = liftIO . Prelude.print---- | Polymorhpic version of 'Text.Read.readEither'.------ >>> readEither @Text @Int "123"--- Right 123--- >>> readEither @Text @Int "aa"--- Left "Prelude.read: no parse"-readEither :: (ToString a, Read b) => a -> Either Text b-readEither = X.first toText . Text.Read.readEither . X.toString---- | Generalized version of 'Prelude.show'.-show :: (Show a, IsString b) => a -> b-show x = X.fromString (PBase.show x)-{-# SPECIALIZE show :: Show  a => a -> Text  #-}-{-# SPECIALIZE show :: Show  a => a -> LText  #-}-{-# SPECIALIZE show :: Show  a => a -> ByteString  #-}-{-# SPECIALIZE show :: Show  a => a -> LByteString  #-}-{-# SPECIALIZE show :: Show  a => a -> String  #-}---- | Functions to show pretty output for buildable data types.-pretty :: Buildable a => a -> Text-pretty = X.toStrict . prettyL---- | Similar to 'pretty' but for 'LText'.-prettyL :: Buildable a => a -> LText-prettyL = toLazyText . build  -- | Lifted alias for 'Control.Exception.Base.evaluate' with clearer name. evaluateWHNF :: MonadIO m => a -> m a
universum.cabal view
@@ -1,5 +1,5 @@ name: universum-version: 0.7.1.1+version: 0.8.0 cabal-version: >=1.10 build-type: Simple license: MIT@@ -29,13 +29,13 @@         Base         Bool         Containers-        Conv         Debug         Exceptions         Functor         List         Nub         Print+        String         TypeOps         Unsafe         VarArg