diff --git a/Ganeti/HTools/CLI.hs b/Ganeti/HTools/CLI.hs
index 474ab5a18aab786cac4a2c0d4f329c7d17eae344..df9bbc82b04145a81e346c6496266229cb3187fe 100644
--- a/Ganeti/HTools/CLI.hs
+++ b/Ganeti/HTools/CLI.hs
@@ -359,7 +359,7 @@ parseOpts argv progname options =
               printf "%s %s\ncompiled with %s %s\nrunning on %s %s\n"
                      progname Version.version
                      compilerName (Data.Version.showVersion compilerVersion)
-                     os arch
+                     os arch :: IO ()
               exitWith ExitSuccess
             return (po, args)
       (_, _, errs) -> do
diff --git a/Ganeti/HTools/ExtLoader.hs b/Ganeti/HTools/ExtLoader.hs
index b828a7b3cca526e6f8c2e8d8abbb00b10577c017..0d72d6f9095c1a307b9e06a095019423da8c4458 100644
--- a/Ganeti/HTools/ExtLoader.hs
+++ b/Ganeti/HTools/ExtLoader.hs
@@ -124,6 +124,7 @@ loadExternalData opts = do
          Ok x -> return x
          Bad s -> do
            hPrintf stderr "Error: failed to load data. Details:\n%s\n" s
+               :: IO ()
            exitWith $ ExitFailure 1
       )
   let (fix_msgs, fixed_nl) = Loader.checkData loaded_nl il
diff --git a/hbal.hs b/hbal.hs
index 635fc3c2907cffd3b179fda0c9867edbd1e1634b..b3b6c7653379e1850ee8ada70ec55e888e4ff63d 100644
--- a/hbal.hs
+++ b/hbal.hs
@@ -206,7 +206,7 @@ main = do
 
   when (length offline_wrong > 0) $ do
          hPrintf stderr "Wrong node name(s) set as offline: %s\n"
-                     (commaJoin offline_wrong)
+                     (commaJoin offline_wrong) :: IO ()
          exitWith $ ExitFailure 1
 
   let nm = Container.map (\n -> if elem (Node.idx n) offline_indices
@@ -328,7 +328,7 @@ main = do
          when (verbose > 3) $
               do
                 printf "Original: mem=%d disk=%d\n"
-                       (Cluster.csFmem ini_cs) (Cluster.csFdsk ini_cs)
+                       (Cluster.csFmem ini_cs) (Cluster.csFdsk ini_cs) :: IO ()
                 printf "Final:    mem=%d disk=%d\n"
                        (Cluster.csFmem fin_cs) (Cluster.csFdsk fin_cs)
   when oneline $
diff --git a/hscan.hs b/hscan.hs
index 44985ae15f2482c3e5554c40c80d1feaf1f74d54..de5b1a415645118edb4df33f18133488809b05dd 100644
--- a/hscan.hs
+++ b/hscan.hs
@@ -145,7 +145,7 @@ writeData _ name _ (Bad err) =
     printf "\nError for %s: failed to load data. Details:\n%s\n" name err
 
 writeData nlen name opts (Ok (nl, il, adata)) = do
-  printf "%-*s " nlen name
+  printf "%-*s " nlen name :: IO ()
   hFlush stdout
   let shownodes = optShowNodes opts
       odir = optOutPath opts
diff --git a/hspace.hs b/hspace.hs
index 429288816f141bc0002a68cc8c19b4e4a30e9c55..d69f4d33bff0432984efbe9b712b77792dfcef67 100644
--- a/hspace.hs
+++ b/hspace.hs
@@ -173,7 +173,7 @@ printResults fin_nl num_instances allocs sreason = do
        do
          hPrintf stderr "ERROR: internal inconsistency, allocated (%d)\
                         \ != counted (%d)\n" (num_instances + allocs)
-                                 (Cluster.csNinst fin_stats)
+                                 (Cluster.csNinst fin_stats) :: IO ()
          exitWith $ ExitFailure 1
 
   printKeys $ printStats PFinal fin_stats
@@ -244,11 +244,12 @@ main = do
 
   when (length offline_wrong > 0) $ do
          hPrintf stderr "Error: Wrong node name(s) set as offline: %s\n"
-                     (commaJoin offline_wrong)
+                     (commaJoin offline_wrong) :: IO ()
          exitWith $ ExitFailure 1
 
   when (req_nodes /= 1 && req_nodes /= 2) $ do
-         hPrintf stderr "Error: Invalid required nodes (%d)\n" req_nodes
+         hPrintf stderr "Error: Invalid required nodes (%d)\n"
+                                            req_nodes :: IO ()
          exitWith $ ExitFailure 1
 
   let nm = Container.map (\n -> if elem (Node.idx n) offline_indices
@@ -288,7 +289,7 @@ main = do
                     (rspecCpu spx) "ADMIN_down" [] (-1) (-1)
       exitifbad val = (case val of
                          Bad s -> do
-                           hPrintf stderr "Failure: %s\n" s
+                           hPrintf stderr "Failure: %s\n" s :: IO ()
                            exitWith $ ExitFailure 1
                          Ok x -> return x)