Например:
intersectBy : (a -> a -> Bool) -> List a -> List a -> List a
intersectBy _ [] _ = []
intersectBy _ _ [] = []
intersectBy eq xs ys = [x | x <- xs, any (eq x) ys]
Есть дополнительные шаблоны для []
и похоже, что они используются в Haskell Data.List
, но что это за оптимизация? И где тут разница с Идрисом?
Я спрашиваю, потому что я слышал, что «это затруднит рассуждения об этом», и у человека, который сказал мне, что не было времени, чтобы полностью объяснить это.
Сомневаюсь, что смогу понять, как это сделать, выполняя "уменьшение доказательства" функции.
Может кто-нибудь объяснить мне политику дополнительных шаблонов здесь с позиций Haskell и Idris, чтобы я мог понять и увидеть разницу.