gpt4 book ai didi

haskell隐藏星运算符的导入

转载 作者:行者123 更新时间:2023-12-02 12:04:32 25 4
gpt4 key购买 nike

我有:

import qualified GHC.Types as T hiding (Module, (*))
import GHC.TypeNats hiding ((*))

但是当我尝试定义 (*) 运算符时,它失败了:

{-# INLINE (*) #-}
infixl 7 *
(*) :: r -> r -> r
(*) = undefined

error:
Ambiguous occurrence ‘*’
It could refer to either ‘T.*’,
imported qualified from ‘GHC.Types’ at ...
or ‘*’,
imported from ‘GHC.TypeNats’ at ...
|
1277 | infixl 7 *

编辑:描述当前无法重现。我会尽快更新问题。

最佳答案

都不是GHC.Types也不GHC.TypeNats有一个(*)导出。他们都有 <em>type</em> (*)导出。通常,您可以区分术语级别 (*)和类型级别 (*)根据上下文,但在导出/导入列表中情况并非如此。相反,术语级别被视为默认值,并且您必须明确表示您想要隐藏类型。

import qualified GHC.Types as T hiding (Module, type (*))
import GHC.TypeNats hiding (type (*))

原因Module保持原样是因为大写意味着它必须是类型、构造函数或模式同义词。构造函数必须出现在分组 () 内部其数据类型旁边,模式同义词必须用 pattern 分隔开。 ,所以Module上面引用的是数据类型(隐藏数据类型也会隐藏其所有构造函数)。

当您尝试隐藏不存在的内容时没有收到错误的原因是 hiding其设计目的是,如果导入的模块停止导出您隐藏的内容,您的模块将不会编译失败。毕竟,您引用该事物的唯一原因是说您不会引用该事物。

关于haskell隐藏星运算符的导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50750269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com