Bir süredir Haskell üzerinde çalışıyorum, bu yüzden yeni biriyim. İşteTam tip bilgisi olmayan Haskell polimorfik çağrıları
purStrLn $ show [1]
biz (varsayılan) ile her türlü çıkarabiliriz ve tüm iyi çalışıyor:
Aşağıdaki kod çok kolay anlaşılabilir. Ama Aşağıdaki kod da çalışır:
putStrLn $ show []
biz liste türünü tahmin edemez bile. Ben GHCi kodu yürütebilir Eğer
aşağıdaki elde:
Prelude> []
[]
Prelude> :t it
it :: [a]
Prelude>
böylece tip polimorfik gibi görünüyor. Fakat bu durumda, gösteri kısmen uygulanan bir tiple çağrılacaktı.
Aynı davranış diğer türlerde de geçerlidir, örneğin Data.Map.empty ile, bu bir liste özelliği değildir (veya en azından benziyor).
Neden ve nasıl çalışır?
'purStrLn $ gösterisi [1]' hala türüne varsayılan vardır: Vitus
-Wall
ileghci
çalışan (veya~/.ghci
için:set -Wall
ekleme) daha kolay varsaymak noktaya yapar yorumlarda belirttiği gibi '[1] :: (Num n) => [n]' – amindfvBu doğru, ancak böyle durumlarda varsayılanlar var. – Totoro
Tür değişkeni, örn. uzunluk [] ', bkz: http://stackoverflow.com/q/7076517. – hammar