main = do
    putStrLn $myLast [1,2,3,4]

myLast :: [a] -> a
myLast [x] = x
myLast (_:xs) = myLast xs


当我尝试运行此代码时,出现以下消息:

“没有字面量“ 1”产生的(数字字符串)实例
可能的解决方法:为(数字字符串)添加实例声明”

当我使用列表[“ 1”,“ 2”,“ 3,” 4“]运行时,它运行良好。我没有指定类型,但不适用于int。

最佳答案

错误消息“没有实例可用于...”通常会引起误解。

你的问题就是这样


前奏>:t putStrLn
putStrLn ::字符串-> IO()


即该函数只能处理字符串,不能处理数字。常见的解决方案是先将要显示的内容转换为字符串:putStrLn (show x),但实际上,该组合作为更好的标准函数存在:

main = do
    print $ myLast [1,2,3,4]

10-06 10:31