Safe Haskell | Safe-Inferred |
---|

The `ArrowList`

type class, and a collection of list arrow related functions.
This typeclass can be used to embed functions producing multiple outputs into a
an arrow.

- class Arrow ar => ArrowList ar where
- unlist :: ArrowList ar => [b] `ar` b
- unite :: ArrowList ar => (a `ar` (b, b)) -> a `ar` b
- none :: ArrowList ar => a `ar` b
- concatA :: ArrowPlus ar => [a `ar` b] -> a `ar` b
- list :: ArrowList ar => (a `ar` b) -> a `ar` [b]
- empty :: ArrowList ar => (a `ar` b) -> a `ar` Bool
- isA :: ArrowList ar => (a -> Bool) -> a `ar` a
- ifA :: (ArrowList ar, ArrowChoice ar) => (a `ar` c) -> (a `ar` b) -> (a `ar` b) -> a `ar` b
- when :: (ArrowList ar, ArrowChoice ar) => (a `ar` a) -> (a `ar` b) -> a `ar` a
- guards :: (ArrowList ar, ArrowChoice ar) => (a `ar` c) -> (a `ar` b) -> a `ar` b
- filterA :: (ArrowChoice ar, ArrowList ar) => (a `ar` c) -> a `ar` a
- notA :: (ArrowList ar, ArrowChoice ar) => (a `ar` c) -> a `ar` a
- orElse :: (ArrowList ar, ArrowChoice ar) => (a `ar` b) -> (a `ar` b) -> a `ar` b
- maybeL :: ArrowList ar => Maybe a `ar` a
- optional :: (ArrowChoice ar, ArrowList ar) => (a `ar` b) -> a `ar` Maybe b

# ArrowList type class.

class Arrow ar => ArrowList ar whereSource

The `ArrowList`

class represents two possible actions:

- Lifting functions from one value to a list of values into a list arrow.
- Mapping a function over the result list of a list arrow.

(Arrow (ListTArrow m), Monad m) => ArrowList (ListTArrow m) |

# Creating list arrows.

unite :: ArrowList ar => (a `ar` (b, b)) -> a `ar` bSource

Take the output of an arrow producing two results and concatenate them into the result of the list arrow.

concatA :: ArrowPlus ar => [a `ar` b] -> a `ar` bSource

Collect the results of applying multiple arrows to the same input.

# Collecting the results.

list :: ArrowList ar => (a `ar` b) -> a `ar` [b]Source

Collect the entire results of an list arrow as a singleton value in the result list.

empty :: ArrowList ar => (a `ar` b) -> a `ar` BoolSource

Returns a `Bool`

indicating whether the input arrow produce any results.

# Conditional and filter arrows.

:: (ArrowList ar, ArrowChoice ar) | |

=> (a `ar` c) | Arrow used as condition. |

-> (a `ar` b) | Arrow to use when condition has results. |

-> (a `ar` b) | Arrow to use when condition has no results. |

-> a `ar` b |

Use the result a list arrow as a conditional, like an if-then-else arrow.
When the first arrow produces any results the *then* arrow will be used,
when the first arrow produces no results the *else* arrow will be used.

:: (ArrowList ar, ArrowChoice ar) | |

=> (a `ar` a) | The arrow to apply, |

-> (a `ar` b) | when this conditional holds. |

-> a `ar` a |

Apply a list arrow only when a conditional arrow produces any results.
When the conditional produces no results the output arrow *behaves like the identity*.
The *second* input arrow is used as the conditional, this allow
you to write: ` a `when` c `

:: (ArrowList ar, ArrowChoice ar) | |

=> (a `ar` c) | When this condition holds, |

-> (a `ar` b) | then apply this arrow. |

-> a `ar` b |

Apply a list arrow only when a conditional arrow produces any results.
When the conditional produces no results the output arrow *produces no results*.
The *first* input arrow is used as the conditional, this allow you
to write: ` c `guards` a `

filterA :: (ArrowChoice ar, ArrowList ar) => (a `ar` c) -> a `ar` aSource

Filter the results of an arrow with a predicate arrow, when the filter condition produces results the input is accepted otherwise it is excluded.

notA :: (ArrowList ar, ArrowChoice ar) => (a `ar` c) -> a `ar` aSource

Negation list arrow. Only accept the input when the condition produces no output.

orElse :: (ArrowList ar, ArrowChoice ar) => (a `ar` b) -> (a `ar` b) -> a `ar` bSource

Apply the input arrow, when the arrow does not produces any results the
second fallback arrow is applied.
Likely written infix like this ` a `orElse` b `