2015-03-20 9 views

Antwort

12

fand ich die Antwort in Abschnitt 7.4.4 of the GHC User's Guide, in dem es heißt:

Es gibt jetzt einige potentielle Mehrdeutigkeit im Import und Export-Listen; zum Beispiel, wenn Sie schreiben import M((+)) meinst du die Funktion(+) oder die Typ Konstruktor(+)? Der Standardwert ist die ehemalige, aber mit -XExplicitNamespaces (die von -XExplicitTypeOperators impliziert) GHC ermöglicht es Ihnen, diese zu spezifizieren, indem sie mit dem Schlüsselwort type vorhergehenden, also:

import M(type (+)) 

Obwohl es nicht wie Sie scheint muss eigentlich -XExplicitNamespaces angeben, vielleicht -XExplicitTypeOperators ist ein Tippfehler, der -XTypeOperators sein soll. Einige weitere empirische Belege dafür:

★ → :set -XExplicitTypeOperators 
Some flags have not been recognized: -XExplicitTypeOperators 
+2

Bitte einen Fehlerbericht gegen diese Dokumentation auf der GHC Trac-Datei. Wenn Sie nicht wollen, lassen Sie es mich wissen und ich werde es tun. Lass es mich wissen, egal wie :). – dfeuer

+1

@dfeuer https://ghc.haskell.org/trac/ghc/ticket/10175 hier gehen wir! – Shou

0

Anstatt einen Typ zu importieren, können Sie eine Art Operator nur exportieren möchten.

Ich definierte type a * b = ..., aber exportiert (*) exportierte die Prelude-Funktion (*) anstelle des Typs Synonym. Ähnlich wie bei der Antwort oben, um Export eine Art Operator, können Sie die Syntax verwenden:

module Foo (type (*)) where 

    type a * b = ... 
Verwandte Themen