如何在Haskell

时间:2016-08-08 23:17:50

标签: haskell syntax operators

我想为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符号用作中缀运算符,并希望没有反引号。怎么做到这一点?

2 个答案:

答案 0 :(得分:6)

就像定义任何其他中缀运算符无点时一样,您需要将运算符包含在其定义的括号中:

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

因为这些字符都被归类为符号,所以它们被视为中缀运算符,有或没有UnicodeSyntax(它只允许在保留为语言语法的地方使用某些unicode字符,例如::)。

答案 1 :(得分:5)

您需要在声明时使用parantheses包围新功能:

(∩) = Set.intersection

请注意,您还需要从Data.Set导入的函数中删除大写字母,因为Set.Intersection被视为数据构造函数而不是函数(并且实际上不存在)