GHC - Haskell 中的中缀声明
Posted
技术标签:
【中文标题】GHC - Haskell 中的中缀声明【英文标题】:GHC - Infixl declaration in Haskell 【发布时间】:2014-11-12 11:34:11 【问题描述】:您好,我正在构建自己的 GPU 编程 Haskell DSL 版本,称为 Accelerate。问题是关于infixl
声明:
这里是sn-p的代码:
infixl 3 :.
data tail :. head = tail :. head
deriving (Eq, Show)
我觉得这个sn-p很简单明了,但是当我试图把它加载到ghci中时,它失败了:
报告:
Illegal declaration of a type or class operator ‘:.’
Use TypeOperators to declare operators in type and declarations
您对这个问题有任何想法吗?我使用的 ghc 版本是:
The Glorious Glasgow Haskell Compilation System, version 7.8.3
谢谢!
【问题讨论】:
看起来您正在尝试将异构列表类型添加到haskell;它已经存在于 HList 包中,如果您启用DataKinds
,它也会由 GHC 提供。例如,您可以有一个类型为[Int,String,Int]
的类型为[*]
。
@Cubic 其实我不太明白那句话的意思……但是,我同意你的想法,即这是一个异类列表。
【参考方案1】:
你需要
-# LANGUAGE TypeOperators #-
在您的源文件中。这就是错误消息所说的。 要在 ghci 中使用它们,您也必须在那里启用它们。见XTypeOperators extension doesn't work as pragma
【讨论】:
哦,它修好了!谢谢!但是你知道为什么这个 pragma 应该在那里吗?我的意思是为什么 ghc 不直接支持它? 我没有读过haskell 2010 report,但我敢打赌类型运算符不包括在内。没有编译指示,ghc 符合标准。 哦,我明白了,所以这都是关于语言标准的......谢谢 infixr/infixl/infix 声明应该按惯例放在哪里?如果运算符被定义为 GADT 的一部分怎么办?我看到它可以放在页面的任何位置?以上是关于GHC - Haskell 中的中缀声明的主要内容,如果未能解决你的问题,请参考以下文章