Haskell实例展示

ibr*_*him 0 haskell module instance show

嗨,我有一个具有此数据类型的haskell模块

data Blabla = Blabla [Integer]
[Char]
[(Integer,Char,Char,Integer,String)] Integer
Run Code Online (Sandbox Code Playgroud)

我希望使用实例show来显示它们

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

thanx帮助......

Jef*_*ter 7

假设您只想要默认样式,只需添加deriving Show到行尾即可完成工作.

data Blabla = Blabla [Integer] [Char] [(Integer,Char,Char,Integer,String)] Integer deriving Show
Run Code Online (Sandbox Code Playgroud)

因为Blabla构建的所有原始类型都是"可显示的",所以工作正常.例如

*Main> Blabla [1,2,3] "abc" [(1,'A','B',2,"Three")] 54
Blabla [1,2,3] "abc" [(1,'A','B',2,"Three")] 54
Run Code Online (Sandbox Code Playgroud)

构建Blabla命名结构可能更好

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

通过这样做,您可能能够使结构更有意义.

*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}
Run Code Online (Sandbox Code Playgroud)

对列表结构执行相同的操作,希望代码更具可读性.

如果您想编写自己的实例,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              
Run Code Online (Sandbox Code Playgroud)

实现产生的结果大致是您在原始问题中提出的输出.

*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
Run Code Online (Sandbox Code Playgroud)