10
所以我想要一個表示包含一組節點類型的樹的類型。我還希望表示在重疊集上定義的類似樹。這是Typed AST問題的另一個版本。再說說我的節點類型的池:如何在Haskell中標記多態樹時減少語法混亂?
data Lit = Lit Int
data Var = Var String
data Hole = Hole Int
解析樹可以包含Lit
S或Var
秒,但沒有Hole
秒。稱爲模板的第二種樹可以包含Lit
s,Var
s或Hole
s。
爲了簡單起見,有一種稱爲Add
的遞歸節點。
data Parse = A Lit | B Var
data Template = C Lit | D Var | E Hole
data Tree a = Leaf a
| Add (Tree a) (Tree a)
所以,現在我可以宣佈的數據,我仍然可以在其模式匹配,唯一的問題是語法混亂。
aParse = Add (A Lit 3) (B Var "x")
aTemplate = Add (C Lit 4) (E Hole 3)
fun (Add (A lit) (B var) = ...
我想是一些糖類似於:
ParseLit = A . Lit
TempLit = C . Lit
顯然別名,構造函數(不是類型)的組成不合法的哈斯克爾。但是寫這個最簡潔的方法是什麼,避免儘可能多的鍋爐板?
哦哇。這正是我所期待的。謝謝。 – Amoss