Ich bin gerade dabei, Idris zu lernen, und ich arbeite durch das Buch Type Driven Development mit Idris. Eine der Beispielaufgaben aus dem zweiten Kapitel besteht darin, eine Funktion zu schreiben, die bei einer gegebenen Zeichenkette die durchschnittliche Länge eines Wortes in dieser Zeichenkette bestimmt. Meine Lösung war wie folgt:Warum nicht diese Idisis Schnipsel Typcheck ohne einen expliziten Typ?
average : String -> Double
average phrase =
let werds = words phrase
numWords = length werds
numChars = the Nat (sum (map length werds)) in
cast numChars/cast numWords
Allerdings habe ich eine Menge Ärger hatte aufgrund der numChars
Linie bei dieser Lösung zu erzielen. Aus irgendeinem Grund wird dies nicht überprüft, es sei denn, ich mache den Typ explizit mit the Nat
. Die Fehlerzustände:
Can't disambiguate since no name has a suitable type:
Prelude.List.length, Prelude.Strings.length
Dies gilt nicht eine ganze Menge Sinn für mich, da unabhängig von der Definition von length
verwendet wird, der Rückgabetyp ist Nat
. Dies wird durch die Tatsache unterstützt, dass dieselbe Sequenz von Operationen in der REPL fehlerfrei durchgeführt werden kann. Was ist der Grund dafür? Diese