vik*_*ata 0 int inheritance haskell typeclass
在声明函数时,我们可以使用类型类或具体类型(我是否正确?)所以我可以使用"Num"作为类型指示符或"Int".我不确定"Int"是否有"Num"中的任何定义?我可以定义自己从"Num""继承"的具体类型吗?
我从java/C#继承角度问这个问题,刚开始用Haskell.你会给一些提示吗?
从OO的角度来看,类型类就像接口或特征.在Haskell中,当您需要数据类型的某种结构(因为您将解压缩它)时,通常使用具体类型,而当您只需要某种行为时,则使用类型类.例如,你可以写
f :: Int -> Int -> Int
f x y = x + y
Run Code Online (Sandbox Code Playgroud)
但你不要Int
在这里使用s 的内部结构; 你只需要支持添加的东西,Num
(注意它有一个(+)
in方法列表):
f :: Num a => a -> a -> a
f x y = x + y
Run Code Online (Sandbox Code Playgroud)
是的,当然,您可以声明您自己的类支持该Num
接口.查看上面的链接,有一个名为"最小完整定义"的方法列表.这是使用它的其他功能将依赖的.在紧要关头,您可以显式设置一些方法undefined
,但如果有人试图调用它们,您将收到运行时错误:
data MyData = MyData Int Int
instance Num MyData where
(MyData x1 y1) + (MyData x2 y2) = MyData (x1 + y1) (x2 + y2)
(*) = undefined
...
Run Code Online (Sandbox Code Playgroud)
了解如何利用您的MyData
结构知识从中抽象出您班级的可能用户?如果他们想要将这种类型的两个值一起添加,他们不需要知道数据是如何在内部排列的,他们只需要知道它是一个实例Num
.
归档时间: |
|
查看次数: |
290 次 |
最近记录: |