Safe Haskell | None |
---|
Trees of predicates.
Exports names which conflict with Prelude names, so you probably want to import this module qualified.
- type Label = Text
- data Pdct a = Pdct Label (Node a)
- data Node a
- rename :: (Text -> Text) -> Pdct a -> Pdct a
- always :: Pdct a
- never :: Pdct a
- operand :: Text -> (a -> Bool) -> Pdct a
- and :: [Pdct a] -> Pdct a
- or :: [Pdct a] -> Pdct a
- not :: Pdct a -> Pdct a
- neverFalse :: Pdct a -> Pdct a
- neverTrue :: Pdct a -> Pdct a
- (&&&) :: Pdct a -> Pdct a -> Pdct a
- (|||) :: Pdct a -> Pdct a -> Pdct a
- boxPdct :: (b -> a) -> Pdct a -> Pdct b
- boxNode :: (b -> a) -> Node a -> Node b
- type Level = Int
- type IndentAmt = Int
- type ShowDiscards = Bool
- showPdct :: IndentAmt -> Level -> Pdct a -> [Chunk]
- eval :: Pdct a -> a -> Maybe Bool
- evaluate :: IndentAmt -> ShowDiscards -> a -> Level -> Pdct a -> (Maybe Bool, [Chunk])
- filter :: IndentAmt -> ShowDiscards -> Level -> (a -> Text) -> Pdct a -> [a] -> ([a], [Chunk])
- compareBy :: Text -> Text -> (a -> Ordering) -> Ordering -> Pdct a
- greaterBy :: Text -> Text -> (a -> Ordering) -> Pdct a
- lessBy :: Text -> Text -> (a -> Ordering) -> Pdct a
- equalBy :: Text -> Text -> (a -> Ordering) -> Pdct a
- greaterEqBy :: Text -> Text -> (a -> Ordering) -> Pdct a
- lessEqBy :: Text -> Text -> (a -> Ordering) -> Pdct a
- notEqBy :: Text -> Text -> (a -> Ordering) -> Pdct a
- parseComparerBy :: Text -> Maybe (Text -> Text -> (a -> Ordering) -> Pdct a)
- compare :: (Show a, Ord a) => Text -> Ordering -> a -> Pdct a
- greater :: (Show a, Ord a) => Text -> a -> Pdct a
- less :: (Show a, Ord a) => Text -> a -> Pdct a
- equal :: (Show a, Ord a) => Text -> a -> Pdct a
- greaterEq :: (Show a, Ord a) => Text -> a -> Pdct a
- lessEq :: (Show a, Ord a) => Text -> a -> Pdct a
- notEq :: (Show a, Ord a) => Text -> a -> Pdct a
- parseComparer :: (Show a, Ord a) => Text -> Maybe (Text -> a -> Pdct a)
The Pdct tree
And [Pdct a] | None of the Pdct in list may be Just False. An empty list or list with only Nothing is Just True. |
Or [Pdct a] | At least one of the Pdct in the list must be Just True. An empty list or list with only Nothing is Just False. |
Not (Pdct a) | Just True is Just False and vice versa; Nothing remains Nothing. |
NeverFalse (Pdct a) | Just True if the child is Just True; Nothing otherwise. |
NeverTrue (Pdct a) | Just False if the child is Just False; Nothing otherwise. |
Operand (a -> Maybe Bool) | An operand may return Just True or Just False to indicate success or failure. It may also return Nothing to indicate a discard. |
rename :: (Text -> Text) -> Pdct a -> Pdct aSource
Renames the top level of the Pdct. The function you pass will be applied to the old name.
Creating operands
operand :: Text -> (a -> Bool) -> Pdct aSource
Creates a new operand. The Pdct is Just True or Just False, never Nothing.
Creating Pdct from other Pdct
neverFalse :: Pdct a -> Pdct aSource
Turns an existing Pdct to one that never says False. If the underlying predicate returns Just True, the new Pdct also returns Just True. Otherwise, the Pdct returns Nothing.
neverTrue :: Pdct a -> Pdct aSource
Turns an existing Pdct to one that never says True. If the underlying predicate returns Just False, the new Pdct also returns Just False. Otherwise, the Pdct returns Nothing.
boxPdct :: (b -> a) -> Pdct a -> Pdct bSource
Given a function that un-boxes values of type b, changes a Pdct from type a to type b.
boxNode :: (b -> a) -> Node a -> Node bSource
Given a function that un-boxes values of type b, changes a Node from type a to type b.
Showing and evaluating Pdct
How many levels of indentation to use. Typically you will start this at zero. It is incremented by one for each level as functions descend through the tree.
type ShowDiscards = BoolSource
:: IndentAmt | Indent each level by this many spaces. |
-> ShowDiscards | If True, show discarded test results; otherwise, hide them. |
-> a | The subject to evaluate |
-> Level | How many levels deep in the tree we are. Typically you will start at level 0. This determines the level of indentation. |
-> Pdct a | |
-> (Maybe Bool, [Chunk]) |
Verbosely evaluates a Pdct.
:: IndentAmt | Indent each level by this many spaces. |
-> ShowDiscards | If True, show discarded test results; otherwise, hide them. |
-> Level | How many levels deep in the tree we are. Typically you will start at level 0. This determines the level of indentation. |
-> (a -> Text) | How to show each item. This is used to add a description of each item to the verbose output. This Text should be a one-line description, without any newlines. |
-> Pdct a | Use this Pdct to filter |
-> [a] | The list to filter |
-> ([a], [Chunk]) | The results of the filtering, and the verbose output indicating what was kept and discarded and why |
Filters a list of items by including only the ones for which the Pdct returns Just True. Also, renames each top-level Pdct so that the textual results include a description of the item being evaluated.
Helpers for building common Pdct
Non-overloaded
:: Text | How to show the item being compared; used to describe the Pdct |
-> Text | Description of the type of thing that is being matched |
-> (a -> Ordering) | How to compare an item against the right hand side. Return LT if the item is less than the right hand side; GT if greater; EQ if equal to the right hand side. |
-> Ordering | When subjects are compared, this ordering must be the result in order for the Pdct to be Just True; otherwise it is Just False. The subject will be on the left hand side. |
-> Pdct a |
Build a Pdct that compares items.
:: Text | The string with the comparer to be parsed |
-> Maybe (Text -> Text -> (a -> Ordering) -> Pdct a) |
Parses a string to find the correct comparer; returns the correct function to build a Pdct.
Overloaded
:: (Show a, Ord a) | |
=> Text | Description of the type of thing being matched |
-> Ordering | When subjects are compared, this ordering must be the result in order for the Pdct to be Just True; otherwise it is Just False. The subject will be on the left hand side. |
-> a | The right hand side of the comparison. |
-> Pdct a |
Overloaded version of compareBy
.