Refactor prelude.inc/Prelude to reduce imports

pull/51/head
Lennart Spitzner 2017-08-12 23:40:14 +02:00
parent ebf84a03e9
commit 3ac8cccb0f
4 changed files with 428 additions and 407 deletions

View File

@ -54,6 +54,7 @@ library {
Language.Haskell.Brittany
Language.Haskell.Brittany.Internal
Language.Haskell.Brittany.Internal.Prelude
Language.Haskell.Brittany.Internal.PreludeUtils
Language.Haskell.Brittany.Internal.Types
Language.Haskell.Brittany.Internal.Utils
Language.Haskell.Brittany.Internal.Config

View File

@ -1,68 +1,378 @@
module Language.Haskell.Brittany.Internal.Prelude
module Language.Haskell.Brittany.Internal.Prelude (module E)
where
import Prelude
import qualified Data.Strict.Maybe as Strict
import Debug.Trace
import Control.Monad
import System.IO
import Data.Functor.Identity as E ( Identity(..) )
import Control.Concurrent.Chan as E ( Chan )
import Control.Concurrent.MVar as E ( MVar )
import Data.Int as E ( Int )
import Data.Word as E ( Word )
import Prelude as E ( Integer
, Float
, Double
)
import Control.Monad.ST as E ( ST )
import Data.Bool as E ( Bool(..) )
import Data.Char as E ( Char )
import Data.Either as E ( Either(..) )
import Data.IORef as E ( IORef )
import Data.Maybe as E ( Maybe(..) )
import Data.Semigroup as E ( Option(..) )
import Data.Monoid as E ( Endo(..)
, All(..)
, Any(..)
, Sum(..)
, Product(..)
, Alt(..)
)
import Data.Ord as E ( Ordering(..)
, Down(..)
)
import Data.Ratio as E ( Ratio
, Rational
)
import Data.String as E ( String )
import Data.Void as E ( Void )
import System.IO as E ( IO )
import Data.Proxy as E ( Proxy(..) )
import Data.Sequence as E ( Seq )
import Control.DeepSeq ( NFData, force )
import Control.Exception.Base ( evaluate )
import Data.Map as E ( Map )
import Data.Set as E ( Set )
import Control.Applicative
import Data.Text as E ( Text )
import Prelude as E ( Char
, String
, Int
, Integer
, Float
, Double
, Bool (..)
, undefined
, Eq (..)
, Ord (..)
, Enum (..)
, Bounded (..)
, Maybe (..)
, Either (..)
, IO
, (<$>)
, (.)
, ($)
, ($!)
, Num (..)
, Integral (..)
, Fractional (..)
, Floating (..)
, RealFrac (..)
, RealFloat (..)
, fromIntegral
, error
, foldr
, foldl
, foldr1
, id
, map
, subtract
, putStrLn
, putStr
, Show (..)
, print
, fst
, snd
, (++)
, not
, (&&)
, (||)
, curry
, uncurry
, Ordering (..)
, flip
, const
, seq
, reverse
, otherwise
, traverse
, realToFrac
, or
, and
, head
, any
, (^)
, Foldable
, Traversable
)
import Data.Function as E ( fix
)
instance Applicative Strict.Maybe where
pure = Strict.Just
Strict.Just f <*> Strict.Just x = Strict.Just (f x)
_ <*> _ = Strict.Nothing
import Data.Foldable as E ( foldl'
, foldr'
, fold
, asum
)
instance Monad Strict.Maybe where
return = Strict.Just
Strict.Nothing >>= _ = Strict.Nothing
Strict.Just x >>= f = f x
import Data.List as E ( partition
, null
, elem
, notElem
, minimum
, maximum
, length
, all
, take
, drop
, find
, sum
, zip
, zip3
, zipWith
, repeat
, replicate
, iterate
, nub
, filter
, intersperse
, intercalate
, isSuffixOf
, isPrefixOf
, dropWhile
, takeWhile
, unzip
, break
, transpose
, sortBy
, mapAccumL
, mapAccumR
, uncons
)
instance Alternative Strict.Maybe where
empty = Strict.Nothing
x <|> Strict.Nothing = x
_ <|> x = x
import Data.List.NonEmpty as E ( NonEmpty(..)
, nonEmpty
)
traceFunctionWith
:: String -> (a -> String) -> (b -> String) -> (a -> b) -> (a -> b)
traceFunctionWith name s1 s2 f x =
trace traceStr y
where
y = f x
traceStr = name ++ "\nBEFORE:\n" ++ s1 x ++ "\nAFTER:\n" ++ s2 y
import Data.Tuple as E ( swap
)
(<&!>) :: Monad m => m a -> (a -> b) -> m b
(<&!>) = flip (<$!>)
import Data.Char as E ( ord
, chr
)
putStrErrLn :: String -> IO ()
putStrErrLn s = hPutStrLn stderr s
import Data.Maybe as E ( fromMaybe
, maybe
, listToMaybe
, maybeToList
, catMaybes
)
printErr :: Show a => a -> IO ()
printErr = putStrErrLn . show
import Data.Word as E ( Word32
)
errorIf :: Bool -> a -> a
errorIf False = id
errorIf True = error "errorIf"
import Data.Ord as E ( comparing
, Down (..)
)
errorIfNote :: Maybe String -> a -> a
errorIfNote Nothing = id
errorIfNote (Just x) = error x
import Data.Either as E ( either
)
(<&>) :: Functor f => f a -> (a -> b) -> f b
(<&>) = flip fmap
infixl 4 <&>
import Data.Ratio as E ( Ratio
, (%)
, numerator
, denominator
)
(.>) :: (a -> b) -> (b -> c) -> (a -> c)
f .> g = g . f
infixl 9 .>
import Text.Read as E ( readMaybe
)
import Control.Monad as E ( Functor (..)
, Monad (..)
, MonadPlus (..)
, mapM
, mapM_
, forM
, forM_
, sequence
, sequence_
, (=<<)
, (>=>)
, (<=<)
, forever
, void
, join
, replicateM
, replicateM_
, guard
, when
, unless
, liftM
, liftM2
, liftM3
, liftM4
, liftM5
, filterM
, (<$!>)
)
import Control.Applicative as E ( Applicative (..)
, Alternative (..)
)
import Foreign.Storable as E ( Storable )
import GHC.Exts as E ( Constraint )
import Control.Concurrent as E ( threadDelay
, forkIO
, forkOS
)
import Control.Concurrent.MVar as E ( MVar
, newEmptyMVar
, newMVar
, putMVar
, readMVar
, takeMVar
, swapMVar
)
import Control.Exception as E ( evaluate
, bracket
, assert
)
import Debug.Trace as E ( trace
, traceId
, traceShowId
, traceShow
, traceStack
, traceShowId
, traceIO
, traceM
, traceShowM
)
import Foreign.ForeignPtr as E ( ForeignPtr
)
import Data.Monoid as E ( (<>)
, mconcat
, Monoid (..)
)
import Data.Bifunctor as E ( bimap )
import Data.Functor as E ( (<$), ($>) )
import Data.Function as E ( (&) )
import System.IO as E ( hFlush
, stdout
)
import Data.Typeable as E ( Typeable
)
import Control.Arrow as E ( first
, second
, (***)
, (&&&)
, (>>>)
, (<<<)
)
import Data.Functor.Identity as E ( Identity (..)
)
import Data.Proxy as E ( Proxy (..)
)
import Data.Version as E ( showVersion
)
import Data.List.Extra as E ( nubOrd
, stripSuffix
)
import Control.Monad.Extra as E ( whenM
, unlessM
, ifM
, notM
, orM
, andM
, anyM
, allM
)
import Data.Tree as E ( Tree(..)
)
import Control.Monad.Trans.MultiRWS as E ( -- MultiRWST (..)
-- , MultiRWSTNull
-- , MultiRWS
-- ,
MonadMultiReader(..)
, MonadMultiWriter(..)
, MonadMultiState(..)
-- , runMultiRWST
-- , runMultiRWSTASW
-- , runMultiRWSTW
-- , runMultiRWSTAW
-- , runMultiRWSTSW
-- , runMultiRWSTNil
-- , runMultiRWSTNil_
-- , withMultiReader
-- , withMultiReader_
-- , withMultiReaders
-- , withMultiReaders_
-- , withMultiWriter
-- , withMultiWriterAW
-- , withMultiWriterWA
-- , withMultiWriterW
-- , withMultiWriters
-- , withMultiWritersAW
-- , withMultiWritersWA
-- , withMultiWritersW
-- , withMultiState
-- , withMultiStateAS
-- , withMultiStateSA
-- , withMultiStateA
-- , withMultiStateS
-- , withMultiState_
-- , withMultiStates
-- , withMultiStatesAS
-- , withMultiStatesSA
-- , withMultiStatesA
-- , withMultiStatesS
-- , withMultiStates_
-- , inflateReader
-- , inflateMultiReader
-- , inflateWriter
-- , inflateMultiWriter
-- , inflateState
-- , inflateMultiState
-- , mapMultiRWST
-- , mGetRawR
-- , mGetRawW
-- , mGetRawS
-- , mPutRawR
-- , mPutRawW
-- , mPutRawS
)
import Control.Monad.Trans.MultiReader ( runMultiReaderTNil
, runMultiReaderTNil_
, MultiReaderT (..)
, MultiReader
, MultiReaderTNull
)
import Data.Text as E ( Text )
import Control.Monad.IO.Class as E ( MonadIO (..)
)
import Control.Monad.Trans.Class as E ( lift
)
import Control.Monad.Trans.Maybe as E ( MaybeT (..)
)
import Data.Data as E ( toConstr
)
evaluateDeep :: NFData a => a -> IO a
evaluateDeep = evaluate . force

View File

@ -0,0 +1,68 @@
module Language.Haskell.Brittany.Internal.PreludeUtils
where
import Prelude
import qualified Data.Strict.Maybe as Strict
import Debug.Trace
import Control.Monad
import System.IO
import Control.DeepSeq ( NFData, force )
import Control.Exception.Base ( evaluate )
import Control.Applicative
instance Applicative Strict.Maybe where
pure = Strict.Just
Strict.Just f <*> Strict.Just x = Strict.Just (f x)
_ <*> _ = Strict.Nothing
instance Monad Strict.Maybe where
return = Strict.Just
Strict.Nothing >>= _ = Strict.Nothing
Strict.Just x >>= f = f x
instance Alternative Strict.Maybe where
empty = Strict.Nothing
x <|> Strict.Nothing = x
_ <|> x = x
traceFunctionWith
:: String -> (a -> String) -> (b -> String) -> (a -> b) -> (a -> b)
traceFunctionWith name s1 s2 f x =
trace traceStr y
where
y = f x
traceStr = name ++ "\nBEFORE:\n" ++ s1 x ++ "\nAFTER:\n" ++ s2 y
(<&!>) :: Monad m => m a -> (a -> b) -> m b
(<&!>) = flip (<$!>)
putStrErrLn :: String -> IO ()
putStrErrLn s = hPutStrLn stderr s
printErr :: Show a => a -> IO ()
printErr = putStrErrLn . show
errorIf :: Bool -> a -> a
errorIf False = id
errorIf True = error "errorIf"
errorIfNote :: Maybe String -> a -> a
errorIfNote Nothing = id
errorIfNote (Just x) = error x
(<&>) :: Functor f => f a -> (a -> b) -> f b
(<&>) = flip fmap
infixl 4 <&>
(.>) :: (a -> b) -> (b -> c) -> (a -> c)
f .> g = g . f
infixl 9 .>
evaluateDeep :: NFData a => a -> IO a
evaluateDeep = evaluate . force

View File

@ -433,364 +433,6 @@ import qualified Data.Strict.Maybe as Strict
import qualified Safe as Safe
import Data.Functor.Identity ( Identity(..) )
import Control.Concurrent.Chan ( Chan )
import Control.Concurrent.MVar ( MVar )
import Data.Int ( Int )
import Data.Word ( Word )
import Prelude ( Integer, Float, Double )
import Control.Monad.ST ( ST )
import Data.Bool ( Bool(..) )
import Data.Char ( Char )
import Data.Either ( Either(..) )
import Data.IORef ( IORef )
import Data.Maybe ( Maybe(..) )
import Data.Semigroup ( Option(..) )
import Data.Monoid ( Endo(..), All(..), Any(..), Sum(..), Product(..), Alt(..), )
import Data.Ord ( Ordering(..), Down(..) )
import Data.Ratio ( Ratio, Rational )
import Data.String ( String )
import Data.Void ( Void )
import System.IO ( IO )
import Data.Proxy ( Proxy(..) )
import Data.Sequence ( Seq )
import Data.Map ( Map )
import Data.Set ( Set )
import Data.Text ( Text )
import Prelude ( Char
, String
, Int
, Integer
, Float
, Double
, Bool (..)
, undefined
, Eq (..)
, Ord (..)
, Enum (..)
, Bounded (..)
, Maybe (..)
, Either (..)
, IO
, (<$>)
, (.)
, ($)
, ($!)
, Num (..)
, Integral (..)
, Fractional (..)
, Floating (..)
, RealFrac (..)
, RealFloat (..)
, fromIntegral
, error
, foldr
, foldl
, foldr1
, id
, map
, subtract
, putStrLn
, putStr
, Show (..)
, print
, fst
, snd
, (++)
, not
, (&&)
, (||)
, curry
, uncurry
, Ordering (..)
, flip
, const
, seq
, reverse
, otherwise
, traverse
, realToFrac
, or
, and
, head
, any
, (^)
, Foldable
, Traversable
)
import Data.Function ( fix
)
import Data.Foldable ( foldl'
, foldr'
, fold
, asum
)
import Data.List ( partition
, null
, elem
, notElem
, minimum
, maximum
, length
, all
, take
, drop
, find
, sum
, zip
, zip3
, zipWith
, repeat
, replicate
, iterate
, nub
, filter
, intersperse
, intercalate
, isSuffixOf
, isPrefixOf
, dropWhile
, takeWhile
, unzip
, break
, transpose
, sortBy
, mapAccumL
, mapAccumR
, uncons
)
import Data.List.NonEmpty ( NonEmpty(..)
, nonEmpty
)
import Data.Tuple ( swap
)
import Data.Char ( ord
, chr
)
import Data.Maybe ( fromMaybe
, maybe
, listToMaybe
, maybeToList
, catMaybes
)
import Data.Word ( Word32
)
import Data.Ord ( comparing
, Down (..)
)
import Data.Either ( either
)
import Data.Ratio ( Ratio
, (%)
, numerator
, denominator
)
import Text.Read ( readMaybe
)
import Control.Monad ( Functor (..)
, Monad (..)
, MonadPlus (..)
, mapM
, mapM_
, forM
, forM_
, sequence
, sequence_
, (=<<)
, (>=>)
, (<=<)
, forever
, void
, join
, replicateM
, replicateM_
, guard
, when
, unless
, liftM
, liftM2
, liftM3
, liftM4
, liftM5
, filterM
, (<$!>)
)
import Control.Applicative ( Applicative (..)
, Alternative (..)
)
import Foreign.Storable ( Storable )
import GHC.Exts ( Constraint )
import Control.Concurrent ( threadDelay
, forkIO
, forkOS
)
import Control.Concurrent.MVar ( MVar
, newEmptyMVar
, newMVar
, putMVar
, readMVar
, takeMVar
, swapMVar
)
import Control.Exception ( evaluate
, bracket
, assert
)
import Debug.Trace ( trace
, traceId
, traceShowId
, traceShow
, traceStack
, traceShowId
, traceIO
, traceM
, traceShowM
)
import Foreign.ForeignPtr ( ForeignPtr
)
import Data.Monoid ( (<>)
, mconcat
, Monoid (..)
)
import Data.Bifunctor ( bimap )
import Data.Functor ( (<$), ($>) )
import Data.Function ( (&) )
import System.IO ( hFlush
, stdout
)
import Data.Typeable ( Typeable
)
import Control.Arrow ( first
, second
, (***)
, (&&&)
, (>>>)
, (<<<)
)
import Data.Functor.Identity ( Identity (..)
)
import Data.Proxy ( Proxy (..)
)
import Data.Version ( showVersion
)
import Data.List.Extra ( nubOrd
, stripSuffix
)
import Control.Monad.Extra ( whenM
, unlessM
, ifM
, notM
, orM
, andM
, anyM
, allM
)
import Data.Tree ( Tree(..)
)
import Control.Monad.Trans.MultiRWS ( -- MultiRWST (..)
-- , MultiRWSTNull
-- , MultiRWS
-- ,
MonadMultiReader(..)
, MonadMultiWriter(..)
, MonadMultiState(..)
-- , runMultiRWST
-- , runMultiRWSTASW
-- , runMultiRWSTW
-- , runMultiRWSTAW
-- , runMultiRWSTSW
-- , runMultiRWSTNil
-- , runMultiRWSTNil_
-- , withMultiReader
-- , withMultiReader_
-- , withMultiReaders
-- , withMultiReaders_
-- , withMultiWriter
-- , withMultiWriterAW
-- , withMultiWriterWA
-- , withMultiWriterW
-- , withMultiWriters
-- , withMultiWritersAW
-- , withMultiWritersWA
-- , withMultiWritersW
-- , withMultiState
-- , withMultiStateAS
-- , withMultiStateSA
-- , withMultiStateA
-- , withMultiStateS
-- , withMultiState_
-- , withMultiStates
-- , withMultiStatesAS
-- , withMultiStatesSA
-- , withMultiStatesA
-- , withMultiStatesS
-- , withMultiStates_
-- , inflateReader
-- , inflateMultiReader
-- , inflateWriter
-- , inflateMultiWriter
-- , inflateState
-- , inflateMultiState
-- , mapMultiRWST
-- , mGetRawR
-- , mGetRawW
-- , mGetRawS
-- , mPutRawR
-- , mPutRawW
-- , mPutRawS
)
import Control.Monad.Trans.MultiReader ( runMultiReaderTNil
, runMultiReaderTNil_
, MultiReaderT (..)
, MultiReader
, MultiReaderTNull
)
import Data.Text ( Text )
import Control.Monad.IO.Class ( MonadIO (..)
)
import Control.Monad.Trans.Class ( lift
)
import Control.Monad.Trans.Maybe ( MaybeT (..)
)
import Language.Haskell.Brittany.Internal.Prelude
import Data.Data ( toConstr
)
import Language.Haskell.Brittany.Internal.PreludeUtils