這是一個很好的屬性Python有,因爲它的「字典一路下跌,」可以這麼說。 哈斯克爾讓你的別名分配給模塊,但沒有辦法別名功能 從import
語句(據我所知)。你將能夠做的最好的是
import qualified Fruit as F (apple)
banana = F.apple
你可以把這個自己的模塊中導出你想要的值,躲在這一切的細節,但是,似乎很多工作的東西這麼簡單。
正如Hammar評論的那樣,單態限制可能導致推斷類型 的banana
的問題。爲了安全起見,您應該標註banana
其所需的類型(可能是的apple
),或禁用單態限制爲
{-# LANGUAGE NoMonomorphismRestriction #-}
import qualified Fruit as F (apple)
banana = F.apple
否則,推斷出的類型的banana
可能比期望的少多態。
的單態限制嘗試分配一種類型的類的具體實例爲每個頂級功能(這是出於性能原因完成)。考慮,
example = return()
這個函數的類型應該是Monad m => m()
,但由於單態的限制,沒有足夠的信息,哪些應該使用Monad的實例,因此您會收到以下消息現在
Ambiguous type variable `m0' in the constraint:
(Monad m0) arising from a use of `return'
Possible cause: the monomorphism restriction applied to the following:
example :: m0() (bound at Test.hs:44:1)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
In the expression: return()
In an equation for `example': example = return()
如果你提供足夠的信息GHC推斷您正在使用的單子的情況下,如
example = return()
main :: IO()
main = example
然後GHC會給弗洛翼式
*Main> :t example
example :: IO()
,因爲你告訴它example
將具有相同類型main
爲了您的信息,我特別在這一刻嘗試導入Data.List.genericLength的長度得到沒有重構就擺脫了Int。 –
我不知道補丁GHC接受以下語法是多麼容易或很難:'導入水果(apple as banana)'。 – Wizek