# non-empty: List-like structures with static restrictions on the number of elements

We provide the data type `NonEmpty`

that allows to store a list-like structure
with at least or exactly `n`

elements,
where `n`

is fixed in the type in a kind of Peano encoding
and is usually small.
The datatype is intended to increase safety
by making functions total that are partial on plain lists.
E.g. on a non-empty list, `head`

and `tail`

are always defined.

There are more such data types like `Optional`

and `Empty`

.
Together with `NonEmpty`

you can define a list type
for every finite set of admissible list lengths.

The datatype can be combined with Lists, Sequences and Sets
(from the `containers`

package).

The package needs only Haskell 98.

Similar packages:

`semigroups`

,`semigroupoids`

: restricted to lists, minimum number of elements: 1, provides more type classes tailored to the use of non-empty lists.`NonEmptyList`

: restricted to lists, minimum number of elements: 1`NonEmpty`

: restricted to lists, minimum number of elements: 1, designed for unqualified use of identifiers`Cardinality`

:`NeverEmptyList`

`mono-traversable`

:`Data.MinLen`

: allows to specify a minimum number of elements using type families and works also for monomorphic data structures like`ByteString`

Related packages:

`Stream`

: Lists that contain always infinitely many elements.`fixed-length`

: Uses the data structure of this package and defines a closed-world class for fixed-length lists and an according index type.`fixed-list`

: Uses the same data structure as this package but is intended for fixing the number of elements in a list. Requires multi-parameter type classes with functional dependencies.

## Modules

[Index]

## Downloads

- non-empty-0.3.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

#### Maintainer's Corner

For package maintainers and hackage trustees

Candidates

Versions [RSS] | 0.0, 0.1, 0.1.1, 0.1.2, 0.1.3, 0.2, 0.2.1, 0.3, 0.3.0.1, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.3.5 |
---|---|

Dependencies | base (>=4 && <5), containers (>=0.4.2 && <0.6), deepseq (>=1.3 && <1.5), QuickCheck (>=2.1 && <3), utility-ht (>=0.0.8 && <0.1) [details] |

License | BSD-3-Clause |

Author | Henning Thielemann <haskell@henning-thielemann.de> |

Maintainer | Henning Thielemann <haskell@henning-thielemann.de> |

Revised | Revision 2 made by HerbertValerioRiedel at 2019-01-06T09:34:48Z |

Category | Data |

Home page | http://hub.darcs.net/thielema/non-empty/ |

Source repo | this: darcs get http://hub.darcs.net/thielema/non-empty/ --tag 0.3 head: darcs get http://hub.darcs.net/thielema/non-empty/ |

Uploaded | by HenningThielemann at 2016-09-01T17:25:58Z |

Distributions | LTSHaskell:0.3.5, NixOS:0.3.4, Stackage:0.3.5 |

Reverse Dependencies | 21 direct, 20 indirect [details] |

Downloads | 10037 total (37 in the last 30 days) |

Rating | (no votes yet) [estimated by Bayesian average] |

Your Rating | |

Status | Docs available [build log] Last success reported on 2016-09-01 [all 1 reports] |