首页 > 解决方案 > Haskell 中的错误。请指导我如何解决这个问题

问题描述

import Data.List
step :: [Int] -> String -> [Int] 
step (x:y:ys) "*" = (x * y):ys
step (x:y:ys) "+" = (x + y):ys
step (x:y:ys) "-" = (y - x):ys
step xs numberString = read numberString:xs

这是我不断收到的代码和错误,请提供任何帮助。谢谢你。

*Main> step [2+6]: this is what i put into my terminal

<interactive>:5:1: error:
    • No instance for (Show (String -> [Int]))
        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> 

标签: haskell

解决方案


step [2+6]你只是部分应用你的函数,所以返回值不是一个 list ,[Int]而是一个 function String -> [Int]。(部分应用一个函数意味着只提供它需要的一些参数,并返回一个接收其余参数的函数。是的,你可以在 Haskell 中做到这一点!)

您看到的错误只会出现在终端中,因为 ghci 尝试应用于show每条语句,但函数无法显示。

因此,如果您想完全应用您的函数来查看它的实际效果,您需要提供它需要的所有参数,即

step [1, 2, 3] "+"

推荐阅读