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

[ data, library ] [ Propose Tags ]

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

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1, 0.2
Change log NEWS
Dependencies base (>=4 && <5), 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 2010-01-20T13:19:09Z
Distributions NixOS:0.2
Downloads 2298 total (7 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]