Можно ли использовать охранники в определении функций в idris?
В хаскеле можно написать:
containsTen::Num a => Eq a => [a] -> Bool
containsTen (x : y : xs)
| x + y == 10 = True
| otherwise = False
Можно ли написать что-то эквивалентное в Идрисе, не делая это с ifThenElse
(мой реальный случай более сложный, чем приведенный выше)?
1 ответ
Решение
У Идриса нет паттернов, как в Хаскеле. Есть предложение with, которое синтаксически похоже (но более мощное, поскольку поддерживает сопоставление при наличии зависимых типов):
containsTen : Num a => List a -> Bool
containsTen (x :: y :: xs) with (x + y)
| 10 = True
| _ = False
Вы можете взглянуть на раздел 7 Представлений учебника Idris и правило "с".