私はHaskellを介した関数型プログラミングを理解しようとしていますが、関数の構成を扱うには非常に問題があります。2つのパラメータを持つHaskellの構成
実は私は、これらの二つの機能を持っている:
add:: Integer -> Integer -> Integer
add x y = x + y
sub:: Integer -> Integer -> Integer
sub x y = x - y
は、私はそれらを構成することができるようにしたいです。何の意味もありませんが、学習目標です。
foo:: (Integer -> Integer) -> (Integer -> Integer) -> Integer
foo = add . sub
を私が理解した内容::私たちは、それぞれの後に実行するための新しい関数を返すように
Haskellは、唯一の引数で関数を使用して、私が試した何
関数の実行。
したがって、最初のInteger
はparam型ですが、2番目は生成された関数の戻り型で、2番目の数値を追加する必要があります。
これは、別の関数(sub
)を返すよう意志が(...のparamsなどで機能を返す)と同じ流れを作る
は、私は右ですか?私は私が間違ってやっているのか分からない
src\Main.hs:23:7:
Couldn't match type `Integer' with `Integer -> Integer'
Expected type: Integer -> (Integer -> Integer) -> Integer
Actual type: Integer -> Integer -> Integer
In the first argument of `(.)', namely `add'
In the expression: add . sub
src\Main.hs:23:13:
Couldn't match type `Integer -> Integer' with `Integer'
Expected type: (Integer -> Integer) -> Integer
Actual type: Integer -> Integer -> Integer
Probable cause: `sub' is applied to too few arguments
In the second argument of `(.)', namely `sub'
In the expression: add . sub
:
は、ここに私の実際のエラーコードです。
このエラーをもう少し理解して解決策を見つけることができますか?
あなたは「それは意味をなさない」という点では正しい - 数学でバイナリ関数を構成するという概念はない。意味をなさないようにするには、最初に「加算」と「減算」の意味を定義する必要があります。 – molbdnilo
fooの型は、加算と減算の構成は2つの*関数*( 'Integer - > Integer')をとり、整数を返す関数であると言います。 – molbdnilo