从模块导出类型运算符

时间:2015-03-20 07:08:39

标签: haskell types module type-level-computation

如何导出类型操作符?考虑到它们可能会与普通算子发生冲突,如果可能的话,必须有一个特殊的语法。

2 个答案:

答案 0 :(得分:13)

我在7.4.4 of the GHC User's Guide部分找到了答案,其中指出:

  

现在进口和出口清单存在一些潜在的模糊性;例如,如果你写import M( (+) ),你的意思是函数 (+)还是类型构造函数 (+)?默认值是前者,但使用-XExplicitNamespaces(由-XExplicitTypeOperators隐含)GHC允许您通过在前面加上关键字type来指定后者,因此:

import M( type (+) )

虽然看起来您实际上并不需要指定-XExplicitNamespaces,但也许-XExplicitTypeOperators可能是-XTypeOperators的拼写错误。一些更实证的证据:

★ → :set -XExplicitTypeOperators
Some flags have not been recognized: -XExplicitTypeOperators

答案 1 :(得分:0)

您可能只希望导出类型运算符,而不是导入类型。

我定义了type a * b = ...,但导出(*)导出了前奏函数(*)而不是类型同义词。与上面的答案类似,对于 export 类型运算符,您可以使用以下语法:

module Foo (type (*)) where

  type a * b = ...