Haskellのための「ワット・」の一種として、それがhaskell for teachingの最後に指摘していますHaskellの長さの関数エラーメッセージ
length (1,2)
1
対
length (1,2,3)
<loads of error messages>
その質問、なぜですか?これを修正する方法は?
Haskellのための「ワット・」の一種として、それがhaskell for teachingの最後に指摘していますHaskellの長さの関数エラーメッセージ
length (1,2)
1
対
length (1,2,3)
<loads of error messages>
その質問、なぜですか?これを修正する方法は?
length
のタイプがある:あなたがa
秒のいくつかのコレクション内a
秒の数を返すように読むことができる
Foldable t => t a -> Int
。 Foldable
instance for pairsがあります:
toList
で見ることができますペアの2番目の要素に作用する
instance Foldable ((,) a) where
foldMap f (_, y) = f y
foldr f z (_, y) = f y z
:
toList (1,2)
> [2]
大きなタプルにはFoldable
インスタンスが存在しないため、エラーが発生しlength (1,2,3)
を評価しようとしています。
2つの要素を持つタプルはFoldable
の型クラスを実装していますが、上位タプルは実装していません。
「正しい」とはどういう意味ですか? – Lee
コンパイラは修正しませんが、ソースコードは修正してください。たとえば、 '(1,2,3):(Int、Int、Int)'のようになります。もちろん、なぜエラーメッセージが出るのか分からず、有効な「修正」ではありません。 –
なぜソースコードを修正する必要があると思いますか? – melpomene