私はIdrisの学習を始めようとしています。私はIdrisでタイプドリブン開発を使って作業しています。 2番目の章の演習の1つは、文字列を与えられた文字列の単語の平均長さを決定する関数を書くことです。私のソリューションは、以下の通りであった:なぜこのIdrisスニペット型チェックは明示的な型なしではありませんか?
average : String -> Double
average phrase =
let werds = words phrase
numWords = length werds
numChars = the Nat (sum (map length werds)) in
cast numChars/cast numWords
しかし、私はトラブルnumChars
ラインのために、このソリューションに到着するのがたくさんありました。なんらかの理由で、タイプをthe Nat
を使って明示的にしない限り、これは型チェックを行いません。エラー状態は:
Can't disambiguate since no name has a suitable type:
Prelude.List.length, Prelude.Strings.length
これは関係なく、length
の定義は、戻り値の型がNat
で使用されているのため、私には意味の全体の多くを作成しません。これは、この同じ一連の操作がREPLでエラーなしで実行できるという事実によってサポートされています。これの理由は何ですか?