-- | An interface for other Penny components to use. A report is-- anything that is a 'Report'.modulePenny.Cabin.InterfacewhereimportqualifiedData.Prednote.ExpressionsasExpimportqualifiedPenny.Cabin.SchemeasSimportControl.Monad.Exception.Synchronous(Exceptional)importqualifiedData.TextasXimportText.Matchers(CaseSensitive)importqualifiedText.MatchersasTMimportqualifiedSystem.Console.MultiArgasMAimportqualifiedSystem.Console.RainbowasRimportqualifiedPenny.LincolnasLimportqualifiedPenny.LibertyasLyimportPenny.Shield(Runtime)-- | The function that will print the report, and the positional-- arguments. If there was a problem parsing the command line options,-- return an Exception with an error message.-- | Parsing the filter options can have one of two results: a help-- string, or a list of positional arguments and a function that-- prints a report. Or, the parse might fail.typePosArg=StringtypeHelpStr=StringtypeArgsAndReport=([PosArg],PrintReport)-- | The result of parsing the arguments to a report. Failures are-- indicated with a Text. The name of the executable and the word-- @error@ will be prepended to this Text; otherwise, it is printed-- as-is, so be sure to include any trailing newline if needed.typeParseResult=ExceptionalX.TextArgsAndReporttypePrintReport=[L.Transaction]-- ^ All transactions; the report must sort and filter them->[L.PricePoint]-- ^ PricePoints to be included in the report->ExceptionalX.Text[R.Chunk]-- ^ The exception type is a strict Text, containing the error-- message. The success type is a list of either a Chunk or a PreChunk-- containing the resulting report. This allows for errors after the-- list of transactions has been seen. The name of the executable and-- the word @error@ will be prepended to this Text; otherwise, it is-- printed as-is, so be sure to include any trailing newline if-- needed.typeReport=Runtime->(HelpStr,MkReport)typeMkReport=CaseSensitive-- ^ Result from previous parses indicating whether the user desires-- case sensitivity (this may have been changed in the filtering-- options)->(CaseSensitive->X.Text->ExceptionalX.TextTM.Matcher)-- ^ Result from previous parsers indicating the matcher factory the-- user wishes to use->S.Changers-- ^ Result from previous parsers indicating which color scheme to-- use.->Exp.ExprDesc-- ^ Result from previous parsers indicating whether the user wants-- RPN or infix->([L.Transaction]->[L.BoxLy.LibertyMeta])-- ^ Result from previous parsers that will sort and filter incoming-- transactions->MA.ModeParseResult