我想創建一個表示變量的數據類型Var。變量是a,b,c ... z,小寫或大寫字符。爲變量表示創建數據類型,用所有字母a..z,小寫或大寫字母表示
我可以這樣寫:
data Var = A | B | C -- continues to Z
,但我不能這樣寫:
data Var = a | b | c -- continues to z
大概是因爲他們都是小寫。有沒有一種優雅的方式來使這種數據類型?
我想創建一個表示變量的數據類型Var。變量是a,b,c ... z,小寫或大寫字符。爲變量表示創建數據類型,用所有字母a..z,小寫或大寫字母表示
我可以這樣寫:
data Var = A | B | C -- continues to Z
,但我不能這樣寫:
data Var = a | b | c -- continues to z
大概是因爲他們都是小寫。有沒有一種優雅的方式來使這種數據類型?
不,沒有 - 正如你所說的,他們必須是大寫的。
我會去與
data Var = Var_A | Var_B | ... | Var_Z
| Var_a | Var_b | ... | Var_z
或V_A | V_B
等
另一種方法是使用
newtype Var = Var Char
但失去了一些安全的,但確實是發放用於讀取和顯示。您必須確保在您的代碼中沒有無效的Char
最終成爲Var
s。
(data Var_A | ...
是一個很多的樣板代碼,所以你可以只做A到D,然後寫這些代碼只是用這些字母,然後自己做一點練習來編寫一個Haskell程序來編寫源代碼數據類型和你的解析函數!你會在Haskell中學習一些關於字符串操作的方法。)
((這裏有一個模板哈斯克爾的設計,可以爲你做樣板工作,但這是相當先進的,你應該首先學習你的字符串操作,而且,當我談論這個話題時,一旦你真的知道你在做什麼,看看Scrap Your Boilerplate,這是一些非常先進的寫技術,聰明的代碼,你需要更多的Hask ELL的經驗,你去,雖然之前。))
一種解決方法是隻需
data Var = Var Char
雖然根據需要Var 'c'
和Var 'D'
將填充型,可惜Var '%'
可以填充它。有兩種方法可以解決這個問題。一種是像你一樣枚舉所有構造函數:
data Var = A | B | C -- continues to Z
| SmallA | SmallB | SmallC -- continues to z
的另一種方式只讓正確的值進入類型是使用smart constructors。