# 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.

**Andrejs Sisojevs**

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`