Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elm “get”函数参数顺序的基本原理_Elm - Fatal编程技术网

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