Basic Turtle.Options module
This commit is contained in:
parent
822ab8324c
commit
770948ce8f
3 changed files with 59 additions and 1 deletions
|
@ -67,6 +67,7 @@ module Turtle (
|
|||
-- * Modules
|
||||
module Turtle.Format
|
||||
, module Turtle.Pattern
|
||||
, module Turtle.Options
|
||||
, module Turtle.Shell
|
||||
, module Turtle.Prelude
|
||||
, module Control.Applicative
|
||||
|
@ -88,6 +89,7 @@ module Turtle (
|
|||
|
||||
import Turtle.Format
|
||||
import Turtle.Pattern
|
||||
import Turtle.Options
|
||||
import Turtle.Shell
|
||||
import Turtle.Prelude
|
||||
import Control.Applicative
|
||||
|
|
54
src/Turtle/Options.hs
Normal file
54
src/Turtle/Options.hs
Normal file
|
@ -0,0 +1,54 @@
|
|||
{-# LANGUAGE TypeFamilies #-}
|
||||
|
||||
-- TODO: documentation
|
||||
|
||||
module Turtle.Options
|
||||
( Opts.Parser
|
||||
, Opts.InfoMod
|
||||
, options
|
||||
, opt
|
||||
, flag
|
||||
, metavar
|
||||
, helpmsg
|
||||
, shortname
|
||||
, longname
|
||||
) where
|
||||
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as Text
|
||||
import Control.Applicative
|
||||
import Control.Monad.IO.Class
|
||||
import qualified Options.Applicative as Opts
|
||||
import qualified Options.Applicative.Types as Opts
|
||||
import qualified Options.Applicative.Builder.Internal as Opts
|
||||
|
||||
options :: MonadIO io => Opts.Parser a -> Opts.InfoMod a -> io a
|
||||
options parser info = liftIO
|
||||
(Opts.execParser (Opts.info (Opts.helper <*> parser) info))
|
||||
|
||||
class Option opt where
|
||||
type OptionFields opt :: * -> *
|
||||
opt :: Opts.Mod (OptionFields opt) opt -> Opts.Parser opt
|
||||
|
||||
instance Option Bool where
|
||||
type OptionFields Bool = Opts.FlagFields
|
||||
opt = Opts.switch
|
||||
|
||||
instance Option Text where
|
||||
type OptionFields Text = Opts.ArgumentFields
|
||||
opt = Opts.argument (fmap Text.pack Opts.readerAsk)
|
||||
|
||||
flag :: a -> a -> Opts.Mod Opts.FlagFields a -> Opts.Parser a
|
||||
flag = Opts.flag
|
||||
|
||||
metavar :: Opts.HasMetavar f => Text -> Opts.Mod f a
|
||||
metavar str = Opts.metavar (Text.unpack str)
|
||||
|
||||
helpmsg :: Text -> Opts.Mod f a
|
||||
helpmsg str = Opts.help (Text.unpack str)
|
||||
|
||||
shortname :: Opts.HasName f => Char -> Opts.Mod f a
|
||||
shortname = Opts.short
|
||||
|
||||
longname :: Opts.HasName f => Text -> Opts.Mod f a
|
||||
longname str = Opts.long (Text.unpack str)
|
|
@ -58,7 +58,8 @@ Library
|
|||
temporary < 1.3,
|
||||
text < 1.3,
|
||||
time < 1.6,
|
||||
transformers >= 0.2.0.0 && < 0.5
|
||||
transformers >= 0.2.0.0 && < 0.5,
|
||||
optparse-applicative >= 0.11 && < 0.12
|
||||
if os(windows)
|
||||
Build-Depends: Win32 >= 2.2.0.1 && < 2.4
|
||||
else
|
||||
|
@ -68,6 +69,7 @@ Library
|
|||
Turtle.Format,
|
||||
Turtle.Pattern,
|
||||
Turtle.Shell,
|
||||
Turtle.Options,
|
||||
Turtle.Prelude,
|
||||
Turtle.Tutorial
|
||||
GHC-Options: -O2 -Wall
|
||||
|
|
Loading…
Reference in a new issue