{-# LANGUAGE CPP #-}
{-# LANGUAGE Arrows #-}
module Idris.CmdOptions
( opt, getClient, getPkg, getPkgCheck, getPkgClean, getPkgMkDoc,
getPkgREPL, getPkgTest, getPort, getIBCSubDir,
pureArgParser, execArgParserPure, runArgParser
) where
import Idris.Info (getIdrisVersion)
import Idris.Options
import IRTS.CodegenCommon
import qualified Control.Monad.Fail as Fail
import Control.Monad.Trans (lift)
import Control.Monad.Trans.Except (throwE)
import Control.Monad.Trans.Reader (ask)
import Data.Char
import Data.Maybe
import Options.Applicative
import Options.Applicative.Arrows
import Options.Applicative.Types (ReadM(..))
import Text.ParserCombinators.ReadP hiding (many, option)
import Safe (lastMay)
import qualified Text.PrettyPrint.ANSI.Leijen as PP
runArgParser :: IO [Opt]
runArgParser :: IO [Opt]
runArgParser = do [Opt]
opts <- ParserInfo [Opt] -> IO [Opt]
forall a. ParserInfo a -> IO a
execParser (ParserInfo [Opt] -> IO [Opt]) -> ParserInfo [Opt] -> IO [Opt]
forall a b. (a -> b) -> a -> b
$ Parser [Opt] -> InfoMod [Opt] -> ParserInfo [Opt]
forall a. Parser a -> InfoMod a -> ParserInfo a
info Parser [Opt]
parser
(InfoMod [Opt]
forall a. InfoMod a
fullDesc
InfoMod [Opt] -> InfoMod [Opt] -> InfoMod [Opt]
forall a. Semigroup a => a -> a -> a
<> Maybe Doc -> InfoMod [Opt]
forall a. Maybe Doc -> InfoMod a
headerDoc (Doc -> Maybe Doc
forall a. a -> Maybe a
Just Doc
idrisHeader)
InfoMod [Opt] -> InfoMod [Opt] -> InfoMod [Opt]
forall a. Semigroup a => a -> a -> a
<> Maybe Doc -> InfoMod [Opt]
forall a. Maybe Doc -> InfoMod a
progDescDoc (Doc -> Maybe Doc
forall a. a -> Maybe a
Just Doc
idrisProgDesc)
InfoMod [Opt] -> InfoMod [Opt] -> InfoMod [Opt]
forall a. Semigroup a => a -> a -> a
<> Maybe Doc -> InfoMod [Opt]
forall a. Maybe Doc -> InfoMod a
footerDoc (Doc -> Maybe Doc
forall a. a -> Maybe a
Just Doc
idrisFooter)
)
[Opt] -> IO [Opt]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ([Opt] -> IO [Opt]) -> [Opt] -> IO [Opt]
forall a b. (a -> b) -> a -> b
$ [Opt] -> [Opt]
preProcOpts [Opt]
opts
where
idrisHeader :: Doc
idrisHeader = [Doc] -> Doc
PP.hsep [String -> Doc
PP.text String
"Idris version", String -> Doc
PP.text String
getIdrisVersion, String -> Doc
PP.text String
", (C) The Idris Community 2016"]
idrisProgDesc :: Doc
idrisProgDesc = [Doc] -> Doc
PP.vsep [Doc
PP.empty,
String -> Doc
PP.text String
"Idris is a general purpose pure functional programming language with dependent",
String -> Doc
PP.text String
"types. Dependent types allow types to be predicated on values, meaning that",
String -> Doc
PP.text String
"some aspects of a program's behaviour can be specified precisely in the type.",
String -> Doc
PP.text String
"It is compiled, with eager evaluation. Its features are influenced by Haskell",
String -> Doc
PP.text String
"and ML.",
Doc
PP.empty,
[Doc] -> Doc
PP.vsep ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ (String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (Int -> Doc -> Doc
PP.indent Int
4 (Doc -> Doc) -> (String -> Doc) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Doc
PP.text) [
String
"+ Full dependent types with dependent pattern matching",
String
"+ Simple case expressions, where-clauses, with-rule",
String
"+ Pattern matching let- and lambda-bindings",
String
"+ Overloading via Interfaces (Type class-like), Monad comprehensions",
String
"+ do-notation, idiom brackets",
String
"+ Syntactic conveniences for lists, tuples, dependent pairs",
String
"+ Totality checking",
String
"+ Coinductive types",
String
"+ Indentation significant syntax, Extensible syntax",
String
"+ Tactic based theorem proving (influenced by Coq)",
String
"+ Cumulative universes",
String
"+ Simple Foreign Function Interface",
String
"+ Hugs style interactive environment"
]]
idrisFooter :: Doc
idrisFooter = [Doc] -> Doc
PP.vsep [String -> Doc
PP.text String
"It is important to note that Idris is first and foremost a research tool",
String -> Doc
PP.text String
"and project. Thus the tooling provided and resulting programs created",
String -> Doc
PP.text String
"should not necessarily be seen as production ready nor for industrial use.",
Doc
PP.empty,
String -> Doc
PP.text String
"More details over Idris can be found online here:",
Doc
PP.empty,
Int -> Doc -> Doc
PP.indent Int
4 (String -> Doc
PP.text String
"https://www.idris-lang.org/")]
execArgParserPure :: [String] -> ParserResult [Opt]
execArgParserPure :: [String] -> ParserResult [Opt]
execArgParserPure [String]
args = [Opt] -> [Opt]
preProcOpts ([Opt] -> [Opt]) -> ParserResult [Opt] -> ParserResult [Opt]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParserPrefs -> ParserInfo [Opt] -> [String] -> ParserResult [Opt]
forall a. ParserPrefs -> ParserInfo a -> [String] -> ParserResult a
execParserPure (PrefsMod -> ParserPrefs
prefs PrefsMod
forall m. Monoid m => m
idm) (Parser [Opt] -> InfoMod [Opt] -> ParserInfo [Opt]
forall a. Parser a -> InfoMod a -> ParserInfo a
info Parser [Opt]
parser InfoMod [Opt]
forall m. Monoid m => m
idm) [String]
args
pureArgParser :: [String] -> [Opt]
pureArgParser :: [String] -> [Opt]
pureArgParser [String]
args = case ParserResult [Opt] -> Maybe [Opt]
forall a. ParserResult a -> Maybe a
getParseResult ([String] -> ParserResult [Opt]
execArgParserPure [String]
args) of
Just [Opt]
opts -> [Opt] -> [Opt]
preProcOpts [Opt]
opts
Maybe [Opt]
Nothing -> []
parser :: Parser [Opt]
parser :: Parser [Opt]
parser = A Parser () [Opt] -> Parser [Opt]
forall (f :: * -> *) a. Applicative f => A f () a -> f a
runA (A Parser () [Opt] -> Parser [Opt])
-> A Parser () [Opt] -> Parser [Opt]
forall a b. (a -> b) -> a -> b
$ proc () -> do
[Opt]
flags <- Parser [Opt] -> A Parser () [Opt]
forall (f :: * -> *) a. Applicative f => f a -> A f () a
asA Parser [Opt]
parseFlags -< ()
[Opt]
files <- Parser [Opt] -> A Parser () [Opt]
forall (f :: * -> *) a. Applicative f => f a -> A f () a
asA (Parser Opt -> Parser [Opt]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (Parser Opt -> Parser [Opt]) -> Parser Opt -> Parser [Opt]
forall a b. (a -> b) -> a -> b
$ ReadM Opt -> Mod ArgumentFields Opt -> Parser Opt
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
argument ((String -> Opt) -> ReadM String -> ReadM Opt
forall a b. (a -> b) -> ReadM a -> ReadM b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap String -> Opt
Filename ReadM String
forall s. IsString s => ReadM s
str) (String -> Mod ArgumentFields Opt
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"FILES")) -< ()
Parser ([Opt] -> [Opt]) -> A Parser [Opt] [Opt]
forall (f :: * -> *) a b. f (a -> b) -> A f a b
A Parser ([Opt] -> [Opt])
forall a. Parser (a -> a)
parseVersion A Parser [Opt] [Opt]
-> A Parser [Opt] [Opt] -> A Parser [Opt] [Opt]
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Parser ([Opt] -> [Opt]) -> A Parser [Opt] [Opt]
forall (f :: * -> *) a b. f (a -> b) -> A f a b
A Parser ([Opt] -> [Opt])
forall a. Parser (a -> a)
helper -< ([Opt]
flags [Opt] -> [Opt] -> [Opt]
forall a. [a] -> [a] -> [a]
++ [Opt]
files)
parseFlags :: Parser [Opt]
parseFlags :: Parser [Opt]
parseFlags = Parser Opt -> Parser [Opt]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (Parser Opt -> Parser [Opt]) -> Parser Opt -> Parser [Opt]
forall a b. (a -> b) -> a -> b
$
Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
NoBanner (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"nobanner" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Suppress the banner")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
Quiet (Char -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'q' Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"quiet" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Quiet verbosity")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
Idemode (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"ide-mode" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Run the Idris REPL with machine-readable syntax")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
IdemodeSocket (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"ide-mode-socket" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Choose a socket for IDE mode to listen on")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
Client (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"client")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Int -> Opt
OLogging (Int -> Opt) -> Parser Int -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM Int -> Mod OptionFields Int -> Parser Int
forall a. ReadM a -> Mod OptionFields a -> Parser a
option ReadM Int
forall a. Read a => ReadM a
auto (String -> Mod OptionFields Int
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"log" Mod OptionFields Int
-> Mod OptionFields Int -> Mod OptionFields Int
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Int
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"LEVEL" Mod OptionFields Int
-> Mod OptionFields Int -> Mod OptionFields Int
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Int
forall (f :: * -> *) a. String -> Mod f a
help String
"Debugging log level")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [LogCat] -> Opt
OLogCats ([LogCat] -> Opt) -> Parser [LogCat] -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM [LogCat] -> Mod OptionFields [LogCat] -> Parser [LogCat]
forall a. ReadM a -> Mod OptionFields a -> Parser a
option (ReadM String
forall s. IsString s => ReadM s
str ReadM String -> (String -> ReadM [LogCat]) -> ReadM [LogCat]
forall a b. ReadM a -> (a -> ReadM b) -> ReadM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> ReadM [LogCat]
forall (m :: * -> *). MonadFail m => String -> m [LogCat]
parseLogCats)
(String -> Mod OptionFields [LogCat]
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"logging-categories"
Mod OptionFields [LogCat]
-> Mod OptionFields [LogCat] -> Mod OptionFields [LogCat]
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields [LogCat]
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"CATS"
Mod OptionFields [LogCat]
-> Mod OptionFields [LogCat] -> Mod OptionFields [LogCat]
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields [LogCat]
forall (f :: * -> *) a. String -> Mod f a
help String
"Colon separated logging categories. Use --listlogcats to see list.")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
NoBasePkgs (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"nobasepkgs" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Do not use the given base package")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
NoPrelude (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"noprelude" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Do not use the given prelude")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
NoBuiltins (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"nobuiltins" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Do not use the builtin functions")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
NoREPL (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"check" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Typecheck only, don't start the REPL")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
Output (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (Char -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'o' Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"output" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"FILE" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Specify output file")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
Interface (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"interface" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Generate interface files from ExportLists")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
TypeInType (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"typeintype" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Turn off Universe checking")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
DefaultTotal (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"total" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Require functions to be total by default")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
DefaultPartial (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"partial")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
WarnPartial (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"warnpartial" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Warn about undeclared partial functions")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
WarnReach (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"warnreach" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Warn about reachable but inaccessible arguments")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
AuditIPkg (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"warnipkg" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Warn about possible incorrect package specifications")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
NoCoverage (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"nocoverage")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
ErrContext (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"errorcontext")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
ShowAll (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"info" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Display information about installation.")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
ShowLoggingCats (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"listlogcats" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Display logging categories")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
ShowLibs (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"link" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Display link flags")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
ShowPkgs (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"listlibs" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Display installed libraries")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
ShowLibDir (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"libdir" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Display library directory")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
ShowDocDir (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"docdir" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Display idrisdoc install directory")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
ShowIncs (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"include" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Display the includes flags")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Int -> Opt
Verbose Int
3) (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"V2" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Loudest verbosity")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Int -> Opt
Verbose Int
2) (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"V1" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Louder verbosity")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Int -> Opt
Verbose Int
1) (Char -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'V' Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"V0" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<>String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"verbose" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Loud verbosity")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
IBCSubDir (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"ibcsubdir" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"FILE" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Write IBC files into sub directory")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
ImportDir (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (Char -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'i' Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"idrispath" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Add directory to the list of import paths")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
SourceDir (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"sourcepath" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Add directory to the list of source search paths")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
WarnOnly (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"warn")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
Pkg (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (Char -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'p' Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"package" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Add package as a dependency")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> REPLPort -> Opt
Port (REPLPort -> Opt) -> Parser REPLPort -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM REPLPort -> Mod OptionFields REPLPort -> Parser REPLPort
forall a. ReadM a -> Mod OptionFields a -> Parser a
option ReadM REPLPort
portReader (String -> Mod OptionFields REPLPort
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"port" Mod OptionFields REPLPort
-> Mod OptionFields REPLPort -> Mod OptionFields REPLPort
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields REPLPort
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"PORT" Mod OptionFields REPLPort
-> Mod OptionFields REPLPort -> Mod OptionFields REPLPort
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields REPLPort
forall (f :: * -> *) a. String -> Mod f a
help String
"REPL TCP port - pass \"none\" to not bind any port")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
PkgBuild (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"build" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"IPKG" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Build package")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
PkgInstall (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"install" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"IPKG" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Install package")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
PkgREPL (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"repl" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"IPKG" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Launch REPL, only for executables")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
PkgClean (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"clean" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"IPKG" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Clean package")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (String -> Opt
PkgDocBuild (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"mkdoc" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"IPKG" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Generate IdrisDoc for package"))
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
PkgDocInstall (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"installdoc" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"IPKG" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Install IdrisDoc for package")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
PkgCheck (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"checkpkg" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"IPKG" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Check package only")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
PkgTest (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"testpkg" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"IPKG" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Run tests for package")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Int -> Opt
IndentWith (Int -> Opt) -> Parser Int -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM Int -> Mod OptionFields Int -> Parser Int
forall a. ReadM a -> Mod OptionFields a -> Parser a
option ReadM Int
forall a. Read a => ReadM a
auto (String -> Mod OptionFields Int
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"indent-with"
Mod OptionFields Int
-> Mod OptionFields Int -> Mod OptionFields Int
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Int
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"INDENT"
Mod OptionFields Int
-> Mod OptionFields Int -> Mod OptionFields Int
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Int
forall (f :: * -> *) a. String -> Mod f a
help String
"Indentation to use with :makewith (default 2)")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Int -> Opt
IndentClause (Int -> Opt) -> Parser Int -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM Int -> Mod OptionFields Int -> Parser Int
forall a. ReadM a -> Mod OptionFields a -> Parser a
option ReadM Int
forall a. Read a => ReadM a
auto (String -> Mod OptionFields Int
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"indent-clause"
Mod OptionFields Int
-> Mod OptionFields Int -> Mod OptionFields Int
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Int
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"INDENT"
Mod OptionFields Int
-> Mod OptionFields Int -> Mod OptionFields Int
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Int
forall (f :: * -> *) a. String -> Mod f a
help String
"Indentation to use with :addclause (default 2)")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
BCAsm (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"bytecode")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (OutputType -> Opt
OutputTy OutputType
Raw) (Char -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'S' Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"codegenonly" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Do no further compilation of code generator output")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (OutputType -> Opt
OutputTy OutputType
Object) (Char -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'c' Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"compileonly" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Compile to object files rather than an executable")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
DumpDefun (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"dumpdefuns")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
DumpCases (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"dumpcases")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Codegen -> Opt
UseCodegen (Codegen -> Opt) -> (String -> Codegen) -> String -> Opt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Codegen
parseCodegen) (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"codegen"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"TARGET"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Select code generator: C, Javascript, Node and bytecode are bundled with Idris")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ((Codegen -> Opt
UseCodegen (Codegen -> Opt) -> (String -> Codegen) -> String -> Opt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IRFormat -> String -> Codegen
Via IRFormat
JSONFormat) (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"portable-codegen"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"TARGET"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Pass the name of the code generator. This option is for codegens that take JSON formatted IR."))
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
CodegenArgs (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"cg-opt"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"ARG"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Arguments to pass to code generator")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
EvalExpr (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"eval"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> Char -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'e'
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"EXPR"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Evaluate an expression without loading the REPL")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (String -> Opt
InterpretScript String
"Main.main") (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"execute" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Execute as idris")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
InterpretScript (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"exec" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"EXPR" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Execute as idris")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ((LanguageExt -> Opt
Extension (LanguageExt -> Opt) -> (String -> LanguageExt) -> String -> Opt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> LanguageExt
getExt) (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"extension"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> Char -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'X'
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"EXT"
Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"Turn on language extension (TypeProviders or ErrorReflection)"))
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Int -> Opt
OptLevel Int
3) (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"O3")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Int -> Opt
OptLevel Int
2) (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"O2")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Int -> Opt
OptLevel Int
1) (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"O1")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Int -> Opt
OptLevel Int
0) (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"O0")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Optimisation -> Opt
AddOpt Optimisation
PETransform) (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"partial-eval")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Optimisation -> Opt
RemoveOpt Optimisation
PETransform) (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"no-partial-eval" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Switch off partial evaluation, mainly for debugging purposes")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Optimisation -> Opt
AddOpt Optimisation
GeneralisedNatHack) (
String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"optimise-nat-like-types"
Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"optimize-nat-like-types"
Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Enable compilation of Nat-like types to bigints"
)
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Optimisation -> Opt
RemoveOpt Optimisation
GeneralisedNatHack) (
String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"no-optimise-nat-like-types"
Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"no-optimize-nat-like-types"
Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Disable compilation of Nat-like types to bigints"
)
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Int -> Opt
OptLevel (Int -> Opt) -> Parser Int -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM Int -> Mod OptionFields Int -> Parser Int
forall a. ReadM a -> Mod OptionFields a -> Parser a
option ReadM Int
forall a. Read a => ReadM a
auto (Char -> Mod OptionFields Int
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'O' Mod OptionFields Int
-> Mod OptionFields Int -> Mod OptionFields Int
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields Int
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"level")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
TargetTriple (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"target" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"TRIPLE" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"If supported the codegen will target the named triple.")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Opt
TargetCPU (String -> Opt) -> Parser String -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Mod OptionFields String -> Parser String
forall s. IsString s => Mod OptionFields s -> Parser s
strOption (String -> Mod OptionFields String
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"cpu" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"CPU" Mod OptionFields String
-> Mod OptionFields String -> Mod OptionFields String
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields String
forall (f :: * -> *) a. String -> Mod f a
help String
"If supported the codegen will target the named CPU e.g. corei7 or cortex-m3")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Bool -> Opt
ColourREPL Bool
True) (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"colour" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"color" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Force coloured output")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' (Bool -> Opt
ColourREPL Bool
False) (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"nocolour" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"nocolor" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Disable coloured output")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (ConsoleWidth -> Opt
UseConsoleWidth (ConsoleWidth -> Opt) -> Parser ConsoleWidth -> Parser Opt
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM ConsoleWidth
-> Mod OptionFields ConsoleWidth -> Parser ConsoleWidth
forall a. ReadM a -> Mod OptionFields a -> Parser a
option (ReadM String
forall s. IsString s => ReadM s
str ReadM String
-> (String -> ReadM ConsoleWidth) -> ReadM ConsoleWidth
forall a b. ReadM a -> (a -> ReadM b) -> ReadM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> ReadM ConsoleWidth
forall (m :: * -> *). MonadFail m => String -> m ConsoleWidth
parseConsoleWidth) (String -> Mod OptionFields ConsoleWidth
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"consolewidth" Mod OptionFields ConsoleWidth
-> Mod OptionFields ConsoleWidth -> Mod OptionFields ConsoleWidth
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields ConsoleWidth
forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"WIDTH" Mod OptionFields ConsoleWidth
-> Mod OptionFields ConsoleWidth -> Mod OptionFields ConsoleWidth
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields ConsoleWidth
forall (f :: * -> *) a. String -> Mod f a
help String
"Select console width: auto, infinite, nat"))
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
DumpHighlights (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"highlight" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Emit source code highlighting")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
NoOldTacticDeprecationWarnings (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"no-tactic-deprecation-warnings" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Disable deprecation warnings for the old tactic sublanguage")
Parser Opt -> Parser Opt -> Parser Opt
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Opt -> Mod FlagFields Opt -> Parser Opt
forall a. a -> Mod FlagFields a -> Parser a
flag' Opt
AllowCapitalizedPatternVariables (String -> Mod FlagFields Opt
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"allow-capitalized-pattern-variables" Mod FlagFields Opt -> Mod FlagFields Opt -> Mod FlagFields Opt
forall a. Semigroup a => a -> a -> a
<> String -> Mod FlagFields Opt
forall (f :: * -> *) a. String -> Mod f a
help String
"Allow pattern variables to be capitalized")
where
getExt :: String -> LanguageExt
getExt :: String -> LanguageExt
getExt String
s = LanguageExt -> Maybe LanguageExt -> LanguageExt
forall a. a -> Maybe a -> a
fromMaybe (String -> LanguageExt
forall a. HasCallStack => String -> a
error (String
"Unknown extension " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
s)) (String -> Maybe LanguageExt
maybeRead String
s)
maybeRead :: String -> Maybe LanguageExt
maybeRead :: String -> Maybe LanguageExt
maybeRead = ((LanguageExt, String) -> LanguageExt)
-> Maybe (LanguageExt, String) -> Maybe LanguageExt
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (LanguageExt, String) -> LanguageExt
forall a b. (a, b) -> a
fst (Maybe (LanguageExt, String) -> Maybe LanguageExt)
-> (String -> Maybe (LanguageExt, String))
-> String
-> Maybe LanguageExt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(LanguageExt, String)] -> Maybe (LanguageExt, String)
forall a. [a] -> Maybe a
listToMaybe ([(LanguageExt, String)] -> Maybe (LanguageExt, String))
-> (String -> [(LanguageExt, String)])
-> String
-> Maybe (LanguageExt, String)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [(LanguageExt, String)]
forall a. Read a => ReadS a
reads
portReader :: ReadM REPLPort
portReader :: ReadM REPLPort
portReader =
((PortNumber -> REPLPort
ListenPort (PortNumber -> REPLPort)
-> (Integer -> PortNumber) -> Integer -> REPLPort
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> PortNumber
forall a b. (Integral a, Num b) => a -> b
fromIntegral) (Integer -> REPLPort) -> ReadM Integer -> ReadM REPLPort
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadM Integer
forall a. Read a => ReadM a
auto) ReadM REPLPort -> ReadM REPLPort -> ReadM REPLPort
forall a. ReadM a -> ReadM a -> ReadM a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(ReaderT String (Except ParseError) REPLPort -> ReadM REPLPort
forall a. ReaderT String (Except ParseError) a -> ReadM a
ReadM (ReaderT String (Except ParseError) REPLPort -> ReadM REPLPort)
-> ReaderT String (Except ParseError) REPLPort -> ReadM REPLPort
forall a b. (a -> b) -> a -> b
$ do String
opt <- ReaderT String (Except ParseError) String
forall (m :: * -> *) r. Monad m => ReaderT r m r
ask
if (Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toLower String
opt String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
"none"
then REPLPort -> ReaderT String (Except ParseError) REPLPort
forall a. a -> ReaderT String (Except ParseError) a
forall (m :: * -> *) a. Monad m => a -> m a
return (REPLPort -> ReaderT String (Except ParseError) REPLPort)
-> REPLPort -> ReaderT String (Except ParseError) REPLPort
forall a b. (a -> b) -> a -> b
$ REPLPort
DontListen
else Except ParseError REPLPort
-> ReaderT String (Except ParseError) REPLPort
forall (m :: * -> *) a. Monad m => m a -> ReaderT String m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Except ParseError REPLPort
-> ReaderT String (Except ParseError) REPLPort)
-> Except ParseError REPLPort
-> ReaderT String (Except ParseError) REPLPort
forall a b. (a -> b) -> a -> b
$ ParseError -> Except ParseError REPLPort
forall (m :: * -> *) e a. Monad m => e -> ExceptT e m a
throwE (ParseError -> Except ParseError REPLPort)
-> ParseError -> Except ParseError REPLPort
forall a b. (a -> b) -> a -> b
$ String -> ParseError
ErrorMsg (String -> ParseError) -> String -> ParseError
forall a b. (a -> b) -> a -> b
$
String
"got " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
opt String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" expected port number or \"none\"")
parseVersion :: Parser (a -> a)
parseVersion :: forall a. Parser (a -> a)
parseVersion = String -> Mod OptionFields (a -> a) -> Parser (a -> a)
forall a. String -> Mod OptionFields (a -> a) -> Parser (a -> a)
infoOption String
getIdrisVersion (Char -> Mod OptionFields (a -> a)
forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'v' Mod OptionFields (a -> a)
-> Mod OptionFields (a -> a) -> Mod OptionFields (a -> a)
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields (a -> a)
forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"version" Mod OptionFields (a -> a)
-> Mod OptionFields (a -> a) -> Mod OptionFields (a -> a)
forall a. Semigroup a => a -> a -> a
<> String -> Mod OptionFields (a -> a)
forall (f :: * -> *) a. String -> Mod f a
help String
"Print version information")
preProcOpts :: [Opt] -> [Opt]
preProcOpts :: [Opt] -> [Opt]
preProcOpts (Opt
NoBuiltins : [Opt]
xs) = Opt
NoBuiltins Opt -> [Opt] -> [Opt]
forall a. a -> [a] -> [a]
: Opt
NoPrelude Opt -> [Opt] -> [Opt]
forall a. a -> [a] -> [a]
: [Opt] -> [Opt]
preProcOpts [Opt]
xs
preProcOpts (Output String
s : [Opt]
xs) = String -> Opt
Output String
s Opt -> [Opt] -> [Opt]
forall a. a -> [a] -> [a]
: Opt
NoREPL Opt -> [Opt] -> [Opt]
forall a. a -> [a] -> [a]
: [Opt] -> [Opt]
preProcOpts [Opt]
xs
preProcOpts (BCAsm String
s : [Opt]
xs) = String -> Opt
BCAsm String
s Opt -> [Opt] -> [Opt]
forall a. a -> [a] -> [a]
: Opt
NoREPL Opt -> [Opt] -> [Opt]
forall a. a -> [a] -> [a]
: [Opt] -> [Opt]
preProcOpts [Opt]
xs
preProcOpts (Opt
x:[Opt]
xs) = Opt
x Opt -> [Opt] -> [Opt]
forall a. a -> [a] -> [a]
: [Opt] -> [Opt]
preProcOpts [Opt]
xs
preProcOpts [] = []
parseCodegen :: String -> Codegen
parseCodegen :: String -> Codegen
parseCodegen String
"bytecode" = Codegen
Bytecode
parseCodegen String
cg = IRFormat -> String -> Codegen
Via IRFormat
IBCFormat ((Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
map Char -> Char
toLower String
cg)
parseLogCats :: Fail.MonadFail m => String -> m [LogCat]
parseLogCats :: forall (m :: * -> *). MonadFail m => String -> m [LogCat]
parseLogCats String
s =
case [([LogCat], String)] -> Maybe ([LogCat], String)
forall a. [a] -> Maybe a
lastMay (ReadP [LogCat] -> ReadS [LogCat]
forall a. ReadP a -> ReadS a
readP_to_S ReadP [LogCat]
doParse String
s) of
Just ([LogCat]
xs, String
_) -> [LogCat] -> m [LogCat]
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return [LogCat]
xs
Maybe ([LogCat], String)
_ -> String -> m [LogCat]
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Incorrect categories specified"
where
doParse :: ReadP [LogCat]
doParse :: ReadP [LogCat]
doParse = do
[[LogCat]]
cs <- ReadP [LogCat] -> ReadP Char -> ReadP [[LogCat]]
forall a sep. ReadP a -> ReadP sep -> ReadP [a]
sepBy1 ReadP [LogCat]
parseLogCat (Char -> ReadP Char
char Char
':')
ReadP ()
eof
[LogCat] -> ReadP [LogCat]
forall a. a -> ReadP a
forall (m :: * -> *) a. Monad m => a -> m a
return ([[LogCat]] -> [LogCat]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[LogCat]]
cs)
parseLogCat :: ReadP [LogCat]
parseLogCat :: ReadP [LogCat]
parseLogCat = (String -> ReadP String
string (LogCat -> String
strLogCat LogCat
IParse) ReadP String -> ReadP [LogCat] -> ReadP [LogCat]
forall a b. ReadP a -> ReadP b -> ReadP b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> [LogCat] -> ReadP [LogCat]
forall a. a -> ReadP a
forall (m :: * -> *) a. Monad m => a -> m a
return [LogCat]
parserCats)
ReadP [LogCat] -> ReadP [LogCat] -> ReadP [LogCat]
forall a. ReadP a -> ReadP a -> ReadP a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (String -> ReadP String
string (LogCat -> String
strLogCat LogCat
IElab) ReadP String -> ReadP [LogCat] -> ReadP [LogCat]
forall a b. ReadP a -> ReadP b -> ReadP b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> [LogCat] -> ReadP [LogCat]
forall a. a -> ReadP a
forall (m :: * -> *) a. Monad m => a -> m a
return [LogCat]
elabCats)
ReadP [LogCat] -> ReadP [LogCat] -> ReadP [LogCat]
forall a. ReadP a -> ReadP a -> ReadP a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (String -> ReadP String
string (LogCat -> String
strLogCat LogCat
ICodeGen) ReadP String -> ReadP [LogCat] -> ReadP [LogCat]
forall a b. ReadP a -> ReadP b -> ReadP b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> [LogCat] -> ReadP [LogCat]
forall a. a -> ReadP a
forall (m :: * -> *) a. Monad m => a -> m a
return [LogCat]
codegenCats)
ReadP [LogCat] -> ReadP [LogCat] -> ReadP [LogCat]
forall a. ReadP a -> ReadP a -> ReadP a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (String -> ReadP String
string (LogCat -> String
strLogCat LogCat
ICoverage) ReadP String -> ReadP [LogCat] -> ReadP [LogCat]
forall a b. ReadP a -> ReadP b -> ReadP b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> [LogCat] -> ReadP [LogCat]
forall a. a -> ReadP a
forall (m :: * -> *) a. Monad m => a -> m a
return [LogCat
ICoverage])
ReadP [LogCat] -> ReadP [LogCat] -> ReadP [LogCat]
forall a. ReadP a -> ReadP a -> ReadP a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (String -> ReadP String
string (LogCat -> String
strLogCat LogCat
IIBC) ReadP String -> ReadP [LogCat] -> ReadP [LogCat]
forall a b. ReadP a -> ReadP b -> ReadP b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> [LogCat] -> ReadP [LogCat]
forall a. a -> ReadP a
forall (m :: * -> *) a. Monad m => a -> m a
return [LogCat
IIBC])
ReadP [LogCat] -> ReadP [LogCat] -> ReadP [LogCat]
forall a. ReadP a -> ReadP a -> ReadP a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (String -> ReadP String
string (LogCat -> String
strLogCat LogCat
IErasure) ReadP String -> ReadP [LogCat] -> ReadP [LogCat]
forall a b. ReadP a -> ReadP b -> ReadP b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> [LogCat] -> ReadP [LogCat]
forall a. a -> ReadP a
forall (m :: * -> *) a. Monad m => a -> m a
return [LogCat
IErasure])
ReadP [LogCat] -> ReadP [LogCat] -> ReadP [LogCat]
forall a. ReadP a -> ReadP a -> ReadP a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ReadP [LogCat]
parseLogCatBad
parseLogCatBad :: ReadP [LogCat]
parseLogCatBad :: ReadP [LogCat]
parseLogCatBad = do
String
s <- ReadP String
look
String -> ReadP [LogCat]
forall a. String -> ReadP a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> ReadP [LogCat]) -> String -> ReadP [LogCat]
forall a b. (a -> b) -> a -> b
$ String
"Category: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
s String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" is not recognised."
parseConsoleWidth :: Fail.MonadFail m => String -> m ConsoleWidth
parseConsoleWidth :: forall (m :: * -> *). MonadFail m => String -> m ConsoleWidth
parseConsoleWidth String
"auto" = ConsoleWidth -> m ConsoleWidth
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ConsoleWidth
AutomaticWidth
parseConsoleWidth String
"infinite" = ConsoleWidth -> m ConsoleWidth
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ConsoleWidth
InfinitelyWide
parseConsoleWidth String
s =
case [(Int, String)] -> Maybe (Int, String)
forall a. [a] -> Maybe a
lastMay (ReadP Int -> ReadS Int
forall a. ReadP a -> ReadS a
readP_to_S ReadP Int
integerReader String
s) of
Just (Int
r, String
_) -> ConsoleWidth -> m ConsoleWidth
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ConsoleWidth -> m ConsoleWidth) -> ConsoleWidth -> m ConsoleWidth
forall a b. (a -> b) -> a -> b
$ Int -> ConsoleWidth
ColsWide Int
r
Maybe (Int, String)
_ -> String -> m ConsoleWidth
forall a. String -> m a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> m ConsoleWidth) -> String -> m ConsoleWidth
forall a b. (a -> b) -> a -> b
$ String
"Cannot parse: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
s
integerReader :: ReadP Int
integerReader :: ReadP Int
integerReader = do
String
digits <- ReadP Char -> ReadP String
forall a. ReadP a -> ReadP [a]
many1 (ReadP Char -> ReadP String) -> ReadP Char -> ReadP String
forall a b. (a -> b) -> a -> b
$ (Char -> Bool) -> ReadP Char
satisfy Char -> Bool
isDigit
Int -> ReadP Int
forall a. a -> ReadP a
forall (m :: * -> *) a. Monad m => a -> m a
return (Int -> ReadP Int) -> Int -> ReadP Int
forall a b. (a -> b) -> a -> b
$ String -> Int
forall a. Read a => String -> a
read String
digits