没有实例 (显示 ([(字符,字符)] ->字符))



所以我必须制作一个函数,用它的第一个字母找到一对,然后返回第二个字母。

事实上,我找到了一个答案,但使用地图功能,我找不到。

lookUp :: Char -> [(Char, Char)] -> Char
lookUp x [] = x
lookUp x ( ( st,nd ): rst) | st == x = nd
| otherwise = lookUp x rst

我收到这样的信息:

No instance for (Show ([(Char, Char)] -> Char))
arising from a use of `print'
Possible fix:
add an instance declaration for (Show ([(Char, Char
In a stmt of an interactive GHCi command: print it

您的代码很好,只需要在ghci提示符下提供所有参数,例如

lookUp 'c' [('b','n'), ('c','q')]

应该给你"q"。

它抱怨它不能显示功能。只要它说没有有一个带有->的Show实例,它抱怨不能显示一个函数。它只能显示在某些数据上使用该函数的结果。

当你给它一些但不是全部的数据时,Haskell将其解释为一个新函数这需要下一个论点,所以

lookUp 'c'

是一个函数,它将获取一个字符对列表,并为您提供一个字符。这就是它试图展示的,但没能。

顺便说一句,几乎每次你都会收到"No instance for…"错误,这是因为你在论点上做了错事——漏掉了一些,把它们放进去错误的顺序。编译器的试图通过建议您添加一个实例,但您可能只需要检查是否提供了写入类型按正确顺序排列的论点。

学习Haskell玩得开心!

您似乎在ghci:中键入了类似的内容

*Main> lookUp 'c'

lookUp 'c'这样的表达式是lookUp函数的部分求值/curried形式。它的类型是:

*Main> :t lookUp 'c'
lookUp 'c' :: [(Char, Char)] -> Char

这正是ghci所说的没有Show实例的类型。

要测试您的功能,请确保同时提供xChar对列表:

*Main> lookUp 'c' [ ('a','A'), ('b','B'), ('c','C') ]
'C'

最新更新