如何在Haskell中使用Unicode字符为函数创建别名

smi*_*dha 1 syntax haskell 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!"
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我得到了错误

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

test.hs:10:1: parse error on input ‘?’
[~/Desktop]$ 
Run Code Online (Sandbox Code Playgroud)

我想使用这些unicode符号作为中缀运算符,并希望没有反引号.怎么做到这一点?

Ale*_*ing 6

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

(?) = Set.intersection
(?) = Set.union
(?) = Set.isSubsetOf
(?) = Set.isProperSubsetOf
(?) = Set.member
Run Code Online (Sandbox Code Playgroud)

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


vil*_*u24 5

当你声明它们时,你需要用parantheses包围你的新函数:

(?) = Set.intersection
Run Code Online (Sandbox Code Playgroud)

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