4 ms·
I don't think Haskell can do this, can have a growable linked list for example. 'last a' is 'last a', regardless what is between them (modulo shadowing and such
by bmacho 2y ago
I don't think Haskell can do this, can have a growable linked list for example. 'last a' is 'last a', regardless what is between them (modulo shadowing and such).
And I suspect that Prolog's Partial Instantiation is, while not mutating data, but it is mutating references somewhere
- skybrian 2y agoHaskell has cyclic data structures, which also can’t be implemented without a mutable reference somewhere, though it may be buried in the implementation. The difference is being able to define an incomplete data structure (with a forward reference) and then defining the target of the reference at runtime. Most languages will complain about an undefined reference if it’s not defined by the end of a module. You could do it with soft references, though. Use a symbol or string to refer to something and define it later.
- deleted 2y ago[deleted]
- bmacho 2y agoI rather think the fact the the same symbol/string always denotes the same thing is especially helpful for cyclic structures. Anyway I think I misunderstood the article, I thought they added things to a dictionary in the prolog repl, which would be impossible in haskell/ghci afaik.
- whateveracct 2y agoTechnically, Haskell laziness is just mutability under the hood :) And the "difference list" mentioned in the article is also in Haskell - although framed differently (more "functionally") type DList a = [a] -> [a] concat :: DList a -> DList a -> DList a concat = (.) toList :: DList a -> [a] toList d = d [] fromList :: [a] -> DList a fromList = (++)