Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is there no Show instance for functions?

Tags:

haskell

Just a quick conceptual question, I am currently trying to learn and understand Haskell better.

I know the Show function is used to convert values to strings, but why can't function types be used with show?

Prelude> (\x -> x*3)

<interactive>:7:1:
    No instance for (Show (a0 -> a0))
      arising from a use of `print'
    Possible fix: add an instance declaration for (Show (a0 -> a0))
    In a stmt of an interactive GHCi command: print it
Prelude>
like image 698
Justin Tyler Avatar asked Apr 04 '13 23:04

Justin Tyler


1 Answers

It's not that they can't, but that there's not usually a good reason to.

But if you'd like, you definitely can:

Prelude> :{
Prelude| instance Show (a -> b) where
Prelude|    show _ = "A function."
Prelude| :}
Prelude> print (\x -> x + 7)
A function.
Prelude> print (\a b c -> a + b + c)
A function.

If you'd like to show the textual representation of the function, well - you can't do that. Unlike metaprogramming languages like Ruby, JS, etc, Haskell code very little knowledge of its own internals.

like image 169
amindfv Avatar answered Sep 27 '22 00:09

amindfv