2016-06-29 82 views
5

匹配說我有這樣的記錄:模式在兩個記錄具有相同的字段

type alias Rec = { a : Int } 

而且,例如,有兩個的這些並總結他們的整數的函數。

f: Rec -> Rec -> Int 

這可以被實現使用記錄存取(即f x y = x.a + y.a),但有使用模式匹配,以提取兩整數的方法嗎?

顯然,這兩個不工作,因爲他們將結合兩個不同的號碼相同的變量:

f {a} {a} = a + a 

f x y = case (x, y) of ({a}, {a}) -> a + a 

回答

3

有沒有辦法目前做到這一點。有圖案走樣(as),但它僅適用於一個整體模式,所以這是無效的:

type alias Rec = { a : Int } 

f: Rec -> Rec -> Int 
f { a as xa } { a as ya } = xa + ya 

main = f { a = 1 } { a = 2 } 

結果:

Detected errors in 1 module. 


-- SYNTAX PROBLEM -------------------------------------------------------------- 

I ran into something unexpected when parsing your code! 

4| f { a as xa } { a as ya } = xa + ya 
     ^
I am looking for one of the following things: 

    a closing bracket '}' 
    whitespace 
4

似乎是在目前榆樹語言沒有這樣的方式。在其他功能性語言,如ML和Haskell,你可以寫裏面記錄等模式:

$ sml 
Standard ML of New Jersey v110.74 [built: Sat Oct 6 00:59:36 2012] 
- fun func {field=x} {field=y} = x+y ; 
val func = fn : {field:int} -> {field:int} -> int 
- func {field=123} {field=45} ; 
val it = 168 : int 

你還不如讓一個功能請求,榆樹的開發商(S) - 或要求在community mailing list問題在最小。

P.S.在快速搜索後,我發現這樣的一個proposal在Elm的記錄字段中添加了類似於ML的模式匹配,但它似乎已被拒絕。:-(

相關問題