で縛られた堅いタイプの変数です。問題は、スタックオーバーフローで報告されたエラーの数が多いため、解決策のどれも私の問題に適用されないようです。ハスケル私のタイプが指定されていないにもかかわらず、私はこのエラーを受け取ります: `a 'と` [a]'をマッチさせることができませんでした、 `a 'は
だから私は、次の機能があります:あなたはそれが99 Haskell Problemsから問題3です迷っている場合は
elementAt' :: Integral b => [a] -> b -> a
elementAt' [x:_] 1 = x
elementAt' [x:xs] y = elementAt' xs yminus1
where yminus1 = y - 1
を。この関数の目的は、リストとインデックスを入力として取り、そのインデックスの値を1から始めることです。私は問題に解決策を望んでいません、私が提供したものを見れば分かります。しかし、私は理解していないエラーが発生しています。私はeclipseFP、HaskellのためのEclipseプラグインを使用することだし、それは下線の「[X:_]」と「[X:XS]」次のエラーを持つ関数の部分:
Couldn't match type `a' with `[a]'
`a' is a rigid type variable bound by
the type signature for elementAt' :: Integral b => [a] -> b -> a
すべてのスレッドで私がこの問題を見てきたこのエラーについて議論するのは、ある人が特定のタイプを予期しているものに間違った出力を出そうとしたときです。たとえば、何らかの型(Int型)の長さを "Num a"型にする必要があります。
私の場合、私は変数aの型を提供していません。それは何か、右かもしれないはずですか?では、なぜこのエラーが出るのですか?なぜ私がエラーを起こしているのか理解したら、修正することができましたが、分かりません。
誰かが私にこのエラーを受け取っている理由を説明してもらえますか?
ご協力いただきありがとうございます。 -Asaf
編集:これまでに提供されたすべての回答は正しいです、すべての有益な情報に感謝します。私は、私が最も明確であると信じているものを選ぶつもりです(私はそれを行うには5分待たなければなりません)。
なぜ、「elementAt」[x:xs] y = elementAt 'xs(y-1) ''と書くのですか? –
@Vixen変数の宣言を含める以外はどうやって書きましたか?コンパイラはどちらの場合もまったく同じことを行うことになります(私が間違っていれば私を修正してください)。 – Asaf
はい、それはあなたが解決策を理解しますが、アスカーはないかもしれ –