54
votes

I'm going through the 'Learn you a Haskell' tutorial and I am at this part:

lucky :: (Integral a) => a -> String

When I try to execute this line I get:

<interactive>:1:1: Not in scope: `lucky'

What am I doing wrong?

2
Possible duplicate of Multi-line commands in GHCiAndrew Grimm

2 Answers

61
votes

This is not a function code, it's function signature which can only be saved in a module along with function definition and the be loaded to GHCi.

This signature means that you're going to define a function lucky which gets an Integer and returns a String.

However if you're composing your functions using GHCi as interactive interpreter, you can let Haskell infer your function's type, e. g.:

ghci> let lucky x = show (x + 1)
ghci> :t lucky
lucky :: (Num a) => a -> String
12
votes

If you want to try in the GHCI you could use multi-line command block

:{
lucky :: Int -> String
lucky a = show(a)
:}

:type lucky 
lucky :: Int -> String