我想为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!"
当我尝试编译时,我收到错误
[~/Desktop]$ ghc --make test.hs
[1 of 1] Compiling Main ( test.hs, test.o )
test.hs:10:1: parse error on input ‘∩’
[~/Desktop]$
我想将这些unicode符号用作中缀运算符,并希望没有反引号。怎么做到这一点?
答案 0 :(得分:6)
就像定义任何其他中缀运算符无点时一样,您需要将运算符包含在其定义的括号中:
(∩) = Set.intersection
(∪) = Set.union
(⊆) = Set.isSubsetOf
(⊊) = Set.isProperSubsetOf
(∈) = Set.member
因为这些字符都被归类为符号,所以它们被视为中缀运算符,有或没有UnicodeSyntax
(它只允许在保留为语言语法的地方使用某些unicode字符,例如::
)。
答案 1 :(得分:5)
您需要在声明时使用parantheses包围新功能:
(∩) = Set.intersection
请注意,您还需要从Data.Set
导入的函数中删除大写字母,因为Set.Intersection
被视为数据构造函数而不是函数(并且实际上不存在)