Carried over form IRC to placeholder the conversation as I saw it:

We define the following in S06 as immutable types:

    List        Lazy Perl list (composed of Seq and Range parts)
    Seq         Completely evaluated (hence immutable) sequence
    Range       Incrementally generated (hence lazy) sequence
    Set         Unordered Seqs that allow no duplicates
    Junction    Sets with additional behaviours
    Pair        Seq of two elements that serves as a one-element Mapping
    Mapping     Pairs with no duplicate keys

It seems to me that there are three core attributes, each of which has two states:

        Mutability: true, false
        Laziness: true, false
        Ordered: true, false

There are, thus, eight types of containers, but two (unordered, mutable, lazy/eager) don't really work very well, so let's say 6:

        Ordered,   Immutable, Eager:  Seq
        Ordered,   Immutable, Lazy:   Range and/or Seq of Range?
        Ordered,   Mutable,   Eager:  ?
        Ordered,   Mutable,   Lazy:   Array
        Unordered, Immutable, Eager:  Set
        Unordered, Immutable, Lazy:   x and/or Set of x?

In that last example, x is "an unordered range", though we don't have such a type. Basically, this is something like any(a..b).

The real question in my mind, though is this: do we need to call something Lazy (as we currently do in S29), or should we just call it List or Array depending on its mutability?


Reply via email to