Haskell: -fglasgow -exts sollte man Code vermeiden, der dies erfordert?

7

Ich bin ein Anfänger mit Haskell und ich habe angefangen, Fehler ähnlich zu sehen:

%Vor%

Ich arbeite innerhalb von ghci und mit ghc , aber nur aufgrund der Tatsache, dass es das erste war, das ich bei einer Suche gefunden habe.

Ich bin neugierig, ob dies die Art von Situation ist, die man vermeiden möchte, voranzukommen. Alle Suchanfragen, die ich gefunden habe, erwähnen, dass diese Erweiterungen die zugrundeliegenden Einrichtungen offen legen, die nützlich sein können (oder auch nicht).

Ein spezifisches Beispiel ist

%Vor%

Ich nehme an, dass sowohl a als auch b gleichzeitig aus der Liste lesen, was hier Probleme verursacht ...? Also, wenn die Glasgow-Erweiterungen das einzige Mittel sind, um dieses Konstrukt zu unterstützen, ist es üblicher, die Liste auf eine andere Weise zu erstellen oder einfach nur anzunehmen, dass die Erweiterungen verfügbar sein werden?

Vielen Dank im Voraus für eine Eingabe.

[BEARBEITEN] Tut mir leid, wenn das nicht ganz klar war, aber meine Frage ist, ob die Einbeziehung von Glasgow (oder anderen) Erweiterungen als schlechte Praxis angesehen wird. Das obige Beispiel soll nur den Fehlertyp veranschaulichen, der diese Frage ausgelöst hat.

    
ezpz 25.08.2009, 19:23
quelle

5 Antworten

12

Geben Sie anstelle von alle GHC-Erweiterungen an, welche verwendet werden, indem Sie den Pragma-Mechanismus LANGUAGE verwenden:

%Vor%
  

Ich nehme an, dass sowohl a als auch    b liest von der Liste am   gleiche Zeit verursacht hier Probleme ...? Damit,   wenn die Glasgow-Erweiterungen die einzigen sind   Mittel zur Unterstützung dieses Konstrukts ist es   häufiger, um die Liste zu generieren   ein anderer Weg oder einfach davon ausgehen, dass die   Erweiterungen werden verfügbar sein?

Eine parallele Iteration über dieselbe Liste ist erlaubt. Das Problem ist, dass Parallelverständnisse im Haskell 98-Standard nicht definiert sind. Sie können einfach mit zip simuliert werden:

%Vor%

Erweiterungen selbst sind nicht schlecht - ein Großteil der Standardbibliothek verwendet Erweiterungen der einen oder anderen Art. Viele werden in Haskell , der nächsten Iteration des Haskell-Standards, berücksichtigt. Einige Erweiterungen, z. B. GADTs, werden häufig in benutzerdefinierten Bibliotheken verwendet. Andere, wie Vorlagen oder inkohärente Instanzen, sind wahrscheinlich keine gute Idee, es sei denn, Sie wirklich wissen, was Sie tun.

Jede Erweiterung, die in der HaskellExtensions-Wiki-Seite mit Unterstützung von zwei oder mehr Compilern aufgeführt ist, ist wahrscheinlich sicher zu bedienen.

    
John Millikin 25.08.2009, 19:31
quelle
6

GHC ist definitiv allgegenwärtig - ich denke, es ist der am häufigsten verwendete Haskell-Compiler, also wird es wahrscheinlich nicht zu viele Probleme verursachen. Sie sollten jedoch immer versuchen, standardkonformen Code zu schreiben - vielleicht nicht für persönliche Projekte, aber für OSS oder Arbeit, definitiv.

Alles kann passieren, oder? Das kann eine plötzliche Änderung des Compilers auf halbem Weg durch Ihr Projekt sein.

Mit OSS verwenden verschiedene Leute verschiedene Compiler - HUGS ist zum Beispiel auch ziemlich üblich.

    
Lucas Jones 25.08.2009 19:28
quelle
6

Die Verwendung von Erweiterungen ist in Ordnung. Markieren Sie sie speziell mit -XFoo oder LANGUAGE FOO. Welche Erweiterungen Sie verwenden möchten, liegt ganz bei Ihnen. Sie sollten sich daher an die Liste halten, die in Haskell Prime enthalten ist.

    
Don Stewart 26.08.2009 00:14
quelle
3

Was Sie wollen, ist:

%Vor%

Dies liegt daran, dass List-Comprehensions nicht wirklich mit selbstreferentiellen Listen arbeiten. Auch wenn GHC beliebter ist, produziert HUGS im Allgemeinen klarere Fehlermeldungen.

    
Lucky 25.08.2009 19:34
quelle
1

Ich würde vorschlagen, ein " , " anstelle von " | " zu verwenden, aber dann habe ich gelernt, dass dies etwas anderes tut, als ich erwartet habe.

Daher sollten Sie neben der Portabilität auch die Lesbarkeit in Betracht ziehen. Die Verwendung von ungewöhnlichen Erweiterungen kann Ihren Code schwerer lesbar machen (für Personen, die mit den Erweiterungen nicht vertraut sind).

Einige Erweiterungen haben keine negativen Auswirkungen auf die Lesbarkeit (der resultierende Code ist offensichtlich), wie MultiParamTypeClasses , FlexibleContexts , FlexibleInstances .

Andere verlangen vom Leser eine Vertrautheit mit einer neuen Syntax und einem Verständnis dessen, was diese Syntax bedeutet. Beispiele hierfür wären ParallelListComp , TypeFamilies , FunctionalDependencies . In diesem Fall würde ich empfehlen, diese Erweiterungen zu vermeiden, es sei denn, sie bringen einen Vorteil. In diesem Fall können Sie einfach zip verwenden, wie John Millikin vorgeschlagen hat, oder den Code als unbekannten Vorschlag umgestalten.

+1 dons 'Vorschlag zur Verwendung der geplanten in Haskell Prime .

  

Haskell 2010 wird Ende 2009 veröffentlicht. Die Änderungen werden am 3. September 2009 auf dem Haskell Symposium bekannt gegeben.

    
yairchu 26.08.2009 09:41
quelle

Tags und Links