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

Reply via email to