【问题标题】:Haskell type error on compilation编译时的 Haskell 类型错误
【发布时间】:2018-04-03 20:38:29
【问题描述】:

我不确定为什么下面的代码会导致下面的错误。

代码:

type Symbol = Char

symbols :: [Symbol]
symbols = ['a'..'f']

type Code = [Symbol]

members :: Code -> Bool
members xs = and [ b | x <- xs, b <- map (elem x) symbols ]

编译错误:

Couldn't match type ‘Char’ with ‘t0 Symbol’
     Expected type: [t0 Symbol]
       Actual type: [Symbol]
   • In the second argument of ‘map’, namely ‘symbols’
     In the expression: map (elem x) symbols
     In a stmt of a list comprehension: b <- map (elem x) symbols

【问题讨论】:

  • 您的代码不完整 - xs 是什么?
  • @FrankSchmitt 抱歉打错了,已编辑

标签: haskell types compiler-errors


【解决方案1】:

您提供的代码有一些错误。

  1. 正如@FramkSchmitt 提到的,缺少一个参数xs
  2. 您尝试将 elem x 映射到一个列表 - 这需要一个列表列表才能正确。

这就是我猜你的意图。

members :: Code -> Bool
members xs = and [ x `elem` symbols  | x <- xs ]

可以写得更简洁一些(我相信像 hlint 这样的工具甚至会建议这种简化)。

members' :: Code -> Bool
members' = all (`elem` symbols)

【讨论】:

  • 谢谢,只是不确定错误中的t0 是什么意思!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
相关资源
最近更新 更多