2016-06-19 9 views
1

Warum dieser Code nichtWarum ist Ulme so wählerisch, aber nur in bestimmten Fällen?

type SectionedItems s i = SectionedItems{ 
    section : s, 
    items : List i, 
    subsections: List (SectionedItems s i) 
} 

si1 : SectionedItems String String 
si1 = SectionedItems{ 
    section = "", 
    items = [ 
    "1", 
    "2" 
    ], 
    subsections = [ 

    ] 
} 

und dieser Code erfolgreich

type SectionedItems s i = SectionedItems{ 
    section : s, 
    items : List i, 
    subsections: List (SectionedItems s i) 
} 

si1 : SectionedItems String String 
si1 = SectionedItems{ 
    section = "", 
    items = [ 
    "1", 
    "2" 
    ], 
    subsections = [ 

    ] 
        } 

Warum Ulme für den ersten Code scheitert? Ich weiß, dass es aufgrund von Leerzeichen scheitert, aber warum? Warum müssen die { und } beim Erstellen einer Instanz ausgerichtet werden, aber nicht beim Deklarieren des Typs?

+3

Ich würde empfehlen, 'Elm-Format' zu verwenden, um das Problem der Formatierung ein für allemal zu beseitigen. – halfzebra

+0

Ich würde empfehlen, dieses Problem an die [elm-Mailingliste] (https://groups.google.com/forum/?fromgroups#!forum/elm-discuss) zu melden. IMHO ist es besser, das Problem an der Quelle zu beheben, und verwenden Sie 'elm-Format' nur als ein Werkzeug, nur um Code aufzuräumen. – wintvelt

+0

Ich stimme zu, dass das Root-Problem ein Problem mit dem elm-Compiler sein sollte, aber ich stimme auch zu, dass das elm-Format Sie davon abhalten wird, Ihre Zeit mit solchen Dingen zu verschwenden. – Seth

Antwort

1

Es ist nicht so, dass diese Klammern aufgereiht werden müssen, sondern dass Sie die schließende Klammer nicht am Anfang der Zeile platzieren können.

Zum Beispiel diese kompiliert:

si1 : SectionedItems String String 
si1 = SectionedItems{ 
    section = "", 
    items = [ 
    "1", 
    "2" 
    ], 
    subsections = [ 

    ] 
} 

Nur in einem zusätzlichen Raum setzen, bevor die schließenden Klammer genug ist.

Warum? Weil die "Kinder" von si1 eine größere Einrückung als si1 selbst haben müssen. Wenn dies nicht der Fall ist, denkt Elm, dass Sie versuchen, eine neue Definition zu erstellen, und } ist kein gültiger Weg, um eine Definition zu starten.

+0

Warum ist Ulm kein Fehler in der Deklaration von SectionItems? – 2426021684