4 ms·
We are still figuring out the details about array impurity. But in a nutshell if something is pure it should support substitution. For example: let x = 123; le
by jorkadeen 6y ago
We are still figuring out the details about array impurity. But in a nutshell if something is pure it should support substitution. For example:
let x = 123;
let y = (x, x)
If you substitute x into the pair you get the same result. So far, so good.
Now consider:
let x = [1, 2, 3];
x[0] = 5;
let y = x[0]
If you substitute x into the body of y you get a different result! The meaning of x[0] changed underneath you. We are very conservative and say that anything which touches an array is impure. Is this the best solution? no- but it is a reasonable/sound start.
(I am one of the authors of Flix).
- tw25513397 6y agoHey, thanks for replying! > But in a nutshell if something is pure it should support substitution. Neat, hadn't thought about it like that before. > If you substitute x into the body of y you get a different result! Heh, I guess that depends on "which" x. I recognize Flix doesn't allow shadowing as a defensive choice, but with respect to substitution, wouldn't this be equivalent to something like: let x = [1, 2, 3] let x = insert(0, 5, x) # treating it like Map [1] let y = get(0, x) IOW, it's not clear to me why the `x[0] = 5` step would be skipped when considering substitution. Hmm, per the substitution principle, is `x[0] = 5` pure? > We are very conservative and say that anything which touches an array is impure. Understandable given how difficult it is to reason about mutable things. ---- [1] Given the uniform function call syntax, I found it odd that the map is the last arg in the function. I originally assumed it would be m.insert(k, v) === insert(m, k, v)