(this was accidentally sent off-list, reposting here a day later)

> Le 20 févr. 2017 à 12:17, Matthew Johnson <[email protected]> a écrit :
> 
>> e) Generic Containers:
>> Generic containers that impose requirements on their elements will pose some 
>> additional problems, for instance: `Set.insert` needs to call `hashValue` 
>> and `==` on its elements, making the purity of `Set.insert` constrained by 
>> the purity of those functions. Without a way to express this kind of 
>> conditional purity, `Set` and `Dictionary` cannot be pure.
> 
> Could we use a mechanism similar to `rethrows` to address this kind of 
> transitive purity?  We have already discussed something along those lines for 
> handling functions passed as arguments.  Maybe that mechanism could be 
> designed to handle this use case as well.

Similar, yes. But more complicated too. In pseudo code, this is what you'd have 
to express for `Set.insert`:

        pure(where: Element.hashValue is pure, Element.== is pure)
        func insert(_ element: Element) { ... }

Then the compiler can enforce that `insert` only does things that are allowed 
in a pure function, but can ignore the purity of Element.hashValue and 
Element.== because the caller will check for that that.

-- 
Michel Fortin
https://michelf.ca

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to