Есть ли какая-то конкретная причина, по которой вы не используете deriving Show
? Классы Show
и Read
призваны обеспечить действительно базовую сериализацию / десериализацию, которая (обычно) создает действительный код на языке Haskell.
Но для того, что вы хотите, я думаю, ошибка возвращается к вашему Mar
классу. Как определено, экземпляр предназначен для вида * -> *
(например, Maybe
в отличие от Maybe Int
). То, что вы, вероятно, имели в виду, это иметь instance Mar (Tree t) where ...
.