Open robstewart57 opened 9 years ago
I've pushed a commit for insertIfAbsent
here:
https://github.com/robstewart57/lvars/commit/98e958e00686fe433dfae2fa111f3ad312f9a9ba
Is this a sensible addition to the SLMap module? If so, I'd happily submit a pull request. If not, I'd be interested in knowing why. Thanks!
Thanks! Yes, this is sensible, but the type has to be right. This is a nondeterministic effect.
Thus in addition to HasPut
it should have HasIO
. IO
is the sin bin and is the name for everything nondeterministic here.
Note this will mean that any computation containing this operation can be only be done with a runParIO
type of operation.
@DreamLinuxer - can Ctrie implement this easily or not?
Ditto for delete operations.
The Data.LVar.SLMap.insert function throws the runtime error "Multiple puts to one entry in an IMap!" if a 2nd insertion for the same key is attempted.
Is there a fundamental objection to an additional
insertIfAbsent
in SLMap with different semantics, namely that the 1st value written to a key entry succeeds, subsequent attempts to the same key are silently ignored? With the same type, i.e.This is the implementation of the underlying
putIfAbsent_
used byputIfAbsent
:It looks like the
putIfAbsent
in the skip list map module simply ignores subsequent write attempts to a key entry, returningFound v
if a value already exists. Could this be lifted into the SLMap API as an alternative insertion functioninsertIfAbsent
in the way I describe?Not sure who subscribes to GitHub issues for the lvars repo, cc @osa1 @rrnewton .