Skip to content

Improved representation for Set and Map #1073

Open
@meooow25

Description

@meooow25

Consider changing the representation to avoid Tips.

Suggested by wrengr in #1069 (comment)


I'm thinking

data Set a
  = Bin !Int !a !(Set a) !(Set a)
  | Two !a !a
  | One !a
  | Nil -- Invariant: Never a child of Bin

This hopefully improves performance but certainly improves memory usage. Compared to today, for n elements we can avoid storing ~n Tips and ~n/2-2n/3 Ints.

Alternately, as midway between current and the above,

data Set a
  = Bin !Int !a !(Set a) !(Set a)
  | One !a
  | Tip
-- Invariant: Bin _ x Tip Tip is always replaced with One x

This puts the match-on-singleton idea of #1069 into the type. Avoids storing ~2n/3-n Tips and ~n/3-n/2 Ints.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions