Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in / Register
GHC
GHC
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Locked Files
  • Issues 4,394
    • Issues 4,394
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
    • Iterations
  • Merge Requests 373
    • Merge Requests 373
  • Requirements
    • Requirements
    • List
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Test Cases
  • Operations
    • Operations
    • Incidents
    • Environments
  • Analytics
    • Analytics
    • CI / CD
    • Code Review
    • Insights
    • Issue
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Glasgow Haskell Compiler
  • GHCGHC
  • Issues
  • #666

Closed
Open
Opened Jan 23, 2006 by jpbernardy@trac-jpbernardy

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:

  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
Edited Mar 09, 2019 by jpbernardy
Assignee
Assign to
Not GHC
Milestone
Not GHC
Assign milestone
Time tracking
None
Due date
None
Reference: ghc/ghc#666