2013-02-24 118 views
3

這是儘可能多的添加一些可搜索的東西,爲下一個可憐的SAP,但我會有興趣知道爲什麼這不是一個錯誤。導入限定爲無 - 不是錯誤

我需要來自postgresql-Simple的FromRow類型類,但忘記它是在它自己的包中。

import qualified Database.Postgresql.Simple as P 

哎呀 - 只想.FromRow子模塊

import qualified Database.Postgresql.Simple.FromRow 

當然,並不需要它合格,剝去名關底。但是,我忘記刪除「合格」關鍵字。

生成一個錯誤,並從我太多headscratching,因爲我不能發現錯字:

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

所以 - 只是如此,這是一個問題,爲什麼是一個未命名的合格進口不是一個錯誤?對某些事情有用嗎,還是我是第一個犯這個錯誤的人呢?

+0

這是一個問題,隨着解決方案在臉上大喊:「也許你的意思是'Database.PostgreSQL.Simple.FromRow.FromRow'‽」 – 2013-02-24 10:57:40

+0

啊,但我確實是這個意思。如果我把「合格」拿出來,我的用法和含義就會一致。問題是「你離開了合格的關鍵字,麻木」,沒有別的。經典案例,從計算機的角度解釋錯誤,而不是人的錯誤。 – 2013-02-25 08:32:41

回答

15

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

合格