[luca_ciciriello@hotmail.com: Re: [Haskell-beginners] reflection]

Well, there are a few things I could suggest for you to look at:
* the hint package [1] for runtime Haskell interpretation
* look at xmonad [2] for an example of a program which recompiles and reloads itself on the fly
* the haskell-src-exts library [3] for a full-featured Haskell parser/pretty printer
There is no way to actually inspect and modify the structure of a
running Haskell program in memory; it is simply not stored in a format
which would let you do this (it is highly optimized and compiled).
However, using the above tools I imagine you should be able to
accomplish what you want.
-Brent
[1] http://hackage.haskell.org/package/hint
[2] http://xmonad.org/
[3] http://hackage.haskell.org/package/haskell-src-exts
----- Forwarded message from Luca Ciciriello
On Tue, Jan 05, 2010 at 09:43:21AM +0100, Luca Ciciriello wrote:
Hi. Someone has performed or know how to use reflection in Haskell? I've found something on google, but that stuff seems to me very confusing.
It depends what you mean by "reflection". Can you give an example of the sorts of things you'd like to do? Generally speaking, Haskell doesn't support "reflection" in the same way as many other languages do, but there are usually idiomatic ways to accomplish the same things you would use reflection for.
-Brent _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
----- End forwarded message -----

Brent, thanks for your precious help. Luca On Jan 5, 2010, at 6:41 PM, Brent Yorgey wrote:
Well, there are a few things I could suggest for you to look at:
* the hint package [1] for runtime Haskell interpretation * look at xmonad [2] for an example of a program which recompiles and reloads itself on the fly * the haskell-src-exts library [3] for a full-featured Haskell parser/pretty printer
There is no way to actually inspect and modify the structure of a running Haskell program in memory; it is simply not stored in a format which would let you do this (it is highly optimized and compiled). However, using the above tools I imagine you should be able to accomplish what you want.
-Brent
[1] http://hackage.haskell.org/package/hint [2] http://xmonad.org/ [3] http://hackage.haskell.org/package/haskell-src-exts
----- Forwarded message from Luca Ciciriello
----- From: Luca Ciciriello
Date: Tue, 5 Jan 2010 18:20:13 +0100 To: Brent Yorgey Subject: Re: [Haskell-beginners] reflection My need is to have a program that at run-time should be able to read itself and eventually modify itself. I've used this reflection in Common LISP. I don't know if this is possible in Haskell using GHC or GHCi (perhaps there are more chances inside the eval-loop of GHCi).
Thanks anyway for the answer.
Luca.
On Jan 5, 2010, at 5:58 PM, Brent Yorgey wrote:
On Tue, Jan 05, 2010 at 09:43:21AM +0100, Luca Ciciriello wrote:
Hi. Someone has performed or know how to use reflection in Haskell? I've found something on google, but that stuff seems to me very confusing.
It depends what you mean by "reflection". Can you give an example of the sorts of things you'd like to do? Generally speaking, Haskell doesn't support "reflection" in the same way as many other languages do, but there are usually idiomatic ways to accomplish the same things you would use reflection for.
-Brent _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
----- End forwarded message ----- _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners

Brent Yorgey wrote:
There is no way to actually inspect and modify the structure of a running Haskell program in memory; it is simply not stored in a format which would let you do this (it is highly optimized and compiled).
There is also a very good theoretical reason for this: referential transparency. For example, the expressions 2+4 , 2*3 and 6 all denote the same integer. Referential transparency means that no function f :: Int -> Something may distinguish between equal integers, i.e. it must return the same result, no matter which of the expressions is given as argument: f (2+4) = f (2*3) = f 6 Referentially transparency is awesome for reasoning about programs, but it does preclude many forms of reflection. (A standard trick is to use type classes to inspect expressions, but you still have to be explicit about expressions versus the values they denote.) Regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com
participants (3)
-
Brent Yorgey
-
Heinrich Apfelmus
-
Luca Ciciriello