2016-08-08 1 views
1

Haskellライブラリの標準関数のUnicodeエイリアスを作成したいとします。ここに私の試みがあった。HaskellでUnicode文字を使用する関数のエイリアスを作成する方法

{-# 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!" 

私はこれをコンパイルしようとすると、私は中置演算子としてこれらのUnicodeの記号を使用したい、そして、できればバッククォートせずにエラー

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

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

を取得します。どのようにこれを行うのですか?

+3

[こちらのライブラリがあります](https://hackage.haskell.org/package/containers-unicode-symbols-0.3.1.1/docs/Data-Set-Unicode.html)) – MarLinn

+0

@ MarLinn Wow!本当にありがとう! – smilingbuddha

答えて

5

は、あなたがそれらを宣言するときに括弧を使用して新しい機能を囲む必要があります。Set.Intersectionは、データコンストラクタと見られているので、あなたも、あなたがData.Setからインポート機能から大文字を削除する必要が

(∩) = Set.intersection 

注意関数としてではなく(実際には存在しない)

6

ただ、他の中置演算子ポイントフリーを定義するとき、あなたは定義のその時点では、括弧内の演算子をラップする必要がありますように:

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

これらの文字がすべてのシンボルとして分類されているので、彼らは次のように扱われますUnicodeSyntaxの有無にかかわらず(::のように、言語構文として予約されたプレースで特定のユニコード文字を許可する)。

+0

もう一つの答えが示すように、大文字は間違っています。 – dfeuer

関連する問題