即使在合格导入后出现“不明确的发生”错误

时间:2011-10-13 22:36:54

标签: haskell

以下是我的代码片段:

import Control.Monad.State as S
get x = x + 1

现在,如果我尝试使用get,我会收到以下错误:

Ambiguous occurrence `get'
It could refer to either `Main.get', defined at twitter.hs:59:1
                      or `S.get',
                         imported from Control.Monad.State at twitter.hs:15:1-31

由于我将Control.Monad.State导入为合格模块,因此它不应自动选择get中的Main函数吗?为什么会遇到这种冲突?我该如何解决?

1 个答案:

答案 0 :(得分:11)

您需要使用import qualified Control.Monad.State as S。跳过qualified关键字会影响S.getget等范围。

  

如果导入声明使用qualified关键字,则只有实体的qualified名称被纳入范围。如果省略qualified关键字,那么两者实体的限定非限定名称将被纳入范围。

Haskell 2010 report的5.3.2和5.3.4。