変数を表すデータ型 Var を作成したいと思います。変数は、a、b、c... z、小文字または大文字の文字です。
私はこれを書くことができます:
data Var = A | B | C -- continues to Z
しかし、私はこれを書くことができません:
data Var = a | b | c -- continues to z
おそらく、それらが小文字であるためです。このデータ型を作成するエレガントな方法はありますか?
1つの解決策は、単に持つことです
data Var = Var Char
Var 'c'
とVar 'D'
は必要に応じてタイプを設定しますが、残念ながらそれVar '%'
も設定できます。これを修正するには 2 つの方法があります。1 つは、すべてのコンストラクターを列挙することです。
data Var = A | B | C -- continues to Z
| SmallA | SmallB | SmallC -- continues to z
正しい値のみを型に入れるもう 1 つの方法は、スマート コンストラクターを使用することです。
いいえ、ありません - あなたが言ったように、それらは大文字でなければなりません。
私は一緒に行きます
data Var = Var_A | Var_B | ... | Var_Z
| Var_a | Var_b | ... | Var_z
またはV_A | V_B
など。
代替手段は使用することです
newtype Var = Var Char
しかし、それはいくらかの安全性を失いますが、実際に読んだり見せたりすることはできます。Char
コードで無効なs が s になっていないことを確認する必要がありますVar
。
(data Var_A | ...
は定型コードがたくさんあるので、A から D だけを実行して、それらの文字を処理するだけのコードを作成してから、Haskell プログラムを作成して、データ型のソース コードと解析そうすることで、Haskell での文字列操作について少し学ぶことができます。)
((定型的な仕事をするように設計された Template Haskell のようなものがありますが、それはかなり高度であり、最初に文字列操作を学ぶ必要があります。 Scrap Your Boilerplate は、優れた賢いコードを書くための非常に高度なテクニックの集まりです. ただし、それに到達するには、Haskell の経験がもっと必要です.))