Hello to all Haskell experts!
I have two more beginner questions: I ran into texts mentioning types of "mutable" data.
Does that mean the data is actually changed in place? How would I go about implementing such a data type,
as I expect much higher performance in some applications? Do I do that with the Foreign module and Ptr
types?

The second question is this: say I have some functions working with a data type, say a graph.
Some of them might want to change the graph and return a new graph as a result.
If they change say only one graph node, it would be extremely bad for performance if the whole graph got copied
any time such a change takes place. Is the compiler smart enough to make the code only copy the parts
that have changed (copying lazily, so to speak)? Is that even possible?

Thank you in advance for any hint!
Christian