导入合格为无 - 不是错误

时间:2013-02-24 09:57:29

标签: haskell

这可以为下一个可怜的汁液添加一些可搜索的东西,但我有兴趣知道为什么这不是错误。

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

import qualified Database.Postgresql.Simple as P

oops - 只需要.FromRow子模块

import qualified Database.Postgresql.Simple.FromRow

当然,不需要它合格,所以剥掉了名字。但是,我忘记删除“qualified”关键字。

由于我没有发现拼写错误,因此产生了一个错误,并引起了很多人的反击:

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

所以 - 这只是一个问题,为什么一个未命名的合格导入不是错误?对某些事情有用吗,或者我是第一个犯这个错误的傻人?

1 个答案:

答案 0 :(得分:14)

qualifiedas是导入的独立功能。

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

  • 进行限定