Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Haskell中使用Unicode字符为函数创建别名_Haskell_Syntax_Operators - Fatal编程技术网

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

如何在Haskell中使用Unicode字符为函数创建别名,haskell,syntax,operators,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

我想为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符号作为中缀运算符,希望没有反勾号。如何做到这一点

就像定义任何其他无点中缀运算符一样,您需要在定义点将运算符用括号括起来:

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

因为这些字符都被分类为符号,所以它们被视为中缀运算符,有或没有UnicodeSyntax,UnicodeSyntax只允许某些unicode字符保留为语言语法,例如::。

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

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

因为这些字符都被归类为符号,所以它们被视为中缀运算符,带有或不带有UnicodeSyntax,UnicodeSyntax只允许某些unicode字符位于保留为语言语法的位置,例如::。

当您声明新函数时,需要用paranthes包围它们:

(∩) = Set.intersection

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

声明新函数时,您需要将其用偏执词包围:

(∩) = Set.intersection

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

正如另一个答案所指出的,大小写也是错误的。正如另一个答案所指出的,大小写也是错误的。@马林哇!非常感谢!;@马林哇!非常感谢!