úΊ z5Ä      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ ‘ ’ “”•–—˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾¿ÀÁÂÃSafe &'1;=CSTV(aThe purpose of this data type is to capture the dictionary corresponding to a particular option.;A set of options. Only one option of each type can be kept.FIf some option has not been explicitly set, the default value is used.+An option is a data type that inhabits the  type class.:The value to use if the option was not supplied explicitly<Try to parse an option value from a string. Consider using  for boolean options and  for numeric options.ËThe option name. It is used to form the command line option name, for instance. Therefore, it had better not contain spaces or other fancy characters. It is recommended to use dashes instead of spaces.HThe option description or help string. This can be an arbitrary string.A command-line option parser.‡It has a default implementation in terms of the other methods. You may want to override it in some cases (e.g. add a short flag) and  ,  and  might come in handy.nEven if you override this, you still should implement all the methods above, to allow alternative interfaces.ÿ!Do not supply a default value here for this parser! This is because if no value was provided on the command line we may lookup the option e.g. in the environment. But if the parser always succeeds, we have no way to tell whether the user really provided the option on the command line. Set the option value Query the option value Change the option value Create a singleton  %Command-line parser to use with flags@Command-line flag parser that takes additional option modifiers.BCommand-line option parser that takes additional option modifiers.=Safe read function. Defined here for convenience to use for .Parse a Ä case-insensitively#Later options override earlier ones optional short flag-non-default value (when the flag is supplied)option modifier-non-default value (when the flag is supplied)   ÅÆÇ None1-úÈBTake a list of actions and execute them in parallel, no more than n at the same time.˜The action itself is asynchronous, ie. it returns immediately and does the work in new threads. It returns an action which aborts tests and cleans up.È"maximum number of parallel threadslist of actions to executeÈÉÊËÌ p© 2015 2018 Megaparsec contributors © 2007 Paolo Martini © 1999 2001 Daan LeijenSafeaGÍ?This data type specifies operators that work on values of type az. An operator is either binary infix or unary prefix or postfix. A binary operator has also an associated associativity.ÎNon-associative infixÏLeft-associative infixÐRight-associative infixÑPrefixÒPostfixÓ9Right-associative ternary. Right-associative means that a ? b : d ? e : f parsed as a ? b : (d ? e : f) and not as (a ? b : d) ? e : f.ÔÔ term table( builds an expression parser for terms term with operators from table<, taking the associativity and precedence specified in the table into account.table is a list of [Operator m a]’ lists. The list is ordered in descending precedence. All operators in one list have the same precedence (but may have different associativity).TPrefix and postfix operators of the same precedence associate to the left (i.e. if ++ is postfix increment, than -2++ equals -1, not -3).AUnary operators of the same precedence can only occur once (i.e. --2 is not allowed if -i is prefix negate). If you need to parse several prefix or postfix operators in a row, (like C pointers **i) you can use this approach: /manyUnaryOp = foldr1 (.) <$> some singleUnaryOpsThis is not done by default because in some cases allowing repeating prefix or postfix operators is not desirable.If you want to have an operator that is a prefix of another operator in the table, use the following (or similar) wrapper instead of plain  : Aop n = (lexeme . try) (string n <* notFollowedBy punctuationChar)Ô¼ takes care of all the complexity involved in building an expression parser. Here is an example of an expression parser that handles prefix signs, postfix increment and basic arithmetic: ÿ¼expr = makeExprParser term table <?> "expression" term = parens expr <|> integer <?> "term" table = [ [ prefix "-" negate , prefix "+" id ] , [ postfix "++" (+1) ] , [ binary "*" (*) , binary "/" div ] , [ binary "+" (+) , binary "-" (-) ] ] binary name f = InfixL (f <$ symbol name) prefix name f = Prefix (f <$ symbol name) postfix name f = Postfix (f <$ symbol name)ÕaddPrecLevel p ops. adds the ability to parse operators in table ops to parser p.ÖpTerm prefix term postfix parses a termE surrounded by optional prefix and postfix unary operators. Parsers prefix and postfix$ are allowed to fail, in this case × is used.ØpInfixN op p x' parses non-associative infix operator op, then term with parser p5, then returns result of the operator application on x and the term.ÙpInfixL op p x( parses left-associative infix operator op, then term with parser p5, then returns result of the operator application on x and the term.ÚpInfixR op p x) parses right-associative infix operator op, then term with parser p6, then returns result of the operator application on x and the term.Û/Parse the first separator of a ternary operatorÜsA helper to separate various operators (binary, unary, and according to associativity) and return them in a tuple.Ô Term parserOperator table, see ÍResulting expression parserÍÑÏÐÎÒÓÔÍÎÏÐÑÒÓSafedÈnumber of fields&_nth field of the path, where 1 is the outermost group name and 0 is the whole test name, using / as a separator)an ERE token by itself, like foo but not like $1 ~ foo.-,+*)'&%#"!($  !"#$%&'()*+,-. !"#$%&'()*+,-.NoneKv† Ý'Whether a parser is unary or non-unary. This roughly corresponds to the  unary_expr and non_unary_expr7 non-terminals in the awk grammar. (Why roughly? See Þ.)5 A separate 58 data type ensures that we don't forget to skip spaces.6 Run a parserßAn awk ERE token such as foo>. No special characters are recognized at the moment, except @ as an escape character for /@ and itself.àBuilt-in functionsáAtomic expressionsâGArguments to unary operators: atomic expressions and field expressionsÞArithmetic expressions.ˆUnlike awk, non-unary expressions disallow unary operators everywhere, not just in the leading position, to avoid extra complexity in Ô.For example, the expression 1 3 + -4is valid in awk because 3 + -40 is non-unary, but we disallow it here because Ô) does not allow us to distinguish it from 1 -4 + 3which is ambiguous.ã1Expressions that may include string concatenationä3Everything with lower precedence than concatenation7The awk-like expression parser8Parse an awk expression6 text to parse1234567856123478Ýåæ12345çSafe%QVzèèThe Ä is é5 if the source of the string allows it to be numeric@Evaluate an awk expressionARun the ê" monad with a given list of fields"The field list should not include $0 ; it's calculated automatically.ëpatternstring?@A@A?ìíèîNone1{YCDEFGCDNone1K‡çH)Timeout to be applied to individual testsIï9 is the original representation of the timeout (such as "0.5m"!), so that we can print it back. ð is the number of microseconds.K4Number of parallel threads to use for running tests.Note that this is not included in O@. Instead, it's automatically included in the options for any  TestReporter ingredient by ingredientOptions†, because the way test reporters are handled already involves parallelism. Other ingredients may also choose to include this option.ñ<Filtering function to prevent non-positive number of threadsNA shortcut for creating H valuesO…The list of all core options, i.e. the options not specific to any provider or ingredient, but to tasty itself. Currently contains C and H.N microsecondsHIJKLMNOHIJKLMNone16<CKQVά#PAn algebra for folding a U.2Instead of constructing fresh records, build upon uP instead. This way your code won't break when new nodes/fields are indroduced.U.The main data structure defining a test suite.qIt consists of individual test cases and properties, organized in named groups which form a tree-like hierarchy.¢There is no generic way to create a test case. Instead, every test provider (tasty-hunit, tasty-smallcheck etc.) provides a function to turn a test case into a U.Groups can be created using t.V%A single test of some particular typeW0Assemble a number of tests into a cohesive groupXAdd some options to child testsYrAcquire the resource before the tests in the inner tree start and release it after they finish. The tree gets an òZ action which yields the resource, although the resource is shared across all the tests.Z9Ask for the options and customize the tests based on themóA resources-related exception[[a describes how to acquire a resource (the first field) and how to release it (the second field).]&The name of a test or a group of tests^3The interface to be implemented by a test provider. The type tK is the concrete representation of the test which is used by the provider._ Run the testeThis method should cleanly catch any exceptions in the code to test, and return them as part of the e, see o# for an explanation. It is ok for _© to raise an exception if there is a problem with the test suite code itself (for example, if a file that should contain example data or expected output is not found).`?The list of options that affect execution of tests of this typeaTest progress information.jThis may be used by a runner to provide some feedback to the user while a long-running test is executing.c-textual information about the test's progressddW should be a value between 0 and 1. If it's impossible to compute the estimate, use 0.e A test resultgDid the test fail? If so, why?hhÅ may contain some details about the test. For a passed test it's ok to leave it empty. Providers like SmallCheck and QuickCheck use it to provide information about how many tests were generated.For a failed test, h> should typically provide more information about the failure.i?The short description printed in the test run summary, usually OK or FAIL.j-How long it took to run the test, in seconds.k@Time in seconds. Used to measure how long the tests took to run.lOutcome of a test runNote: this is isomorphic to ô o. You can use the  generic-maybe package to exploit that.mtest succeededntest failed because of the ooIf a test failed, o describes whypƒtest provider indicated failure of the code to test, either because the tested code returned wrong results, or raised an exceptionqgthe test code itself raised an exception. Typical cases include missing example input or output files.;Usually, providers do not have to implement this, as their _' method may simply raise an exception.r%test didn't complete in allotted timesé for a passed test, õ for a failed one.öShortcut for creating a e that indicates exceptiont2Create a named group of test cases or other groupsuuM can serve as the basis for custom folds. Just override the fields you need.Here's what it does:single tests are mapped to ÷( (you probably do want to override that)#test groups are returned unmodified‡for a resource, an IO action that throws an exception is passed (you want to override this for runners/ingredients that execute tests)v%Fold a test tree into a single value.The fold result type should be a monoid. This is used to fold multiple results in a test group. In particular, empty groups get folded into ÷.RApart from pure convenience, this function also does the following useful things: ?Keeping track of the current options (which may change due to X nodes)7Filtering out the tests which do not match the patternsEThus, it is preferred to an explicit recursive traversal of the tree.ÄNote: right now, the patterns are looked up only once, and won't be affected by the subsequent option changes. This shouldn't be a problem in practice; OTOH, this behaviour may be changed later.ø?Get the list of options that are relevant for a given test tree_optionsthe test to runša callback to report progress. Note: the callback is a no-op at the moment and there are no plans to use it; feel free to ignore this argument for now.v%the algebra (i.e. how to fold a tree)initial optionsthe tree to fold-PQTSRUZYXWVóùúû[\]^`_abdcefjihgklnmorqpsötuvø PQRSTUVWXYZóûúù[\^_`abcdefghijlmnopqrNoneÒ&w Convert a test to a leaf of the Uxe of a passed testye of a failed testxdescription (may be empty)y description U]^_`abcdewxy ^_`xyeabcd]UwNoneKÓ«zMonoid generated by ü (ý)}Monoid generated by þz{|}~z{|}~None<CQVû¨ €FMapping from test numbers (starting from 0) to their status variables.bThis is what an ingredient uses to analyse and display progress, and to detect when tests finish.Current status of a test‚ test has not started running yetƒtest is being run„!test finished with a given resultÿ'Execute a test taking care of resources[Turn a test tree into a list of actions to run tests coupled with variables to watch them.]Also return a list of finalizers in the order they should run when the test suite completes.CUsed to create the IO action which is passed in a WithResource nodeRun a resource finalizer.2This function is called from two different places: 9A test thread, which is the last one to use the resource.;The main thread, if an exception (e.g. Ctrl-C) is received.jTherefore, it is possible that this function is called multiple times concurrently on the same finalizer.tThis function should be run with async exceptions masked, and the restore function should be passed as an argument.…WStart running the tests (in background, in parallel) and pass control to the callback.2Once the callback returns, stop running the tests.8The number of test running threads is determined by the K option.Like R (which also masks its finalizers), but pass the restore action to the finalizer.Measure the time taken by an ò action to runGet monotonic time…Warning: This is not the system time, but a monotonically increasing time that facilitates reliable measurement of time differences.ÿOthe action to execute the test, which takes a progress callback as a parametervariable to write status tooptional timeout to apply+initializers (to be executed in this order))finalizers (to be executed in this order)…#A callback. First, it receives the € through which it can observe the execution of tests in real time. Typically (but not necessarily), it waits until all the tests are finished.€After this callback returns, the test-running threads (if any) are terminated and all resources acquired by tests are released.3The callback must return another callback (of type k -> ò aÿ) which additionally can report and/or record the total time taken by the test suite. This time includes the time taken to run all resource initializers and finalizers, which is why it is more accurate than what could be measured from inside the first callback.computation to run first>computation to run afterward (even if an exception was raised),returns the value from the first computation€„‚ƒ…     ‚ƒ„None-F††s make your test suite tasty.¿Ingredients represent different actions that you can perform on your test suite. One obvious ingredient that you want to include is one that runs tests and reports the progress and results.NAnother standard ingredient is one that simply prints the names of all tests.Similar to test providers (see ^ ), every ingredient may specify which options it cares about, so that those options are presented to the user if the ingredient is included in the test suite.1An ingredient can choose, typically based on the #, whether to run. That's what the ô­ is for. The first ingredient that agreed to run does its work, and the remaining ingredients are ignored. Thus, the order in which you arrange the ingredients may matter.àUsually, the ingredient which runs the tests is unconditional and thus should be placed last in the list. Other ingredients usually run only if explicitly requested via an option. Their relative order thus doesn't matter.qThat's all you need to know from an (advanced) user perspective. Read on if you want to create a new ingredient.#There are two kinds of ingredients.The first kind is ‡-. If the ingredient that agrees to run is a ‡=, then tasty will automatically launch the tests and pass a €› to the ingredient. All the ingredient needs to do then is to process the test results and probably report them to the user in some way (hence the name).ˆµ is the second kind of ingredient. It is typically used for test management purposes (such as listing the test names), although it can also be used for running tests (but, unlike ‡h, it has to launch the tests manually if it wants them to be run). It is therefore more general than ‡. ‡# is provided just for convenience.CThe function's result should indicate whether all the tests passed.In the ˆ„ case, it's up to the ingredient author to decide what the result should be. When no tests are run, the result should probably be éN. Sometimes, even if some tests run and fail, it still makes sense to return é.‡JFor the explanation on how the callback works, see the documentation for ….Try to run an †.7If the ingredient refuses to run (usually based on the ), the function returns .For a ‡J, this function automatically starts running the tests in the background.‰Run the first † that agrees to be run.#If no one accepts the task, return .. This is usually a sign of misconfiguration.Š?Return the options which are relevant for the given ingredient.=Note that this isn't the same as simply pattern-matching on †. E.g. options for a ‡ automatically include K.‹Like ingredientOption&, but folds over multiple ingredients.ŒAll the options relevant for this test suite. This includes the options for the test tree and ingredients, and the core options. Compose two ‡Ù ingredients which are then executed in parallel. This can be useful if you want to have two reporters active at the same time, e.g., one which prints to the console and one which writes the test results to a file.(Be aware that it is not possible to use  with a ˆ, it only works for ‡ ingredients.†‡ˆ‰Š‹Œ†‡ˆ‰Š‹Œ†‡ˆNone1K0ØŽThis option, when set to é8, specifies that we should run in the «list tests» mode)Obtain the list of all tests in the suite‘;The ingredient that provides the test listing functionalityŽ‘ŽNone3I’OThis ingredient doesn't do anything apart from registering additional options.(The option values can be accessed using  askOption.’None1V5N(Search the environment for given options>Search the environment for all options relevant for this suiteNone1V;“AGenerate a command line parser from a list of option descriptions”*The command line parser for the test suite•WParse the command line arguments and run the tests using the provided ingredient list.+When the tests finish, this function calls G with the exit code that indicates whether any tests have failed. See  defaultMain for details.Œ“”•Safe?Þ–pCatch possible exceptions that may arise when evaluating a string. For normal (total) strings, this is a no-op.qThis function should be used to display messages generated by the test suite (such as test result descriptions). See e.g. ,https://github.com/feuerbach/tasty/issues/25–— None1<>?aÞ˜ When to use color on the output›3Only if stdout is an ANSI color supporting terminalœReport only failed testsž2Do not print test results (see README for details)  :Track the number of tests that were run and failures of a U or sub-tree.¢uNumber of active tests (e.g., that match the pattern specified on the commandline), inactive tests are not counted.£#Number of active tests that failed.¤ ¤› is an intermediary between output formatting and output printing. It lets us have several different printing modes (normal; print failures only; quiet).¥jName of a test, an action that prints the test name, and an action that renders the result of the action.¦QName of a test group, an action that prints the heading of a test group and the ¤ for that test group.§5Inactive test (e.g. not matching the current pattern)¨ Two sets of  TestOuput on the same level©  Build the ¤ for a U and . The colors7 ImplicitParam controls whether the output is colored.ª Fold function for the ¤ tree into a .« printStatisticsG reports test success/failure statistics and time it took to run. The k, results is intended to be filled in by the ‡ callback. The colors9 ImplicitParam controls whether coloured output is used.¬ printStatisticsNoTime. reports test success/failure statistics The colors8 ImplicitParam controls whether coloured output is used. Wait until1all tests have finished successfully, and return é, or)at least one test has failed, and return õ­A simple console UI® useColor when isTerm, decides if colors should be used, where isTerm indicates whether stdout is a terminal device.,Compute the amount of space needed to align OKs and FAILsµControl color outputªEliminator for test cases. The IO () prints the testname. The  IO Result3 blocks until the test is finished, returning it's e. The Result -> IO ()& function prints the formatted output. Eliminator for test groups. The IO ()$ prints the test group's name. The b) is the result of folding the test group.The  TestOutput being rendered.The  StatusMap received by the ‡ lookahead˜™š›œžŸ ¡¢£¤¨¥¦§©ª«¬­®­žŸœ˜™š›® ¡¢£«¬¤¥¦§¨©ª ˜™š›œžŸ ¡¢£¤¥¦§¨ Nonec, Ž‘’œžŸ­ ­žŸœ‘Ž’Nonec¼HCDEFGKLMOPQRSTUVWXYZ[\abcdefghijklmnopqrsuvz{|}~€„‚ƒ…†‡ˆ‰Š‹ŒŽ‘“”•–—­HUVWXYZvPQRSTu[\}~z{|†‡ˆk‰Š‹­‘Ž“”•‚ƒ„efghijlmnopqrsabcd€…KLMŒOCDFEG–—Noney·¾.List of the default ingredients. This is what ¿ uses.At the moment it consists of ‘ and ­.¿3Parse the command line arguments and run the tests.+When the tests finish, this function calls exitWithã with the exit code that indicates whether any tests have failed. Most external systems (stack, cabal, travis-ci, jenkins etc.) rely on the exit code to detect whether the tests pass. If you want to do something else after ¿I returns, you need to catch the exception and then re-throw it. Example: ÿimport Test.Tasty import Test.Tasty.HUnit import System.Exit import Control.Exception test = testCase "Test 1" (2 @?= 3) main = defaultMain test `catch` (\e -> do if e == ExitSuccess then putStrLn "Yea" else putStrLn "Nay" throwIO e)À:Locally adjust the option value for the given test subtreeÁ7Locally set the option value for the given test subtreeÂ5Customize the test tree based on the run-time optionsÃJAcquire the resource to run this test (sub)tree and release it afterwardsÃinitialize the resourcefree the resourceò aH is an action which returns the acquired resource. Despite it being an òi action, the resource it returns will be acquired only once and shared across all the tests in the tree.HIJNU]t’•¾¿ÀÁÂÃ]Ut¿•¾’ÀÁÂHIJNÃ! !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_``abbcdeffghijklmnoppqrstuuvwxxyz{|}~K€‚ƒ„…†‡ˆ‰Š‹‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥ ¦ § ¨ © ª ª « « ¬ ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç ÈÉÊËÌÍÎÏÐÑÒÒ Ó Ô Ô Õ Õ Ö × Ø Ù Ú Û Ü Ý Þ ßàáâ ã ä å æ çèéêëìíîïèðNñÏÐòóôõö÷àáøùúûüÏÐýþàáÿÏÐàáàáà àá    ààá !"à#$%%àá& ' ( ) ) *+ tasty-1.1-9uRGLkd4nD8C3R0nq8i6fRTest.Tasty.OptionsTest.Tasty.Patterns.TypesTest.Tasty.Patterns.ParserTest.Tasty.Patterns.EvalTest.Tasty.Runners Test.TastyTest.Tasty.ProvidersTest.Tasty.IngredientsTest.Tasty.Ingredients.Basic&Test.Tasty.Ingredients.ConsoleReporterTest.Tasty.ParallelTest.Tasty.Patterns.ExprText.Megaparsec.Char.LexersymbolTest.Tasty.PatternsTest.Tasty.Options.CoreTest.Tasty.CoreTest.Tasty.Runners.ReducersTest.Tasty.Run Test.Tasty.Ingredients.ListTests'Test.Tasty.Ingredients.IncludingOptionsTest.Tasty.Options.EnvTest.Tasty.CmdLineTest.Tasty.Runners.UtilsOptionDescriptionOption OptionSetIsOption defaultValue parseValue optionName optionHelpoptionCLParser setOption lookupOption changeOption singleOption flagCLParsermkFlagCLParsermkOptionCLParsersafeRead safeReadBool$fSemigroupOptionSet$fMonoidOptionSetExprIntLitNFAddSubNegNotAndLTGTLEGEEQNEOrConcatMatchNoMatchField StringLitIfERE ToUpperFn ToLowerFnLengthFnMatchFnSubstrFn $fShowExpr$fEqExpr ParseResultSuccessInvalid AmbiguousParser runParserexpr parseAwkExpr$fFunctorParser$fApplicativeParser$fAlternativeParser $fMonadParser$fMonadPlusParser$fShowParseResultasBeval withFields $fShowValue TestPattern noPatternparseTestPatterntestPatternMatchesTimeout NoTimeout NumThreads getNumThreads mkTimeout coreOptionsTreeFold foldSingle foldGroup foldResourceTestTree SingleTest TestGroupPlusTestOptions WithResource AskOptions ResourceSpecTestNameIsTestrun testOptionsProgress progressTextprogressPercentResult resultOutcomeresultDescriptionresultShortDescription resultTimeTimeOutcomeFailure FailureReason TestFailedTestThrewException TestTimedOutresultSuccessful testGroup trivialFold foldTestTree singleTest testPassed testFailedApgetApp Traversal getTraversal StatusMapStatus NotStarted ExecutingDonelaunchTestTree Ingredient TestReporter TestManagertryIngredientsingredientOptionsingredientsOptions suiteOptionscomposeReporters ListTests testsNames listingTestsincludingOptions optionParsersuiteOptionParserdefaultMainWithIngredients formatMessage forceElementsUseColorNeverAlwaysAuto HideSuccessesQuiet Statistics statTotal statFailures TestOutput PrintTest PrintHeadingSkipSeqbuildTestOutputfoldTestOutputprintStatisticsprintStatisticsNoTimeconsoleTestReporteruseColor$fSemigroupTestOutput$fMonoidTestOutput$fSemigroupStatistics$fMonoidStatistics$fIsOptionQuiet$fIsOptionHideSuccesses$fIsOptionUseColor$fSemigroupMaximum$fMonoidMaximum $fEqQuiet $fOrdQuiet$fEqHideSuccesses$fOrdHideSuccesses $fEqUseColor $fOrdUseColordefaultIngredients defaultMain adjustOption localOption askOption withResourceghc-prim GHC.TypesBool OptionValue runInParallelParThreadKilled InterruptOperatorInfixNInfixLInfixRPrefixPostfixTernRmakeExprParser addPrecLevelpTermbaseGHC.BaseidpInfixNpInfixLpInfixRpTernRsplitOpUnaryexpr2patPbuiltinexpr0expr1expr3expr4NonUnaryVSTrueMmatchValueVN UninitializedString integer-gmpGHC.Integer.TypeInteger onlyPositiveIO ResourceErrorMaybeFalseexceptionResultmempty treeOptionsUseOutsideOfTestUnexpectedStateNotRunningTestsliftA2 Data.Monoid<>*> executeTestcreateTestActions getResourcedestroyResourcefinallyRestoreControl.Exception.BasefinallytimedgetTime Finalizer InitializerResource NotCreated BeingCreatedFailedToCreateCreatedBeingDestroyed Destroyed tryIngredientNothing getEnvOptionssuiteEnvOptionsEnvOptionException BadOption System.ExitexitWithSignalExceptionMonoidstatusMapResultcomputeAlignmentMaximum MinusInfinity