2017-11-19 8 views
1

Haskellのための「ワット・」の一種として、それがhaskell for teachingの最後に指摘していますHaskellの長さの関数エラーメッセージ

length (1,2) 

1 

length (1,2,3) 


<loads of error messages> 

その質問、なぜですか?これを修正する方法は?

+1

「正しい」とはどういう意味ですか? – Lee

+0

コンパイラは修正しませんが、ソースコードは修正してください。たとえば、 '(1,2,3):(Int、Int、Int)'のようになります。もちろん、なぜエラーメッセージが出るのか分からず、有効な「修正」ではありません。 –

+0

なぜソースコードを修正する必要があると思いますか? – melpomene

答えて

3

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)を評価しようとしています。

0

2つの要素を持つタプルはFoldableの型クラスを実装していますが、上位タプルは実装していません。