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):

I extended this to the folowing list:

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`