私はハスケルプロではありません。今日私は、今日のタイプシステムでやや奇妙な経験をしました。これの2行目は型エラーを引き起こします。問題は、二行目のmaxdiag (as:bs:cs:ds)
ビットです:リストのリストで奇妙なことを確認してください
maxdiag ((a:as):(b:bs):(c:cs):(d:ds):xs) len =
maximum [a*(bs !! 0)*(cs !! 1)*(ds !! 2), maxdiag (as:bs:cs:ds) (len-1)]
それは次のエラーで失敗します。それは
を読み取るように私は、maxdiag (as:bs:cs:ds:xs)
第2ラインの問題の一部を変更する場合
Occurs check: cannot construct the infinite type: a0 = [a0]
Expected type: [[a0]]
Actual type: [a0]
In the second argument of `(:)', namely `ds'
In the second argument of `(:)', namely `cs : ds'
maxdiag ((a:as):(b:bs):(c:cs):(d:ds):xs) len =
maximum [a*(bs !! 0)*(cs !! 1)*(ds !! 2), maxdiag (as:bs:cs:ds:xs) (len-1)]
...エラーはありません。同様に、maxdiag (as:bs:cs:(ds:xs))
と置き換えると成功します。私の質問は
- このエラーは何を意味していますか?
- どうしてですか?
- なぜこの2つの外見上異なるものがそれを修正していますか?
最後の段落の+1 – amindfv
私は実際の質問を複雑にしたくないので、特にその機能に関する他の文脈は含まれていませんでしたが、それはパターンに関するものではありません。堅牢なプログラムの一部または何か、私はちょうどエラーのハングを取得するために型システムでめちゃくちゃしています。私は実際にこのようなコードを書くことはありません。 :P – apc