2015-08-27 2 views
1

Я следую учебнику для создания нового типа. Это мой код:Печать новых типов в Haskell

data Shape = Circle Float Float Float | Rectangle Float Float Float Float 

Когда я загружаю файл с GHCI и я типа:

Circle 10 20 5 

Он печатает это:

<interactive>:29:1: 
    No instance for (Show Shape) arising from a use of ‘print’ 
    In a stmt of an interactive GHCi command: print it 

Как я могу решить эту проблему?

ответ

10

show функция имеет вид:

show :: Show a => a -> String 

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

data Shape = Circle Float Float Float | Rectangle Float Float Float Float 
    deriving (Show) 

или

instance Show Shape where 
    show (Circle a b c) = "Circle " ++ show a ++ " " ++ show b ++ " " ++ show c 
    show (Rectangle a b c d) = ... 
0

Я решил, что печатаю это в интерпретаторе:

:s -u 
+2

Это не работает здесь (в GHC 7.10.1). Все, что я получаю, это 'IO error:" -u "не существует". – duplode

+0

Да, извините, он решает проблему с объятиями, но не в ghci – Alan

+0

О, это для класса? Кто классный, Джонс? –

Смежные вопросы