関数の複数のパターン一致を定義する場合、たとえば次のようになります。
1: takeTree 0 tree = Leaf
2: takeTree levels (Leaf) = Leaf
3: takeTree levels (Branch value left right) = Branch value (takeTree...
特に2つの警告が表示されます。
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
私の徹底的なパターンの中で、各引数が実際に少なくとも1回使用されているのに、なぜここで合理的な警告があるのでしょうか。