Haskell関数を定義する古典的な方法は
f1 :: String -> Int
f1 ('-' : cs) -> f1 cs + 1
f1 _ = 0
すべての行に関数名を書くのはちょっと不満です。現在、私は通常、パターンガード拡張機能を使用して次のように記述し、より読みやすく、変更しやすいと考えています。
f2 :: String -> Int
f2 s
| '-' : cs <- s = f2 cs + 1
| otherwise = 0
2番目の例は、より読みやすく、変更可能で、エレガントだと思いますか?生成されたコードはどうですか?(まだ脱糖された出力を見る時間はありません、ごめんなさい!)。短所は何ですか?私が見るのは拡張機能の使用法だけです。