在haskell,人们可以写:
containsTen::Num a => Eq a => [a] -> Bool
containsTen (x : y : xs)
| x + y == 10 = True
| otherwise = False
是否有可能在Idris中写出相同的东西,而没有使用ifThenElse
(我的实际案例比上面的更复杂)?
答案 0 :(得分:13)
Idris没有与haskell完全相同的防护模式。 with 子句在语法上相似(但更强大,因为它支持依赖类型的匹配):
containsTen : Num a => List a -> Bool
containsTen (x :: y :: xs) with (x + y)
| 10 = True
| _ = False
您可以查看Idris tutorial部分 7个视图和"使用"规则强>