2013-07-26 4 views

Antwort

14

Diese Syntax ist in der Report und insbesondere in section 3.10 definiert. [1..6] ist definiert als enumFromTo 1 6. Sie können solche Syntax nicht selbst definieren.

+13

Zur Betonung --- '[1, 2, 3]' und '[1..3]' haben den gleichen * Wert *, kommen aber dort auf sehr unterschiedliche Weise an. '[1, 2, 3]' desugars (direkt!) Zu '1: 2: 3: []' while '[1..3]' desugars zu 'enumFromTo 1 3' welches dann * zu * 1 auswertet: 2: 3: [] '. –

+12

@tel: und der Vollständigkeit halber haben "[1,2,3]" und "[1..3]" nicht unbedingt den gleichen Wert. Es kommt darauf an, was es ist. Es könnte eine Liste mit einem Typ sein, der "Enum" auf seltsame Weise implementiert. – newacct

+2

Man könnte auch einen Typfehler haben, da der Haupttyp von '[1,2,3]' 'Num a => [a]' ist, während der Haupttyp von '[1..3]' 'ist (Num a , Enum a) => [a] '. –

Verwandte Themen