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
类型,True
和False
的类型是Bool
.
我有一个函数 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
类型,True
和False
的类型是Bool
.