是否可以在idris的函数定义中使用保护?

时间:2014-07-27 13:04:50

标签: syntax pattern-matching idris guard-clause

在haskell,人们可以写:

containsTen::Num a => Eq a => [a] -> Bool
containsTen (x : y : xs)
    | x + y == 10 = True
    | otherwise = False

是否有可能在Idris中写出相同的东西,而没有使用ifThenElse(我的实际案例比上面的更复杂)?

1 个答案:

答案 0 :(得分:13)

Idris没有与haskell完全相同的防护模式。 with 子句在语法上相似(但更强大,因为它支持依赖类型的匹配):

containsTen : Num a => List a -> Bool
containsTen (x :: y :: xs) with (x + y)
    | 10 = True
    | _  = False

您可以查看Idris tutorial部分 7个视图和"使用"规则