【问题标题】:Haskell Couldn't match type ‘[Char]’ with ‘Char’ list comprehensionHaskell 无法将类型“[Char]”与“Char”列表理解匹配
【发布时间】:2017-03-14 12:45:09
【问题描述】:

所以我正在尝试浏览电影列表并输出每部电影的标题,编译器说无法将类型 [Char]Char 匹配。 问题是我想要[Char](一个字符串)而不是Char??我很困惑为什么它需要一个字符而不是一个字符串?

fas:: [Film] -> String
fas database = [title x | x <- database]

test.hs:55:27: error:
    • Couldn't match type ‘[Char]’ with ‘Char’
      Expected type: Char
        Actual type: String
    • In the expression: title x
      In the expression: [title x | x <- database]
      In an equation for ‘fas’:

          fas database = [title x | x <- database]

任何帮助将不胜感激,我可能措辞不佳,这在尝试搜索其他有同样问题的人时并没有帮助我:/

问候,新手

【问题讨论】:

  • fas database = map title database 或只是fas = map title 比这里的列表理解更可取。

标签: list haskell list-comprehension


【解决方案1】:

如果我理解您想要正确执行的操作,签名应该是:

fas:: [Film] -&gt; <b>[</b>String<b>]</b>

确实,一个字符串列表

为什么?因为您将每部电影都映射到其标题。现在,由于 title 是 String,因此结果是 Strings 的列表。

编译器实际上以与你解释它不同的方式抱怨:因为type String = [Char],你隐含地写道:

fas :: [Film] -> [Char] -- incorrect

应该是这样的:

fas :: [Film] -> [[Char]]

【讨论】:

  • “为什么?因为你将每部电影都映射到它的标题。” - 这很有意义,非常感谢!
猜你喜欢
  • 2022-01-23
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 2014-08-30
相关资源
最近更新 更多