haskell 中的多行布尔表达式

multiline boolean expression in haskell

我有一个函数 findEntryByAddress,它有一个 filterEntry 的内联声明。我想添加另一个布尔检查,但是一行中的字符太多。

如何拆分布尔表达式,每行检查一个等于。

findEntryByAddress :: Address -> AddressBook -> Maybe Entry
findEntryByAddress = head <<< filter filterEntry
  where
  filterEntry :: Entry -> Boolean
  filterEntry entry = entry.firstName == firstName && entry.lastName == lastName

我已经查看了 Haskell's Indentation 指南,没有关于多行表达式的内容。 来自 purescript-book.

的代码

我不确定我是否理解问题,你想做这样的事情吗?

findEntryByAddress :: Address -> AddressBook -> Maybe Entry
findEntryByAddress = head <<< filter filterEntry
  where
  filterEntry :: Entry -> Boolean
  filterEntry entry = entry.firstName == firstName && 
                      entry.lastName == lastName &&
                      entry.age == age

在 where 中,您可以跳行,但必须将表达式的其余部分放在定义的开头之后 space 否则 Haskell 会认为您正在定义新内容.所以这是正确的:

where f = x &&
       y

但这不是:

where f = x &&
 y

顺便说一下,在Haskell中没有Boolean类型,TrueFalse的类型是Bool.