При определении нескольких совпадений шаблонов для функции, например, следующим образом:
1: takeTree 0 tree = Leaf
2: takeTree levels (Leaf) = Leaf
3: takeTree levels (Branch value left right) = Branch value (takeTree...
Я получаю два предупреждения в частности:
Source.hs: 1: Предупреждение: определено, но не используется: `tree '
Source.hs: 2: Предупреждение: определено, но не используется: `levels '
Я не сразу убежден, что это полезные предупреждения. Если бы мой код был вместо:
1: takeTree 0 _ = Leaf
2: takeTree _ (Leaf) = Leaf
3: takeTree levels (Branch value left right) = Branch value (takeTree...
который исправляет предупреждения, теперь я считаю, что это гораздо менее удобочитаемо, и запутывает семантику того, что я ожидаю в качестве входных значений.
Почему Defined but not used
существует разумное предупреждение здесь, когда среди моих исчерпывающих шаблонов каждый аргумент фактически используется хотя бы один раз?