我正在阅读“Learn you a Haskell”教程,我在这部分:
lucky :: (Integral a) => a -> String
当我尝试执行这一行时,我得到:
<interactive>:1:1: Not in scope: `lucky'
我究竟做错了什么?
这不是函数代码,它是函数签名,只能与函数定义一起保存在模块中并加载到 GHCi。
这个签名意味着你要定义一个函数lucky
,它获取一个Integer
并返回一个String
。
但是,如果您使用 GHCi 作为交互式解释器来编写函数,则可以让 Haskell 推断函数的类型,例如:
ghci> let lucky x = show (x + 1)
ghci> :t lucky
lucky :: (Num a) => a -> String
如果你想在 GHCI 中尝试,你可以使用多行命令块
:{
lucky :: Int -> String
lucky a = show(a)
:}
:type lucky
lucky :: Int -> String