[英]GHC import feature or bug
我發現GHC接受以下代碼:
import Prelude hiding (filter)
import qualified Prelude as P
這兩個導入的想法是像往常一樣使所有Prelude函數可用,但要求filter
被限定為P.filter
。
我從來沒有在任何地方看到類似的例子,因此我的問題是:這是GHC中的一個功能還是一個錯誤?
謝謝
這是一個功能,如果你在Github中搜索,你可以看到它在野外使用了很多。
一個廣泛使用的習語是這樣的:
import Data.Text (Text)
import qualified Data.Text as T
這樣,您就不必在類型中限定Text
,也不會獲得與Prelude
函數(如Data.Text.filter
, Data.Text.zip
等)沖突的函數。
這是允許的。 導入機制非常靈活,有時令人驚訝。
例如,您可以使用不同的名稱導入模塊:
import qualified M as A
import qualified M as B
在此之后, Ax
和Bx
都將引用Mx
。
也許更令人驚訝的是,您也可以使用相同的名稱導入兩個模塊。
import qualified M as A
import qualified N as A
在此之后, Ax
將引用Mx
或Nx
。 如果兩者都已定義,則觸發模糊錯誤。
這最后一個功能可能看起來很奇怪,但是在導入模塊時沒有限定條件的情況下已經存在這些歧義,因此這種靈活性不需要比普通導入更多的機制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.