Haskell объявляет экземпляр класса Show - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь сосредоточиться на классах и структурах данных в Haskell, в частности, объявляя его экземпляр типа. Я могу заставить его работать с некоторыми классами и типами данных, но не со всеми, поэтому я должен что-то упустить. В частности, у меня есть следующая декларация данных:

data LinkedList a = End | Link a (LinkedList a)

Я хочу объявить экземпляр Show для этого типа, чтобы результат выглядел примерно как «el1, el2, el3, el4, ...»

instance Show LinkedList where
    show (End) = "."
    show (Link a b) = show a ++ "," ++ show b

Как и ожидалось, это не работает ... Есть идеи, почему? Я думаю, что понимаю, что означают «данные» и «тип», но я не уверен, насколько мне удобно с классами и примерами. Спасибо

1 Ответ

0 голосов
/ 08 сентября 2018
instance Show LinkedList where

LinkedList не тип, LinkedList a тип. Исправляя это, мы получаем

instance Show (LinkedList a) where

Затем мы получаем еще одну ошибку, потому что мы вызываем show для значений типа a. Нам нужно требовать, чтобы a также принадлежало классу Show.

instance Show a => Show (LinkedList a) where

Теперь это должно работать.

...