2010-12-29 10 views
6

に私がhereを読んでいた、と私は次の関数の定義がある場合、たとえば、気づい:ジェネリック関数合成ハスケル

a :: Integer->Integer->Integer 
b :: Integer->Bool 

を次の式が無効です:

(b . a) 2 3 

コンポジションの関数は1つのパラメータしか持たないというのは非常に奇妙です。

ハスケルで最も一般的なものを定義する際の問題やその他の理由があるため、この制限はありますか?

私はハスケルを新しくしているので、無駄な質問をしている可能性があります。

答えて

7

a 2 3を実行すると、aは2つの引数に適用されません。実際にはaをそれに適用しているにすぎません。その結果、関数が得られ、その関数を3に適用します。実際には2つのアプリケーションを実行します。だから、ある意味で、あなたが持っていることは、これに同等ではありません。

a :: (Integer, Integer) -> Integer 
b :: Integer -> Integer 
(b . a) (2, 3) 

あなたはああ、それはクールだと理にかなっているところで

(b . a 2) 3 
+0

、これをやったことができました。ありがとう! – hsknew

+0

aがInteger-> Integer-> Integer-> Integerの場合、3番目のパラメータをどのように設定し、他の2つを '変数'にすることができますか? – hsknew

+0

'(b。a 1 2)3'と言うことができます。ポイントは、「a」によって生成された「もの」は、「b」のドメインに属している必要があります(または、おおよそ同じタイプのものです)。 – Phil

関連する問題