Haskell中<= vs. =>的含义

McL*_*odx 0 haskell

我对Haskell比较陌生; 什么是<=语法代表和之间有什么区别<==>?两者的例子都会有所帮助.

Tik*_*vis 6

这两者完全不相关; 它们似乎因为ASCII而相关.如果你看一下它们的Unicode等价物会更有意义:

  • =>是箭头:?.它用于指定类型签名中的约束:

    Eq a => a -> a -> Bool
    
    Run Code Online (Sandbox Code Playgroud)

    Eq a =>在上述签名意味着该类型的变量a可以是任何类型的是的一个实例Eq的类.也就是说,任何具有deriving (Eq)或类似的显式实例的类型instance Eq Type where ....

    在函数签名中,->指定正常参数,同时=>指定签名中的约束.在上面的例子(Eq a => a -> a -> Bool)中,函数接受两个类型的参数,a并给出一个Bool.该Eq a =>部分不是函数的显式参数; 它只是告诉我们a必须是其中的一部分Eq(也就是说,它必须与之相当==).

  • <=小于或等于.也就是说?,不是 ?.这是标准库中的常规函数​​,它是Ord类的一部分:

    ?> :t (<=)
    (<=) :: Ord a => a -> a -> Bool
    
    Run Code Online (Sandbox Code Playgroud)

    您可以在正常表达式中使用它:

    ?> 10 <= 12
    True
    
    Run Code Online (Sandbox Code Playgroud)

它们看似对称的​​唯一原因是因为ASCII的近似值??相同,但这只是符号的限制.否则,他们完全不相关.

您可以在代码中使用明确的Unicode符号.该UnicodeSyntax扩展支持使用?for =>,并且base-unicode-symbols包中包含Unicode版本的标准库函数,包括?for <=.