Ticket #666 (closed feature request: invalid)
Collection hierarchy proposal
| Reported by: | jpbernardy | Owned by: | jpbernardy |
|---|---|---|---|
| Priority: | normal | Milestone: | Not GHC |
| Component: | libraries/base | Version: | 6.4.1 |
| Keywords: | Data collections | Cc: | pho@…, merehap@… |
| Operating System: | Unknown/Multiple | Architecture: | Unknown/Multiple |
| Type of failure: | None/Unknown | Difficulty: | Unknown |
| Test Case: | N/A | Blocked By: | |
| Blocking: | Related Tickets: |
Description (last modified by jpbernardy) (diff)
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
- collections can be converted to/from Updatable subclass with help of usual freeze/thaw operators
- 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
Change History
Note: See
TracTickets for help on using
tickets.
