On Fri, 31 Mar 2006, Greg Buchholz wrote:
In section 5 of _Fun with Phantom Types_, Hinze states...
"Let us move on to one of the miracles of theoretical computer
science. In Haskell, one cannot show values of functional types. For
reasons of computability, there is no systematic way of showing
functions and any ad-hoc approach would destroy referential transparency
(except if show were a constant function). For instance, if show yielded
the text of a function definition, we could distinguish, say, quick sort
from merge sort. Substituting one for the other could then possibly
change the meaning of a program."
I find this statement misleading. I do not expect that (2+2::Int) is shown
as "2+2", but as "4". Analogously I don't expect 'toLower' to be shown as
"toLower". There are certainly several descriptions of the same value,
independent from whether the value is a number or a function. So what _is_
a function? A function is a set of assignments from arguments to function
values. That is, a natural way to show a function would be to print all
assigments. Say
Prelude> toLower
[('A','a'), ('a','a'), ('1', '1'), ...
In principle this instance of 'show' could be even implemented, if there
would be a function that provides all values of a type.
Another example
Prelude> sort :: [Int] -> [Int]
[([0],[0]), ([0,1],[0,1], ([1,0],[0,1]), ...
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe