通常当我创建函数时,我不知道在哪些函数中使用类型类(等等)更好Eq,Integral因为有时候不需要像以下那样使用它们:
factorial :: Int -> Int
bla bla bla
bla bla bla
Run Code Online (Sandbox Code Playgroud)
和
factorial :: (Integral a) => a -> a
bla bla bla
bla bla bla
Run Code Online (Sandbox Code Playgroud)
我相信第二个只是花时间和地点但是在elem函数中写入是很重要的Eq(下面elleme是elem)
elemme :: Eq a => a -> [a] -> Bool
y `elemme` [] = False
y `elemme` (x:xs) = if y == x then True else y `elemme` xs
Run Code Online (Sandbox Code Playgroud)
请告诉我一些事情.谢谢.
类型类可以让你编写更多通用函数.Haskell有很棒的工具可以让你指定一个函数适用于所有类型,比如
id :: a -> a
id a = a
Run Code Online (Sandbox Code Playgroud)
但有些事情并不适用于所有类型,
(==) :: Eq a => a -> a -> Bool
Run Code Online (Sandbox Code Playgroud)
没有类型类,我们要么必须==为每种类型写一个新的,
eqInteger :: Integer -> Integer -> Bool
Run Code Online (Sandbox Code Playgroud)
或者指定所有类型都是等同的,并且可以测试是否相等.但是你可以问
id == const 1
Run Code Online (Sandbox Code Playgroud)
因此,当您发现自己想要指定函数在所有类型的子集上工作时,请转到类型类.
我经常喜欢编写这些更通用的函数,即使我不使用它们超过一种类型,因为签名越普遍,实现的选项越少,这使我更容易知道我没有做过什么傻傻的
id :: Integer -> Integer
id = (+1)
Run Code Online (Sandbox Code Playgroud)
您基本上声明您的函数只需要X函数,这使得使用错误函数可能会出现编译器错误.
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |