没有实例(Show([(Char,Char)] - > Char))

Nic*_*ick 4 haskell compiler-errors ghci

所以我必须创建一个函数,找到一对第一个字母并返回第二个字母.

我实际上找到了一个答案,但有地图功能,我无法得到它.

      lookUp :: Char -> [(Char, Char)] -> Char
      lookUp x [] = x
      lookUp x ( ( st,nd ): rst) | st == x = nd
                   | otherwise = lookUp x rst
Run Code Online (Sandbox Code Playgroud)

我得到这个消息:

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
Run Code Online (Sandbox Code Playgroud)

And*_*ewC 8

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

lookUp 'c' [('b','n'), ('c','q')]
Run Code Online (Sandbox Code Playgroud)

应该给你'q'.

它抱怨它无法显示功能.任何时候它说它没有一个Show实例用于 - > in,它抱怨它无法显示一个函数.它只能显示在某些数据上使用该函数的结果.

当你给它一些但不是所有数据时,Haskell将它解释为一个接受下一个参数的新函数,所以

lookUp 'c'
Run Code Online (Sandbox Code Playgroud)

是一个函数,它将采用一对字符列表并为您提供一个字符.这就是它试图展示的东西,但却不能.

顺便说一下,几乎每次你得到一个"No instance for ..."错误,都是因为你对参数做错了 - 错过了一些,把它们放错了.编译器试图通过建议您添加实例来提供帮助,但可能您只需要检查是否以正确的顺序提供了写入类型的参数.

学习Haskell玩得开心!


Eri*_*ikR 5

看来您在ghci中输入了以下内容:

*Main> lookUp 'c'
Run Code Online (Sandbox Code Playgroud)

类似的表达式lookUp 'c'是该lookUp函数的部分求值/咖喱形式。它的类型是:

*Main> :t lookUp 'c'
lookUp 'c' :: [(Char, Char)] -> Char
Run Code Online (Sandbox Code Playgroud)

ghci表示没有Show实例的确切类型。

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

*Main> lookUp 'c' [ ('a','A'), ('b','B'), ('c','C') ]
'C'
Run Code Online (Sandbox Code Playgroud)