Sadece Idris'u öğrenmeye başlıyorum ve Idris ile Tip Tahrikli Geliştirme kitabı üzerinden çalışıyorum. İkinci bölümden alınan örnek alıştırmalardan biri, bir dizgi verilen dizge içindeki bir kelimenin ortalama uzunluğunu belirleyen bir fonksiyon yazmaktır.Neden bu Idris snippet typecheck açık bir tür olmadan neden yok?
average : String -> Double
average phrase =
let werds = words phrase
numWords = length werds
numChars = the Nat (sum (map length werds)) in
cast numChars/cast numWords
Ancak, ben nedeniyle numChars
hattına bu çözümün gelen bir sürü sorun vardı şu şekildedir: Benim çözüm oldu. Herhangi bir nedenle, the Nat
'u kullanarak türünü açık bir şekilde yapmadığım sürece, bu durum yazım denetiminde değildir. Hata durumları:
Can't disambiguate since no name has a suitable type:
Prelude.List.length, Prelude.Strings.length
Bu bakılmaksızın length
tanımı, dönüş tipi Nat
olduğu kullanıldığı Beri, bana anlamda bir sürü yapmaz. Bu, aynı işlem dizisinin REPL'de hatasız yapılabileceği gerçeği ile desteklenir. Bunun sebebi nedir?