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 中的中缀声明的主要内容,如果未能解决你的问题,请参考以下文章

GHC Haskell 中的自动记忆功能是啥时候?

Haskell 的 GHC 未安装

Ghc:部分编译 Haskell 代码?

Haskell、GHC、win32、开罗

在 Opensuse 42.3 上为 haskell 堆栈设置 ghc-8.2.1 时出现 ghc 完整性检查错误

确保两个 (G) ADT 在 (GHC) Haskell 中具有相同的底层表示