{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}

-----------------------------------------------------------------------------

-- |
-- Module      :  Distribution.Simple.Setup.Haddock
-- Copyright   :  Isaac Jones 2003-2004
--                Duncan Coutts 2007
-- License     :  BSD3
--
-- Maintainer  :  cabal-devel@haskell.org
-- Portability :  portable
--
-- Definition of the haddock command-line options.
-- See: @Distribution.Simple.Setup@
module Distribution.Simple.Setup.Haddock
  ( HaddockTarget (..)
  , HaddockFlags (..)
  , emptyHaddockFlags
  , defaultHaddockFlags
  , haddockCommand
  , Visibility (..)
  , HaddockProjectFlags (..)
  , emptyHaddockProjectFlags
  , defaultHaddockProjectFlags
  , haddockProjectCommand
  , haddockOptions
  , haddockProjectOptions
  ) where

import Distribution.Compat.Prelude hiding (get)
import Prelude ()

import qualified Distribution.Compat.CharParsing as P
import Distribution.Parsec
import Distribution.Pretty
import Distribution.Simple.Command hiding (boolOpt, boolOpt')
import Distribution.Simple.Flag
import Distribution.Simple.InstallDirs
import Distribution.Simple.Program
import Distribution.Verbosity
import qualified Text.PrettyPrint as Disp

import Distribution.Simple.Setup.Common

-- ------------------------------------------------------------

-- * Haddock flags

-- ------------------------------------------------------------

-- | When we build haddock documentation, there are two cases:
--
-- 1. We build haddocks only for the current development version,
--    intended for local use and not for distribution. In this case,
--    we store the generated documentation in @<dist>/doc/html/<package name>@.
--
-- 2. We build haddocks for intended for uploading them to hackage.
--    In this case, we need to follow the layout that hackage expects
--    from documentation tarballs, and we might also want to use different
--    flags than for development builds, so in this case we store the generated
--    documentation in @<dist>/doc/html/<package id>-docs@.
data HaddockTarget = ForHackage | ForDevelopment deriving (HaddockTarget -> HaddockTarget -> Bool
(HaddockTarget -> HaddockTarget -> Bool)
-> (HaddockTarget -> HaddockTarget -> Bool) -> Eq HaddockTarget
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: HaddockTarget -> HaddockTarget -> Bool
== :: HaddockTarget -> HaddockTarget -> Bool
$c/= :: HaddockTarget -> HaddockTarget -> Bool
/= :: HaddockTarget -> HaddockTarget -> Bool
Eq, Int -> HaddockTarget -> ShowS
[HaddockTarget] -> ShowS
HaddockTarget -> String
(Int -> HaddockTarget -> ShowS)
-> (HaddockTarget -> String)
-> ([HaddockTarget] -> ShowS)
-> Show HaddockTarget
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> HaddockTarget -> ShowS
showsPrec :: Int -> HaddockTarget -> ShowS
$cshow :: HaddockTarget -> String
show :: HaddockTarget -> String
$cshowList :: [HaddockTarget] -> ShowS
showList :: [HaddockTarget] -> ShowS
Show, (forall x. HaddockTarget -> Rep HaddockTarget x)
-> (forall x. Rep HaddockTarget x -> HaddockTarget)
-> Generic HaddockTarget
forall x. Rep HaddockTarget x -> HaddockTarget
forall x. HaddockTarget -> Rep HaddockTarget x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. HaddockTarget -> Rep HaddockTarget x
from :: forall x. HaddockTarget -> Rep HaddockTarget x
$cto :: forall x. Rep HaddockTarget x -> HaddockTarget
to :: forall x. Rep HaddockTarget x -> HaddockTarget
Generic, Typeable)

instance Binary HaddockTarget
instance Structured HaddockTarget

instance Pretty HaddockTarget where
  pretty :: HaddockTarget -> Doc
pretty HaddockTarget
ForHackage = String -> Doc
Disp.text String
"for-hackage"
  pretty HaddockTarget
ForDevelopment = String -> Doc
Disp.text String
"for-development"

instance Parsec HaddockTarget where
  parsec :: forall (m :: * -> *). CabalParsing m => m HaddockTarget
parsec =
    [m HaddockTarget] -> m HaddockTarget
forall (m :: * -> *) a. Alternative m => [m a] -> m a
P.choice
      [ m HaddockTarget -> m HaddockTarget
forall a. m a -> m a
forall (m :: * -> *) a. Parsing m => m a -> m a
P.try (m HaddockTarget -> m HaddockTarget)
-> m HaddockTarget -> m HaddockTarget
forall a b. (a -> b) -> a -> b
$ String -> m String
forall (m :: * -> *). CharParsing m => String -> m String
P.string String
"for-hackage" m String -> m HaddockTarget -> m HaddockTarget
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> HaddockTarget -> m HaddockTarget
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return HaddockTarget
ForHackage
      , String -> m String
forall (m :: * -> *). CharParsing m => String -> m String
P.string String
"for-development" m String -> m HaddockTarget -> m HaddockTarget
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> HaddockTarget -> m HaddockTarget
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return HaddockTarget
ForDevelopment
      ]

data HaddockFlags = HaddockFlags
  { HaddockFlags -> [(String, String)]
haddockProgramPaths :: [(String, FilePath)]
  , HaddockFlags -> [(String, [String])]
haddockProgramArgs :: [(String, [String])]
  , HaddockFlags -> Flag Bool
haddockHoogle :: Flag Bool
  , HaddockFlags -> Flag Bool
haddockHtml :: Flag Bool
  , HaddockFlags -> Flag String
haddockHtmlLocation :: Flag String
  , HaddockFlags -> Flag HaddockTarget
haddockForHackage :: Flag HaddockTarget
  , HaddockFlags -> Flag Bool
haddockExecutables :: Flag Bool
  , HaddockFlags -> Flag Bool
haddockTestSuites :: Flag Bool
  , HaddockFlags -> Flag Bool
haddockBenchmarks :: Flag Bool
  , HaddockFlags -> Flag Bool
haddockForeignLibs :: Flag Bool
  , HaddockFlags -> Flag Bool
haddockInternal :: Flag Bool
  , HaddockFlags -> Flag String
haddockCss :: Flag FilePath
  , HaddockFlags -> Flag Bool
haddockLinkedSource :: Flag Bool
  , HaddockFlags -> Flag Bool
haddockQuickJump :: Flag Bool
  , HaddockFlags -> Flag String
haddockHscolourCss :: Flag FilePath
  , HaddockFlags -> Flag PathTemplate
haddockContents :: Flag PathTemplate
  , HaddockFlags -> Flag PathTemplate
haddockIndex :: Flag PathTemplate
  , HaddockFlags -> Flag String
haddockDistPref :: Flag FilePath
  , HaddockFlags -> Flag Bool
haddockKeepTempFiles :: Flag Bool
  , HaddockFlags -> Flag Verbosity
haddockVerbosity :: Flag Verbosity
  , HaddockFlags -> Flag String
haddockCabalFilePath :: Flag FilePath
  , HaddockFlags -> Flag String
haddockBaseUrl :: Flag String
  , HaddockFlags -> Flag String
haddockLib :: Flag String
  , HaddockFlags -> Flag String
haddockOutputDir :: Flag FilePath
  , HaddockFlags -> [String]
haddockArgs :: [String]
  }
  deriving (Int -> HaddockFlags -> ShowS
[HaddockFlags] -> ShowS
HaddockFlags -> String
(Int -> HaddockFlags -> ShowS)
-> (HaddockFlags -> String)
-> ([HaddockFlags] -> ShowS)
-> Show HaddockFlags
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> HaddockFlags -> ShowS
showsPrec :: Int -> HaddockFlags -> ShowS
$cshow :: HaddockFlags -> String
show :: HaddockFlags -> String
$cshowList :: [HaddockFlags] -> ShowS
showList :: [HaddockFlags] -> ShowS
Show, (forall x. HaddockFlags -> Rep HaddockFlags x)
-> (forall x. Rep HaddockFlags x -> HaddockFlags)
-> Generic HaddockFlags
forall x. Rep HaddockFlags x -> HaddockFlags
forall x. HaddockFlags -> Rep HaddockFlags x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. HaddockFlags -> Rep HaddockFlags x
from :: forall x. HaddockFlags -> Rep HaddockFlags x
$cto :: forall x. Rep HaddockFlags x -> HaddockFlags
to :: forall x. Rep HaddockFlags x -> HaddockFlags
Generic, Typeable)

instance Binary HaddockFlags
instance Structured HaddockFlags

defaultHaddockFlags :: HaddockFlags
defaultHaddockFlags :: HaddockFlags
defaultHaddockFlags =
  HaddockFlags
    { haddockProgramPaths :: [(String, String)]
haddockProgramPaths = [(String, String)]
forall a. Monoid a => a
mempty
    , haddockProgramArgs :: [(String, [String])]
haddockProgramArgs = []
    , haddockHoogle :: Flag Bool
haddockHoogle = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockHtml :: Flag Bool
haddockHtml = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockHtmlLocation :: Flag String
haddockHtmlLocation = Flag String
forall a. Flag a
NoFlag
    , haddockForHackage :: Flag HaddockTarget
haddockForHackage = Flag HaddockTarget
forall a. Flag a
NoFlag
    , haddockExecutables :: Flag Bool
haddockExecutables = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockTestSuites :: Flag Bool
haddockTestSuites = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockBenchmarks :: Flag Bool
haddockBenchmarks = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockForeignLibs :: Flag Bool
haddockForeignLibs = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockInternal :: Flag Bool
haddockInternal = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockCss :: Flag String
haddockCss = Flag String
forall a. Flag a
NoFlag
    , haddockLinkedSource :: Flag Bool
haddockLinkedSource = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockQuickJump :: Flag Bool
haddockQuickJump = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockHscolourCss :: Flag String
haddockHscolourCss = Flag String
forall a. Flag a
NoFlag
    , haddockContents :: Flag PathTemplate
haddockContents = Flag PathTemplate
forall a. Flag a
NoFlag
    , haddockDistPref :: Flag String
haddockDistPref = Flag String
forall a. Flag a
NoFlag
    , haddockKeepTempFiles :: Flag Bool
haddockKeepTempFiles = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockVerbosity :: Flag Verbosity
haddockVerbosity = Verbosity -> Flag Verbosity
forall a. a -> Flag a
Flag Verbosity
normal
    , haddockCabalFilePath :: Flag String
haddockCabalFilePath = Flag String
forall a. Monoid a => a
mempty
    , haddockIndex :: Flag PathTemplate
haddockIndex = Flag PathTemplate
forall a. Flag a
NoFlag
    , haddockBaseUrl :: Flag String
haddockBaseUrl = Flag String
forall a. Flag a
NoFlag
    , haddockLib :: Flag String
haddockLib = Flag String
forall a. Flag a
NoFlag
    , haddockOutputDir :: Flag String
haddockOutputDir = Flag String
forall a. Flag a
NoFlag
    , haddockArgs :: [String]
haddockArgs = [String]
forall a. Monoid a => a
mempty
    }

haddockCommand :: CommandUI HaddockFlags
haddockCommand :: CommandUI HaddockFlags
haddockCommand =
  CommandUI
    { commandName :: String
commandName = String
"haddock"
    , commandSynopsis :: String
commandSynopsis = String
"Generate Haddock HTML documentation."
    , commandDescription :: Maybe ShowS
commandDescription = ShowS -> Maybe ShowS
forall a. a -> Maybe a
Just (ShowS -> Maybe ShowS) -> ShowS -> Maybe ShowS
forall a b. (a -> b) -> a -> b
$ \String
_ ->
        String
"Requires the program haddock, version 2.x.\n"
    , commandNotes :: Maybe ShowS
commandNotes = Maybe ShowS
forall a. Maybe a
Nothing
    , commandUsage :: ShowS
commandUsage =
        String -> [String] -> ShowS
usageAlternatives String
"haddock" ([String] -> ShowS) -> [String] -> ShowS
forall a b. (a -> b) -> a -> b
$
          [ String
"[FLAGS]"
          , String
"COMPONENTS [FLAGS]"
          ]
    , commandDefaultFlags :: HaddockFlags
commandDefaultFlags = HaddockFlags
defaultHaddockFlags
    , commandOptions :: ShowOrParseArgs -> [OptionField HaddockFlags]
commandOptions = \ShowOrParseArgs
showOrParseArgs ->
        ShowOrParseArgs -> [OptionField HaddockFlags]
haddockOptions ShowOrParseArgs
showOrParseArgs
          [OptionField HaddockFlags]
-> [OptionField HaddockFlags] -> [OptionField HaddockFlags]
forall a. [a] -> [a] -> [a]
++ ProgramDb
-> ShowOrParseArgs
-> (HaddockFlags -> [(String, String)])
-> ([(String, String)] -> HaddockFlags -> HaddockFlags)
-> [OptionField HaddockFlags]
forall flags.
ProgramDb
-> ShowOrParseArgs
-> (flags -> [(String, String)])
-> ([(String, String)] -> flags -> flags)
-> [OptionField flags]
programDbPaths
            ProgramDb
progDb
            ShowOrParseArgs
ParseArgs
            HaddockFlags -> [(String, String)]
haddockProgramPaths
            (\[(String, String)]
v HaddockFlags
flags -> HaddockFlags
flags{haddockProgramPaths = v})
          [OptionField HaddockFlags]
-> [OptionField HaddockFlags] -> [OptionField HaddockFlags]
forall a. [a] -> [a] -> [a]
++ ProgramDb
-> ShowOrParseArgs
-> (HaddockFlags -> [(String, [String])])
-> ([(String, [String])] -> HaddockFlags -> HaddockFlags)
-> [OptionField HaddockFlags]
forall flags.
ProgramDb
-> ShowOrParseArgs
-> (flags -> [(String, [String])])
-> ([(String, [String])] -> flags -> flags)
-> [OptionField flags]
programDbOption
            ProgramDb
progDb
            ShowOrParseArgs
showOrParseArgs
            HaddockFlags -> [(String, [String])]
haddockProgramArgs
            (\[(String, [String])]
v HaddockFlags
fs -> HaddockFlags
fs{haddockProgramArgs = v})
          [OptionField HaddockFlags]
-> [OptionField HaddockFlags] -> [OptionField HaddockFlags]
forall a. [a] -> [a] -> [a]
++ ProgramDb
-> ShowOrParseArgs
-> (HaddockFlags -> [(String, [String])])
-> ([(String, [String])] -> HaddockFlags -> HaddockFlags)
-> [OptionField HaddockFlags]
forall flags.
ProgramDb
-> ShowOrParseArgs
-> (flags -> [(String, [String])])
-> ([(String, [String])] -> flags -> flags)
-> [OptionField flags]
programDbOptions
            ProgramDb
progDb
            ShowOrParseArgs
ParseArgs
            HaddockFlags -> [(String, [String])]
haddockProgramArgs
            (\[(String, [String])]
v HaddockFlags
flags -> HaddockFlags
flags{haddockProgramArgs = v})
    }
  where
    progDb :: ProgramDb
progDb =
      Program -> ProgramDb -> ProgramDb
addKnownProgram Program
haddockProgram (ProgramDb -> ProgramDb) -> ProgramDb -> ProgramDb
forall a b. (a -> b) -> a -> b
$
        Program -> ProgramDb -> ProgramDb
addKnownProgram Program
ghcProgram (ProgramDb -> ProgramDb) -> ProgramDb -> ProgramDb
forall a b. (a -> b) -> a -> b
$
          ProgramDb
emptyProgramDb

haddockOptions :: ShowOrParseArgs -> [OptionField HaddockFlags]
haddockOptions :: ShowOrParseArgs -> [OptionField HaddockFlags]
haddockOptions ShowOrParseArgs
showOrParseArgs =
  [ (HaddockFlags -> Flag Verbosity)
-> (Flag Verbosity -> HaddockFlags -> HaddockFlags)
-> OptionField HaddockFlags
forall flags.
(flags -> Flag Verbosity)
-> (Flag Verbosity -> flags -> flags) -> OptionField flags
optionVerbosity
      HaddockFlags -> Flag Verbosity
haddockVerbosity
      (\Flag Verbosity
v HaddockFlags
flags -> HaddockFlags
flags{haddockVerbosity = v})
  , (HaddockFlags -> Flag String)
-> (Flag String -> HaddockFlags -> HaddockFlags)
-> ShowOrParseArgs
-> OptionField HaddockFlags
forall flags.
(flags -> Flag String)
-> (Flag String -> flags -> flags)
-> ShowOrParseArgs
-> OptionField flags
optionDistPref
      HaddockFlags -> Flag String
haddockDistPref
      (\Flag String
d HaddockFlags
flags -> HaddockFlags
flags{haddockDistPref = d})
      ShowOrParseArgs
showOrParseArgs
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag Bool)
-> (Flag Bool -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag Bool)
     (Flag Bool -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"keep-temp-files"]
      String
"Keep temporary files"
      HaddockFlags -> Flag Bool
haddockKeepTempFiles
      (\Flag Bool
b HaddockFlags
flags -> HaddockFlags
flags{haddockKeepTempFiles = b})
      MkOptDescr
  (HaddockFlags -> Flag Bool)
  (Flag Bool -> HaddockFlags -> HaddockFlags)
  HaddockFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag Bool)
