既存の回答を完了するには、
最初に克服しなければならない問題は、コードをコンパイルするか、少なくともエラー メッセージを理解することです。このヒントは、直面している問題と、正しいバージョンを得るために修正する方法についての優れたガイダンスを提供するはずです (高次の機能要件を満たしていなくても、少なくとも機能するものはあるでしょう)。
このために、パターン句(head : tail)の 型シグネチャを見てみましょう。
まず (:) 関数については、
(:) :: a -> [a] -> [a]
次に、 headとtailの次の型を推測します(これらは (:) の引数です)。
- head は Int 型です。
- テールは [Int] 型です。
もう一度、(>) の型シグネチャを見てみましょう。
(>) :: Ord a => a -> a -> Bool
制約クラスを省略した場合、単純にするために、次のようになります。
(>) :: a -> a -> Bool
または、あなたのコードには、
....
if ( head > tail) ...
....
これは、単純化するために次のように書き直すことができます。
....
if ((>) head tail)) ...
....
これまでの説明をすべて使用して、(>) 関数に提供された型を再構築し、問題を理解できるはずです。
次に、コードを修正して動作させることができます。高次関数を見て、それを正しくする
ことができた後。
一般的な意見として、複雑な問題で立ち往生しているときは、それをより小さな問題に分解してみてください。そして、それぞれの下位の問題について、次の料理の原則を適用してみてください。
機能させる、
正しくする、
速くする。