Haskell 试图理解类型类语法

Haskell trying to understand typeclass syntax

我是 Haskell 的新手,我正在尝试理解语法。我的数据类型为 Vec,它实现了 ShowFloatingFoldable。但是 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

Foldable 的实例是 "self-contained",它不依赖于其他实例(此类型或不同类型 class)的可用性。

但是对于 Show (Vec a) 的实例,您还需要首先 Show a 的实例(这样您就可以在实现中调用 show x)。

那个 => 语法建立这个 requirement/dependency.