Collection hierarchy proposal
Well, i am as user of libraries just wants consistency of using different data structures for the same tasks. for example, i want to have one indexing operator instead of !, !! and find. so, it's my hope-list:
- all collections are divided into 3-4 classes: arrays/lists, maps and sets. arrays/lists have sequential indexes in some range while maps have sparse indexes. also each class have an Updatable subclass
- collections in one class can be collected to each other with one (better universal) operator, such as:
let list = cvt array
let tree = cvt map
}}}
3. collections can be converted to/from Updatable subclass with help of usual freeze/thaw operators
4. all operations which are currently implemented in Data.List, Array.*, Map, Set, HashTable modules must be bound to one of these classes, with duplicates (such as !/!!) removed. now i see the following class hierarchy:
{{{
Collection (map, size, values)
SetLike (union, diff)
Set
Map
Indexed (indexes, !)
Map
Sequential (reverse, head)
Array
List (tail)
i give in parentheses examples of operations which are supported on each level of hierarchy
this will give possibility to write datastructure-independent algorithms and easily convert data to the data type which are best for each part of the program, smthg like:
a :: Map Int String <- read str
algorithm1 a
let b :: Hash Int String <- cvt a
algorithm2 b
c :: HashTable Int String <- thaw b
algorithm3 c