-- | An interface for other Penny components to use. A report is -- anything that is a 'Report'. module Penny.Cabin.Interface where import qualified Penny.Cabin.Scheme as S import Control.Monad.Exception.Synchronous (Exceptional) import qualified Data.Text as X import Text.Matchers.Text (CaseSensitive) import qualified System.Console.MultiArg as MA import qualified Penny.Lincoln as L import qualified Penny.Liberty as Ly import Penny.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. type PosArg = String type HelpStr = String type ArgsAndReport = ([PosArg], PrintReport) type ParseResult = Exceptional String (Either HelpStr ArgsAndReport) type PrintReport = [L.Transaction] -- ^ All transactions; the report must sort and filter them -> [L.PricePoint] -- ^ PricePoints to be included in the report -> Exceptional X.Text [S.PreChunk] -- ^ The exception type is a strict Text, containing the error -- message. The success type is a list of PreChunks containing the -- resulting report. This allows for errors after the list of -- transactions has been seen. type Report = Runtime -> (HelpStr, MkReport) type MkReport = CaseSensitive -- ^ Result from previous parses indicating whether the user desires -- case sensitivity (this may have been changed in the filtering -- options) -> (CaseSensitive -> X.Text -> Exceptional X.Text (X.Text -> Bool)) -- ^ Result from previous parsers indicating the matcher factory the -- user wishes to use -> ([L.Transaction] -> [L.Box Ly.LibertyMeta]) -- ^ Result from previous parsers that will sort and filter incoming -- transactions -> MA.Mode ParseResult