2016-06-09 6 views
1

Mit Elm 0,17, würde ich manchmal die Schritte während einer Berechnung genommen sehen möchten, wie zum Beispiel:Wie in debug.log Auswertung von Wert zwingen

let 
    names = Debug.log "accounts" 
     List.map (\x -> x.name) accounts 

    sortedNames = Debug.log "sorted accounts" 
     List.sortBy String.toLower names 

    options = 
     List.map (viewAccountOption selectedName) sortedNames 
in 
    [ viewEmptyOption ] ++ options 

Dieser meldet sich der folgende:

accounts: <function> 
sorted accounts: <function:sortBy> 

Ich verstehe, Elm ist faul, und die Thunks werden ausgewertet, wenn die Werte tatsächlich benötigt werden.

Ich konnte force oder strict Funktion in elm-core Basics oder irgendwo sonst in der Packung nicht finden.

Gibt es eine Möglichkeit, die Auswertung eines Wertes zu erzwingen?

+3

Nur als Kommentar ... Elm ist nicht faul, das heißt, alle Anweisungen werden sofort ausgeführt –

Antwort

3

Sie können das tun, indem Sie entweder mit Klammern:

Debug.log "accounts" 
    (List.map (\x -> x.name) accounts) 

Oder mit dem <| Operator

Debug.log "accounts" <| 
    List.map (\x -> x.name) accounts 

EDIT:

Der Grund hierfür ist, dass debug.log mit List.map bewertet wurde (eine Funktion) als zweites Argument und gab dann dieses Argument zurück, um mit dem Rest der Zeile zusammengesetzt zu werden. Du musstest nur ein wenig auf Ulm hinweisen, was dein beabsichtigtes Argument war Präzedenzfall