本「Real World Haskell」からHaskellを学んでいます。66 ページと 67 ページでは、次の例で case 式が示されています。
fromMaybe defval wrapped =
case wrapped of
Nothing -> defval
Just value -> value
私は F# で同様のことを覚えていますが、(この本の前半で示したように) Haskell は関数を一連の方程式として定義できます。私の知る限り、Fシャープはできません。だから私はこれをそのような方法で定義しようとしました:
fromMaybe2 defval Nothing = defval
fromMaybe2 defval (Just value) = value
私はそれを GHCi にロードし、いくつかの結果を確認した後、同じであると確信しました。これは、方程式の場合になぜケース式が必要なのか疑問に思います。
- より理解しやすい (それは数学です。なぜ を使用するのか
case something of
、誰がそれを言うのですか?); - 冗長ではありません (2 対 4 行)。
- 必要な構造化とシンタックス シュガーがはるかに少なくなります (
->
演算子である可能性があります。彼らが行ったことを見てください!)。 - 必要な場合にのみ変数を使用します (
wrapped
スペースを占有するなどの基本的なケースでは)。
case 式の良い点は何ですか? それらは、似たような FP ベースの言語 (F# など) にあるという理由だけで存在するのでしょうか? 何か不足していますか?
編集:
@freyrsの回答から、コンパイラーがこれらをまったく同じにすることがわかります。したがって、方程式は常にケース式に変換できます (予想どおり)。次の質問は逆です。コンパイラとは逆のルートをたどり、let
/where
式を含む方程式を使用して任意のケース式を表現できますか?