Ticket #666 (new feature request)

Opened 3 years ago

Last modified 2 years ago

Collection hierarchy proposal

Reported by: jpbernardy Assigned to: jpbernardy
Priority: normal Milestone: _|_
Component: libraries/base Version: 6.4.1
Severity: normal Keywords: Data collections
Cc: Difficulty: Unknown
Test Case: N/A Architecture: Unknown
Operating System: Unknown

Description (Last modified by jpbernardy)

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:

  1. 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
  2. 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

Change History

01/23/06 06:13:45 changed by jpbernardy

  • keywords changed from Data Collections to Data collections.

01/28/06 04:54:19 changed by jpbernardy

  • owner set to jpbernardy.
  • description changed.

01/28/06 07:40:49 changed by jpbernardy

solution is being built in [CollectionClassFramework]

01/30/06 03:29:51 changed by guest

What about removing all reference to lists (plain type []) from the interface. E.g.

fromList :: [i] -> c   

should be something like

fromCollection :: Collection d j i -> c

Since we plan to have

instance Collection [a] a a 

this should be possible.

Same thing for toList. In fact, we don't need toList, since it *is* fromCollection, right?

10/20/06 11:14:47 changed by igloo

  • testcase set to N/A.
  • milestone set to _|_.