{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-} module ClassyPrelude ( -- * CorePrelude module CorePrelude -- * Standard -- ** Monoid , concat , empty , append , (++) -- * Non-standard -- ** List-like classes , map , concatMap , filter , length , singleton , null , pack , unpack , repack , fromList , toList , mapM , mapM_ , stripPrefix , isPrefixOf , stripSuffix , isSuffixOf , isInfixOf , break , span , dropWhile , takeWhile , any , all , splitAt, take, drop , fold , words , unwords , lines , unlines , split , reverse , readMay , replicate -- ** Map-like , lookup , insert , delete -- ** Set-like , member -- ** Text-like , show -- ** Files , readFile , writeFile ) where import qualified Prelude import qualified Data.Maybe import CorePrelude import ClassyPrelude.Classes import ClassyPrelude.ByteString () import ClassyPrelude.Classes () import ClassyPrelude.FilePath () import ClassyPrelude.HashMap () import ClassyPrelude.HashSet () import ClassyPrelude.LByteString () import ClassyPrelude.LText () import ClassyPrelude.List () import ClassyPrelude.Map () import ClassyPrelude.Set () import ClassyPrelude.Text () import ClassyPrelude.Vector () show :: (Prelude.Show a, CanPack c Char) => a -> c show = pack . Prelude.show fromList :: CanPack c i => [i] -> c fromList = pack toList :: CanPack c i => c -> [i] toList = unpack -- Misc instances instance CanPack (Prelude.Maybe a) a where pack = Data.Maybe.listToMaybe unpack = Data.Maybe.maybeToList readMay :: (Prelude.Read b, CanPack a Char) => a -> Maybe b readMay a = case [x | (x, t) <- Prelude.reads (unpack a), null t] of [x] -> Just x _ -> Nothing -- | Repack from one type to another, dropping to a list in the middle. -- -- @repack = pack . unpack@. repack :: (CanPack a i, CanPack b i) => a -> b repack = pack . unpack concat :: Monoid m => [m] -> m concat = mconcat {-# INLINE concat #-} append :: Monoid m => m -> m -> m append = mappend {-# INLINE append #-} empty :: Monoid m => m empty = mempty {-# INLINE empty #-} infixr 5 ++ (++) :: Monoid m => m -> m -> m (++) = mappend {-# INLINE (++) #-}