为什么后卫需要Idris中的Ord类型类?

时间:2018-05-10 22:44:15

标签: idris

在另一个问题(How to write a simple list-based quicksort in Idris?)中,我只是想了解为什么Prelude.Applicative.guard需要Ord类型类。

Guard定义为like this

guard : Alternative f => Bool -> f ()
guard a = if a then pure () else empty

查看Alternative界面docs(我实际上并不了解它在代码中是如何定义的,但我在学习Idris时并不是很远),我不知道看看它如何需要Ord

1 个答案:

答案 0 :(得分:2)

guard不需要Ord约束,而是前一个问题中的(<)。我在List (Ord b)Ord b => List b之间给出了distingush的答案。

要查看guard抱怨缺少约束的原因,请参阅monad comprehensions如何去糖。

[y | y <- xs, y < x]变为do {y <- xs; guard (y < x); pure y}