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