Basic Turtle.Options module

This commit is contained in:
Index Int 2015-05-14 03:51:42 +03:00
parent 822ab8324c
commit 770948ce8f
3 changed files with 59 additions and 1 deletions

View file

@ -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
View 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)

View file

@ -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