[Haskell-cafe] A curios monad
Martijn van Steenbergen
martijn at van.steenbergen.nl
Fri Dec 12 05:48:37 EST 2008
Andrew Coppin wrote:
> In other words, you can store a value (of arbitrary type) under a unique
> key. The monad chooses what key for you, and tells you the key so you
> can look up or alter the value again later. Under the covers, it uses
> Data.Map to store stuff. I used some trickery with existential
> quantification and unsafeCoerce (!!) to make it work. Notice the sneaky
> phantom type in the key, telling the type system what type to coerce the
> value back to when you read it. Neat, eh?
I did exactly that in my Yogurt project[1]. It felt dirty but in a good
way, mostly because the interface was exactly what I needed. :-)
> ...until I realised that somebody that somebody could generate a key in
> one run and then try to use it in another run. o_O
I've worried about this but I couldn't find a good code example of when
this goes wrong. Can you? Without using any of the unsafeXxx functions,
of course.
Maybe I should build my monad on top of the ST monad if that makes
things safer.
Martijn.
[1]
http://hackage.haskell.org/packages/archive/Yogurt/0.2/doc/html/Network-Yogurt-Mud.html#5
More information about the Haskell-Cafe
mailing list