2014-01-10 34 views
9

乙烯基,我可以定義一個類型別名記錄,使其更容易出口到其他模塊:乙烯:構成記錄類型別名

import Data.Vinyl 

name = Field :: "name" ::: String 
age = Field :: "age" ::: Int 
type Person = ["name" ::: String, "age" ::: Int] 

現在假設我添加一個字段存儲的高度。

height = Field :: "height" ::: Int 

我想很好地構建一個類型別名用於容納Personheight該記錄。天真地說,這可能看起來像這樣:

type MeasuredPerson = ("height" ::: Int) : Person 

這個語法顯然不起作用!有沒有辦法做到這一點?是否有任何好的參考解釋了似乎在這裏使用的類型級別的數組語法?

回答

10

原來有一個很簡單的答案,這是我成功地錯過:

Data.Vinyl.Rec定義了利弊,並追加了類型級別列表,所以下面的工作:

type MeasuredPerson = ("height" ::: Int) ': Person 

如果我有兩個我可以將它們追加如下:

type Other = Person ++ Address 
+1

實際上,它只定義'++','':'和''[]'帶有'-XDataKinds'。 – Cubic