gpt4 book ai didi

haskell - 何时使用类型类?

转载 作者:行者123 更新时间:2023-12-02 14:32:07 24 4
gpt4 key购买 nike

通常,当我创建函数时,我不知道在哪些函数中最好使用类型类(EqIntegral 等),因为有时不需要像这样使用它们:

factorial :: Int -> Int 
bla bla bla
bla bla bla

factorial :: (Integral a) => a -> a
bla bla bla
bla bla bla

我相信第二个只是需要时间和地点但在 elem 函数中,重要的是要编写 Eq (下面的 ellemeelem)

elemme :: Eq a => a -> [a] -> Bool
y `elemme` [] = False
y `elemme` (x:xs) = if y == x then True else y `elemme` xs

请给我一些建议。谢谢。

最佳答案

类型类让您可以编写更通用的函数。 Haskell 有很棒的工具可以让你指定一个函数适用于所有类型,例如

id :: a -> a
id a = a

但有些东西并不适用于所有类型,

(==) :: Eq a => a -> a -> Bool

如果没有类型类,我们要么必须为每种类型编写一个新的 ==

eqInteger :: Integer -> Integer -> Bool

或者指定所有类型都是相等的并且可以测试相等性。但你可以问

id == const 1

因此,当您发现自己想要指定您的函数适用于所有类型的子集时,请选择类型类。

我经常喜欢编写这个更通用的函数,即使我不使用它们超过一种类型,因为签名越通用,实现的选项就越少,这使得更容易知道我没有使用它们没有做过像这样愚蠢的事情

id :: Integer -> Integer
id = (+1)

您实质上是在声明您的函数只需要 X 函数,这使得有可能因使用错误的函数而出现编译器错误。

关于haskell - 何时使用类型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20068360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com