如何导出类型操作符?考虑到它们可能会与普通算子发生冲突,如果可能的话,必须有一个特殊的语法。
答案 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 = ...