[Haskell-cafe] "show" for functional types

Fritz Ruehr fruehr at willamette.edu
Sat Apr 1 05:01:24 EST 2006


On Mar 31, 2006, at 11:43 PM, Henning Thielemann wrote:

> 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.

You can use type classes to implement this for *finite* functions, 
i.e., total functions over types which are Enum and Bounded (and 
Show-able), using for example a tabular format for the show:

	> putStr (show (uncurry (&&)))
	(False,False)   False
	(False,True)    False
	(True,False)    False
	(True,True)     True

It's especially easy to justify showing functions in this context, 
since one is providing the entire extension of the function (and in a 
nice canonical order, given the Enum class of the domain type). You can 
also extend the Enum and Bounded classes to functions over Enum and 
Bounded types, allowing fun stuff like this:

	> fromEnum (&&)
	4
	> (toEnum 4 :: Bool->Bool->Bool) True False
	False

(Unfortunately, although the tabular show style thus extends to 
higher-order functions, it doesn't work well.)

Of course, this is all a bit of a hack, since the straightforward 
implementation really only accounts for total functions ... .

   --  Fritz



More information about the Haskell-Cafe mailing list