darcs-2.12.0: src/Darcs/UI/Options.hs
module Darcs.UI.Options
( module Darcs.UI.Options.Core
, module Darcs.UI.Options.Markdown
, DarcsOption
, PrimDarcsOption
, DarcsOptDescr
, optDescr
) where
import Prelude ()
import Darcs.Prelude
import Data.Functor.Compose
import System.Console.GetOpt
import Darcs.UI.Options.All
import Darcs.UI.Options.Core
import Darcs.UI.Options.Markdown
import Darcs.UI.Options.Util ( DarcsOptDescr, PrimDarcsOption )
import Darcs.Util.Path ( AbsolutePath )
-- * Type instantiations
-- | The @instance Functor OptDescr@ was introduced only in base-4.7.0.0, which is
-- why we implement it here manually.
optDescr :: AbsolutePath -> DarcsOptDescr f -> OptDescr f
optDescr path = omap ($path) . getCompose where
omap f (Option s l a h) = Option s l (amap f a) h
amap f (NoArg a) = NoArg (f a)
amap f (ReqArg mkF n) = ReqArg (fmap f mkF) n
amap f (OptArg mkF n) = OptArg (fmap f mkF) n