我试图在Haskell中制作自定义结构,如下所示:
data Interval = Interval Float Float
instance Interval Float Float where
(Interval a b) + (Interval c d) = Interval (a + c) (b + d)
(Interval a b) - (Interval c d) = Interval (a - c) (b - d)
但每次都会出现错误,如:
' +'不是一种可见的课程方法' Interval' 那我该怎么做呢?
答案 0 :(得分:7)
您正在混合数据类型定义和类型类。
data Interval = Interval Float Float
定义了一个新的数据类型Interval
,但是
instance Interval Float Float where
将尝试创建类型类Interval
的实例。
我不确定您的意图,但是如果您想让类型Interval
符合Num
类型类,该类提供(+)
等运算符。那么您会写:
data Interval = Interval Float Float
instance Num Interval where
(+) (Interval a b) (Interval c d) = Interval (a + c) (b + d)
(-) (Interval a b) (Interval c d) = Interval (a - d) (b - c)
请注意,您需要为Num
的完整实例实现更多功能。
答案 1 :(得分:2)
你做了什么
data Interval = Interval Float Float
您要说Interval
是一个带有一个构造函数(也称为Interval
)的类型,它有两个类型为Float
的未命名字段。
instance Interval Float Float where
在这里,您要说Interval
是一个类型类(非A类型),它接受您提供的两个类型参数Float
。这意味着某处有一行读取class Interval a b where ...
。
(Interval a b) + (Interval c d) = Interval (a + c) (b + d)
(Interval a b) - (Interval c d) = Interval (a - c) (b - d)
这里,假设你要缩进,你定义了两个函数,它们是Interval
类型的方法(不存在),这些方法被命名为+
和{{1} }。
您可能打算使用
我想你想要定义一个类型,Interval,你做了。
我认为您想要定义加法和减法,它们是-
类型类的方法:
Num