
On Tue, 25 Dec 2007 11:05:59 +0200, Derek Elkins
On Mon, 2007-12-24 at 11:15 +0200, Cristian Baboi wrote:
How can I define a function to do the inverse operation ? g :: String -> ( a -> b )
This time I cannot see how referential transparency will deny it. What's the excuse now ?
Referential transparency has nothing to with this. The problem here is parametricity. However, if you give a non-parametric type (or add appropriate class constraints on a and b, or add (phantom) type information to the input), e.g. String -> (Int -> Int) then there is no trouble at all.
Thank you. I finished reading the Haskell Language Report and I noticed that the class Show and Read are "toys". I'll try to define some String -> (a -> b) functions some other time. I wonder if parametricity is the only problem. I guess that I'll have some problem with the arity of the result, but currying may help.