-> (Flag Bool -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag Bool)
     (Flag Bool -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"hoogle"]
      String
"Generate a hoogle database"
      HaddockFlags -> Flag Bool
haddockHoogle
      (\Flag Bool
v HaddockFlags
flags -> HaddockFlags
flags{haddockHoogle = v})
      MkOptDescr
  (HaddockFlags -> Flag Bool)
  (Flag Bool -> HaddockFlags -> HaddockFlags)
  HaddockFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag Bool)
-> (Flag Bool -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag Bool)
     (Flag Bool -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"html"]
      String
"Generate HTML documentation (the default)"
      HaddockFlags -> Flag Bool
haddockHtml
      (\Flag Bool
v HaddockFlags
flags -> HaddockFlags
flags{haddockHtml = v})
      MkOptDescr
  (HaddockFlags -> Flag Bool)
  (Flag Bool -> HaddockFlags -> HaddockFlags)
  HaddockFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag String)
-> (Flag String -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"html-location"]
      String
"Location of HTML documentation for pre-requisite packages"
      HaddockFlags -> Flag String
haddockHtmlLocation
      (\Flag String
v HaddockFlags
flags -> HaddockFlags
flags{haddockHtmlLocation = v})
      (String
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
forall b.
String
-> String
-> [String]
-> String
-> (b -> Flag String)
-> (Flag String -> b -> b)
-> OptDescr b
reqArgFlag String
"URL")
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag HaddockTarget)
-> (Flag HaddockTarget -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag HaddockTarget)
     (Flag HaddockTarget -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"for-hackage"]
      String
