Bu güzel bir özelliktir Python çünkü "sözlükleri tüm yol aşağı," konuşmak için. Haskell, takma adlara modül atamanıza izin verir, ancak (import
) deyiminden (bildiğim kadarıyla) diğer ad işlevlerini kullanmanın bir yolu yoktur. Tek yapmanız mümkün olacaktır iyi
import qualified Fruit as F (apple)
banana = F.apple
Tüm bunların ayrıntılarını gizleme, kendi modülünde bu koymak ve istediğiniz değerleri dışa olabilir, ama o kadar basit bir şey için işin çok gibi görünüyor . Aşağıda, hammar tarafından yorumlandığı gibi, monomorfizm kısıtlaması, 'un banana
ile sorun yaratabilir. Emin olmak için, ya istenen türüyle (apple
muhtemelen o) banana
açıklama ya Aksi
{-# LANGUAGE NoMonomorphismRestriction #-}
import qualified Fruit as F (apple)
banana = F.apple
olarak monomorfizm kısıtlama devre dışı bırakması gerekir, banana
ait çıkarsama yoluyla tip istenenden daha az polimorfik olabilir.
Monomorfizm kısıtlaması, her bir üst seviye işlevi için bir tür sınıfının somut bir örneğini atamaya çalışır (bu, performans nedenleriyle yapılır).
example = return()
Bu fonksiyon tipini
Monad m => m()
var, ama monomorfizm kısıtlaması nedeniyle, Monad örneği kullanılması gerektiğini hakkında yeterli bilgi yoktur gerektiğini düşünün siz
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()
Şimdi şu mesajı almak böylece , sen GHC kullandığınız Monad hangi örneği anlaması için yeterli bilgi, sağlarsanız gibi
example = return()
main :: IO()
main = example
sonra GHC follo verecek kanat tipi
*Main> :t example
example :: IO()
Eğer example
doğrudan Buna hiç sözdizimi var main
, ben özellikle olduğum gider Refactoring olmadan Int kurtulmak. –
Aşağıdaki sözdizimini kabul etmek için GHC'yi yamalamak ne kadar kolay ya da zor olurdu: 'İthalat Meyve (elma muz gibi). – Wizek