module Main where

import           Bcc.Chairman.Commands
import           Control.Monad
import           Data.Function
import           Data.Semigroup
import           Options.Applicative
import           System.IO (IO)

main :: IO ()
main :: IO ()
main = IO (IO ()) -> IO ()
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join
  (IO (IO ()) -> IO ())
-> (ParserInfo (IO ()) -> IO (IO ()))
-> ParserInfo (IO ())
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ParserPrefs -> ParserInfo (IO ()) -> IO (IO ())
forall a. ParserPrefs -> ParserInfo a -> IO a
customExecParser
    ( PrefsMod -> ParserPrefs
prefs (PrefsMod
showHelpOnEmpty PrefsMod -> PrefsMod -> PrefsMod
forall a. Semigroup a => a -> a -> a
<> PrefsMod
showHelpOnError)
    )
  (ParserInfo (IO ()) -> IO ()) -> ParserInfo (IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ Parser (IO ()) -> InfoMod (IO ()) -> ParserInfo (IO ())
forall a. Parser a -> InfoMod a -> ParserInfo a
info (Parser (IO ())
commands Parser (IO ()) -> Parser (IO () -> IO ()) -> Parser (IO ())
forall (f :: * -> *) a b. Applicative f => f a -> f (a -> b) -> f b
<**> Parser (IO () -> IO ())
forall a. Parser (a -> a)
helper)
    (  InfoMod (IO ())
forall a. InfoMod a
fullDesc
    InfoMod (IO ()) -> InfoMod (IO ()) -> InfoMod (IO ())
forall a. Semigroup a => a -> a -> a
<> String -> InfoMod (IO ())
forall a. String -> InfoMod a
progDesc String
"Chairman checks Bcc clusters for progress and consensus."
    InfoMod (IO ()) -> InfoMod (IO ()) -> InfoMod (IO ())
forall a. Semigroup a => a -> a -> a
<> String -> InfoMod (IO ())
forall a. String -> InfoMod a
header String
"Chairman sits in a room full of Sophie nodes, and checks \
              \if they are all behaving ..."
    )