TL; DR: Bitmiş endişeli elde değmez bir bozuk saçma bir tip.
tamsayı sabitleri Num
typeclass uygulayan her tür değerleri temsil edebilir. Yani 1
veya başka bir tam sayı literal bir sayıya ihtiyacınız olan her yerde kullanılabilir.
doubleVal :: Double
doubleVal = 1
intVal :: Int
intVal = 1
integerVal :: Integer
integerVal = 1
Bu, herhangi bir sayısal bağlamda tümleşik değişmezleri esnek bir şekilde kullanabilmemizi sağlar.
Herhangi bir tür bağlamı olmayan bir tamsayı hazırladığınızda, ghci ne tür olduğunu bilmiyor.
Prelude> :type 1
1 :: Num a => a
GHCi " '1' Bilmiyorum bir tür olduğunu, ama ne olursa olsun tipi, yani tip Num
typeclass uygulayan biliyorum" diyor.
Haskell kaynağındaki bir tamsayı değişkeni her oluşumu, örtülü bir fromInteger
işleviyle sarılır. Bu nedenle (1 "one")
dolaylı olarak ((fromInteger (1::Integer)) "one")
'a dönüştürülür ve (fromInteger (1::Integer))
alt ifadesi, henüz bilinmeyen bir tür olan Num a => a
türünde henüz bilinmeyen bir türe sahiptir, ancak bunun Num
yazım tipinin bir örneğini sağladığını biliyoruz.
Biz de "one"
bir işlev gibi uygulandığını görebilirsiniz, bu yüzden onun tip a0
henüz başka bilinmeyen bir türüdür formunu [Char] -> a0
olması gerektiğini biliyoruz. Yani a
ve [Char] -> a0
aynı olmalıdır. Yukarıda anladığımız Num a => a
türüne dönerek, 1
'un Num ([Char] -> a0) => [Char] -> a0)
türünde olması gerektiğini ve (1 "one")
ifadesinin Num ([Char] -> a0) => a0
türünde olduğunu biliyoruz. "Orada bir işleve bir [Char]
argüman uygulanması sonucunda elde edilir bazı tip a0 olduğunu ve fonksiyon tipi Num
sınıfının bir örneğidir olarak bu son türünü okuyun.
Yani ifadesinin kendisi geçerli bir tür
Num ([Char] -> a0) => a0
sahiptir.
Haskell, Monomorphism restriction adlı bir şeye sahiptir.Bunun bir yönü, ifadelerdeki tüm tip değişkenlerinin, bunları değerlendirebilmeniz için belirli, bilinen bir türe sahip olması gerektiğidir.GSC, bazı durumlarda, varsayılan duruma getirme kurallarını kullanır. Monomorfizm kısıtlaması Ancak, GHC herhangi bir tip a0
bilmiyor, yukarıda tanımlanmış bir Num
örneğine sahip olan tip ifadesine takılabilir. t ile başa çıkmak için bir yolu yoktur ve "Num için No Örneği" iletisini verir.
Alanın işlev uygulama operatörü olduğunu unutmayın. – Bergi