究竟是什么=>在哈斯克尔做什么?

时间:2016-01-12 15:01:26

标签: haskell

我刚刚开始阅读“了解你是一个很好的Haskell”。在第3章中,我看到作者使用=>但我无法确切地知道它的作用以及它们使用它的原因。

我认为这是第一次使用它:

lucky :: (Integral a) => a -> String  
lucky 7 = "LUCKY NUMBER SEVEN!"  
lucky x = "Sorry, you're out of luck, pal!" 

这是另一个例子:

tell :: (Show a) => [a] -> String  
tell [] = "The list is empty"  
tell (x:[]) = "The list has one element: " ++ show x  
tell (x:y:[]) = "The list has two elements: " ++ show x ++ " and " ++ show y  
tell (x:y:_) = "This list is long. The first two elements are: " ++ show x ++ " and " ++ show y  

感谢。

2 个答案:

答案 0 :(得分:0)

它将参数Integral约束到某个类,在本例中为Showaction

答案 1 :(得分:0)

简而言之

虽然尚未完成,但如果您尚未阅读class es,则可以将其视为约束,即a类型上定义了一组函数。

<强>解释

您可以将其视为对类型设置约束。例如,在lucky

的情况下
lucky :: (Integral a) => a -> String

这意味着只要a是[{1}} 的a,就可以为任何类型instance定义函数。

现在我不知道您是否熟悉Integral es(那些不是面向对象编程中使用的那些),但类或多或少在class上引入了可以的函数然后在你的函数定义中使用。例如,类a定义为:

Integral

现在这个类很难理解,因为它在签名中也使用class (Real a, Enum a) => Integral a where quot :: a -> a -> a rem :: a -> a -> a div :: a -> a -> a mod :: a -> a -> a quotRem :: a -> a -> (a, a) divMod :: a -> a -> (a, a) toInteger :: a -> Integer 。也许更简单的是=>

Show

这意味着如果class Show a where showsPrec :: Int -> a -> ShowS show :: a -> String showList :: [a] -> ShowS a的实例,则可以使用Show 上的show功能。否则以下行:

a

不会编译,因为Haskell不确定它可以在tell (x:[]) = "The list has one element: " ++ show x 上调用show。但是,通过约束类型x,我们知道我们只能在atell的实例的类型上使用a,从而Show函数是定义。