Инстанс на Haskell - PullRequest
       28

Инстанс на Haskell

0 голосов
/ 15 апреля 2011

привет, у меня есть модуль haskell с таким типом данных

data Blabla = Blabla [Integer]
[Char]
[(Integer,Char,Char,Integer,String)] Integer

Я хочу показать их так, используя экземпляр show

integers=[1,2,3]
chars=[a,b,c]
specialList=[(1,a,b,2,cd),(3,b,c,4,gh)]
interger=44

Спасибо за помощь ...

1 Ответ

7 голосов
/ 15 апреля 2011

Если вы просто хотите использовать стиль по умолчанию, просто добавьте deriving Show в конец строки, как показано ниже,

data Blabla = Blabla [Integer] [Char] [(Integer,Char,Char,Integer,String)] Integer deriving Show

Будет отлично работать, так как все примитивные типы, из которых построен Blabla, "показны". Например

*Main> Blabla [1,2,3] "abc" [(1,'A','B',2,"Three")] 54
Blabla [1,2,3] "abc" [(1,'A','B',2,"Three")] 54

Может быть лучше построить Blabla как именованную структуру

 data BlaBlu = BlaBlu {
    theNumbers :: [Integer] ,
    theIdentifier :: [Char] ,
    theList :: [(Integer,Char,Char,Integer,String)]  ,
    theInteger :: Integer
 } deriving Show

Делая это, вы можете сделать структуру более понятной.

*Main> BlaBlu [1,2,3] "abc" [(1,'A','B',2,"Three")] 54
BlaBlu {theNumbers = [1,2,3], theIdentifier = "abc", theList = [(1,'A','B',2,"Three")], theInteger = 54}

Сделайте то же самое для структуры списка, и, надеюсь, код будет более читабельным.

Если вы хотите написать свой собственный экземпляр Show, чтобы вы могли настроить его, вы можете удалить deriving Show и просто написать свой собственный экземпляр, например:

instance Show Blabla where                                                                                       
    show (Blabla ints chars list num) =                                                                            
    "integers = " ++ show ints ++ "\n" ++                                                                        
    "chars = " ++ show chars ++ "\n" ++                                                                          
    "specialList = " ++ show list ++ "\n" ++                                                                     
    "integer = " ++ show num              

Где реализация примерно соответствует выводу, который вы задали в исходном вопросе.

*Main> Blabla [1,2,3] "abc" [(1,'A','B',2,"Three")] 54
integers = [1,2,3]
chars = "abc"
specialList = [(1,'A','B',2,"Three")]
integer = 54
...