2017-04-10 2 views
0

Ich muss ein Feld eines sehr großen Standarddatensatzes aktualisieren.Aktualisieren eines einzelnen Felds in einem Datensatz mit Haskell @

Da sich der Standard möglicherweise ändert, möchte ich den gesamten Datensatz nicht manuell neu erstellen.

Jetzt habe ich auf die folgende Art und Weise kommen, dies zu tun, aber ich bin nicht sicher, wie es funktioniert:

unaggregate :: MyResult -> MyResult 
unaggregate [email protected]{..} = calc{ the_defaults = the_override 
             `mappend` the_defaults } 
    where 
    the_override = create ("aggregation" := False) 

Ich habe versucht, für ‚Haskell Operator @‘ in Google gesucht, aber es gibt nicht sofort nützliche Informationen.

Ich sah irgendwo [email protected]{..} tut Mustervergleich auf Variablen, aber ich sehe nicht, welche Variable calc für die MyResult Rekord tut ...

Auch habe ich nachgeschlagen mappend (und Monoide), und ich bin nicht sicher, wie diese arbeiten entweder ...

Sie für jede Hilfe danken

Antwort

2

Das @ Symbol einer "as-Muster" bezeichnet wird. Im obigen Beispiel können Sie calc für den gesamten Datensatz verwenden. Normalerweise würden Sie es so verwenden: [email protected](MyResult someResult) - so können Sie sowohl die ganze Sache als auch die Stücke haben, die Sie zusammenbringen. Sie können mit Listen das gleiche tun ([email protected](myHead:myTail)) oder Tupel ([email protected](myFst, mySnd). Es ist ziemlich praktisch!

MyResult{..}RecordWildcards verwendet. Welche ist eine nette Erweiterung! ABER RecordWildcards hilft Ihnen nicht nur ein Feld eines Datensatzes zu aktualisieren.

du stattdessen tun:.!? calc { theFieldYouWantToUpdate = somethingNew }

+0

vielen dank, was tut 'mappend' tun – user3203476

+0

Wie du oben gesagt, es ist eine Operation auf Monoide Monoide etwas sind, die a) leer sein kann und b) sein". hinzugefügt "zusammen. Also, Listen sind Monoids. Sie können eine leere Liste ('[]') haben und Sie können Listen zusammenfügen ('mappend [1] [2] == [1,2]'). Mayben und Karten und Text und viele andere Dinge sind auch Monoids, also können Sie diese auch "mappen". – Libby

+0

eine sehr klare Antwort !! Vielen Dank für deine Zeit !! – user3203476

Verwandte Themen