Elm “get”函数参数顺序的基本原理
为什么参数在Elm “get”函数参数顺序的基本原理,elm,Elm,为什么参数在Array.get和Dict.get中按顺序排列?大多数map/filter函数的顺序都是有意义的:函数位于集合(或者更一般地说是monad)之前 这使得在传递集合之前,更容易从较小的函数中组合出更高的函数 但是,为什么在get函数中索引/键位于集合之前 Dict.get : comparable -> Dict comparable v -> Maybe v 这似乎使编写更高的函数变得更加困难。如果参数颠倒,可以写: ids : List Int myObjects
Array.get
和Dict.get
中按顺序排列?大多数map/filter函数的顺序都是有意义的:函数位于集合(或者更一般地说是monad)之前
这使得在传递集合之前,更容易从较小的函数中组合出更高的函数
但是,为什么在get函数中索引/键位于集合之前
Dict.get : comparable -> Dict comparable v -> Maybe v
这似乎使编写更高的函数变得更加困难。如果参数颠倒,可以写:
ids : List Int
myObjects : Dict Int a
selectObjects = List.map (Dict.get myObjects) ids
但是,我能想到的写这篇文章的最好方法是:
ids : List Int
myObjects : Dict Int a
selectObjects = List.map (\id -> (Dict.get id myObjects)) ids
我错过什么了吗?Array.get
、Dict.get
和类似文件中参数顺序的原因是什么?List.map(Dict.get myObjects)ID
不是函数组合
作文是当你有f:X->Y
和g:Y->Z
然后您可以编写它们h=f>>g
因此h:X->Z
现在,在编写上述函数时,我们需要它们只需要再增加一个参数
因此,在定义API时,问题是:“当有人对该函数进行部分求值以便将其组合时,他们可能希望传递的最后一个参数是什么?” 换句话说,我们是否更可能看到类似这样的代码:
getStuff>>mungeIntoDict>>(Dict.get id)
或
getStuff>>getImportantId>>(Dict.get myDict)
?
答案是“视情况而定”。API设计师做出了最好的猜测,我们有了
flip
当它不适合我们时。你可以用它来摆脱lambda:List.map(flip-Dict.get-myObjects)id
我感谢这个建议,但我不是问如何解决这个问题,这很容易。我想知道参数顺序背后的原因,因为我对FP不是很有经验,我想知道库设计是否允许一些好处。我猜它的设计看起来像Haskell的函数,巧合的是,它列在Haskell wiki的参数排序部分。
ids : List Int
myObjects : Dict Int a
selectObjects = List.map (\id -> (Dict.get id myObjects)) ids