"Collection of flags to generate documentation suitable for upload to hackage"
      HaddockFlags -> Flag HaddockTarget
haddockForHackage
      (\Flag HaddockTarget
v HaddockFlags
flags -> HaddockFlags
flags{haddockForHackage = v})
      (Flag HaddockTarget
-> MkOptDescr
     (HaddockFlags -> Flag HaddockTarget)
     (Flag HaddockTarget -> HaddockFlags -> HaddockFlags)
     HaddockFlags
forall b a. Eq b => b -> MkOptDescr (a -> b) (b -> a -> a) a
noArg (HaddockTarget -> Flag HaddockTarget
forall a. a -> Flag a
Flag HaddockTarget
ForHackage))
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag Bool)
-> (Flag Bool -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag Bool)
     (Flag Bool -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"executables"]
      String
"Run haddock for Executables targets"
      HaddockFlags -> Flag Bool
haddockExecutables
      (\Flag Bool
v HaddockFlags
flags -> HaddockFlags
flags{haddockExecutables = v})
      MkOptDescr
  (HaddockFlags -> Flag Bool)
  (Flag Bool -> HaddockFlags -> HaddockFlags)
  HaddockFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag Bool)
-> (Flag Bool -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag Bool)
     (Flag Bool -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"tests"]
      String
