Haskell 试图理解类型类语法
Haskell trying to understand typeclass syntax
我是 Haskell 的新手,我正在尝试理解语法。我的数据类型为 Vec
,它实现了 Show
、Floating
和 Foldable
。但是 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.
我是 Haskell 的新手,我正在尝试理解语法。我的数据类型为 Vec
,它实现了 Show
、Floating
和 Foldable
。但是 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.