【问题标题】:What is the reason of error "Not a data constructor"?错误“不是数据构造函数”的原因是什么?
【发布时间】:2019-07-02 23:02:18
【问题描述】:

我有一个错误:Not a data constructor: "%:":

data KV = forall a. Show a => (%:) Text a

有趣的是,:% 可以作为数据构造函数! %% 又不行了。但是%% 可以作为中缀函数。为什么将其视为错误?这些变体有什么区别?

【问题讨论】:

  • 你是如何使用 (%:)?
  • 我试过["Name1" %: var1, "Name2" %: var2]
  • 但是我在data KV = ...定义中得到了这个错误,而不是在我使用它的地方
  • 我正在使用Data.Aeson,它可以导出这样的功能/术语吗?我以前从未见过他们..

标签: haskell


【解决方案1】:

这不是数据构造函数的有效名称。所有中缀运算符数据构造函数必须以: 开头。所以(:%) 就可以了。

这只是相当于“构造函数必须以大写字母开头”的运算符,作为在模式匹配时将构造函数与其他名称区分开来的语法手段。

【讨论】:

  • 我把它记为“: 算作大写字符”。
  • 我只记得非空列表构造函数:是以:开头的最简单/最短的构造函数名称。
猜你喜欢
  • 2016-01-27
  • 2016-12-14
  • 2020-04-05
  • 2021-10-15
  • 2011-04-18
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多