"Run haddock for Test Suite targets"
      HaddockFlags -> Flag Bool
haddockTestSuites
      (\Flag Bool
v HaddockFlags
flags -> HaddockFlags
flags{haddockTestSuites = v})
      MkOptDescr
  (HaddockFlags -> Flag Bool)
  (Flag Bool -> HaddockFlags -> HaddockFlags)
  HaddockFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag Bool)
-> (Flag Bool -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag Bool)
     (Flag Bool -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"benchmarks"]
      String
"Run haddock for Benchmark targets"
      HaddockFlags -> Flag Bool
haddockBenchmarks
      (\Flag Bool
v HaddockFlags
flags -> HaddockFlags
flags{haddockBenchmarks = v})
      MkOptDescr
  (HaddockFlags -> Flag Bool)
  (Flag Bool -> HaddockFlags -> HaddockFlags)
  HaddockFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag Bool)
-> (Flag Bool -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag Bool)
     (Flag Bool -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"foreign-libraries"]
      String
"Run haddock for Foreign Library targets"
      HaddockFlags -> Flag Bool
haddockForeignLibs
      (\Flag Bool
v HaddockFlags
flags -> HaddockFlags
flags{haddockForeignLibs = v})
      MkOptDescr
  (HaddockFlags -> Flag Bool)
  (Flag Bool -> HaddockFlags -> HaddockFlags)
  HaddockFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag Bool)
-> (Flag Bool -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag Bool)
     (Flag Bool -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"all"]
      String
"Run haddock for all targets"
      ( \HaddockFlags
f ->
          [Flag Bool] -> Flag Bool
allFlags
            [ HaddockFlags -> Flag Bool
haddockExecutables HaddockFlags
f
            , HaddockFlags -> Flag Bool
haddockTestSuites HaddockFlags
f
            , HaddockFlags -> Flag Bool
haddockBenchmarks HaddockFlags
f
            , HaddockFlags -> Flag Bool
haddockForeignLibs HaddockFlags
f
            ]
      )
      ( \Flag Bool
v HaddockFlags
flags ->
          HaddockFlags
flags
            { haddockExecutables = v
            , haddockTestSuites = v
            , haddockBenchmarks = v
            , haddockForeignLibs = v
            }
      )
      MkOptDescr
  (HaddockFlags -> Flag Bool)
  (Flag Bool -> HaddockFlags -> HaddockFlags)
  HaddockFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag Bool)
-> (Flag Bool -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag Bool)
     (Flag Bool -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"internal"]
      String
"Run haddock for internal modules and include all symbols"
      HaddockFlags -> Flag Bool
haddockInternal
      (\Flag Bool
v HaddockFlags
flags -> HaddockFlags
flags{haddockInternal = v})
      MkOptDescr
  (HaddockFlags -> Flag Bool)
  (Flag Bool -> HaddockFlags -> HaddockFlags)
  HaddockFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag String)
-> (Flag String -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"css"]
      String
"Use PATH as the haddock stylesheet"
      HaddockFlags -> Flag String
haddockCss
      (\Flag String
v HaddockFlags
flags -> HaddockFlags
flags{haddockCss = v})
      (String
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
forall b.
String
-> String
-> [String]
-> String
-> (b -> Flag String)
-> (Flag String -> b -> b)
-> OptDescr b
reqArgFlag String
"PATH")
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag Bool)
-> (Flag Bool -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag Bool)
     (Flag Bool -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"hyperlink-source", String
"hyperlink-sources", String
"hyperlinked-source"]
      String
"Hyperlink the documentation to the source code"
      HaddockFlags -> Flag Bool
haddockLinkedSource
      (\Flag Bool
v HaddockFlags
flags -> HaddockFlags
flags{haddockLinkedSource = v})
      MkOptDescr
  (HaddockFlags -> Flag Bool)
  (Flag Bool -> HaddockFlags -> HaddockFlags)
  HaddockFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag Bool)
-> (Flag Bool -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag Bool)
     (Flag Bool -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"quickjump"]
      String
"Generate an index for interactive documentation navigation"
      HaddockFlags -> Flag Bool
haddockQuickJump
      (\Flag Bool
v HaddockFlags
flags -> HaddockFlags
flags{haddockQuickJump = v})
      MkOptDescr
  (HaddockFlags -> Flag Bool)
  (Flag Bool -> HaddockFlags -> HaddockFlags)
  HaddockFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag String)
-> (Flag String -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"hscolour-css"]
      String
"Use PATH as the HsColour stylesheet"
      HaddockFlags -> Flag String
haddockHscolourCss
      (\Flag String
v HaddockFlags
flags -> HaddockFlags
flags{haddockHscolourCss = v})
      (String
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
forall b.
String
-> String
-> [String]
-> String
-> (b -> Flag String)
-> (Flag String -> b -> b)
-> OptDescr b
reqArgFlag String
"PATH")
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag PathTemplate)
-> (Flag PathTemplate -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag PathTemplate)
     (Flag PathTemplate -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"contents-location"]
      String
"Bake URL in as the location for the contents page"
      HaddockFlags -> Flag PathTemplate
haddockContents
      (\Flag PathTemplate
v HaddockFlags
flags -> HaddockFlags
flags{haddockContents = v})
      ( String
-> (String -> Flag PathTemplate)
-> (Flag PathTemplate -> [String])
-> MkOptDescr
     (HaddockFlags -> Flag PathTemplate)
     (Flag PathTemplate -> HaddockFlags -> HaddockFlags)
     HaddockFlags
forall b a.
Monoid b =>
String
-> (String -> b)
-> (b -> [String])
-> MkOptDescr (a -> b) (b -> a -> a) a
reqArg'
          String
"URL"
          (PathTemplate -> Flag PathTemplate
forall a. a -> Flag a
toFlag (PathTemplate -> Flag PathTemplate)
-> (String -> PathTemplate) -> String -> Flag PathTemplate
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PathTemplate
toPathTemplate)
          (Flag String -> [String]
forall a. Flag a -> [a]
flagToList (Flag String -> [String])
-> (Flag PathTemplate -> Flag String)
-> Flag PathTemplate
-> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PathTemplate -> String) -> Flag PathTemplate -> Flag String
forall a b. (a -> b) -> Flag a -> Flag b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap PathTemplate -> String
fromPathTemplate)
      )
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag PathTemplate)
-> (Flag PathTemplate -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag PathTemplate)
     (Flag PathTemplate -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"index-location"]
      String
