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! >
