Ben şu kod işe beklemiyorduk:Haskell, neden Num okurken Int okumak için varsayılan görünüyor?
foo :: (Num a) => a -> a
foo x = x + x
main = do
print (foo (read "7"))
tamamen koduna göre ("7" okuyun) türünü anlaması mümkün değildir, çünkü. Ancak GHC (6.12.3) aksi düşünmez ve yazdırır. 14
"7", "7.2" olarak değiştirilirse, kod "ayrıştırmak yok" ile başarısız olur. Burada neler oluyor? Haskell, hangi Okuma örneğinin kullanılacağına nasıl karar verir?
'(Num bir bir oku) => [Char] -> a 'açıkça belirsizdir. Bir şekilde karar vermek zorundadır, bu yüzden "Int" ın "Num" için varsayılan olduğu sanırım. Belki de tipeclass'ın ilk örneği olduğu için? Manuel arama yapmaya gidiyorum. Onun ilginç bir soru. – alternative
Sadece kayıt için: varsayılan olarak "Tamsayı" değil, "Int" anlamına gelir. – sepp2k