2016-08-04 2 views
0

У меня есть функция findEntryByAddress, которая имеет встроенное объявление filterEntry. Я хотел бы добавить еще одну логическую проверку, но тогда в одной строке будет слишком много символов.многострочное булево выражение в haskell

Как разбить булевское выражение, равное проверке на строку.

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.

+1

Является ли это Haskell или Purescript (он помечен как оба, но название вопроса говорит «haskell»)? Если Haskell, просто положите его на новую строку и отступьте. – pdexter

ответ

3

Я не уверен, что понимаю вопрос, вы хотите сделать что-то подобное?

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

В где, вы можете перейти линию, но вы должны положить остальную часть выражения одного пространства после начала определения иначе Haskell будет думать, что вы определяете что-то новое. Так что это правильно:

where f = x && 
     y 

Но это не так:

where f = x && 
y 

Кстати, в Haskell, нет Boolean типа, типа True и False является Bool.

Смежные вопросы