这可以为下一个可怜的汁液添加一些可搜索的东西,但我有兴趣知道为什么这不是错误。
我需要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)
所以 - 这只是一个问题,为什么一个未命名的合格导入不是错误?对某些事情有用吗,或者我是第一个犯这个错误的傻人?
答案 0 :(得分: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