diff --git a/README.md b/README.md index aa2fbec7c..1a12f9c0e 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,11 @@ Design points: * Banishes partial functions. * Compiler warning on bottoms. * Polymorphic string IO functions. +* Polymorphic show. * Automatic string conversions. -* Type synonyms for major data structures. -* Basic monad transformers in scope by default. +* Type for common data structures in scope. +* Type for all common string types in scope. +* StateT/ReaderT/ExceptT transformers in scope by default. * Foldable / Traversable functions in scope by default. * Unsafe functions are prefixed with "unsafe" in separate module. * Compiler agnostic, GHC internal modules are abstracted out into Base. diff --git a/src/Monad.hs b/src/Monad.hs index 9c38e65cc..370e641ba 100644 --- a/src/Monad.hs +++ b/src/Monad.hs @@ -48,8 +48,8 @@ import Control.Monad hiding ((<$!>)) import Control.Monad #endif -concatMapM :: (Monad m) => (a -> m [b]) -> [a] -> m [b] -concatMapM f xs = liftM concat (mapM f xs) +concatMapM :: Monad m => (a -> m [b]) -> [a] -> m [b] +concatMapM f xs = fmap concat (mapM f xs) liftM' :: Monad m => (a -> b) -> m a -> m b liftM' = (<$!>) diff --git a/src/Protolude.hs b/src/Protolude.hs index 6c6a056f0..97a731aa2 100644 --- a/src/Protolude.hs +++ b/src/Protolude.hs @@ -1,6 +1,7 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE Trustworthy #-} {-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE ExplicitNamespaces #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} module Protolude ( @@ -129,6 +130,7 @@ import Data.List as X ( , zipWith , zip ) + import Data.Map as X (Map) import Data.Set as X (Set) import Data.Sequence as X (Seq) @@ -140,6 +142,24 @@ import Data.Proxy as X ( Proxy(..) ) +import Data.Typeable as X ( + TypeRep, + ) + +import Data.Type.Coercion as X ( + Coercion(..) + , coerceWith + ) + +import Data.Type.Equality as X ( + (:~:)(..) + , type (==) + , sym + , trans + , castWith + , gcastWith + ) + import Data.Void as X ( Void , absurd @@ -198,11 +218,11 @@ import Control.Monad.Trans as X ( import Data.Int as X import Data.Bits as X import Data.Word as X -import Data.Bool as X hiding (bool) -import Data.Char as X (chr) -import Data.Maybe as X hiding (fromJust) import Data.Either as X import Data.Complex as X +import Data.Char as X (chr) +import Data.Bool as X hiding (bool) +import Data.Maybe as X hiding (fromJust) import Data.Function as X ( const