Byl*_*tor 5 haskell instance show
在GHCI中,我键入以下内容:
map (+1) [1..10]
Run Code Online (Sandbox Code Playgroud)
返回[2,3,4,5,6,7,8,9,10,11]
到现在为止还挺好.
现在我输入:
min (map (+1) [1..10])
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
No instance for (Show ([b0] -> [b0]))
arising from a use of `print'
Possible fix: add an instance declaration for (Show ([b0] -> [b0]))
In a stmt of an interactive GHCi command: print it
Run Code Online (Sandbox Code Playgroud)
这对我来说很奇怪.为什么Haskell认为我正在尝试打印任何参数,我该如何解决这个问题呢?
ehi*_*ird 12
问题是min需要两个参数(并返回两个参数中的最小值),但是你只指定了一个参数; 你想要的minimum,在列表上工作的版本.
具体来说,出现此错误是因为GHCi尝试打印出您评估的表达式的结果,但在这种情况下,您已应用于min一个参数,从而生成另一个函数.1 GHCi尽职尽责地尝试打印出来,但它失败了,因为函数不是Show标准类型类的实例,可以表示为显示的字符串.
1在Haskell中,所有函数都接受一个参数,多个参数的函数是从返回其他函数的函数构建的; 例如,添加两个整数的函数可能具有类型Integer -> Integer -> Integer,即Integer -> (Integer -> Integer)- 一个函数接受一个Integer并返回另一个函数,该函数本身接受一个Integer,并返回一个Integer.值得庆幸的是,您不必经常以如此明确的方式考虑这一点,或者它会变得非常混乱!