繁体   English   中英

Haskell中<= vs。=>的含义

[英]The meaning of <= vs. => in Haskell

我对Haskell比较陌生; <=语法代表什么? <==>什么区别? 两者的示例都将有所帮助。

两者是完全无关的。 它们似乎只是因为ASCII而相关。 如果看一下它们的Unicode等效项,则更有意义:

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

     Eq a => a -> a -> Bool 

    上述签名中的Eq a =>表示类型变量a可以是Eq类实例的任何类型。 也就是说,任何具有deriving (Eq)或显式实例(例如instance Eq Type where ...

    在函数签名中, ->指定普通参数,而=>指定签名中的约束 在上面的示例中( Eq a => a -> a -> Bool ),该函数接受a类型a两个参数,并给我们一个Bool Eq a =>部分不是该函数的显式参数; 它只是告诉我们a必须是Eq一部分(也就是说,它必须与==相当)。

  • <= 小于或等于 也就是说,它是而不是 这是Ord类一部分的标准库中的普通函数:

     λ> :t (<=) (<=) :: Ord a => a -> a -> Bool 

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

     λ> 10 <= 12 True 

他们似乎对称的唯一原因是因为ASCII逼近是相同的,但是这只是在符号的限制。 否则,它们是完全无关的。

您可以在代码中使用明确的Unicode符号。 UnicodeSyntax扩展允许对=>使用 ,并且base-unicode-symbols软件包包含标准库函数的Unicode版本,其中对<=包括

他们是完全不同的东西。

  • => (以及-> )是内置的类型级别语法。 它用于表示约束。 例如签名

     abs :: Num a => a -> a 

    告诉您abs函数采用类型的值a并且产生相同类型的一个值,在该条件下a是一个数字类型(即,满足Num a约束)。 这样的约束通常是一个类型类 在这种情况下

     class Num a where ... 

    您可以阅读=>箭头作为排序的函数映射,太: abs首先需要的是什么一些具体种类的信息a作为“隐含参数”,那么这样的一个数字作为一个明确的说法,然后才给结果。

  • <=不是语法,它只是标准库中定义的中缀运算符。 具体来说,它是数学运算符的小于运算符。
    您可以在Hayoo上查找此类运算符,而无需询问有关它们的问题。


严格来说,一类是不是约束,而是“约束构造方法”,即一类级别的功能,其结果是怎么样的Constraint 例如,将Num :: * -> Constraint应用于例如Int :: *表示Num Int是一个约束。 (那些不是类型签名,而是类型签名 ,即“类型级别事物的类型”。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM