universum 0.2.1 → 0.2.2
raw patch · 8 files changed
+86/−31 lines, 8 filesdep +type-operatorsnew-uploader
Dependencies added: type-operators
Files
- CHANGES.md +6/−0
- src/Containers.hs +16/−8
- src/Debug.hs +7/−8
- src/List.hs +4/−3
- src/Monad.hs +3/−3
- src/TypeOps.hs +40/−0
- src/Universum.hs +1/−0
- universum.cabal +9/−9
CHANGES.md view
@@ -1,3 +1,9 @@+0.2.2+=====++* [#33](https://github.com/serokell/universum/issues/33):+ Add `($)` and `Each` type operators.+ 0.2.1 =====
src/Containers.hs view
@@ -13,7 +13,7 @@ module Containers (- -- * Foldable-like classes and methods+ -- * Foldable-like classes and methods Element , Container(..) , NontrivialContainer(..)@@ -29,7 +29,7 @@ , sequence_ , asum - -- * Others+ -- * Others , One(..) ) where @@ -38,6 +38,7 @@ import Data.Coerce (Coercible, coerce) import Data.Foldable (Foldable) import qualified Data.Foldable as F+import Data.Hashable (Hashable) import Data.Maybe (fromMaybe) import Data.Monoid (All(..), Any(..), First(..)) import Data.Word (Word8)@@ -53,6 +54,8 @@ import qualified Data.List.NonEmpty as NE #endif +import qualified Data.Sequence as SEQ+ import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as BSL @@ -71,7 +74,7 @@ import qualified Data.Vector.Primitive as VP import qualified Data.Vector.Storable as VS -import Data.Hashable (Hashable)+import Applicative (pass) ---------------------------------------------------------------------------- -- Containers (e.g. tuples aren't containers)@@ -275,7 +278,7 @@ length = fromIntegral . TL.length {-# INLINE length #-} -- will be okay thanks to rewrite rules- elem c s = TL.isInfixOf (TL.singleton c) s + elem c s = TL.isInfixOf (TL.singleton c) s {-# INLINE elem #-} maximum = TL.maximum {-# INLINE maximum #-}@@ -377,7 +380,7 @@ traverse_ :: (NontrivialContainer t, Applicative f) => (Element t -> f b) -> t -> f ()-traverse_ f = foldr ((*>) . f) (pure ())+traverse_ f = foldr ((*>) . f) pass for_ :: (NontrivialContainer t, Applicative f)@@ -388,7 +391,7 @@ mapM_ :: (NontrivialContainer t, Monad m) => (Element t -> m b) -> t -> m ()-mapM_ f= foldr ((>>) . f) (return ())+mapM_ f= foldr ((>>) . f) pass forM_ :: (NontrivialContainer t, Monad m)@@ -399,12 +402,12 @@ sequenceA_ :: (NontrivialContainer t, Applicative f, Element t ~ f a) => t -> f ()-sequenceA_ = foldr (*>) (pure ())+sequenceA_ = foldr (*>) pass sequence_ :: (NontrivialContainer t, Monad m, Element t ~ m a) => t -> m ()-sequence_ = foldr (>>) (return ())+sequence_ = foldr (>>) pass asum :: (NontrivialContainer t, Alternative f, Element t ~ f a)@@ -485,6 +488,11 @@ one = (NE.:|[]) {-# INLINE one #-} #endif++instance One (SEQ.Seq a) where+ type OneItem (SEQ.Seq a) = a+ one = (SEQ.empty SEQ.|>)+ {-# INLINE one #-} -- Monomorphic sequences
src/Debug.hs view
@@ -18,19 +18,18 @@ ) where import Control.Monad (Monad, return)-import Data.Text (Text, unpack)-+import Control.Monad.IO.Class (MonadIO) import Data.Data (Data)+import Data.Text (Text, unpack) import Data.Typeable (Typeable) import GHC.Generics (Generic)--import Control.Monad.IO.Class (MonadIO)+import System.IO.Unsafe (unsafePerformIO) import qualified Base as P import qualified Prelude as P import Show (Print, putStrLn) -import System.IO.Unsafe (unsafePerformIO)+import Applicative (pass) {-# WARNING trace "'trace' remains in code" #-} trace :: Print b => b -> a -> a@@ -58,13 +57,13 @@ {-# WARNING traceShowM "'traceShowM' remains in code" #-} traceShowM :: (P.Show a, Monad m) => a -> m ()-traceShowM a = trace (P.show a) (return ())+traceShowM a = trace (P.show a) pass {-# WARNING traceM "'traceM' remains in code" #-} traceM :: (Monad m) => Text -> m ()-traceM s = trace (unpack s) (return ())+traceM s = trace (unpack s) pass -{-# WARNING traceId "'traceM' remains in code" #-}+{-# WARNING traceId "'traceId' remains in code" #-} traceId :: Text -> Text traceId s = trace s s
src/List.hs view
@@ -15,8 +15,6 @@ , zip3 ) where -import Control.Applicative (Applicative)-import Control.Monad (Monad (..)) import Data.Function ((.)) import Data.Functor (fmap) import Data.List (sortBy, unzip, unzip3, zip, zip3)@@ -24,10 +22,13 @@ import qualified Data.Set as Set #if ( __GLASGOW_HASKELL__ >= 800 )+import Control.Applicative (Applicative)+import Control.Monad (Monad (..)) import Data.List.NonEmpty as X (NonEmpty (..))-#endif import Applicative (pass)+#endif+ sortOn :: (Ord o) => (a -> o) -> [a] -> [a] sortOn = sortBy . comparing
src/Monad.hs view
@@ -65,10 +65,10 @@ #if __GLASGOW_HASKELL__ >= 800 import Control.Monad.Fail (MonadFail (..)) #else-import Prelude (String)+import Prelude (Maybe (Nothing), String) import qualified Prelude as P (fail)-import Text.ParserCombinators.ReadP-import Text.ParserCombinators.ReadPrec+import Text.ParserCombinators.ReadP (ReadP)+import Text.ParserCombinators.ReadPrec (ReadPrec) #endif concatMapM :: Monad m => (a -> m [b]) -> [a] -> m [b]
+ src/TypeOps.hs view
@@ -0,0 +1,40 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE ExplicitNamespaces #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}++module TypeOps+ ( type Each+ , type ($)+ ) where++#if __GLASGOW_HASKELL__ <= 710+import GHC.Prim (Constraint)+#else+import Data.Kind (Constraint)+#endif++import Control.Type.Operator (type ($), type (<+>))++-- | Map several constraints over several variables.+--+-- @+-- f :: Each [Show, Read] [a, b] => a -> b -> String+-- =+-- f :: (Show a, Show b, Read a, Show b) => a -> b -> String+-- @+--+-- To specify list with single constraint / variable, don't forget to prefix+-- it with @\'@:+--+-- @+-- f :: Each '[Show] [a, b] => a -> b -> String+-- @+type family Each (c :: [k -> Constraint]) (as :: [k]) where+ Each c '[] = (() :: Constraint)+ Each c (h ': t) = (c <+> h, Each c t)
src/Universum.hs view
@@ -45,6 +45,7 @@ import Monad as X import Panic as X import Show as X+import TypeOps as X import Base as Base hiding (error, print, putStr, putStrLn, show, showFloat, showList, showSigned,
universum.cabal view
@@ -1,5 +1,5 @@ name: universum-version: 0.2.1+version: 0.2.2 synopsis: Custom prelude used in Serokell description: Custom prelude used in Serokell homepage: https://github.com/serokell/universum@@ -7,18 +7,16 @@ license-file: LICENSE author: Stephen Diehl maintainer: hi@serokell.io-copyright: 2016-2016 Stephen Diehl, 2016-2016 Serokell+copyright: 2016-2016 Stephen Diehl, 2016-2017 Serokell category: Prelude build-type: Simple-extra-source-files:- CHANGES.md+extra-source-files: CHANGES.md cabal-version: >=1.10+Bug-Reports: https://github.com/serokell/universum/issues tested-with:- GHC == 7.10.1,- GHC == 7.10.2, GHC == 7.10.3,- GHC == 8.0.1-Bug-Reports: https://github.com/serokell/universum/issues+ GHC == 8.0.1,+ GHC == 8.0.2 Source-Repository head type: git@@ -41,6 +39,7 @@ List Panic Show+ TypeOps Unsafe Monad@@ -71,10 +70,11 @@ safe >= 0.3 && <0.4, stm >= 2.4 && <2.5, text >= 1.2 && <1.3,- utf8-string >= 1.0 && <1.1, text-format, transformers >= 0.4 && <0.6,+ type-operators == 0.1.0.4, unordered-containers,+ utf8-string >= 1.0 && <1.1, vector hs-source-dirs: src