如何在Purescript中的记录数组中查找元素

Coo*_*Dev 2 purescript

每个人。我想在 Purescript 的记录数组中找到一个元素,但由于我不熟悉 Purescripot,因此无法解决。

我有一个数组 banks包含银行记录。

这是银行记录的类型。

type Bank = {
  id :: Int,
  name :: String
}
Run Code Online (Sandbox Code Playgroud)

我想开银行 banks其 ID 与给定的搜索 ID 相同。

我试过如下:

find (_.id == searchId) banks
Run Code Online (Sandbox Code Playgroud)

但得到这个错误。


Could not match type
    Int
  with type
    Function
      { id :: t0
      | t1
      }
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个简单的问题。

Fyo*_*kin 5

表达式_.id是一个接受 aBank并返回它的函数id(有点过于简化,但现在已经足够了)。

为了显示:

getId = _.id
bank = { id: 42, name: "my bank" }
getId bank == 42
Run Code Online (Sandbox Code Playgroud)

然后您使用该函数并尝试将其与 进行比较searchId,我假设它是一个数字。

好吧,您无法将函数与数字进行比较,这就是编译器告诉您的:“无法将类型 Int 与类型 Function 匹配

该函数find期望将一个接受 aBank并返回 a的函数作为它的第一个参数Boolean。有很多方法可以生成这样的函数,但最明显的方法是使用 lambda 抽象:

\bank -> bank.id == searchId
Run Code Online (Sandbox Code Playgroud)

因此,要将其插入您的代码中:

find (\bank -> bank.id == searchId) banks
Run Code Online (Sandbox Code Playgroud)