【问题标题】:Symbolic name as type constructor符号名称作为类型构造函数
【发布时间】:2014-06-21 21:14:06
【问题描述】:

抱歉,新手关于 Haskell 的问题...

如何使用中缀符号作为类型构造函数?我找到了以下代码,但 ghc 和 ghci 抱怨“意外类型 `~>' where type variable expected”...

class Category (~>) where
(.) :: (a ~> b) -> (b ~> c) -> (a ~> c)
id  :: a ~> a

如何做到这一点?提前非常感谢!

【问题讨论】:

标签: haskell


【解决方案1】:

从 GHC 7.6 开始,all TypeOperators are always constructors。我不知道为什么会这样,但我猜这个重大更改是为了避免破坏更旧的代码。 More info in the mailing list.

【讨论】:

  • 嗯,我认为突破性的变化是使类型级编程(如类型族)的语法更好。很少有人使用中缀类型变量,但有了新功能,中缀类型就有了很多用途。
  • 确实,中缀类型变量有点傻,因为类型变量总是局部的;浪费一个好的命名空间来支持它们将是一种耻辱。这不会破坏类型和数据构造函数之间的对应关系吗?还是数据构造函数也发生了变化?
【解决方案2】:

中缀类型构造函数需要以: 开头。尝试重写您的代码以使用:~>

http://www.haskell.org/ghc/docs/7.0.3/html/users_guide/data-type-extensions.html

【讨论】:

  • 这不是类型构造函数;它是一个类型变量。我不明白为什么它不像写的那样工作。
  • @dfeuer:我猜你对代码的解释是正确的,但问题标题和问题文本谈论的是定义新的类型构造函数。也许 OP 可以扩展一点来消除这种困惑?
  • 好吧,至少我不知道我必须使用哪个扩展才能让它按书面形式工作。 ghc 告诉我 -fglasgow-exts 已弃用...
  • 他们搞砸了文档。从 7.6 开始,all type operators are constructors,即使更具体的文档 says a leading : decides it
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
相关资源
最近更新 更多