Прежде всего, по умолчанию синонимы типов (то есть вещи, определенные с помощью type
) не являются допустимыми в объявлениях экземпляров. Однако есть расширения GHC, позволяющие это сделать.
Кроме того, в данном конкретном случае show
необходимо вернуть String
; ваш экземпляр пытается вернуть имя синонима типа ..., которое даже не имеет смысла для начала, и, кроме того, ссылается на список Int
, который является неправильным типом возврата для show
.
Наконец, D
- это тип функции - что это вообще за show
? В большинстве случаев вы действительно мало что можете сделать с экземпляром Show
для типа функции.
Если вы просто хотите сказать «это тип D», вы можете написать такой пример:
{-# LANGUAGE TypeSynonymInstances #-}
instance Show D where show _ = "Stack -> Stack"
Хотя я не уверен, насколько это полезно на практике.