[Haskell-cafe] "show" for functional types
haskell at sleepingsquirrel.org
Fri Mar 31 23:10:56 EST 2006
Brian Hulley wrote:
] Here is another example. Consider two functions f and g which, given the
] same inputs, always return the same outputs as each other such as:
] f x = x + 2
] g x = x + 1 + 1
] Now since f and g compute the same results for the same inputs, anywhere in
] a program that you can use f you could just replace f by g and the
] observable behaviour of the program would be completely unaffected. This is
] what referential transparency means.
] However, if you allowed a function such as superShow, superShow f == "x +
] 2" and superShow g == "x + 1 + 1" so superShow f /= superShow g thus you
] could no longer just use f and g interchangeably, since these expressions
] have different results.
Hmm. It must be a little more complicated than that, right? Since
after all you can print out *some* functions. That's what section 5 of
_Fun with Phantom Types_ is about. Here's a slightly different example,
using the AbsNum module from...
> import AbsNum
> f x = x + 2
> g x = x + 1 + 1
> y :: T Double
> y = Var "y"
> main = do print (f y)
> print (g y)
...which results in...
(Var "y")+(Const (2.0))
(Var "y")+(Const (1.0))+(Const (1.0))
...is this competely unrelated?
More information about the Haskell-Cafe