Haskell пытается понять синтаксис класса типов - PullRequest
3 голосов
/ 15 февраля 2020

Я новичок в 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

1 Ответ

6 голосов
/ 15 февраля 2020

Ваш экземпляр для Foldable является "автономным", он не зависит от доступности других экземпляров (этого или другого типа).

Но для вашего экземпляра Show (Vec a) сначала вам также понадобится экземпляр Show a (чтобы вы могли в вызове реализации show x).

Этот синтаксис => устанавливает это требование / зависимость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...