1

変数を表すデータ型 Var を作成したいと思います。変数は、a、b、c... z、小文字または大文字の文字です。

私はこれを書くことができます:

data Var = A | B | C -- continues to Z

しかし、私はこれを書くことができません:

data Var = a | b | c -- continues to z

おそらく、それらが小文字であるためです。このデータ型を作成するエレガントな方法はありますか?

4

2 に答える 2

5

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 つの方法は、スマート コンストラクターを使用することです。

于 2012-10-06T14:09:50.793 に答える
4

いいえ、ありません - あなたが言ったように、それらは大文字でなければなりません。

私は一緒に行きます

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 の経験がもっと必要です.))

于 2012-10-06T14:08:06.330 に答える