Haskell 试图理解类型类语法

Nod*_*.JS 2 syntax haskell typeclass

我是 Haskell 的新手,我正在尝试理解语法。我有数据类型Vec,它实现了Show,FloatingFoldable. 但是语法不同Foldable,为什么?

data Vec a = Vec [a]

instance Show a => Show (Vec a) where
   show (Vec x) = show x

instance Floating a => Floating (Vec a) where
  pi = Vec (repeat pi)
  exp (Vec x) = Vec (map exp x)
  log (Vec x) = Vec (map log x)
  sin (Vec x) = Vec (map sin x)
  cos (Vec x) = Vec (map cos x)

instance Foldable Vec where
  foldr f x (Vec y) = foldr f x y
Run Code Online (Sandbox Code Playgroud)

Thi*_*ilo 6

您的实例Foldable是“自包含”的,它不依赖于其他实例(此或不同类型的类)的可用性。

但是对于您的实例,Show (Vec a)您还需要一个Show afirst实例(以便您可以在您的实现中调用show x)。

=>语法建立了这种要求/依赖性。

  • OP的问题没有得到很好的解释 - 但除了实例上是否存在约束之外,另一个区别是“Show”和“Floating”适用于“具体类型”(带有“*”类型),例如“Vec” a`,而 `Foldable` 适用于“类型构造函数”(类型为“* -> *”),如“Vec”本身。这也可能是OP混淆的根源,值得评论 (2认同)