Показать функцию для полиморфного типа - PullRequest
0 голосов
/ 20 сентября 2011

Я пытаюсь определить функцию Show для полиморфного типа Tree. Кто-нибудь может мне помочь?

import Char

data Tree t =
    NilT |
    Node t (Tree t) (Tree t)

class Mar t where
    maior :: t -> String

instance Mar Tree where
    maior (NilT) = "a" 
    maior (Node t a b) = "b"

instance Show Tree where
    show = maior

Большое спасибо!


Решение (предоставлено ivanm):

import Char

data Tree t =
    NilT |
    Node t (Tree t) (Tree t)

class Mar t where
    maior :: t -> String

instance Mar (Tree t) where
    maior (NilT) = "a" 
    maior (Node t a b) = "b"

instance Show (Tree t) where
    show = maior

Ответы [ 2 ]

4 голосов
/ 20 сентября 2011

Есть ли какая-то конкретная причина, по которой вы не используете deriving Show? Классы Show и Read призваны обеспечить действительно базовую сериализацию / десериализацию, которая (обычно) создает действительный код на языке Haskell.

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

1 голос
/ 20 сентября 2011
data Tree t =
    NilT |
    Node t (Tree t) (Tree t)
    deriving Show
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...