2016-08-08 72 views
1

Ich möchte Unicode-Aliase für einige Standardfunktionen in der Haskell-Bibliothek erstellen. Hier war mein Versuch.So erstellen Sie einen Alias ​​für eine Funktion mit Unicode-Zeichen in Haskell

{-# LANGUAGE UnicodeSyntax #-} 
{-# LANGUAGE NoMonomorphismRestriction #-} 

import qualified Data.List as List 
import qualified Data.Map as Map 
import qualified Data.Set as Set 


-- Convenient aliases for common operations via Unicode symbols. 
∩ = Set.intersection 
∪ = Set.union 
⊆ = Set.isSubsetOf 
⊊ = Set.isProperSubsetOf 
∈ = Set.member 

main = putStrLn "Hello World!" 

Wenn ich versuche, dies zu kompilieren, erhalte ich die Fehler

[~/Desktop]$ ghc --make test.hs 
[1 of 1] Compiling Main    (test.hs, test.o) 

test.hs:10:1: parse error on input ‘∩’ 
[~/Desktop]$ 

Ich möchte diese Unicode-Symbole als Infixoperatoren verwenden, und hoffentlich ohne die Backticks. Wie macht man das?

+3

[Es gibt eine Bibliothek für diese] (https://hackage.haskell.org/package/containers-unicode-symbols-0.3.1.1/docs/Data-Set-Unicode.html);) – MarLinn

+0

@ MarLinn Wow! Vielen Dank! – smilingbuddha

Antwort

5

Sie benötigen neue Funktionen mit Klammern umgeben, wenn man sie erklären:

(∩) = Set.intersection 

Beachten Sie, dass auch Großbuchstaben aus der Funktion, die Sie von Data.Set importieren entfernen müssen, weil Set.Intersection als Daten Konstruktor gesehen und nicht als Funktion (und existiert nicht tatsächlich).

6

Genau wie bei jeder anderen Infixoperator Punkt frei zu definieren, müssen Sie den Operator in Klammern an seinem Punkt der Definition wickeln:

(∩) = Set.intersection 
(∪) = Set.union 
(⊆) = Set.isSubsetOf 
(⊊) = Set.isProperSubsetOf 
(∈) = Set.member 

Da diese Zeichen alle als Symbole klassifiziert werden, werden sie behandelt, als Infix-Operatoren mit oder ohne UnicodeSyntax (die einfach bestimmte Unicode-Zeichen an Stellen erlaubt, die als Sprachsyntax reserviert sind, z. B. ::).

+0

Wie die andere Antwort zeigt, ist auch die Großschreibung falsch. – dfeuer