gpt4 book ai didi

haskell - 在 Haskell 中,如何自动派生这样一个自定义类?

转载 作者:行者123 更新时间:2023-12-04 03:03:56 24 4
gpt4 key购买 nike

代码如下所示:

class MyAnd a where
myAnd :: (Show a) => a -> a -> String
x `myAnd` y = (show x) ++ " and " ++ (show y)

data TrafficLight = Red | Yellow | Green deriving(Show, MyAnd)

这里 MyAnd是具有函数 myAnd 的类型类,我认为它是通用的,唯一的约束是 a必须有 Show 的实例类(class)..

TrafficLight类型,它已经派生自 Show类型类。但是,当我编译代码时,编译器会提示
    Can't make a derived instance of ‘MyAnd TrafficLight’:
‘MyAnd’ is not a derivable class
In the data declaration for ‘TrafficLight’
Failed, modules loaded: none.

有人对此有想法吗?

最佳答案

您不能将派生与用户定义的类一起使用。通常 deriving自动为给定类的方法生成代码,这只是因为编译器知道方法应该做什么,因此可以根据您的类型结构生成合适的实现。这对于用户定义的类显然是不可能的,因为编译器无法知道这些方法应该如何表现。

在您的情况下,您似乎只想使用您的类具有的一种方法的默认实现,因此编译器不需要生成任何实现。当然这意味着 deriving根本没有必要,您可以只使用没有正文的实例声明。

PS:如果您总是想使用该方法的默认实现,那么根本不使用类可能最有意义,而只需定义 myAnd作为一个函数。

关于haskell - 在 Haskell 中,如何自动派生这样一个自定义类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30288119/

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