实例在Haskell中是什么意思?

问题描述 投票:14回答:2

在Java中,我们可以从类中创建对象/实例。在Haskell中,我们可以从类型类中创建实例,例如:

data ShirtSize = S | M | L      -- Here ShirtSize is a enum data-type

class MyEq a where
  (==) :: a -> a -> Bool
instance MyEq ShirtSize where   -- Here ShirtSize is an instance of the MyEq type-class
  S == S = True
  M == M = True
  L == L = True
  _ == _ = False

我的问题是:实例在haskell中是什么意思?在Java中,我们可以从类中创建实例,但是在haskell中,似乎实例是类型(例如ShirtSize),可以在其上应用类型类函数(例如MyEq中的(==)函数)。我对吗?与Java中的实例/对象相比,Haskell中的实例又是什么?

haskell functional-programming typeclass
2个回答
18
投票

在Java中,类系统是一种将相似对象进行分组的方法。类的实例是属于该类的单个对象。

在Haskell中,类系统(大致而言)是一种将相似的types分组的方法。 (这就是我们称它们为“类型类”的原因)。一个类的实例是属于该类的单个type。 (也就是说,直到您开始考虑多参数类型类为止。)>

顺便说一下,Haskell(单参数)类在某种程度上类似于Java接口,并且通过扩展类似于Java类。或者,Haskell实例类似于Java类。最好将其视为巧合。处理该术语时要牢记其数学渊源。一个类只是一堆属于在一起的东西,而实例就是其中之一。


7
投票

如果您对类型类及其与Java接口的区别感兴趣,请阅读this post by <❤>。它还说明了实例。

© www.soinside.com 2019 - 2024. All rights reserved.