We can't import just ($!) from Prelude (Or at least I do not know how). It
is either everything or nothing.

On Wed, Sep 9, 2015 at 2:00 PM Petr Pudlak <[email protected]> wrote:

> On Wed, Sep 09, 2015 at 12:10:31PM +0200, 'Bhimanavajjula Aditya' via
> ganeti-devel wrote:
> >Ganeti.Prelude exports the exact same interface
> >as exported by base 4.8.0 Prelude. However, it
> >also compiles under lesser base versions.
> >
> >Whenever we need functions that are in Ganeti.Prelude,
> >but not in Prelude (of lesser base versions), we use
> >Ganeti.Prelude instead by:
> >
> >import Prelude ()
> >import Ganeti.Prelude
> >
> >Signed-off-by: Bhimanavajjula Aditya <[email protected]>
> >---
> > Makefile.am                                     |   1 +
> > src/Ganeti/BasicTypes.hs                        |   6 +-
> > src/Ganeti/Codec.hs                             |   4 +-
> > src/Ganeti/Confd/Server.hs                      |   4 +-
> > src/Ganeti/Confd/Utils.hs                       |   4 +-
> > src/Ganeti/Config.hs                            |   7 +-
> > src/Ganeti/ConstantUtils.hs                     |   4 +-
> > src/Ganeti/Cpu/LoadParser.hs                    |   5 +-
> > src/Ganeti/DataCollectors.hs                    |   4 +-
> > src/Ganeti/DataCollectors/XenCpuLoad.hs         |   5 +-
> > src/Ganeti/HTools/Cluster.hs                    |  14 +-
> > src/Ganeti/HTools/Dedicated.hs                  |   5 +-
> > src/Ganeti/HTools/Node.hs                       |   6 +-
> > src/Ganeti/JQScheduler.hs                       |  21 ++-
> > src/Ganeti/JQueue.hs                            |  19 ++-
> > src/Ganeti/Kvmd.hs                              |   6 +-
> > src/Ganeti/Lens.hs                              |   5 +-
> > src/Ganeti/Locking/Allocation.hs                |   7 +-
> > src/Ganeti/Locking/Locks.hs                     |   4 +-
> > src/Ganeti/Logging.hs                           |   5 +-
> > src/Ganeti/Metad/ConfigCore.hs                  |   4 +-
> > src/Ganeti/Monitoring/Server.hs                 |   6 +-
> > src/Ganeti/Objects.hs                           |   5 +-
> > src/Ganeti/Objects/Disk.hs                      |   4 +-
> > src/Ganeti/Objects/Instance.hs                  |   3 +-
> > src/Ganeti/OpCodes.hs                           |   4 +-
> > src/Ganeti/Parsers.hs                           |   4 +-
> > src/Ganeti/Prelude.hs                           | 218
> ++++++++++++++++++++++++
> > src/Ganeti/Query/Exec.hs                        |   4 +-
> > src/Ganeti/Query/Filter.hs                      |   5 +-
> > src/Ganeti/Query/Language.hs                    |   5 +-
> > src/Ganeti/Query/Node.hs                        |   6 +-
> > src/Ganeti/Query/Server.hs                      |   4 +-
> > src/Ganeti/Ssconf.hs                            |   4 +-
> > src/Ganeti/Storage/Diskstats/Parser.hs          |   4 +-
> > src/Ganeti/Storage/Drbd/Parser.hs               |   5 +-
> > src/Ganeti/Storage/Lvm/LVParser.hs              |   4 +-
> > src/Ganeti/THH.hs                               |   8 +-
> > src/Ganeti/THH/HsRPC.hs                         |   8 +-
> > src/Ganeti/THH/PyRPC.hs                         |   6 +-
> > src/Ganeti/THH/PyType.hs                        |   6 +-
> > src/Ganeti/THH/RPC.hs                           |   4 +-
> > src/Ganeti/Types.hs                             |   4 +-
> > src/Ganeti/UDSServer.hs                         |   6 +-
> > src/Ganeti/Utils.hs                             |  12 +-
> > src/Ganeti/Utils/MultiMap.hs                    |   4 +-
> > src/Ganeti/Utils/Random.hs                      |   4 +-
> > src/Ganeti/Utils/Validate.hs                    |   4 +-
> > src/Ganeti/WConfd/ConfigModifications.hs        |   6 +-
> > src/Ganeti/WConfd/ConfigState.hs                |   4 +-
> > src/Ganeti/WConfd/ConfigWriter.hs               |   5 +-
> > src/Ganeti/WConfd/Monad.hs                      |   4 +-
> > src/Ganeti/WConfd/TempRes.hs                    |   4 +-
> > test/hs/Test/Ganeti/BasicTypes.hs               |   4 +-
> > test/hs/Test/Ganeti/Confd/Types.hs              |   4 +-
> > test/hs/Test/Ganeti/HTools/Instance.hs          |   4 +-
> > test/hs/Test/Ganeti/HTools/Types.hs             |   4 +-
> > test/hs/Test/Ganeti/JQScheduler.hs              |   5 +-
> > test/hs/Test/Ganeti/JQueue/Objects.hs           |   4 +-
> > test/hs/Test/Ganeti/Locking/Allocation.hs       |   4 +-
> > test/hs/Test/Ganeti/Locking/Locks.hs            |   5 +-
> > test/hs/Test/Ganeti/Locking/Waiting.hs          |   5 +-
> > test/hs/Test/Ganeti/Luxi.hs                     |   4 +-
> > test/hs/Test/Ganeti/Objects.hs                  |   6 +-
> > test/hs/Test/Ganeti/OpCodes.hs                  |   6 +-
> > test/hs/Test/Ganeti/Query/Language.hs           |   4 +-
> > test/hs/Test/Ganeti/Rpc.hs                      |   4 +-
> > test/hs/Test/Ganeti/SlotMap.hs                  |   5 +-
> > test/hs/Test/Ganeti/Storage/Diskstats/Parser.hs |   4 +-
> > test/hs/Test/Ganeti/Storage/Lvm/LVParser.hs     |   4 +-
> > test/hs/Test/Ganeti/TestCommon.hs               |   6 +-
> > test/hs/Test/Ganeti/TestHelper.hs               |   4 +-
> > test/hs/Test/Ganeti/Types.hs                    |   4 +-
> > test/hs/Test/Ganeti/Utils.hs                    |   4 +-
> > test/hs/Test/Ganeti/Utils/MultiMap.hs           |   4 +-
> > test/hs/Test/Ganeti/WConfd/TempRes.hs           |   3 +-
> > test/hs/htest.hs                                |   4 +-
> > 77 files changed, 507 insertions(+), 112 deletions(-)
> > create mode 100644 src/Ganeti/Prelude.hs
> >
> >diff --git a/Makefile.am b/Makefile.am
> >index 3314f9c..3763055 100644
> >--- a/Makefile.am
> >+++ b/Makefile.am
> >@@ -881,6 +881,7 @@ HPCEXCL = --exclude Main \
> >       $(patsubst src.%,--exclude Test.%,$(subst /,.,$(patsubst %.hs,%,
> $(HS_LIB_SRCS))))
> >
> > HS_LIB_SRCS = \
> >+      src/Ganeti/Prelude.hs \
> >       src/Ganeti/BasicTypes.hs \
> >       src/Ganeti/Codec.hs \
> >       src/Ganeti/Common.hs \
> >diff --git a/src/Ganeti/BasicTypes.hs b/src/Ganeti/BasicTypes.hs
> >index 5d03f32..c686283 100644
> >--- a/src/Ganeti/BasicTypes.hs
> >+++ b/src/Ganeti/BasicTypes.hs
> >@@ -80,6 +80,9 @@ module Ganeti.BasicTypes
> >   , Down(..)
> >   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Applicative
> > import Control.Exception (try)
> > import Control.Monad
> >@@ -88,9 +91,8 @@ import Control.Monad.Error.Class
> > import Control.Monad.Trans
> > import Control.Monad.Trans.Control
> > import Data.Function
> >-import Data.List
> >+import Data.List (find, isPrefixOf)
> > import Data.Maybe
> >-import Data.Monoid
> > import Data.Set (Set)
> > import qualified Data.Set as Set (empty)
> > import Text.JSON (JSON)
> >diff --git a/src/Ganeti/Codec.hs b/src/Ganeti/Codec.hs
> >index 6f36cc6..9a41499 100644
> >--- a/src/Ganeti/Codec.hs
> >+++ b/src/Ganeti/Codec.hs
> >@@ -37,13 +37,15 @@ module Ganeti.Codec
> >   , decompressZlib
> >   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Codec.Compression.Zlib (compress)
> > import qualified Codec.Compression.Zlib.Internal as I
> > import Control.Monad (liftM)
> > import Control.Monad.Error.Class (MonadError(..))
> > import qualified Data.ByteString.Lazy as BL
> > import qualified Data.ByteString.Lazy.Internal as BL
> >-import Data.Monoid (mempty)
> >
> > import Ganeti.BasicTypes
> >
> >diff --git a/src/Ganeti/Confd/Server.hs b/src/Ganeti/Confd/Server.hs
> >index fac0537..76ce7e6 100644
> >--- a/src/Ganeti/Confd/Server.hs
> >+++ b/src/Ganeti/Confd/Server.hs
> >@@ -40,7 +40,9 @@ module Ganeti.Confd.Server
> >   , prepMain
> >   ) where
> >
> >-import Control.Applicative((<$>))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Concurrent
> > import Control.Monad (forever, liftM)
> > import Data.IORef
> >diff --git a/src/Ganeti/Confd/Utils.hs b/src/Ganeti/Confd/Utils.hs
> >index da9075e..4e43642 100644
> >--- a/src/Ganeti/Confd/Utils.hs
> >+++ b/src/Ganeti/Confd/Utils.hs
> >@@ -47,7 +47,9 @@ module Ganeti.Confd.Utils
> >
> > import qualified Data.Attoparsec.Text as P
> >
> >-import Control.Applicative ((*>))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import qualified Data.ByteString as B
> > import Data.Text (pack)
> > import qualified Text.JSON as J
> >diff --git a/src/Ganeti/Config.hs b/src/Ganeti/Config.hs
> >index ddbb7b1..92c4c96 100644
> >--- a/src/Ganeti/Config.hs
> >+++ b/src/Ganeti/Config.hs
> >@@ -82,10 +82,11 @@ module Ganeti.Config
> >     , instNodes
> >     ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Arrow ((&&&))
> >-import Control.Monad
> >-import Control.Monad.State
> >+import Control.Monad (liftM)
> > import qualified Data.Foldable as F
> > import Data.List (foldl', nub)
> > import Data.Maybe (fromMaybe)
> >diff --git a/src/Ganeti/ConstantUtils.hs b/src/Ganeti/ConstantUtils.hs
> >index 6a61cf2..3f43ea1 100644
> >--- a/src/Ganeti/ConstantUtils.hs
> >+++ b/src/Ganeti/ConstantUtils.hs
> >@@ -37,8 +37,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> > -}
> > module Ganeti.ConstantUtils where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Data.Char (ord)
> >-import Data.Monoid (Monoid(..))
> > import Data.Set (Set)
> > import qualified Data.Set as Set (difference, fromList, toList, union)
> >
> >diff --git a/src/Ganeti/Cpu/LoadParser.hs b/src/Ganeti/Cpu/LoadParser.hs
> >index 7be0759..c321101 100644
> >--- a/src/Ganeti/Cpu/LoadParser.hs
> >+++ b/src/Ganeti/Cpu/LoadParser.hs
> >@@ -36,7 +36,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> > -}
> > module Ganeti.Cpu.LoadParser (cpustatParser) where
> >
> >-import Control.Applicative ((<*>), (<*), (*>), (<$>), (<|>))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Applicative ((<|>))
> > import qualified Data.Attoparsec.Text as A
> > import qualified Data.Attoparsec.Combinator as AC
> > import Data.Attoparsec.Text (Parser)
> >diff --git a/src/Ganeti/DataCollectors.hs b/src/Ganeti/DataCollectors.hs
> >index 9c2cc3b..f2cc5ce 100644
> >--- a/src/Ganeti/DataCollectors.hs
> >+++ b/src/Ganeti/DataCollectors.hs
> >@@ -34,8 +34,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Ganeti.DataCollectors( collectors ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Data.Map (findWithDefault)
> >-import Data.Monoid (mempty)
> >
> > import qualified Ganeti.DataCollectors.CPUload as CPUload
> > import qualified Ganeti.DataCollectors.Diagnose as Diagnose
> >diff --git a/src/Ganeti/DataCollectors/XenCpuLoad.hs
> b/src/Ganeti/DataCollectors/XenCpuLoad.hs
> >index 3ced7ad..1526b57 100644
> >--- a/src/Ganeti/DataCollectors/XenCpuLoad.hs
> >+++ b/src/Ganeti/DataCollectors/XenCpuLoad.hs
> >@@ -42,7 +42,10 @@ module Ganeti.DataCollectors.XenCpuLoad
> >   , dcUpdate
> >   ) where
> >
> >-import Control.Applicative ((<$>), liftA2)
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Applicative (liftA2)
> > import Control.Arrow ((***))
> > import Control.Monad (liftM, when)
> > import Control.Monad.IO.Class (liftIO)
> >diff --git a/src/Ganeti/HTools/Cluster.hs b/src/Ganeti/HTools/Cluster.hs
> >index f89a58a..a9cca4e 100644
> >--- a/src/Ganeti/HTools/Cluster.hs
> >+++ b/src/Ganeti/HTools/Cluster.hs
> >@@ -82,12 +82,22 @@ module Ganeti.HTools.Cluster
> >   , findSplitInstances
> >   ) where
> >
> >-import Control.Applicative ((<$>), liftA2)
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Applicative (liftA2)
> > import Control.Arrow ((&&&))
> > import Control.Monad (unless)
> > import qualified Data.IntSet as IntSet
> > import qualified Data.Set as Set
> >-import Data.List
> >+import Data.List (nub
>
> Just a minor syntatical nit: Although the style guide doesn't say it
> explicitly, for all such multi-line syntactical constructs we align the
> columns, for example
>
> import Data.List ( nub
>                   , sortBy
>
> etc. So please add a space in all such multi-line imports.
> (I'll update the style guide to be more clear about that.)
>
> >+                 , sortBy
> >+                 , foldl'
> >+                 , intersect
> >+                 , partition
> >+                 , (\\)
> >+                 , sort
> >+                 , intercalate)
> > import Data.Maybe (fromJust, fromMaybe, isJust, isNothing)
> > import Data.Ord (comparing)
> > import Text.Printf (printf)
> >diff --git a/src/Ganeti/HTools/Dedicated.hs
> b/src/Ganeti/HTools/Dedicated.hs
> >index 206513a..00413a6 100644
> >--- a/src/Ganeti/HTools/Dedicated.hs
> >+++ b/src/Ganeti/HTools/Dedicated.hs
> >@@ -44,7 +44,10 @@ module Ganeti.HTools.Dedicated
> >   , runDedicatedAllocation
> >   ) where
> >
> >-import Control.Applicative (liftA2, (<$>))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Applicative (liftA2)
> > import Control.Arrow ((&&&))
> > import Control.Monad (unless, liftM, foldM, mplus)
> > import qualified Data.Foldable as F
> >diff --git a/src/Ganeti/HTools/Node.hs b/src/Ganeti/HTools/Node.hs
> >index 79993ad..477f15b 100644
> >--- a/src/Ganeti/HTools/Node.hs
> >+++ b/src/Ganeti/HTools/Node.hs
> >@@ -99,13 +99,15 @@ module Ganeti.HTools.Node
> >   , haveExclStorage
> >   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Monad (liftM, liftM2)
> >-import Control.Applicative ((<$>), (<*>))
> > import qualified Data.Foldable as Foldable
> > import Data.Function (on)
> > import qualified Data.Graph as Graph
> > import qualified Data.IntMap as IntMap
> >-import Data.List hiding (group)
> >+import Data.List (intercalate, foldl', delete, union, sortBy, groupBy)
> > import qualified Data.Map as Map
> > import Data.Ord (comparing)
> > import qualified Data.Set as Set
> >diff --git a/src/Ganeti/JQScheduler.hs b/src/Ganeti/JQScheduler.hs
> >index 9ec9e1a..ac2b248 100644
> >--- a/src/Ganeti/JQScheduler.hs
> >+++ b/src/Ganeti/JQScheduler.hs
> >@@ -48,16 +48,29 @@ module Ganeti.JQScheduler
> >   , configChangeNeedsRescheduling
> >   ) where
> >
> >-import Control.Applicative (liftA2, (<$>))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Applicative (liftA2)
> > import Control.Arrow
> > import Control.Concurrent
> > import Control.Exception
> >-import Control.Monad
> >+import Control.Monad (when
> >+                     , mfilter
> >+                     , liftM
> >+                     , void
> >+                     , unless
> >+                     , forever
> >+                     , forM_)
> > import Control.Monad.IO.Class
> > import Data.Function (on)
> >-import Data.Functor ((<$))
> > import Data.IORef
> >-import Data.List
> >+import Data.List (find
> >+                 , deleteFirstsBy
> >+                 , sortBy
> >+                 , intercalate
> >+                 , partition
> >+                 , insertBy)
> > import Data.Maybe
> > import qualified Data.Map as Map
> > import Data.Ord (comparing)
> >diff --git a/src/Ganeti/JQueue.hs b/src/Ganeti/JQueue.hs
> >index bf103f7..e54fd31 100644
> >--- a/src/Ganeti/JQueue.hs
> >+++ b/src/Ganeti/JQueue.hs
> >@@ -82,21 +82,30 @@ module Ganeti.JQueue
> >     , QueuedJob(..)
> >     ) where
> >
> >-import Control.Applicative (liftA2, (<|>), (<$>))
> >+import Prelude ()
> >+import Ganeti.Prelude hiding (id, log)
> >+
> >+import Control.Applicative (liftA2, (<|>))
> > import Control.Arrow (first, second)
> > import Control.Concurrent (forkIO, threadDelay)
> > import Control.Exception
> > import Control.Lens (over)
> >-import Control.Monad
> >+import Control.Monad (filterM
> >+                     , liftM
> >+                     , foldM
> >+                     , void
> >+                     , mfilter
> >+                     , when
> >+                     , mzero
> >+                     , unless
> >+                     , msum)
> > import Control.Monad.IO.Class
> > import Control.Monad.Trans (lift)
> > import Control.Monad.Trans.Maybe
> >-import Data.Functor ((<$))
> >-import Data.List
> >+import Data.List (stripPrefix, sortBy, isPrefixOf)
> > import Data.Maybe
> > import Data.Ord (comparing)
> > -- workaround what seems to be a bug in ghc 7.4's TH shadowing code
> >-import Prelude hiding (id, log)
> > import System.Directory
> > import System.FilePath
> > import System.IO.Error (isDoesNotExistError)
> >diff --git a/src/Ganeti/Kvmd.hs b/src/Ganeti/Kvmd.hs
> >index 4979396..597298b 100644
> >--- a/src/Ganeti/Kvmd.hs
> >+++ b/src/Ganeti/Kvmd.hs
> >@@ -59,13 +59,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Ganeti.Kvmd where
> >
> >-import Prelude hiding (rem)
> >+import Prelude ()
> >+import Ganeti.Prelude hiding (rem)
> >
> >-import Control.Applicative ((<$>))
> > import Control.Exception (try)
> > import Control.Concurrent
> > import Control.Monad (unless, when)
> >-import Data.List
> >+import Data.List (isPrefixOf, isInfixOf)
> > import Data.Set (Set)
> > import qualified Data.Set as Set (delete, empty, insert, member)
> > import System.Directory
> >diff --git a/src/Ganeti/Lens.hs b/src/Ganeti/Lens.hs
> >index c7951e6..ca4719d 100644
> >--- a/src/Ganeti/Lens.hs
> >+++ b/src/Ganeti/Lens.hs
> >@@ -44,7 +44,10 @@ module Ganeti.Lens
> >   , atSet
> >   ) where
> >
> >-import Control.Applicative ((<$>), WrappedMonad(..))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Applicative (WrappedMonad(..))
> > import Control.Lens
> > import Control.Monad
> > import Data.Functor.Compose (Compose(..))
> >diff --git a/src/Ganeti/Locking/Allocation.hs
> b/src/Ganeti/Locking/Allocation.hs
> >index 2875d70..a17efb7 100644
> >--- a/src/Ganeti/Locking/Allocation.hs
> >+++ b/src/Ganeti/Locking/Allocation.hs
> >@@ -49,9 +49,12 @@ module Ganeti.Locking.Allocation
> >   , freeLocks
> >   ) where
> >
> >-import Control.Applicative (liftA2, (<$>), (<*>), pure)
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Applicative (liftA2)
> > import Control.Arrow (second, (***))
> >-import Control.Monad
> >+import Control.Monad (unless, guard, foldM, when)
> > import Data.Foldable (for_, find)
> > import qualified Data.Map as M
> > import Data.Maybe (fromMaybe)
> >diff --git a/src/Ganeti/Locking/Locks.hs b/src/Ganeti/Locking/Locks.hs
> >index e5bf524..1401b4f 100644
> >--- a/src/Ganeti/Locking/Locks.hs
> >+++ b/src/Ganeti/Locking/Locks.hs
> >@@ -44,7 +44,9 @@ module Ganeti.Locking.Locks
> >   , lockLevel
> >   ) where
> >
> >-import Control.Applicative ((<$>), (<*>), pure)
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Monad ((>=>), liftM)
> > import Data.List (stripPrefix)
> > import System.Posix.Types (ProcessID)
> >diff --git a/src/Ganeti/Logging.hs b/src/Ganeti/Logging.hs
> >index 5b7eb8a..a1f42d6 100644
> >--- a/src/Ganeti/Logging.hs
> >+++ b/src/Ganeti/Logging.hs
> >@@ -60,7 +60,9 @@ module Ganeti.Logging
> >   , isDebugMode
> >   ) where
> >
> >-import Control.Applicative ((<$>))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Monad
> > import Control.Monad.Error.Class (MonadError(..))
> > import Control.Monad.Reader
> >@@ -68,7 +70,6 @@ import qualified Control.Monad.RWS.Strict as RWSS
> > import qualified Control.Monad.State.Strict as SS
> > import Control.Monad.Trans.Identity
> > import Control.Monad.Trans.Maybe
> >-import Data.Monoid
> > import System.Log.Logger
> > import System.Log.Handler.Simple
> > import System.Log.Handler.Syslog
> >diff --git a/src/Ganeti/Metad/ConfigCore.hs
> b/src/Ganeti/Metad/ConfigCore.hs
> >index 41120fd..187a797 100644
> >--- a/src/Ganeti/Metad/ConfigCore.hs
> >+++ b/src/Ganeti/Metad/ConfigCore.hs
> >@@ -35,7 +35,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> > -}
> > module Ganeti.Metad.ConfigCore where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Concurrent.MVar.Lifted
> > import Control.Monad.Base
> > import Control.Monad.IO.Class
> >diff --git a/src/Ganeti/Monitoring/Server.hs
> b/src/Ganeti/Monitoring/Server.hs
> >index 530fd5b..aaad4f4 100644
> >--- a/src/Ganeti/Monitoring/Server.hs
> >+++ b/src/Ganeti/Monitoring/Server.hs
> >@@ -41,15 +41,17 @@ module Ganeti.Monitoring.Server
> >   , DataCollector(..)
> >   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Applicative
> > import Control.DeepSeq (force)
> > import Control.Exception.Base (evaluate)
> >-import Control.Monad
> >+import Control.Monad (void, forever, liftM, foldM, foldM_, mzero)
> > import Control.Monad.IO.Class
> > import Data.ByteString.Char8 (unpack)
> > import Data.Maybe (fromMaybe)
> > import Data.List (find)
> >-import Data.Monoid (mempty)
> > import qualified Data.Map as Map
> > import qualified Data.PSQueue as Queue
> > import Snap.Core
> >diff --git a/src/Ganeti/Objects.hs b/src/Ganeti/Objects.hs
> >index 85f3576..667d5b4 100644
> >--- a/src/Ganeti/Objects.hs
> >+++ b/src/Ganeti/Objects.hs
> >@@ -106,13 +106,14 @@ module Ganeti.Objects
> >   , module Ganeti.Objects.Maintenance
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Arrow (first)
> > import Control.Monad.State
> > import Data.List (foldl', intercalate)
> > import Data.Maybe
> > import qualified Data.Map as Map
> >-import Data.Monoid
> > import Data.Ord (comparing)
> > import Data.Ratio (numerator, denominator)
> > import Data.Tuple (swap)
> >diff --git a/src/Ganeti/Objects/Disk.hs b/src/Ganeti/Objects/Disk.hs
> >index 18ae20a..f3e08da 100644
> >--- a/src/Ganeti/Objects/Disk.hs
> >+++ b/src/Ganeti/Objects/Disk.hs
> >@@ -36,7 +36,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Ganeti.Objects.Disk where
> >
> >-import Control.Applicative ((<*>), (<$>))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Data.Char (isAsciiLower, isAsciiUpper, isDigit)
> > import Data.List (isPrefixOf, isInfixOf)
> > import Language.Haskell.TH.Syntax
> >diff --git a/src/Ganeti/Objects/Instance.hs
> b/src/Ganeti/Objects/Instance.hs
> >index 238898f..d25e134 100644
> >--- a/src/Ganeti/Objects/Instance.hs
> >+++ b/src/Ganeti/Objects/Instance.hs
> >@@ -36,7 +36,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Ganeti.Objects.Instance where
> >
> >-import Data.Monoid
> >+import Prelude ()
> >+import Ganeti.Prelude
> >
> > import Ganeti.JSON (emptyContainer)
> > import Ganeti.Objects.Nic
> >diff --git a/src/Ganeti/OpCodes.hs b/src/Ganeti/OpCodes.hs
> >index 0820d2e..7058d85 100644
> >--- a/src/Ganeti/OpCodes.hs
> >+++ b/src/Ganeti/OpCodes.hs
> >@@ -56,7 +56,9 @@ module Ganeti.OpCodes
> >   , setOpPriority
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Data.List (intercalate)
> > import Data.Map (Map)
> > import qualified Text.JSON
> >diff --git a/src/Ganeti/Parsers.hs b/src/Ganeti/Parsers.hs
> >index 10b0e41..8671b9e 100644
> >--- a/src/Ganeti/Parsers.hs
> >+++ b/src/Ganeti/Parsers.hs
> >@@ -37,7 +37,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> > -}
> > module Ganeti.Parsers where
> >
> >-import Control.Applicative ((*>))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import qualified Data.Attoparsec.Text as A
> > import Data.Attoparsec.Text (Parser)
> > import Data.Text (unpack)
> >diff --git a/src/Ganeti/Prelude.hs b/src/Ganeti/Prelude.hs
> >new file mode 100644
> >index 0000000..b2a3e0e
> >--- /dev/null
> >+++ b/src/Ganeti/Prelude.hs
> >@@ -0,0 +1,218 @@
> >+{-# LANGUAGE NoImplicitPrelude, CPP, BangPatterns #-}
> >+
> >+{-| Export Prelude as in base 4.8.0
> >+
> >+-}
> >+
> >+{-
> >+
> >+Copyright (C) 2015 Google Inc.
> >+All rights reserved.
> >+
> >+Redistribution and use in source and binary forms, with or without
> >+modification, are permitted provided that the following conditions are
> >+met:
> >+
> >+1. Redistributions of source code must retain the above copyright notice,
> >+this list of conditions and the following disclaimer.
> >+
> >+2. Redistributions in binary form must reproduce the above copyright
> >+notice, this list of conditions and the following disclaimer in the
> >+documentation and/or other materials provided with the distribution.
> >+
> >+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
> >+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
> >+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
> PARTICULAR
> >+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
> >+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
> >+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
> >+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
> >+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
> >+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
> >+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
> >+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> >+
> >+-}
> >+
> >+module Ganeti.Prelude (
> >+
> >+    -- * Standard types, classes and related functions
> >+
> >+    -- ** Basic data types
> >+    Bool(False, True),
> >+    (&&), (||), not, otherwise,
> >+
> >+    Maybe(Nothing, Just),
> >+    maybe,
> >+
> >+    Either(Left, Right),
> >+    either,
> >+
> >+    Ordering(LT, EQ, GT),
> >+    Char, String,
> >+
> >+    -- *** Tuples
> >+    fst, snd, curry, uncurry,
> >+
> >+    -- ** Basic type classes
> >+    Eq((==), (/=)),
> >+    Ord(compare, (<), (<=), (>=), (>), max, min),
> >+    Enum(succ, pred, toEnum, fromEnum, enumFrom, enumFromThen,
> >+         enumFromTo, enumFromThenTo),
> >+    Bounded(minBound, maxBound),
> >+
> >+    -- ** Numbers
> >+
> >+    -- *** Numeric types
> >+    Int, Integer, Float, Double,
> >+    Rational, Word,
> >+
> >+    -- *** Numeric type classes
> >+    Num((+), (-), (*), negate, abs, signum, fromInteger),
> >+    Real(toRational),
> >+    Integral(quot, rem, div, mod, quotRem, divMod, toInteger),
> >+    Fractional((/), recip, fromRational),
> >+    Floating(pi, exp, log, sqrt, (**), logBase, sin, cos, tan,
> >+             asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh),
> >+    RealFrac(properFraction, truncate, round, ceiling, floor),
> >+    RealFloat(floatRadix, floatDigits, floatRange, decodeFloat,
> >+              encodeFloat, exponent, significand, scaleFloat, isNaN,
> >+              isInfinite, isDenormalized, isIEEE, isNegativeZero, atan2),
> >+
> >+    -- *** Numeric functions
> >+    subtract, even, odd, gcd, lcm, (^), (^^),
> >+    fromIntegral, realToFrac,
> >+
> >+    -- ** Monoids
> >+    Monoid(mempty, mappend, mconcat),
> >+
> >+    -- ** Monads and functors
> >+    Functor(fmap, (<$)), (<$>),
> >+    Applicative(pure, (<*>), (*>), (<*)),
> >+    Monad((>>=), (>>), return, fail),
> >+    mapM_, sequence_, (=<<),
> >+
> >+#if MIN_VERSION_base(4,8,0)
> >+    -- ** Folds and traversals
> >+    Foldable(elem,      -- :: (Foldable t, Eq a) => a -> t a -> Bool
> >+             -- fold,   -- :: Monoid m => t m -> m
> >+             foldMap,   -- :: Monoid m => (a -> m) -> t a -> m
> >+             foldr,     -- :: (a -> b -> b) -> b -> t a -> b
> >+             -- foldr', -- :: (a -> b -> b) -> b -> t a -> b
> >+             foldl,     -- :: (b -> a -> b) -> b -> t a -> b
> >+             -- foldl', -- :: (b -> a -> b) -> b -> t a -> b
> >+             foldr1,    -- :: (a -> a -> a) -> t a -> a
> >+             foldl1,    -- :: (a -> a -> a) -> t a -> a
> >+             maximum,   -- :: (Foldable t, Ord a) => t a -> a
> >+             minimum,   -- :: (Foldable t, Ord a) => t a -> a
> >+             product,   -- :: (Foldable t, Num a) => t a -> a
> >+             sum),      -- :: Num a => t a -> a
> >+             -- toList) -- :: Foldable t => t a -> [a]
> >+#else
> >+    Foldable(foldMap,
> >+             foldr,
> >+             foldl,
> >+             foldr1,
> >+             foldl1),
> >+    elem,
> >+    maximum,
> >+    minimum,
> >+    product,
> >+    sum,
> >+#endif
> >+
> >+    Traversable(traverse, sequenceA, mapM, sequence),
> >+
> >+    -- ** Miscellaneous functions
> >+    id, const, (.), flip, ($), until,
> >+    asTypeOf, error, undefined,
> >+    seq, ($!),
> >+
> >+    -- * List operations
> >+    map, (++), filter,
> >+    head, last, tail, init, null, length, (!!),
> >+    reverse,
> >+    -- *** Special folds
> >+    and, or, any, all,
> >+    concat, concatMap,
> >+    -- ** Building lists
> >+    -- *** Scans
> >+    scanl, scanl1, scanr, scanr1,
> >+    -- *** Infinite lists
> >+    iterate, repeat, replicate, cycle,
> >+    -- ** Sublists
> >+    take, drop, splitAt, takeWhile, dropWhile, span, break,
> >+    -- ** Searching lists
> >+    notElem, lookup,
> >+    -- ** Zipping and unzipping lists
> >+    zip, zip3, zipWith, zipWith3, unzip, unzip3,
> >+    -- ** Functions on strings
> >+    lines, words, unlines, unwords,
> >+
> >+    -- * Converting to and from @String@
> >+    -- ** Converting to @String@
> >+    ShowS,
> >+    Show(showsPrec, showList, show),
> >+    shows,
> >+    showChar, showString, showParen,
> >+    -- ** Converting from @String@
> >+    ReadS,
> >+    Read(readsPrec, readList),
> >+    reads, readParen, read, lex,
> >+
> >+    -- * Basic Input and output
> >+    IO,
> >+    -- ** Simple I\/O operations
> >+    -- All I/O functions defined here are character oriented.  The
> >+    -- treatment of the newline character will vary on different systems.
> >+    -- For example, two characters of input, return and linefeed, may
> >+    -- read as a single newline character.  These functions cannot be
> >+    -- used portably for binary I/O.
> >+    -- *** Output functions
> >+    putChar,
> >+    putStr, putStrLn, print,
> >+    -- *** Input functions
> >+    getChar,
> >+    getLine, getContents, interact,
> >+    -- *** Files
> >+    FilePath,
> >+    readFile, writeFile, appendFile, readIO, readLn,
> >+    -- ** Exception handling in the I\/O monad
> >+    IOError, ioError, userError,
> >+
> >+  ) where
> >+
> >+import Control.Monad
> >+import System.IO
> >+import System.IO.Error
> >+import Data.Either
> >+import Data.Maybe
> >+import Data.Traversable ( Traversable(..) )
> >+import Data.Tuple
> >+
> >+import Text.Read
> >+import GHC.Enum
> >+import GHC.Num
> >+import GHC.Real
> >+import GHC.Float
> >+import GHC.Show
> >+
> >+#if MIN_VERSION_base(4,8,0)
> >+import Data.Foldable    ( Foldable(..) )
> >+import Data.Functor     ( (<$>) )
> >+import Data.List
> >+import GHC.Base hiding ( foldr, mapM, sequence )
> >+#else
> >+import Data.Foldable    ( Foldable(..), elem, maximum, minimum, sum,
> product )
> >+import Data.List hiding ( elem, maximum, minimum, sum, product )
> >+import Control.Applicative
> >+import Data.Monoid
> >+import Data.Word
> >+import GHC.Base
> >+import GHC.Err (undefined)
> >+
> >+infixr 0 $!
> >+($!)    :: (a -> b) -> a -> b
> >+f $! x  = let !vx = x in f vx  -- see #2273
>
> Why is `$!` declared explicitly? Why not just import it from the standard
> Prelude?
>
> >+
> >+#endif
> >diff --git a/src/Ganeti/Query/Exec.hs b/src/Ganeti/Query/Exec.hs
> >index 4b2945b..79889ff 100644
> >--- a/src/Ganeti/Query/Exec.hs
> >+++ b/src/Ganeti/Query/Exec.hs
> >@@ -60,12 +60,14 @@ module Ganeti.Query.Exec
> >   , forkJobProcess
> >   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Concurrent (rtsSupportsBoundThreads)
> > import Control.Concurrent.Lifted (threadDelay)
> > import Control.Exception (finally)
> > import Control.Monad
> > import Control.Monad.Error.Class (MonadError(..))
> >-import Data.Functor
> > import qualified Data.Map as M
> > import Data.Maybe (listToMaybe, mapMaybe)
> > import System.Directory (getDirectoryContents)
> >diff --git a/src/Ganeti/Query/Filter.hs b/src/Ganeti/Query/Filter.hs
> >index aaae425..cddc4d8 100644
> >--- a/src/Ganeti/Query/Filter.hs
> >+++ b/src/Ganeti/Query/Filter.hs
> >@@ -66,13 +66,14 @@ module Ganeti.Query.Filter
> >   , FilterOp(..)
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Monad (liftM, mzero)
> > import Control.Monad.Trans.Maybe (MaybeT, runMaybeT)
> > import Control.Monad.Trans.Class (lift)
> > import qualified Data.Map as Map
> > import Data.Maybe
> >-import Data.Traversable (traverse)
> > import Text.JSON (JSValue(..), fromJSString)
> > import Text.JSON.Pretty (pp_value)
> > import qualified Text.Regex.PCRE as PCRE
> >diff --git a/src/Ganeti/Query/Language.hs b/src/Ganeti/Query/Language.hs
> >index 4b85ee7..3c6919f 100644
> >--- a/src/Ganeti/Query/Language.hs
> >+++ b/src/Ganeti/Query/Language.hs
> >@@ -65,10 +65,11 @@ module Ganeti.Query.Language
> >     , checkRS
> >     ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.DeepSeq
> > import Data.Foldable
> >-import Data.Traversable (Traversable)
> > import Data.Ratio (numerator, denominator)
> > import Text.JSON.Pretty (pp_value)
> > import Text.JSON.Types
> >diff --git a/src/Ganeti/Query/Node.hs b/src/Ganeti/Query/Node.hs
> >index 17c3469..ecf5dc2 100644
> >--- a/src/Ganeti/Query/Node.hs
> >+++ b/src/Ganeti/Query/Node.hs
> >@@ -38,8 +38,10 @@ module Ganeti.Query.Node
> >   , collectLiveData
> >   ) where
> >
> >-import Control.Applicative
> >-import Data.List
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Data.List (intercalate)
> > import Data.Maybe
> > import qualified Data.Map as Map
> > import qualified Text.JSON as J
> >diff --git a/src/Ganeti/Query/Server.hs b/src/Ganeti/Query/Server.hs
> >index bf63cfa..df5da87 100644
> >--- a/src/Ganeti/Query/Server.hs
> >+++ b/src/Ganeti/Query/Server.hs
> >@@ -40,7 +40,9 @@ module Ganeti.Query.Server
> >   , prepMain
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Concurrent
> > import Control.Exception
> > import Control.Lens ((.~))
> >diff --git a/src/Ganeti/Ssconf.hs b/src/Ganeti/Ssconf.hs
> >index 99ad3e5..e3fc864 100644
> >--- a/src/Ganeti/Ssconf.hs
> >+++ b/src/Ganeti/Ssconf.hs
> >@@ -54,8 +54,10 @@ module Ganeti.Ssconf
> >   , emptySSConf
> >   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Arrow ((&&&))
> >-import Control.Applicative ((<$>))
> > import Control.Exception
> > import Control.Monad (forM, liftM)
> > import qualified Data.Map as M
> >diff --git a/src/Ganeti/Storage/Diskstats/Parser.hs
> b/src/Ganeti/Storage/Diskstats/Parser.hs
> >index 64d3885..6f64b04 100644
> >--- a/src/Ganeti/Storage/Diskstats/Parser.hs
> >+++ b/src/Ganeti/Storage/Diskstats/Parser.hs
> >@@ -36,7 +36,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> > -}
> > module Ganeti.Storage.Diskstats.Parser (diskstatsParser) where
> >
> >-import Control.Applicative ((<*>), (<*), (<$>))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import qualified Data.Attoparsec.Text as A
> > import qualified Data.Attoparsec.Combinator as AC
> > import Data.Attoparsec.Text (Parser)
> >diff --git a/src/Ganeti/Storage/Drbd/Parser.hs
> b/src/Ganeti/Storage/Drbd/Parser.hs
> >index c9c8dce..8dee72c 100644
> >--- a/src/Ganeti/Storage/Drbd/Parser.hs
> >+++ b/src/Ganeti/Storage/Drbd/Parser.hs
> >@@ -36,7 +36,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> > -}
> > module Ganeti.Storage.Drbd.Parser (drbdStatusParser, commaIntParser)
> where
> >
> >-import Control.Applicative ((<*>), (*>), (<*), (<$>), (<|>), pure)
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Applicative ((<|>))
> > import qualified Data.Attoparsec.Text as A
> > import qualified Data.Attoparsec.Combinator as AC
> > import Data.Attoparsec.Text (Parser)
> >diff --git a/src/Ganeti/Storage/Lvm/LVParser.hs
> b/src/Ganeti/Storage/Lvm/LVParser.hs
> >index 470c41a..cf31431 100644
> >--- a/src/Ganeti/Storage/Lvm/LVParser.hs
> >+++ b/src/Ganeti/Storage/Lvm/LVParser.hs
> >@@ -37,7 +37,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> > -}
> > module Ganeti.Storage.Lvm.LVParser (lvParser, lvCommand, lvParams) where
> >
> >-import Control.Applicative ((<*>), (*>), (<*), (<$>))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import qualified Data.Attoparsec.Text as A
> > import qualified Data.Attoparsec.Combinator as AC
> > import Data.Attoparsec.Text (Parser)
> >diff --git a/src/Ganeti/THH.hs b/src/Ganeti/THH.hs
> >index 26ab165..fd7857e 100644
> >--- a/src/Ganeti/THH.hs
> >+++ b/src/Ganeti/THH.hs
> >@@ -76,11 +76,14 @@ module Ganeti.THH ( declareSADT
> >                   , ssconfConstructorName
> >                   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Arrow ((&&&), second)
> > import Control.Applicative
> > import Control.Lens.Type (Lens, Lens')
> > import Control.Lens (lens, set, element)
> >-import Control.Monad
> >+import Control.Monad (liftM, replicateM, when, unless)
> > import Control.Monad.Base () -- Needed to prevent spurious GHC linking
> errors.
> > import Control.Monad.Writer (tell)
> > import qualified Control.Monad.Trans as MT
> >@@ -89,10 +92,9 @@ import Data.Attoparsec.Text ()
> >   -- See issue #683 and https://ghc.haskell.org/trac/ghc/ticket/4899
> > import Data.Char
> > import Data.Function (on)
> >-import Data.List
> >+import Data.List (intercalate, groupBy, stripPrefix, sort, nub)
> > import Data.Maybe
> > import qualified Data.Map as M
> >-import Data.Monoid
> > import qualified Data.Set as S
> > import Language.Haskell.TH
> > import Language.Haskell.TH.Syntax (lift)
> >diff --git a/src/Ganeti/THH/HsRPC.hs b/src/Ganeti/THH/HsRPC.hs
> >index 8a352fa..8bcdb4d 100644
> >--- a/src/Ganeti/THH/HsRPC.hs
> >+++ b/src/Ganeti/THH/HsRPC.hs
> >@@ -43,11 +43,13 @@ module Ganeti.THH.HsRPC
> >   , mkRpcCalls
> >   ) where
> >
> >-import Control.Applicative
> >-import Control.Monad
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Monad (liftM)
> > import Control.Monad.Base
> > import Control.Monad.Error.Class (MonadError)
> >-import Control.Monad.Reader
> >+import Control.Monad.Reader (ReaderT, runReaderT, ask)
> > import Control.Monad.Trans.Control
> > import Language.Haskell.TH
> > import qualified Text.JSON as J
> >diff --git a/src/Ganeti/THH/PyRPC.hs b/src/Ganeti/THH/PyRPC.hs
> >index eee1554..81e9223 100644
> >--- a/src/Ganeti/THH/PyRPC.hs
> >+++ b/src/Ganeti/THH/PyRPC.hs
> >@@ -40,9 +40,11 @@ module Ganeti.THH.PyRPC
> >   , genPyUDSRpcStubStr
> >   ) where
> >
> >-import Control.Monad
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Monad (liftM, zipWithM)
> > import Data.Char (toLower, toUpper)
> >-import Data.Functor
> > import Data.Maybe (fromMaybe)
> > import Language.Haskell.TH
> > import Language.Haskell.TH.Syntax (liftString)
> >diff --git a/src/Ganeti/THH/PyType.hs b/src/Ganeti/THH/PyType.hs
> >index a3dbe44..9a32f16 100644
> >--- a/src/Ganeti/THH/PyType.hs
> >+++ b/src/Ganeti/THH/PyType.hs
> >@@ -39,8 +39,10 @@ module Ganeti.THH.PyType
> >   , pyOptionalType
> >   ) where
> >
> >-import Control.Applicative
> >-import Control.Monad
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Monad (ap, liftM)
> > import Data.List (intercalate)
> > import Language.Haskell.TH
> > import Language.Haskell.TH.Syntax (Lift(..))
> >diff --git a/src/Ganeti/THH/RPC.hs b/src/Ganeti/THH/RPC.hs
> >index 4b019ee..1cb63ec 100644
> >--- a/src/Ganeti/THH/RPC.hs
> >+++ b/src/Ganeti/THH/RPC.hs
> >@@ -42,7 +42,9 @@ module Ganeti.THH.RPC
> >   , mkRpcM
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Arrow ((&&&))
> > import Control.Monad
> > import Control.Monad.Error.Class (MonadError(..))
> >diff --git a/src/Ganeti/Types.hs b/src/Ganeti/Types.hs
> >index 52c30f1..1cfcfb0 100644
> >--- a/src/Ganeti/Types.hs
> >+++ b/src/Ganeti/Types.hs
> >@@ -188,7 +188,9 @@ module Ganeti.Types
> >   , TagsObject(..)
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Monad (liftM)
> > import qualified Text.JSON as JSON
> > import Text.JSON (JSON, readJSON, showJSON)
> >diff --git a/src/Ganeti/UDSServer.hs b/src/Ganeti/UDSServer.hs
> >index 8e27c5a..36f0ac1 100644
> >--- a/src/Ganeti/UDSServer.hs
> >+++ b/src/Ganeti/UDSServer.hs
> >@@ -70,7 +70,9 @@ module Ganeti.UDSServer
> >   , listener
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Concurrent.Lifted (fork, yield)
> > import Control.Monad.Base
> > import Control.Monad.Trans.Control
> >@@ -81,7 +83,7 @@ import qualified Data.ByteString.Lazy as BL
> > import qualified Data.ByteString.UTF8 as UTF8
> > import qualified Data.ByteString.Lazy.UTF8 as UTF8L
> > import Data.IORef
> >-import Data.List
> >+import Data.List (isInfixOf)
> > import Data.Word (Word8)
> > import qualified Network.Socket as S
> > import System.Directory (removeFile)
> >diff --git a/src/Ganeti/Utils.hs b/src/Ganeti/Utils.hs
> >index 0c599bb..d217914 100644
> >--- a/src/Ganeti/Utils.hs
> >+++ b/src/Ganeti/Utils.hs
> >@@ -101,7 +101,9 @@ module Ganeti.Utils
> >   , threadDelaySeconds
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Concurrent
> > import Control.Exception (try, bracket)
> > import Control.Monad
> >@@ -114,7 +116,13 @@ import Data.IORef
> > #if MIN_VERSION_base(4,8,0)
> > import Data.List hiding (isSubsequenceOf)
> > #else
> >-import Data.List
> >+import Data.List (intercalate
> >+                 , find
> >+                 , foldl'
> >+                 , transpose
> >+                 , sortBy
> >+                 , isPrefixOf
> >+                 , maximumBy)
> > #endif
> > import qualified Data.Map as M
> > import Data.Maybe (fromMaybe)
> >diff --git a/src/Ganeti/Utils/MultiMap.hs b/src/Ganeti/Utils/MultiMap.hs
> >index 0f97e26..6f46e1d 100644
> >--- a/src/Ganeti/Utils/MultiMap.hs
> >+++ b/src/Ganeti/Utils/MultiMap.hs
> >@@ -54,13 +54,13 @@ module Ganeti.Utils.MultiMap
> >   , values
> >   ) where
> >
> >-import Prelude hiding (lookup, null, elem)
> >+import Prelude ()
> >+import Ganeti.Prelude hiding (lookup, null, elem)
> >
> > import Control.Monad
> > import qualified Data.Foldable as F
> > import qualified Data.Map as M
> > import Data.Maybe (fromMaybe, isJust)
> >-import Data.Monoid
> > import qualified Data.Set as S
> > import qualified Text.JSON as J
> >
> >diff --git a/src/Ganeti/Utils/Random.hs b/src/Ganeti/Utils/Random.hs
> >index 500e00d..bdccd4e 100644
> >--- a/src/Ganeti/Utils/Random.hs
> >+++ b/src/Ganeti/Utils/Random.hs
> >@@ -38,7 +38,9 @@ module Ganeti.Utils.Random
> >   , delayRandom
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Concurrent (threadDelay)
> > import Control.Monad
> > import Control.Monad.State
> >diff --git a/src/Ganeti/Utils/Validate.hs b/src/Ganeti/Utils/Validate.hs
> >index 8dda1b0..cab6b90 100644
> >--- a/src/Ganeti/Utils/Validate.hs
> >+++ b/src/Ganeti/Utils/Validate.hs
> >@@ -51,7 +51,9 @@ module Ganeti.Utils.Validate
> >   , validate'
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Arrow
> > import Control.Monad
> > import Control.Monad.Error.Class (MonadError(..))
> >diff --git a/src/Ganeti/WConfd/ConfigModifications.hs
> b/src/Ganeti/WConfd/ConfigModifications.hs
> >index e476c30..13a7df2 100644
> >--- a/src/Ganeti/WConfd/ConfigModifications.hs
> >+++ b/src/Ganeti/WConfd/ConfigModifications.hs
> >@@ -40,7 +40,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Ganeti.WConfd.ConfigModifications where
> >
> >-import Control.Applicative ((<$>))
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Lens (_2)
> > import Control.Lens.Getter ((^.))
> > import Control.Lens.Setter (Setter, (.~), (%~), (+~), over)
> >@@ -51,7 +53,7 @@ import Control.Monad.Error.Class (throwError,
> MonadError)
> > import Control.Monad.IO.Class (liftIO)
> > import Control.Monad.Trans.State (StateT, get, put, modify,
> >                                   runStateT, execStateT)
> >-import Data.Foldable (fold, foldMap)
> >+import Data.Foldable (fold)
> > import Data.List (elemIndex)
> > import Data.Maybe (isJust, maybeToList, fromMaybe, fromJust)
> > import Language.Haskell.TH (Name)
> >diff --git a/src/Ganeti/WConfd/ConfigState.hs
> b/src/Ganeti/WConfd/ConfigState.hs
> >index fa6e754..b41fda1 100644
> >--- a/src/Ganeti/WConfd/ConfigState.hs
> >+++ b/src/Ganeti/WConfd/ConfigState.hs
> >@@ -43,7 +43,9 @@ module Ganeti.WConfd.ConfigState
> >   , needsFullDist
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Data.Function (on)
> > import System.Time (ClockTime(..))
> >
> >diff --git a/src/Ganeti/WConfd/ConfigWriter.hs
> b/src/Ganeti/WConfd/ConfigWriter.hs
> >index ba7a84d..92fbf34 100644
> >--- a/src/Ganeti/WConfd/ConfigWriter.hs
> >+++ b/src/Ganeti/WConfd/ConfigWriter.hs
> >@@ -43,7 +43,10 @@ module Ganeti.WConfd.ConfigWriter
> >   , distSSConfAsyncTask
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Monad ((>=>), liftM, unless)
> > import Control.Monad.Base
> > import Control.Monad.Error.Class (MonadError)
> > import qualified Control.Monad.State.Strict as S
> >diff --git a/src/Ganeti/WConfd/Monad.hs b/src/Ganeti/WConfd/Monad.hs
> >index f028c84..a59320f 100644
> >--- a/src/Ganeti/WConfd/Monad.hs
> >+++ b/src/Ganeti/WConfd/Monad.hs
> >@@ -68,7 +68,9 @@ module Ganeti.WConfd.Monad
> >   , readTempResState
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Arrow ((&&&), second)
> > import Control.Concurrent (forkIO, myThreadId)
> > import Control.Exception.Lifted (bracket)
> >diff --git a/src/Ganeti/WConfd/TempRes.hs b/src/Ganeti/WConfd/TempRes.hs
> >index e478a3b..5aa6343 100644
> >--- a/src/Ganeti/WConfd/TempRes.hs
> >+++ b/src/Ganeti/WConfd/TempRes.hs
> >@@ -73,7 +73,9 @@ module Ganeti.WConfd.TempRes
> >   , reserved
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Lens.At
> > import Control.Monad.Error.Class (MonadError(..))
> > import Control.Monad.State
> >diff --git a/test/hs/Test/Ganeti/BasicTypes.hs
> b/test/hs/Test/Ganeti/BasicTypes.hs
> >index f29d16f..e9ed399 100644
> >--- a/test/hs/Test/Ganeti/BasicTypes.hs
> >+++ b/test/hs/Test/Ganeti/BasicTypes.hs
> >@@ -37,10 +37,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Test.Ganeti.BasicTypes (testBasicTypes) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.QuickCheck hiding (Result)
> > import Test.QuickCheck.Function
> >
> >-import Control.Applicative
> > import Control.Monad
> >
> > import Test.Ganeti.TestHelper
> >diff --git a/test/hs/Test/Ganeti/Confd/Types.hs
> b/test/hs/Test/Ganeti/Confd/Types.hs
> >index 3bc7167..6e7cb29 100644
> >--- a/test/hs/Test/Ganeti/Confd/Types.hs
> >+++ b/test/hs/Test/Ganeti/Confd/Types.hs
> >@@ -42,7 +42,9 @@ module Test.Ganeti.Confd.Types
> >   , ConfdReqQ(..)
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.QuickCheck
> > import Test.HUnit
> > import qualified Text.JSON as J
> >diff --git a/test/hs/Test/Ganeti/HTools/Instance.hs
> b/test/hs/Test/Ganeti/HTools/Instance.hs
> >index dcd4b79..84a5f5c 100644
> >--- a/test/hs/Test/Ganeti/HTools/Instance.hs
> >+++ b/test/hs/Test/Ganeti/HTools/Instance.hs
> >@@ -44,8 +44,10 @@ module Test.Ganeti.HTools.Instance
> >   , Instance.Instance(..)
> >   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Arrow ((&&&))
> >-import Control.Applicative ((<$>))
> > import Control.Monad (liftM)
> > import Test.QuickCheck hiding (Result)
> >
> >diff --git a/test/hs/Test/Ganeti/HTools/Types.hs
> b/test/hs/Test/Ganeti/HTools/Types.hs
> >index 7708b0a..f643f3b 100644
> >--- a/test/hs/Test/Ganeti/HTools/Types.hs
> >+++ b/test/hs/Test/Ganeti/HTools/Types.hs
> >@@ -45,10 +45,12 @@ module Test.Ganeti.HTools.Types
> >   , nullIPolicy
> >   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.QuickCheck hiding (Result)
> > import Test.HUnit
> >
> >-import Control.Applicative
> > import Control.Monad (replicateM)
> >
> > import Test.Ganeti.TestHelper
> >diff --git a/test/hs/Test/Ganeti/JQScheduler.hs
> b/test/hs/Test/Ganeti/JQScheduler.hs
> >index a0aa650..3d79877 100644
> >--- a/test/hs/Test/Ganeti/JQScheduler.hs
> >+++ b/test/hs/Test/Ganeti/JQScheduler.hs
> >@@ -37,14 +37,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Test.Ganeti.JQScheduler (testJQScheduler) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Lens ((&), (.~), _2)
> > import Data.List (inits)
> > import Data.Maybe
> > import qualified Data.Map as Map
> > import Data.Set (Set, difference)
> > import qualified Data.Set as Set
> >-import Data.Traversable (traverse)
> > import Text.JSON (JSValue(..))
> > import Test.HUnit
> > import Test.QuickCheck
> >diff --git a/test/hs/Test/Ganeti/JQueue/Objects.hs
> b/test/hs/Test/Ganeti/JQueue/Objects.hs
> >index 13e0f0f..6d56a5d 100644
> >--- a/test/hs/Test/Ganeti/JQueue/Objects.hs
> >+++ b/test/hs/Test/Ganeti/JQueue/Objects.hs
> >@@ -39,7 +39,9 @@ module Test.Ganeti.JQueue.Objects
> >   , genJobId
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.QuickCheck as QuickCheck
> > import Text.JSON
> >
> >diff --git a/test/hs/Test/Ganeti/Locking/Allocation.hs
> b/test/hs/Test/Ganeti/Locking/Allocation.hs
> >index a4ce21b..498d149 100644
> >--- a/test/hs/Test/Ganeti/Locking/Allocation.hs
> >+++ b/test/hs/Test/Ganeti/Locking/Allocation.hs
> >@@ -42,7 +42,9 @@ module Test.Ganeti.Locking.Allocation
> >   , requestSucceeded
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import qualified Data.Foldable as F
> > import qualified Data.Map as M
> > import Data.Maybe (fromMaybe)
> >diff --git a/test/hs/Test/Ganeti/Locking/Locks.hs
> b/test/hs/Test/Ganeti/Locking/Locks.hs
> >index 732779f..1c992ff 100644
> >--- a/test/hs/Test/Ganeti/Locking/Locks.hs
> >+++ b/test/hs/Test/Ganeti/Locking/Locks.hs
> >@@ -37,7 +37,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Test.Ganeti.Locking.Locks (testLocking_Locks) where
> >
> >-import Control.Applicative ((<$>), (<*>), liftA2)
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Applicative (liftA2)
> > import Control.Monad (liftM)
> > import System.Posix.Types (CPid)
> >
> >diff --git a/test/hs/Test/Ganeti/Locking/Waiting.hs
> b/test/hs/Test/Ganeti/Locking/Waiting.hs
> >index ee1a6b0..1b06225 100644
> >--- a/test/hs/Test/Ganeti/Locking/Waiting.hs
> >+++ b/test/hs/Test/Ganeti/Locking/Waiting.hs
> >@@ -37,7 +37,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Test.Ganeti.Locking.Waiting (testLocking_Waiting) where
> >
> >-import Control.Applicative ((<$>), (<*>), liftA2)
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> >+import Control.Applicative (liftA2)
> > import Control.Monad (liftM)
> > import qualified Data.Map as M
> > import qualified Data.Set as S
> >diff --git a/test/hs/Test/Ganeti/Luxi.hs b/test/hs/Test/Ganeti/Luxi.hs
> >index c269b8c..47736f4 100644
> >--- a/test/hs/Test/Ganeti/Luxi.hs
> >+++ b/test/hs/Test/Ganeti/Luxi.hs
> >@@ -37,12 +37,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Test.Ganeti.Luxi (testLuxi) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.HUnit
> > import Test.QuickCheck
> > import Test.QuickCheck.Monadic (monadicIO, run, stop)
> >
> > import Data.List
> >-import Control.Applicative
> > import Control.Concurrent (forkIO)
> > import Control.Exception (bracket)
> > import qualified Text.JSON as J
> >diff --git a/test/hs/Test/Ganeti/Objects.hs
> b/test/hs/Test/Ganeti/Objects.hs
> >index 857f822..db43835 100644
> >--- a/test/hs/Test/Ganeti/Objects.hs
> >+++ b/test/hs/Test/Ganeti/Objects.hs
> >@@ -49,11 +49,13 @@ module Test.Ganeti.Objects
> >   , genBitStringMaxLen
> >   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.QuickCheck
> > import qualified Test.HUnit as HUnit
> >
> >-import Control.Applicative
> >-import Control.Monad
> >+import Control.Monad (liftM, when)
> > import Data.Char
> > import qualified Data.List as List
> > import qualified Data.Map as Map
> >diff --git a/test/hs/Test/Ganeti/OpCodes.hs
> b/test/hs/Test/Ganeti/OpCodes.hs
> >index 1fd4d5e..43e66b3 100644
> >--- a/test/hs/Test/Ganeti/OpCodes.hs
> >+++ b/test/hs/Test/Ganeti/OpCodes.hs
> >@@ -40,11 +40,13 @@ module Test.Ganeti.OpCodes
> >   , OpCodes.OpCode(..)
> >   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.HUnit as HUnit
> > import Test.QuickCheck as QuickCheck
> >
> >-import Control.Applicative
> >-import Control.Monad
> >+import Control.Monad (when)
> > import Data.Char
> > import Data.List
> > import qualified Data.Map as Map
> >diff --git a/test/hs/Test/Ganeti/Query/Language.hs
> b/test/hs/Test/Ganeti/Query/Language.hs
> >index 9556bc3..677990a 100644
> >--- a/test/hs/Test/Ganeti/Query/Language.hs
> >+++ b/test/hs/Test/Ganeti/Query/Language.hs
> >@@ -41,10 +41,12 @@ module Test.Ganeti.Query.Language
> >   , genJSValue
> >   ) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.HUnit (Assertion, assertEqual)
> > import Test.QuickCheck
> >
> >-import Control.Applicative
> > import Control.Arrow (second)
> > import Text.JSON
> >
> >diff --git a/test/hs/Test/Ganeti/Rpc.hs b/test/hs/Test/Ganeti/Rpc.hs
> >index 54711d7..86b3ece 100644
> >--- a/test/hs/Test/Ganeti/Rpc.hs
> >+++ b/test/hs/Test/Ganeti/Rpc.hs
> >@@ -37,10 +37,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Test.Ganeti.Rpc (testRpc) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.QuickCheck
> > import Test.QuickCheck.Monadic (monadicIO, run, stop)
> >
> >-import Control.Applicative
> > import qualified Data.Map as Map
> >
> > import Test.Ganeti.TestHelper
> >diff --git a/test/hs/Test/Ganeti/SlotMap.hs
> b/test/hs/Test/Ganeti/SlotMap.hs
> >index 295240d..7897c72 100644
> >--- a/test/hs/Test/Ganeti/SlotMap.hs
> >+++ b/test/hs/Test/Ganeti/SlotMap.hs
> >@@ -42,16 +42,15 @@ module Test.Ganeti.SlotMap
> >   , overfullKeys
> >   ) where
> >
> >-import Prelude hiding (all)
> >+import Prelude ()
> >+import Ganeti.Prelude hiding (all)
> >
> >-import Control.Applicative
> > import Control.Monad
> > import Data.Foldable (all)
> > import qualified Data.Map as Map
> > import Data.Map (Map, member, keys, keysSet)
> > import Data.Set (Set, size, union)
> > import qualified Data.Set as Set
> >-import Data.Traversable (traverse)
> > import Test.HUnit
> > import Test.QuickCheck
> >
> >diff --git a/test/hs/Test/Ganeti/Storage/Diskstats/Parser.hs
> b/test/hs/Test/Ganeti/Storage/Diskstats/Parser.hs
> >index 8193ae9..4a63b02 100644
> >--- a/test/hs/Test/Ganeti/Storage/Diskstats/Parser.hs
> >+++ b/test/hs/Test/Ganeti/Storage/Diskstats/Parser.hs
> >@@ -35,13 +35,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Test.Ganeti.Storage.Diskstats.Parser (testBlock_Diskstats_Parser)
> where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.QuickCheck as QuickCheck hiding (Result)
> > import Test.HUnit
> >
> > import Test.Ganeti.TestHelper
> > import Test.Ganeti.TestCommon
> >
> >-import Control.Applicative ((<*>), (<$>))
> > import qualified Data.Attoparsec.Text as A
> > import Data.Text (pack)
> > import Text.Printf
> >diff --git a/test/hs/Test/Ganeti/Storage/Lvm/LVParser.hs
> b/test/hs/Test/Ganeti/Storage/Lvm/LVParser.hs
> >index 9a00799..bb1ec64 100644
> >--- a/test/hs/Test/Ganeti/Storage/Lvm/LVParser.hs
> >+++ b/test/hs/Test/Ganeti/Storage/Lvm/LVParser.hs
> >@@ -35,13 +35,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Test.Ganeti.Storage.Lvm.LVParser (testStorage_Lvm_LVParser) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.QuickCheck as QuickCheck hiding (Result)
> > import Test.HUnit
> >
> > import Test.Ganeti.TestHelper
> > import Test.Ganeti.TestCommon
> >
> >-import Control.Applicative ((<$>), (<*>))
> > import Data.List (intercalate)
> >
> > import Ganeti.Storage.Lvm.LVParser
> >diff --git a/test/hs/Test/Ganeti/TestCommon.hs
> b/test/hs/Test/Ganeti/TestCommon.hs
> >index bcd8421..a3f8740 100644
> >--- a/test/hs/Test/Ganeti/TestCommon.hs
> >+++ b/test/hs/Test/Ganeti/TestCommon.hs
> >@@ -92,9 +92,11 @@ module Test.Ganeti.TestCommon
> >   , counterexample
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Control.Exception (catchJust)
> >-import Control.Monad
> >+import Control.Monad (guard, liftM, foldM)
> > import Data.Attoparsec.Text (Parser, parseOnly)
> > import Data.List
> > import qualified Data.Map as M
> >diff --git a/test/hs/Test/Ganeti/TestHelper.hs
> b/test/hs/Test/Ganeti/TestHelper.hs
> >index 399ad58..01be610 100644
> >--- a/test/hs/Test/Ganeti/TestHelper.hs
> >+++ b/test/hs/Test/Ganeti/TestHelper.hs
> >@@ -39,7 +39,9 @@ module Test.Ganeti.TestHelper
> >   , genArbitrary
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Data.List (stripPrefix, isPrefixOf)
> > import Data.Maybe (fromMaybe)
> > import Test.Framework
> >diff --git a/test/hs/Test/Ganeti/Types.hs b/test/hs/Test/Ganeti/Types.hs
> >index 12f957a..5ce6dae 100644
> >--- a/test/hs/Test/Ganeti/Types.hs
> >+++ b/test/hs/Test/Ganeti/Types.hs
> >@@ -47,7 +47,9 @@ module Test.Ganeti.Types
> >   , genReasonTrail
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import System.Time (ClockTime(..))
> >
> > import Test.QuickCheck as QuickCheck hiding (Result)
> >diff --git a/test/hs/Test/Ganeti/Utils.hs b/test/hs/Test/Ganeti/Utils.hs
> >index bee30e2..c65db11 100644
> >--- a/test/hs/Test/Ganeti/Utils.hs
> >+++ b/test/hs/Test/Ganeti/Utils.hs
> >@@ -37,10 +37,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Test.Ganeti.Utils (testUtils) where
> >
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.QuickCheck hiding (Result)
> > import Test.HUnit
> >
> >-import Control.Applicative ((<$>), (<*>))
> > import Data.Char (isSpace)
> > import qualified Data.Either as Either
> > #if MIN_VERSION_base(4,8,0)
> >diff --git a/test/hs/Test/Ganeti/Utils/MultiMap.hs
> b/test/hs/Test/Ganeti/Utils/MultiMap.hs
> >index 3656841..02dfc46 100644
> >--- a/test/hs/Test/Ganeti/Utils/MultiMap.hs
> >+++ b/test/hs/Test/Ganeti/Utils/MultiMap.hs
> >@@ -39,7 +39,9 @@ module Test.Ganeti.Utils.MultiMap
> >   ( testUtils_MultiMap
> >   ) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import qualified Data.Set as S
> > import qualified Data.Map as M
> >
> >diff --git a/test/hs/Test/Ganeti/WConfd/TempRes.hs
> b/test/hs/Test/Ganeti/WConfd/TempRes.hs
> >index 768804c..8b8745b 100644
> >--- a/test/hs/Test/Ganeti/WConfd/TempRes.hs
> >+++ b/test/hs/Test/Ganeti/WConfd/TempRes.hs
> >@@ -37,7 +37,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Test.Ganeti.WConfd.TempRes (testWConfd_TempRes) where
> >
> >-import Control.Applicative
> >+import Prelude ()
> >+import Ganeti.Prelude
> >
> > import Test.QuickCheck
> >
> >diff --git a/test/hs/htest.hs b/test/hs/htest.hs
> >index 86d193e..ca83366 100644
> >--- a/test/hs/htest.hs
> >+++ b/test/hs/htest.hs
> >@@ -34,7 +34,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
> DAMAGE.
> >
> > module Main(main) where
> >
> >-import Data.Monoid (mappend)
> >+import Prelude ()
> >+import Ganeti.Prelude
> >+
> > import Test.Framework
> > import System.Environment (getArgs)
> > import System.Log.Logger
> >--
> >2.6.0.rc0.131.gf624c3d
> >
>
> Rest LGTM, thanks!
>

Reply via email to