首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有(显示([(Char,Char)] -> Char)的实例)

没有(显示([(Char,Char)] -> Char)的实例)
EN

Stack Overflow用户
提问于 2012-10-10 08:55:09
回答 2查看 3.2K关注 0票数 4

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

我实际上找到了一个答案,但是使用map函数,我无法得到它。

代码语言:javascript
复制
      lookUp :: Char -> [(Char, Char)] -> Char
      lookUp x [] = x
      lookUp x ( ( st,nd ): rst) | st == x = nd
                   | otherwise = lookUp x rst

我得到了这样的信息:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-10 09:02:46

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

代码语言:javascript
复制
lookUp 'c' [('b','n'), ('c','q')]

应该给你一个“Q”。

它抱怨说它不能显示一个函数。每当它说它没有包含->的内容的Show实例时,它都会抱怨无法显示函数。它只能显示对某些数据使用该函数的结果。

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

代码语言:javascript
复制
lookUp 'c'

是一个函数,它接受成对字符的列表,并为您提供一个字符。这就是它想要展示的,但不能。

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

祝你学习Haskell愉快!

票数 8
EN

Stack Overflow用户

发布于 2012-10-10 09:01:39

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

代码语言:javascript
复制
*Main> lookUp 'c'

lookUp 'c'这样的表达式是lookUp函数的部分求值/引用形式。其类型为:

代码语言:javascript
复制
*Main> :t lookUp 'c'
lookUp 'c' :: [(Char, Char)] -> Char

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

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

代码语言:javascript
复制
*Main> lookUp 'c' [ ('a','A'), ('b','B'), ('c','C') ]
'C'
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12810490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档