Hi Jeremy,

I'm on my phone right now so I can't link, but try searching for "IORef" and the "ST monad".

Chris

On Dec 18, 2017 10:06, "Jeremy Mikkola" <jeremy128@gmail.com> wrote:
I am quite certain I am not the first to try to do this, but my google-fu is failing me today.

How does one go about interpreting a language with mutable objects in Haskell?


The best approach I can think of is to represent the language's memory as a `Data.Map.Map RefID LanguageObject` where RefID is some type (probably Int) used as a reference. The LanguageObject structure might contain some values of type RefID to refer to other objects. Mutating an object involves simply replacing the value in the map at a given RefID.


I don't like this approach for two reasons:

1. Map lookups aren't very efficient compared with actual references to the value.

2. I have to re-invent garbage collection, removing objects from the map when they no longer have incoming references. (Unlike simple interpreters for languages with immutable values, I can't rely on Haskell's garbage collector to do the work for me.)


Is there a better approach?


- Jeremy

_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.