# Cardinality: Measure container capacity. Use it to safely change container.

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

Versions | 0.1, 0.2 |
---|---|

Change log | NEWS |

Dependencies | base (==4.*), containers, mtl [details] |

License | LicenseRef-LGPL |

Copyright | Copyright (c) 2010 Andrejs Sisojevs |

Author | Andrejs Sisojevs <andrejs.sisojevs@nextmail.ru> |

Maintainer | Andrejs Sisojevs <andrejs.sisojevs@nextmail.ru> |

Category | Data |

Uploaded | by AndreySisoyev at Wed Jan 20 13:19:09 UTC 2010 |

Distributions | NixOS:0.2 |

Downloads | 1187 total (8 in the last 30 days) |

Rating | (no votes yet) [estimated by rule of succession] |

Your Rating | |

Status | Docs uploaded by user Build status unknown [no reports yet] Hackage Matrix CI |

## Modules

[Index]

## Downloads

- Cardinality-0.2.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)