はのは、あなたの最初の例では、いくつかのより多くの括弧をご紹介しましょう:
max3 a b c = (max a) ((max b) c)
は今、あなたの中のものにそれを比較します最後の1:
max3 a b c = (max a) . ((max b) c)
それとも、我々は接頭表記で(.)
を書く場合:
max3 a b c = (.) (max a) ((max b) c)
これでエラーが発生する理由がわかりました。
maxFloat :: Float -> Float -> Float
maxFloat = max
max3 a b c = max a . max b c
今すぐエラーメッセージは次のとおりです。私たちが代わりにmax
の制約バージョンを使用している場合我々は、より良いエラーメッセージが表示されます
(.) :: (b -> c ) -> (a -> b ) -> a -> c
max a :: Float -> Float
max b c :: Float
^^^^^^^^^^^
:入力チェックをするためには、(max b) c
機能する必要があります多くの方:言われていること
Couldn't match expected type ‘a0 -> Float’ with actual type ‘Float’
Possible cause: ‘maxFloat’ is applied to too many arguments
In the second argument of ‘(.)’, namely ‘maxFloat b c’
In the expression: maxFloat a . maxFloat b c
、ましょうACTU (。):味方問題に取り組むあなたも
max3 :: Ord a => a -> a -> a -> a
max3 a b = max a . max b
一つは ''ではないことを覚えておく必要があります書くことができます
注意をいくつかの組み込みのマジック演算子;他の関数と同様に定義された通常の関数です。 – AJFarmar
@AJFarmar問題は(私が尋ねる時に気づいていなかったが)主にエラーメッセージが役に立たなかったということでした。私はまだmaxが 'a0 - > Float'を期待すべき理由を理解していません。 – Kittsil