2016-06-29 6 views
5

passenden Sagen, ich habe diesen Rekord:Muster auf zwei Datensätze mit den gleichen Feldern

type alias Rec = { a : Int } 

Und zum Beispiel eine Funktion, die zwei davon nimmt und fasst ihre Zahlen.

f: Rec -> Rec -> Int 

Dies kann unter Verwendung Datensatz Accessoren implementiert wird (d.h. f x y = x.a + y.a), jedoch ist es eine Möglichkeit, Muster zu verwenden passenden beiden ganzen Zahlen zu extrahieren?

Offensichtlich sind diese beiden nicht funktionieren, weil sie zwei verschiedene Zahlen auf die gleiche Variable Bindung würde:

f {a} {a} = a + a 

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

Antwort

3

Es gibt keine Art und Weise ist das zur Zeit zu tun. Es gibt Muster Aliasing (as), aber es funktioniert nur für ein ganzes Muster, so ist dies ungültig:

type alias Rec = { a : Int } 

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

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

Ergebnisse in:

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

Es scheint in der aktuellen Elm Sprache nicht so zu sein, . In anderen funktionalen Sprachen wie ML und Haskell, könnten Sie Muster innerhalb Aufzeichnungen wie schreiben:

$ 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 

Sie könnten auch eine Feature-Anfrage an den Entwickler machen (e) von Elm - oder stellen Sie eine Frage in den community mailing list an am wenigsten.

P.S. Nach einer schnellen Suche, fand ich eine solche proposal ML-like Mustervergleich auf Datensatzfelder in Elm hinzufügen, aber es scheint, dass es abgelehnt worden ist. :-(

Verwandte Themen