另一种选择是
chain(createList, assoc('list'))
您可以在 Ramda REPL 上看到实际效果。
更新
为了进一步解释其工作原理,我将使用适用于下一版本 Ramda 的变体:
chain(assoc('list'), createList)
显示它如何匹配当前签名:
chain :: Chain m => (a -> m b) -> m a -> m b
Ramda 将函数视为FantasyLandMonads,因此也视为Chains。因此,为了将上述内容专门化为功能,我们有
chain :: (a -> Function x b) -> Function x a -> Function x -> b
但是Function x y可以更简单的写成x -> 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)