3

这与为下一个可怜的树液添加可搜索的东西一样多,但我很想知道为什么它不是错误。

我需要来自 postgresql-simple 的 FromRow 类型类,但忘记了它在自己的包中。

import qualified Database.Postgresql.Simple as P

哎呀 - 只想要 .FromRow 子模块

import qualified Database.Postgresql.Simple.FromRow

当然,不需要它限定,所以把名字从最后去掉。但是,我忘记删除“合格”关键字。

产生一个错误,让我很头疼,因为我没有发现错字:

Not in scope: type constructor or class `FromRow'
Perhaps you meant `Database.PostgreSQL.Simple.FromRow.FromRow' (imported from Database.PostgreSQL.Simple.FromRow)

所以 - 这是一个问题,为什么未命名的合格导入不是错误?它对某些东西有用吗,还是我是第一个愚蠢到犯这个错误的人?

4

1 回答 1

14

qualified并且as是进口的独立特征。

qualified表示名称仅在限定名称下可用(即包含模块名称的名称)。

as只需更改用于限定名称的模块名称。

因此,有 4 种不同的方式来导入模块:

  • import Database.Postgresql.Simple— 限定名称和非限定名称均可见;合格者应具备Database.Postgresql.Simple

  • import Database.Postgresql.Simple as P— 限定名称和非限定名称均可见;合格者应具备P

  • import qualified Database.Postgresql.Simple— 只有限定的名称是可见的,它们应该用Database.Postgresql.Simple

  • import qualified Database.Postgresql.Simple as P— 只有限定的名称是可见的,它们应该用P

于 2013-02-24T10:14:33.973 回答