diff --git a/brittany.cabal b/brittany.cabal index 3231c23..83ddbe5 100644 --- a/brittany.cabal +++ b/brittany.cabal @@ -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 diff --git a/src/Language/Haskell/Brittany/Internal/Prelude.hs b/src/Language/Haskell/Brittany/Internal/Prelude.hs index 7aba6a9..0ed9b6c 100644 --- a/src/Language/Haskell/Brittany/Internal/Prelude.hs +++ b/src/Language/Haskell/Brittany/Internal/Prelude.hs @@ -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 diff --git a/src/Language/Haskell/Brittany/Internal/PreludeUtils.hs b/src/Language/Haskell/Brittany/Internal/PreludeUtils.hs new file mode 100644 index 0000000..807b0f9 --- /dev/null +++ b/src/Language/Haskell/Brittany/Internal/PreludeUtils.hs @@ -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 diff --git a/srcinc/prelude.inc b/srcinc/prelude.inc index 6de1b69..3c809b0 100644 --- a/srcinc/prelude.inc +++ b/srcinc/prelude.inc @@ -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