# Cardinality

Measure container capacity. Use it to safely change container.

 Latest on Hackage: 0.2

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

This module introduces typeclasses

• `HasCard` = "Has cardinality". In other words, "it's possible to measure current count of elements for this container"

• `HasCardT` = "Has cardinality (for container types of kind `(* -> *)`)". In other words, "it's possible to measure current count of elements for this container (for container types of kind `(* -> *)`)"

• `HasCardConstr` = "Has cardinality constraint". In other words, "there is a capacity constraint for this container".

• `HasCardConstrT` = "Has cardinality constraint (for container types of kind `(* -> *)`)". In other words, "there is a capacity constraint for this container type of kind `(* -> *)`".

• `HasCardUCT` = "Has cardinality-unsafe container transform". Define transform that may thow an error, if contents of `from` don't fit in `to` .

• `HasCardUCT_T` = "Has cardinality-unsafe container transform (for container types of kind `(* -> *)`)". Same thing as `HasCardUCT`, but for containers of kind `(* -> *)`.

No, it's not about playing cards. It's about cardinalities. Wikipedia: "/In mathematics, the cardinality of a set is a measure of the number of elements of the set. For example, the set A = 2, 4, 6 contains 3 elements, and therefore A has a cardinality of 3./" In this package I dare to extend the definition a bit to "C. is a measure of the number of elements in a container"

Usual containers are (together with their cardinality ranges):

• `Identity a` (1 element)

• `Maybe a` (0..1 element)

• `[a]` (0..inf elements)

• `Map k e` (0..inf elements)

I extended this to the folowing list:

• `EmptySet a` (0 elements)

• `Identity a` (1 element)

• `Maybe a` (0..1 element)

• `[a]` (0..inf elements)

• `NeverEmptyList a` (1..inf elements)

• `Map k e` (0..inf elements)

Typeclass `HasCardUCT` together with function `sContTrans` (safe container transform) provides a facility to safely change container from one to another keepeng the content. If content doesn't fit to target container, `Nothing` is returned. However, when transforming from list `[a]` to `(Maybe a)` it won't check list length further first 2 elements. The complexity and power of this package is that it provides a facility to lazily evaluate amount of content in the container.

To interface package functions

``import Data.Cardinality``
Depends on 3 packages:
Used by 1 package: