簡體   English   中英

GHC導入功能或錯誤

[英]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.filterData.Text.zip等)沖突的函數。

這是允許的。 導入機制非常靈活,有時令人驚訝。

例如,您可以使用不同的名稱導入模塊:

import qualified M as A
import qualified M as B

在此之后, AxBx都將引用Mx

也許更令人驚訝的是,您也可以使用相同的名稱導入兩個模塊。

import qualified M as A
import qualified N as A

在此之后, Ax將引用MxNx 如果兩者都已定義,則觸發模糊錯誤。

這最后一個功能可能看起來很奇怪,但是在導入模塊時沒有限定條件的情況下已經存在這些歧義,因此這種靈活性不需要比普通導入更多的機制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM