Name: Cardinality Synopsis: Measure container capacity. Use it to safely change container. Description: 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. Version: 0.1 Copyright: Copyright (c) 2010 Andrejs Sisojevs License: LGPL License-File: COPYRIGHT Author: Andrejs Sisojevs Maintainer: Andrejs Sisojevs Stability: experimental Category: Data Tested-With: GHC == 6.10.4 Cabal-Version: >= 1.6 Build-Type: Simple Extra-Source-Files: COPYRIGHT COPYING doinst.sh examples/CardinalityRangeCompareTest.hs examples/ContainerTransformsTests.hs examples/HelloWorld.hs Library Build-Depends: base >= 4 && < 5, containers, mtl Exposed-Modules: Data.Cardinality Data.CardinalityRange Data.EmptySet Data.Intersectable Data.NeverEmptyList Extensions: DeriveDataTypeable