Как определить, что универсальный тип «печатный» - PullRequest
1 голос
/ 20 сентября 2011

Я должен распечатать по предварительному заказу полиморфный тип дерева.У меня возникли некоторые проблемы, потому что мой универсальный тип t не может быть «для печати».Кто-нибудь знает, как это продано?Есть ли способ сказать haskell, что он принимает только "печатные" типы?(печать на консоли, так что это должно быть что-то вроде «Показать»)

Вот код:

import Char

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

instance Show (Tree t) where
    show = func

func :: (Tree t) -> String
func (NilT) = "" 
func (Node t a b) = t ++ (func a) ++ (func b)

Спасибо!

1 Ответ

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

Вы можете потребовать, чтобы t был экземпляром Show, как в объявлении экземпляра, так и в следующем объявлении типа:

instance Show t => Show (Tree t)
func :: Show t => Tree t -> String

Чтобы использовать это, ваш обход предварительного заказа долженЗвоните show.

func (Node t a b) = show t ++ func a ++ func b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...