[Haskell-beginners] Confusing Show/print error
Fernando Basso
fernandobasso.br at gmail.com
Sun Sep 12 10:57:38 UTC 2021
Hi Lawrence.
Other people have given some answers, but perhaps saying it in a
different way may also help.
For starters, we have to remember that functions do not have instances
of `Show' [1]:
To exemplify, if we have a function and try to print it, we get an error:
f :: a -> a
f x = x
$ ghci
Prelude> :load fn.hs
*Main> f
<interactive>:2:1: error:
• No instance for (Show (a0 -> a0)) arising from a use of ‘print’
(maybe you haven't applied a function to enough arguments?)
• In a stmt of an interactive GHCi command: print it
*Main>
This is just to exemplify that there is nothing wrong with *your*
function. As you see, I produced the same error with a much simpler
function. So, as others mentioned, it looks like you just tried to print
your function, which is not possible.
I would also like to add a note about emacs haskell-mode's REPL that is
related to this topic. haskell-mode's REPL runs `:type' behind the
scenes when we try to print functions. It might give the impression that
we can actually print functions, or that functions have instance of
`Show', which is not the case.
In emacs + haskell-mode, the variable
haskell-interactive-types-for-show-ambiguous
is supposed to be `t' by default (instead of `nil'). In any case, you
can play with it and try to print functions directly by just typing
their name [2]:
(custom-set-variables
'(haskell-interactive-types-for-show-ambiguous t)
References:
• [1] https://wiki.haskell.org/Show_instance_for_functions
• [2] https://haskell.github.io/haskell-mode/manual/latest/Interactive-Haskell.html#Type-of-expressions
On Thu, Sep 09, 2021 at 04:25:58PM -0500, Galaxy Being wrote:
> I've got this
>
> import Data.Tuple
> fswp :: (a, b) -> (b, a)
> fswp = Data.Tuple.swap
>
> and get this
>
> • No instance for (Show ((a0, b0) -> (b0, a0)))
> arising from a use of ‘print’
> (maybe you haven't applied a function to enough arguments?)
> • In a stmt of an interactive GHCi command: print it
>
> Not sure why or what to do to correct it.
>
> ⨽
> Lawrence Bottorff
> Grand Marais, MN, USA
> borgauf at gmail.com
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
More information about the Beginners
mailing list