| Copyright | Copyright (c) 2010--2021 wren gayle romano |
|---|---|
| License | BSD |
| Maintainer | wren@cpan.org |
| Stability | provisional |
| Portability | Haskell98 + CPP |
| Safe Haskell | None |
| Language | Haskell98 |
Data.Or
Contents
Description
A data type for non-exclusive disjunction. This is helpful for
things like a generic merge function on sets/maps which could
be union, mutual difference, etc. based on which Or value a
function argument returns. Also useful for non-truncating zips
(cf. zipOr) and other cases where you sometimes want an Either
and sometimes want a pair.
Synopsis
- data Or a b
- elimOr :: (a -> c) -> (a -> b -> c) -> (b -> c) -> Or a b -> c
- eitherOr :: Either a b -> Or a b
- zipOr :: [a] -> [b] -> [Or a b]
- zipOrWith :: (Or a b -> c) -> [a] -> [b] -> [c]
- zipOrBy :: (Or a b -> c -> c) -> c -> [a] -> [b] -> c
- zipOrWithBy :: (Or a b -> c) -> (c -> d -> d) -> d -> [a] -> [b] -> d
Documentation
A data type for non-exclusive disjunction.
elimOr :: (a -> c) -> (a -> b -> c) -> (b -> c) -> Or a b -> c Source #
Functional eliminator for Or.
Non-truncating zipping functions
zipOr :: [a] -> [b] -> [Or a b] Source #
A variant of zip which exhausts both lists, annotating which
list the elements came from. It will return zero or more Both,
followed by either zero or more Fst or else zero or more Snd.
On GHC this is a "good producer" for list fusion.
zipOrBy :: (Or a b -> c -> c) -> c -> [a] -> [b] -> c Source #
A variant of zipOr with a custom list-homomorphism.