{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE CPP #-} {-| This module is for internal re-exports of commonly-used functions. This also lets us avoid churn between versions of GHC by putting changed functions behind CPP in a single place. -} {- GHC version <--> base version (https://wiki.haskell.org/Base_package) includes: 8.0.1 4.9.0.0 8.2.1 4.10.0.0 8.4.1 4.11.0.0 GHC distributions include a set of core packages; overriding these with new versions is unwise. Core packages include (see https://downloads.haskell.org/~ghc/X.Y.Z/docs/html/users_guide/X.Y.Z-notes.html#included-libraries ): base, Cabal, array, bytestring, containers, deepseq, directory, filepath, mtl, parsec, process, text, time, unix -} module Matterhorn.Prelude ( module P #if !MIN_VERSION_base(4,9,0) , (<>) #endif , (<|>) -- commonly-used functions from Maybe , Maybe.isJust , Maybe.isNothing , Maybe.listToMaybe , Maybe.maybeToList , Maybe.fromMaybe , Maybe.catMaybes -- a non-partial Read function , Read.readMaybe -- commonly-used functions from Monad , Monad.forM , Monad.forM_ , Monad.filterM , Monad.when , Monad.unless , Monad.void , Monad.join , Monad.forever , Monad.foldM , Monad.MonadIO(..) -- commonly-used functions from List , Foldable.toList , List.find , List.sort , List.intercalate , Exts.sortWith , Exts.groupWith -- common read-only lens operators , (Lens.&) , (Lens.^.) , (Lens.^?) , Lens.use , Lens.preuse -- not available in all versions of GHC currently in use #if MIN_VERSION_base(4,10,0) , Clock.nominalDay #else , nominalDay #endif -- various type aliases , Text , HashMap , Seq , Set , Time.UTCTime , Time.TimeZoneSeries , Time.NominalDiffTime ) where #if !MIN_VERSION_base(4,11,0) import Data.Semigroup ( (<>) ) #endif import Control.Applicative ( (<|>) ) import qualified Control.Monad as Monad import qualified Control.Monad.IO.Class as Monad import qualified Data.Foldable as Foldable import qualified Data.List as List import qualified Data.Maybe as Maybe import qualified Data.Time as Time #if MIN_VERSION_base(4,10,0) import qualified Data.Time.Clock as Clock #endif import qualified Data.Time.LocalTime.TimeZone.Series as Time import qualified GHC.Exts as Exts import qualified Lens.Micro.Platform as Lens import Prelude.Compat import qualified Prelude.Compat as P import qualified Text.Read as Read -- these below we import only for type aliases import Data.HashMap.Strict ( HashMap ) import Data.Sequence ( Seq ) import Data.Set ( Set ) import Data.Text ( Text ) #if !MIN_VERSION_base(4,10,0) nominalDay :: Time.NominalDiffTime nominalDay = 86400 #endif