2016-10-22 6 views
2

複数のパラメータに引数を適用する方法:原因私は2番目と三番目のパラメータの引数を必要とするという事実にRAMDAのカリー化:私はこれを行う必要があり、私は状況がある

const f = (obj) => assoc('list', createList(obj), obj) 

を、私を禁止しています以下のような何かをしてから:

const f = assoc('list', somehowGetObj()) 

は私もこれを試してみましたが、それはうまくいきませんでした:

const f = assoc('list', createList(__)) 
const f = converge(assoc, [createList, identity]) 

がありますカレーでこれを行う適切な方法は?

答えて

4

別のオプションを使用すると、Ramda REPL上のアクションで見ることができます

chain(createList, assoc('list')) 

です。

更新

これがどのように機能するかをさらに説明するために、私はRAMDAの次のリリースで動作しますバリエーション使用します:それは現在の署名と一致する方法を示すために

chain(assoc('list'), createList) 

を:

chain :: Chain m => (a -> m b) -> m a -> m b 

RAMDAがFantasyLandMonadsとしての機能を扱い、それゆえも01として。だから、機能に上記を特化し、我々は

chain :: (a -> Function x b) -> Function x a -> Function x -> b 

を持っていますが、その後、あなたは(専門の)これらを使用することができますFunction x yx -> yように、より簡単に書くことができるので、上記の缶が

chain :: (a -> x -> b) -> (x -> a) -> (x -> b) 

としてより簡単に書かれましたタイプ:

createList :: OriginalData -> YourList        (x -> a) 
assoc :: String -> YourList -> OriginalData -> EnhancedData 
assoc('list') :: YourList -> OriginalData -> EnhancedData   (a -> x -> b) 

ので、

chain(assoc('list'), createList) :: OriginalData -> EnhancedData (x -> b) 
+0

これは機能します!ただし、このユースケースはドキュメントでカバーされていないようですが、何か不足していますか? http://ramdajs.com/docs/#chain – MoeSattler

+0

あなたは正しいです。 Ramdaのドキュメントはコードと一致しません。文書化された署名が必要なものであり、[最近の変更](https://github.com/ramda/ramda/pull/1936)が一致するコードを取得します。 Ramdaの次のリリースで作業する場合は、パラメータを 'chain(assoc( 'list')、createList)'と逆にする必要があります。 –

1
const f = converge(assoc('list'), [createList, identity]) 
関連する問題