"Use a separately-generated HTML index"
      HaddockFlags -> Flag PathTemplate
haddockIndex
      (\Flag PathTemplate
v HaddockFlags
flags -> HaddockFlags
flags{haddockIndex = v})
      ( String
-> (String -> Flag PathTemplate)
-> (Flag PathTemplate -> [String])
-> MkOptDescr
     (HaddockFlags -> Flag PathTemplate)
     (Flag PathTemplate -> HaddockFlags -> HaddockFlags)
     HaddockFlags
forall b a.
Monoid b =>
String
-> (String -> b)
-> (b -> [String])
-> MkOptDescr (a -> b) (b -> a -> a) a
reqArg'
          String
"URL"
          (PathTemplate -> Flag PathTemplate
forall a. a -> Flag a
toFlag (PathTemplate -> Flag PathTemplate)
-> (String -> PathTemplate) -> String -> Flag PathTemplate
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PathTemplate
toPathTemplate)
          (Flag String -> [String]
forall a. Flag a -> [a]
flagToList (Flag String -> [String])
-> (Flag PathTemplate -> Flag String)
-> Flag PathTemplate
-> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PathTemplate -> String) -> Flag PathTemplate -> Flag String
forall a b. (a -> b) -> Flag a -> Flag b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap PathTemplate -> String
fromPathTemplate)
      )
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag String)
-> (Flag String -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"base-url"]
      String
"Base URL for static files."
      HaddockFlags -> Flag String
haddockBaseUrl
      (\Flag String
v HaddockFlags
flags -> HaddockFlags
flags{haddockBaseUrl = v})
      (String
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
forall b.
String
-> String
-> [String]
-> String
-> (b -> Flag String)
-> (Flag String -> b -> b)
-> OptDescr b
reqArgFlag String
"URL")
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag String)
-> (Flag String -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"lib"]
      String
"location of Haddocks static / auxiliary files"
      HaddockFlags -> Flag String
haddockLib
      (\Flag String
v HaddockFlags
flags -> HaddockFlags
flags{haddockLib = v})
      (String
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
forall b.
String
-> String
-> [String]
-> String
-> (b -> Flag String)
-> (Flag String -> b -> b)
-> OptDescr b
reqArgFlag String
"DIR")
  , String
-> [String]
-> String
-> (HaddockFlags -> Flag String)
-> (Flag String -> HaddockFlags -> HaddockFlags)
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
-> OptionField HaddockFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"output-dir"]
      String
"Generate haddock documentation into this directory. This flag is provided as a technology preview and is subject to change in the next releases."
      HaddockFlags -> Flag String
haddockOutputDir
      (\Flag String
v HaddockFlags
flags -> HaddockFlags
flags{haddockOutputDir = v})
      (String
-> MkOptDescr
     (HaddockFlags -> Flag String)
     (Flag String -> HaddockFlags -> HaddockFlags)
     HaddockFlags
forall b.
String
-> String
-> [String]
-> String
-> (b -> Flag String)
-> (Flag String -> b -> b)
-> OptDescr b
reqArgFlag String
"DIR")
  ]

emptyHaddockFlags :: HaddockFlags
emptyHaddockFlags :: HaddockFlags
emptyHaddockFlags = HaddockFlags
forall a. Monoid a => a
mempty

instance Monoid HaddockFlags where
  mempty :: HaddockFlags
mempty = HaddockFlags
forall a. (Generic a, GMonoid (Rep a)) => a
gmempty
  mappend :: HaddockFlags -> HaddockFlags -> HaddockFlags
mappend = HaddockFlags -> HaddockFlags -> HaddockFlags
forall a. Semigroup a => a -> a -> a
(<>)

instance Semigroup HaddockFlags where
  <> :: HaddockFlags -> HaddockFlags -> HaddockFlags
(<>) = HaddockFlags -> HaddockFlags -> HaddockFlags
forall a. (Generic a, GSemigroup (Rep a)) => a -> a -> a
gmappend

-- ------------------------------------------------------------

-- * HaddocksFlags flags

-- ------------------------------------------------------------

-- | Governs whether modules from a given interface should be visible or
-- hidden in the Haddock generated content page.  We don't expose this
-- functionality to the user, but simply use 'Visible' for only local packages.
-- Visibility of modules is available since @haddock-2.26.1@.
data Visibility = Visible | Hidden
  deriving (Visibility -> Visibility -> Bool
(Visibility -> Visibility -> Bool)
-> (Visibility -> Visibility -> Bool) -> Eq Visibility
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Visibility -> Visibility -> Bool
== :: Visibility -> Visibility -> Bool
$c/= :: Visibility -> Visibility -> Bool
/= :: Visibility -> Visibility -> Bool
Eq, Int -> Visibility -> ShowS
[Visibility] -> ShowS
Visibility -> String
(Int -> Visibility -> ShowS)
-> (Visibility -> String)
-> ([Visibility] -> ShowS)
-> Show Visibility
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Visibility -> ShowS
showsPrec :: Int -> Visibility -> ShowS
$cshow :: Visibility -> String
show :: Visibility -> String
$cshowList :: [Visibility] -> ShowS
showList :: [Visibility] -> ShowS
Show)

