私はhaskellを学び、関数tailsを実装しようとしています。これは私の実装です:haskellでtails関数を実装する
tails' :: [a] -> [[a]]
tails' [] = []
tails' (x:xs) = xs:[[tails' xs]]
しかし、私は
Couldn't match expected type ‘a’ with actual type ‘[[a]]’
‘a’ is a rigid type variable bound by
the type signature for tails' :: [a] -> [[a]] at..
私の実装の何が問題になっているコンパイルエラーに実行し続けますか?
あなたのタイプシグネチャによって、 'tails 'xs'は既にリストのリストでなければなりません。 '[[tails 'xs]]のように角括弧で囲むと、リストのリストが2つの特別なシングルトンリストにラップされます。必要なのは 'tails '(x:xs)= xs:tails' xs'です。 – Alec
@Alec:そうです。できます。しかし、私はまだブラケットを取り除かなければならない理由は分かりません。返された値が型シグネチャにあるものと一致することを確実にすることは、プログラマの仕事ではありませんか?あなたが置いている方法:型シグニチャはリストのリストに変換して扱います。 – Ashwin