Я определил простой тип списка:
data MyList a = End
|Entry a (MyList a)
Вместо deriving (Show)
я реализовал это явно сам для всех MyList a
, где a
является экземпляром Show
.
instance Show a => Show (MyList a)
where show End = ""
show (Entry a l) = (show a) ++","++(show l)
Это прекрасно работает. Теперь я хотел изменить это так, чтобы только MyList String
был экземпляром Show
, и для этого я написал
instance Show (MyList String)
where show End = ""
show (Entry a l) = a ++","++(show l)
Но это привело к ошибке, которую я не понимаю:
Illegal instance declaration for `Show (MyList String)'
(All instance types must be of the form (T a1 ... an)
where a1 ... an are *distinct type variables*,
and each type variable appears at most once in the instance head.
Use FlexibleInstances if you want to disable this.)
In the instance declaration for `Show (MyList String)'
Может ли кто-нибудь объяснить, почему это не сработает и о чем мне говорит эта ошибка?