data HaddockProjectFlags = HaddockProjectFlags
  { HaddockProjectFlags -> Flag Bool
haddockProjectHackage :: Flag Bool
  -- ^ a shortcut option which builds documentation linked to hackage.  It implies:
  -- * `--html-location='https://hackage.haskell.org/package/$prg-$version/docs'
  -- * `--quickjump`
  -- * `--gen-index`
  -- * `--gen-contents`
  -- * `--hyperlinked-source`
  , -- options passed to @haddock@ via 'createHaddockIndex'
    HaddockProjectFlags -> Flag String
haddockProjectDir :: Flag String
  -- ^ output directory of combined haddocks, the default is './haddocks'
  , HaddockProjectFlags -> Flag String
haddockProjectPrologue :: Flag String
  , HaddockProjectFlags
-> Flag [(String, Maybe String, Maybe String, Visibility)]
haddockProjectInterfaces :: Flag [(FilePath, Maybe FilePath, Maybe FilePath, Visibility)]
  -- ^ 'haddocksInterfaces' is inferred by the 'haddocksAction'; currently not
  -- exposed to the user.
  , -- options passed to @haddock@ via 'HaddockFlags' when building
    -- documentation

    HaddockProjectFlags -> [(String, String)]
haddockProjectProgramPaths :: [(String, FilePath)]
  , HaddockProjectFlags -> [(String, [String])]
haddockProjectProgramArgs :: [(String, [String])]
  , HaddockProjectFlags -> Flag Bool
haddockProjectHoogle :: Flag Bool
  , -- haddockHtml is not supported
    HaddockProjectFlags -> Flag String
haddockProjectHtmlLocation :: Flag String
  , -- haddockForHackage is not supported
    HaddockProjectFlags -> Flag Bool
haddockProjectExecutables :: Flag Bool
  , HaddockProjectFlags -> Flag Bool
haddockProjectTestSuites :: Flag Bool
  , HaddockProjectFlags -> Flag Bool
haddockProjectBenchmarks :: Flag Bool
  , HaddockProjectFlags -> Flag Bool
haddockProjectForeignLibs :: Flag Bool
  , HaddockProjectFlags -> Flag Bool
haddockProjectInternal :: Flag Bool
  , HaddockProjectFlags -> Flag String
haddockProjectCss :: Flag FilePath
  , HaddockProjectFlags -> Flag String
haddockProjectHscolourCss :: Flag FilePath
  , -- haddockContent is not supported, a fixed value is provided
    -- haddockIndex is not supported, a fixed value is provided
    -- haddockDistPerf is not supported, note: it changes location of the haddocks
    HaddockProjectFlags -> Flag Bool
haddockProjectKeepTempFiles :: Flag Bool
  , HaddockProjectFlags -> Flag Verbosity
haddockProjectVerbosity :: Flag Verbosity
  , -- haddockBaseUrl is not supported, a fixed value is provided
    HaddockProjectFlags -> Flag String
haddockProjectLib :: Flag String
  , HaddockProjectFlags -> Flag String
haddockProjectOutputDir :: Flag FilePath
  }
  deriving (Int -> HaddockProjectFlags -> ShowS
[HaddockProjectFlags] -> ShowS
HaddockProjectFlags -> String
(Int -> HaddockProjectFlags -> ShowS)
-> (HaddockProjectFlags -> String)
-> ([HaddockProjectFlags] -> ShowS)
-> Show HaddockProjectFlags
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> HaddockProjectFlags -> ShowS
showsPrec :: Int -> HaddockProjectFlags -> ShowS
$cshow :: HaddockProjectFlags -> String
show :: HaddockProjectFlags -> String
$cshowList :: [HaddockProjectFlags] -> ShowS
showList :: [HaddockProjectFlags] -> ShowS
Show, (forall x. HaddockProjectFlags -> Rep HaddockProjectFlags x)
-> (forall x. Rep HaddockProjectFlags x -> HaddockProjectFlags)
-> Generic HaddockProjectFlags
forall x. Rep HaddockProjectFlags x -> HaddockProjectFlags
forall x. HaddockProjectFlags -> Rep HaddockProjectFlags x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. HaddockProjectFlags -> Rep HaddockProjectFlags x
from :: forall x. HaddockProjectFlags -> Rep HaddockProjectFlags x
$cto :: forall x. Rep HaddockProjectFlags x -> HaddockProjectFlags
to :: forall x. Rep HaddockProjectFlags x -> HaddockProjectFlags
Generic, Typeable)

defaultHaddockProjectFlags :: HaddockProjectFlags
defaultHaddockProjectFlags :: HaddockProjectFlags
defaultHaddockProjectFlags =
  HaddockProjectFlags
    { haddockProjectHackage :: Flag Bool
haddockProjectHackage = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockProjectDir :: Flag String
haddockProjectDir = String -> Flag String
forall a. a -> Flag a
Flag String
"./haddocks"
    , haddockProjectPrologue :: Flag String
haddockProjectPrologue = Flag String
forall a. Flag a
NoFlag
    , haddockProjectTestSuites :: Flag Bool
haddockProjectTestSuites = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockProjectProgramPaths :: [(String, String)]
haddockProjectProgramPaths = [(String, String)]
forall a. Monoid a => a
mempty
    , haddockProjectProgramArgs :: [(String, [String])]
haddockProjectProgramArgs = [(String, [String])]
forall a. Monoid a => a
mempty
    , haddockProjectHoogle :: Flag Bool
haddockProjectHoogle = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockProjectHtmlLocation :: Flag String
haddockProjectHtmlLocation = Flag String
forall a. Flag a
NoFlag
    , haddockProjectExecutables :: Flag Bool
haddockProjectExecutables = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockProjectBenchmarks :: Flag Bool
haddockProjectBenchmarks = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockProjectForeignLibs :: Flag Bool
haddockProjectForeignLibs = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockProjectInternal :: Flag Bool
haddockProjectInternal = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockProjectCss :: Flag String
haddockProjectCss = Flag String
forall a. Flag a
NoFlag
    , haddockProjectHscolourCss :: Flag String
haddockProjectHscolourCss = Flag String
forall a. Flag a
NoFlag
    , haddockProjectKeepTempFiles :: Flag Bool
haddockProjectKeepTempFiles = Bool -> Flag Bool
forall a. a -> Flag a
Flag Bool
False
    , haddockProjectVerbosity :: Flag Verbosity
haddockProjectVerbosity = Verbosity -> Flag Verbosity
forall a. a -> Flag a
Flag Verbosity
normal
    , haddockProjectLib :: Flag String
haddockProjectLib = Flag String
forall a. Flag a
NoFlag
    , haddockProjectOutputDir :: Flag String
haddockProjectOutputDir = Flag String
forall a. Flag a
NoFlag
    , haddockProjectInterfaces :: Flag [(String, Maybe String, Maybe String, Visibility)]
haddockProjectInterfaces = Flag [(String, Maybe String, Maybe String, Visibility)]
forall a. Flag a
NoFlag
    }

haddockProjectCommand :: CommandUI HaddockProjectFlags
haddockProjectCommand :: CommandUI HaddockProjectFlags
haddockProjectCommand =
  CommandUI
    { commandName :: String
commandName = String
"v2-haddock-project"
    , commandSynopsis :: String
commandSynopsis = String
"Generate Haddocks HTML documentation for the cabal project."
    , commandDescription :: Maybe ShowS
commandDescription = ShowS -> Maybe ShowS
forall a. a -> Maybe a
Just (ShowS -> Maybe ShowS) -> ShowS -> Maybe ShowS
forall a b. (a -> b) -> a -> b
$ \String
_ ->
        String
"Requires the program haddock, version 2.26.\n"
    , commandNotes :: Maybe ShowS
commandNotes = Maybe ShowS
forall a. Maybe a
Nothing
    , commandUsage :: ShowS
commandUsage =
        String -> [String] -> ShowS
usageAlternatives String
"haddock-project" ([String] -> ShowS) -> [String] -> ShowS
forall a b. (a -> b) -> a -> b
$
          [ String
"[FLAGS]"
          , String
"COMPONENTS [FLAGS]"
          ]
    , commandDefaultFlags :: HaddockProjectFlags
commandDefaultFlags = HaddockProjectFlags
defaultHaddockProjectFlags
    , commandOptions :: ShowOrParseArgs -> [OptionField HaddockProjectFlags]
commandOptions = \ShowOrParseArgs
showOrParseArgs ->
        ShowOrParseArgs -> [OptionField HaddockProjectFlags]
haddockProjectOptions ShowOrParseArgs
showOrParseArgs
          [OptionField HaddockProjectFlags]
-> [OptionField HaddockProjectFlags]
-> [OptionField HaddockProjectFlags]
forall a. [a] -> [a] -> [a]
++ ProgramDb
-> ShowOrParseArgs
-> (HaddockProjectFlags -> [(String, String)])
-> ([(String, String)]
    -> HaddockProjectFlags -> HaddockProjectFlags)
-> [OptionField HaddockProjectFlags]
forall flags.
ProgramDb
-> ShowOrParseArgs
-> (flags -> [(String, String)])
-> ([(String, String)] -> flags -> flags)
-> [OptionField flags]
programDbPaths
            ProgramDb
progDb
            ShowOrParseArgs
ParseArgs
            HaddockProjectFlags -> [(String, String)]
haddockProjectProgramPaths
            (\[(String, String)]
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectProgramPaths = v})
          [OptionField HaddockProjectFlags]
-> [OptionField HaddockProjectFlags]
-> [OptionField HaddockProjectFlags]
forall a. [a] -> [a] -> [a]
++ ProgramDb
-> ShowOrParseArgs
-> (HaddockProjectFlags -> [(String, [String])])
-> ([(String, [String])]
    -> HaddockProjectFlags -> HaddockProjectFlags)
-> [OptionField HaddockProjectFlags]
forall flags.
ProgramDb
-> ShowOrParseArgs
-> (flags -> [(String, [String])])
-> ([(String, [String])] -> flags -> flags)
-> [OptionField flags]
programDbOption
            ProgramDb
progDb
            ShowOrParseArgs
showOrParseArgs
            HaddockProjectFlags -> [(String, [String])]
haddockProjectProgramArgs
            (\[(String, [String])]
v HaddockProjectFlags
fs -> HaddockProjectFlags
fs{haddockProjectProgramArgs = v})
          [OptionField HaddockProjectFlags]
-> [OptionField HaddockProjectFlags]
-> [OptionField HaddockProjectFlags]
forall a. [a] -> [a] -> [a]
++ ProgramDb
-> ShowOrParseArgs
-> (HaddockProjectFlags -> [(String, [String])])
-> ([(String, [String])]
    -> HaddockProjectFlags -> HaddockProjectFlags)
-> [OptionField HaddockProjectFlags]
forall flags.
ProgramDb
-> ShowOrParseArgs
-> (flags -> [(String, [String])])
-> ([(String, [String])] -> flags -> flags)
-> [OptionField flags]
programDbOptions
            ProgramDb
progDb
            ShowOrParseArgs
ParseArgs
            HaddockProjectFlags -> [(String, [String])]
haddockProjectProgramArgs
            (\[(String, [String])]
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectProgramArgs = v})
    }
  where
    progDb :: ProgramDb
progDb =
      Program -> ProgramDb -> ProgramDb
addKnownProgram Program
haddockProgram (ProgramDb -> ProgramDb) -> ProgramDb -> ProgramDb
forall a b. (a -> b) -> a -> b
$
        Program -> ProgramDb -> ProgramDb
addKnownProgram Program
ghcProgram (ProgramDb -> ProgramDb) -> ProgramDb -> ProgramDb
forall a b. (a -> b) -> a -> b
$
          ProgramDb
emptyProgramDb

haddockProjectOptions :: ShowOrParseArgs -> [OptionField HaddockProjectFlags]
haddockProjectOptions :: ShowOrParseArgs -> [OptionField HaddockProjectFlags]
haddockProjectOptions ShowOrParseArgs
_showOrParseArgs =
  [ String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag Bool)
-> (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag Bool)
     (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"hackage"]
      ( [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat
          [ String
"A short-cut option to build documentation linked to hackage."
          ]
      )
      HaddockProjectFlags -> Flag Bool
haddockProjectHackage
      (\Flag Bool
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectHackage = v})
      MkOptDescr
  (HaddockProjectFlags -> Flag Bool)
  (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
  HaddockProjectFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag String)
-> (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"output"]
      String
"Output directory"
      HaddockProjectFlags -> Flag String
haddockProjectDir
      (\Flag String
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectDir = v})
      (String
-> (Maybe String -> Flag String)
-> (Flag String -> [Maybe String])
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
forall b a.
Monoid b =>
String
-> (Maybe String -> b)
-> (b -> [Maybe String])
-> MkOptDescr (a -> b) (b -> a -> a) a
optArg' String
"DIRECTORY" Maybe String -> Flag String
forall a. Maybe a -> Flag a
maybeToFlag ((String -> Maybe String) -> [String] -> [Maybe String]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap String -> Maybe String
forall a. a -> Maybe a
Just ([String] -> [Maybe String])
-> (Flag String -> [String]) -> Flag String -> [Maybe String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Flag String -> [String]
forall a. Flag a -> [a]
flagToList))
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag String)
-> (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"prologue"]
      String
"File path to a prologue file in haddock format"
      HaddockProjectFlags -> Flag String
haddockProjectPrologue
      (\Flag String
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectPrologue = v})
      (String
-> (Maybe String -> Flag String)
-> (Flag String -> [Maybe String])
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
forall b a.
Monoid b =>
String
-> (Maybe String -> b)
-> (b -> [Maybe String])
-> MkOptDescr (a -> b) (b -> a -> a) a
optArg' String
"PATH" Maybe String -> Flag String
forall a. Maybe a -> Flag a
maybeToFlag ((String -> Maybe String) -> [String] -> [Maybe String]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap String -> Maybe String
forall a. a -> Maybe a
Just ([String] -> [Maybe String])
-> (Flag String -> [String]) -> Flag String -> [Maybe String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Flag String -> [String]
forall a. Flag a -> [a]
flagToList))
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag Bool)
-> (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag Bool)
     (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"hoogle"]
      String
"Generate a hoogle database"
      HaddockProjectFlags -> Flag Bool
haddockProjectHoogle
      (\Flag Bool
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectHoogle = v})
      MkOptDescr
  (HaddockProjectFlags -> Flag Bool)
  (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
  HaddockProjectFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag String)
-> (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"html-location"]
      String
"Location of HTML documentation for pre-requisite packages"
      HaddockProjectFlags -> Flag String
haddockProjectHtmlLocation
      (\Flag String
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectHtmlLocation = v})
      (String
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
forall b.
String
-> String
-> [String]
-> String
-> (b -> Flag String)
-> (Flag String -> b -> b)
-> OptDescr b
reqArgFlag String
"URL")
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag Bool)
-> (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag Bool)
     (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"executables"]
      String
"Run haddock for Executables targets"
      HaddockProjectFlags -> Flag Bool
haddockProjectExecutables
      (\Flag Bool
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectExecutables = v})
      MkOptDescr
  (HaddockProjectFlags -> Flag Bool)
  (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
  HaddockProjectFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag Bool)
-> (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag Bool)
     (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"tests"]
      String
"Run haddock for Test Suite targets"
      HaddockProjectFlags -> Flag Bool
haddockProjectTestSuites
      (\Flag Bool
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectTestSuites = v})
      MkOptDescr
  (HaddockProjectFlags -> Flag Bool)
  (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
  HaddockProjectFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag Bool)
-> (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag Bool)
     (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"benchmarks"]
      String
"Run haddock for Benchmark targets"
      HaddockProjectFlags -> Flag Bool
haddockProjectBenchmarks
      (\Flag Bool
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectBenchmarks = v})
      MkOptDescr
  (HaddockProjectFlags -> Flag Bool)
  (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
  HaddockProjectFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag Bool)
-> (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag Bool)
     (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"foreign-libraries"]
      String
"Run haddock for Foreign Library targets"
      HaddockProjectFlags -> Flag Bool
haddockProjectForeignLibs
      (\Flag Bool
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectForeignLibs = v})
      MkOptDescr
  (HaddockProjectFlags -> Flag Bool)
  (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
  HaddockProjectFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag Bool)
-> (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag Bool)
     (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"internal"]
      String
"Run haddock for internal modules and include all symbols"
      HaddockProjectFlags -> Flag Bool
haddockProjectInternal
      (\Flag Bool
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectInternal = v})
      MkOptDescr
  (HaddockProjectFlags -> Flag Bool)
  (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
  HaddockProjectFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag String)
-> (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"css"]
      String
"Use PATH as the haddock stylesheet"
      HaddockProjectFlags -> Flag String
haddockProjectCss
      (\Flag String
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectCss = v})
      (String
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
forall b.
String
-> String
-> [String]
-> String
-> (b -> Flag String)
-> (Flag String -> b -> b)
-> OptDescr b
reqArgFlag String
"PATH")
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag String)
-> (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"hscolour-css"]
      String
"Use PATH as the HsColour stylesheet"
      HaddockProjectFlags -> Flag String
haddockProjectHscolourCss
      (\Flag String
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectHscolourCss = v})
      (String
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
forall b.
String
-> String
-> [String]
-> String
-> (b -> Flag String)
-> (Flag String -> b -> b)
-> OptDescr b
reqArgFlag String
"PATH")
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag Bool)
-> (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag Bool)
     (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"keep-temp-files"]
      String
"Keep temporary files"
      HaddockProjectFlags -> Flag Bool
haddockProjectKeepTempFiles
      (\Flag Bool
b HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectKeepTempFiles = b})
      MkOptDescr
  (HaddockProjectFlags -> Flag Bool)
  (Flag Bool -> HaddockProjectFlags -> HaddockProjectFlags)
  HaddockProjectFlags
forall a. MkOptDescr (a -> Flag Bool) (Flag Bool -> a -> a) a
trueArg
  , (HaddockProjectFlags -> Flag Verbosity)
-> (Flag Verbosity -> HaddockProjectFlags -> HaddockProjectFlags)
-> OptionField HaddockProjectFlags
forall flags.
(flags -> Flag Verbosity)
-> (Flag Verbosity -> flags -> flags) -> OptionField flags
optionVerbosity
      HaddockProjectFlags -> Flag Verbosity
haddockProjectVerbosity
      (\Flag Verbosity
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectVerbosity = v})
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag String)
-> (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"lib"]
      String
"location of Haddocks static / auxiliary files"
      HaddockProjectFlags -> Flag String
haddockProjectLib
      (\Flag String
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectLib = v})
      (String
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
forall b.
String
-> String
-> [String]
-> String
-> (b -> Flag String)
-> (Flag String -> b -> b)
-> OptDescr b
reqArgFlag String
"DIR")
  , String
-> [String]
-> String
-> (HaddockProjectFlags -> Flag String)
-> (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
-> OptionField HaddockProjectFlags
forall get set a.
String
-> [String]
-> String
-> get
-> set
-> MkOptDescr get set a
-> OptionField a
option
      String
""
      [String
"output-dir"]
      String
"Generate haddock documentation into this directory. This flag is provided as a technology preview and is subject to change in the next releases."
      HaddockProjectFlags -> Flag String
haddockProjectOutputDir
      (\Flag String
v HaddockProjectFlags
flags -> HaddockProjectFlags
flags{haddockProjectOutputDir = v})
      (String
-> MkOptDescr
     (HaddockProjectFlags -> Flag String)
     (Flag String -> HaddockProjectFlags -> HaddockProjectFlags)
     HaddockProjectFlags
forall b.
String
-> String
-> [String]
-> String
-> (b -> Flag String)
-> (Flag String -> b -> b)
-> OptDescr b
reqArgFlag String
"DIR")
  ]

emptyHaddockProjectFlags :: HaddockProjectFlags
emptyHaddockProjectFlags :: HaddockProjectFlags
emptyHaddockProjectFlags = HaddockProjectFlags
forall a. Monoid a => a
mempty

instance Monoid HaddockProjectFlags where
  mempty :: HaddockProjectFlags
mempty = HaddockProjectFlags
forall a. (Generic a, GMonoid (Rep a)) => a
gmempty
  mappend :: HaddockProjectFlags -> HaddockProjectFlags -> HaddockProjectFlags
mappend = HaddockProjectFlags -> HaddockProjectFlags -> HaddockProjectFlags
forall a. Semigroup a => a -> a -> a
(<>)

instance Semigroup HaddockProjectFlags where
  <> :: HaddockProjectFlags -> HaddockProjectFlags -> HaddockProjectFlags
(<>) = HaddockProjectFlags -> HaddockProjectFlags -> HaddockProjectFlags
forall a. (Generic a, GSemigroup (Rep a)) => a -> a -> a
gmappend