From 2e6ef129744c336090e5f5e12b853f2989996a7a Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Fri, 14 Dec 2012 23:51:14 +0100
Subject: [PATCH] Add a type alias for the personality lists

The signature of the personality definitions is so ugly that, at
least, we should hide it a bit behind a type alias.

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Michele Tartara <mtartara@google.com>
---
 htools/Ganeti/Common.hs                 | 11 +++++++++++
 htools/Ganeti/DataCollectors/Program.hs |  8 +++-----
 htools/Ganeti/HTools/Program.hs         |  8 +++-----
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/htools/Ganeti/Common.hs b/htools/Ganeti/Common.hs
index 3f91db87f..06bbbe56e 100644
--- a/htools/Ganeti/Common.hs
+++ b/htools/Ganeti/Common.hs
@@ -31,6 +31,7 @@ module Ganeti.Common
   , StandardOptions(..)
   , OptCompletion(..)
   , ArgCompletion(..)
+  , PersonalityList
   , optComplYesNo
   , oShowHelp
   , oShowVer
@@ -86,6 +87,16 @@ data OptCompletion = OptComplNone             -- ^ No parameter to this option
 data ArgCompletion = ArgCompletion OptCompletion Int (Maybe Int)
                      deriving (Show, Eq)
 
+-- | A personality definition.
+type Personality a = ( a -> [String] -> IO () -- The main function
+                     , IO [GenericOptType a]  -- The options
+                     , [ArgCompletion]        -- The description of args
+                     )
+
+-- | Personality lists type, common across all binaries that expose
+-- multiple personalities.
+type PersonalityList  a = [(String, Personality a)]
+
 -- | Yes\/no choices completion.
 optComplYesNo :: OptCompletion
 optComplYesNo = OptComplChoices ["yes", "no"]
diff --git a/htools/Ganeti/DataCollectors/Program.hs b/htools/Ganeti/DataCollectors/Program.hs
index 63c4cab6e..3bd9b2fb9 100644
--- a/htools/Ganeti/DataCollectors/Program.hs
+++ b/htools/Ganeti/DataCollectors/Program.hs
@@ -25,14 +25,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
 module Ganeti.DataCollectors.Program (personalities) where
 
-import Ganeti.Common (ArgCompletion)
-import Ganeti.DataCollectors.CLI (OptType, Options)
+import Ganeti.Common (PersonalityList)
+import Ganeti.DataCollectors.CLI (Options)
 
 import qualified Ganeti.DataCollectors.Drbd as Drbd
 
 -- | Supported binaries.
-personalities :: [(String,
-                   (Options -> [String] -> IO (), IO [OptType],
-                    [ArgCompletion]))]
+personalities :: PersonalityList Options
 personalities = [ ("drbd",   (Drbd.main, Drbd.options, Drbd.arguments))
                 ]
diff --git a/htools/Ganeti/HTools/Program.hs b/htools/Ganeti/HTools/Program.hs
index e47a6bd77..04ed53fb5 100644
--- a/htools/Ganeti/HTools/Program.hs
+++ b/htools/Ganeti/HTools/Program.hs
@@ -27,8 +27,8 @@ module Ganeti.HTools.Program
   ( personalities
   ) where
 
-import Ganeti.Common (ArgCompletion)
-import Ganeti.HTools.CLI (OptType, Options)
+import Ganeti.Common (PersonalityList)
+import Ganeti.HTools.CLI (Options)
 
 import qualified Ganeti.HTools.Program.Hail as Hail
 import qualified Ganeti.HTools.Program.Hbal as Hbal
@@ -38,9 +38,7 @@ import qualified Ganeti.HTools.Program.Hspace as Hspace
 import qualified Ganeti.HTools.Program.Hinfo as Hinfo
 
 -- | Supported binaries.
-personalities :: [(String,
-                   (Options -> [String] -> IO (), IO [OptType],
-                    [ArgCompletion]))]
+personalities :: PersonalityList Options
 personalities = [ ("hail",   (Hail.main,   Hail.options,   Hail.arguments))
                 , ("hbal",   (Hbal.main,   Hbal.options,   Hbal.arguments))
                 , ("hcheck", (Hcheck.main, Hcheck.options, Hcheck.arguments))
-- 
GitLab