
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