Haskell:大元组列表的派生显示

Haskell:大元组列表的派生显示,haskell,Haskell,假设我有以下列表 [((Int, Int), [[Char]], [[Char]], Bool, Bool, Bool)] [(Int, Int, [Char], [Char], [Char], [Char], [Char], [Char], [Char], [Char])] 我知道为了能够打印它们,我需要将它们定义为一个新的数据类型,然后创建一个Show实例,但是有没有办法避免呢 提前感谢。让我们用字符串替换所有[Char],以消除一些括号重载: [((Int, Int), [String]

假设我有以下列表

[((Int, Int), [[Char]], [[Char]], Bool, Bool, Bool)]
[(Int, Int, [Char], [Char], [Char], [Char], [Char], [Char], [Char], [Char])]
我知道为了能够打印它们,我需要将它们定义为一个新的数据类型,然后创建一个Show实例,但是有没有办法避免呢


提前感谢。

让我们用
字符串替换所有
[Char]
,以消除一些括号重载:

[((Int, Int), [String], [String], Bool, Bool, Bool)]

[(Int, Int, String, String, String, String, String, String, String, String)]
已经可以打印这些文件:

Prelude> let x = replicate 2 ((1,2), ["a", "b"], ["c", "d"], True, False, True) :: [((Int,Int), [String], [String], Bool, Bool, Bool)]

Prelude> :type x   -- displays the type of x
x :: [((Int, Int), [String], [String], Bool, Bool, Bool)]

Prelude> print x
[((1,2),["a","b"],["c","d"],True,False,True),((1,2),["a","b"],["c","d"],True,False,True)]


让我们将所有的
[Char]
替换为
字符串
,以消除一些括号重载:

[((Int, Int), [String], [String], Bool, Bool, Bool)]

[(Int, Int, String, String, String, String, String, String, String, String)]
已经可以打印这些文件:

Prelude> let x = replicate 2 ((1,2), ["a", "b"], ["c", "d"], True, False, True) :: [((Int,Int), [String], [String], Bool, Bool, Bool)]

Prelude> :type x   -- displays the type of x
x :: [((Int, Int), [String], [String], Bool, Bool, Bool)]

Prelude> print x
[((1,2),["a","b"],["c","d"],True,False,True),((1,2),["a","b"],["c","d"],True,False,True)]


对于这么大的元组,你应该开始使用记录,否则你会忘记什么是什么。是的,我知道,但因为这是一个赋值,它有一些约束对于这么大的元组,你应该开始使用记录,否则你会忘记什么是什么。是的,我知道,但因为这是一个赋值,它有一些constraints@KudayarPirimbaev你用的是什么口译员?还是拥抱?如果您正在使用拥抱,您应该尽快切换到GHCI。@KudayarPirimbaev哪个
let x=…
语句?有两个。尽管当我将它们粘贴到GHCI中时,它们都工作得很好。Hugs的问题之一是它只包括大小为7的元组的
Show
实例,并且您的一个示例使用了大小为10的元组。如果你无法使用Hugs,你必须自己编写
Show
实例(但你应该告诉你的讲师更新到GHCI-Hugs已经过时5年多了)。@ChrisTaylor Hugs是一个更好的教学平台,因为它编译速度更快,错误信息也更好。这就是为什么他的教练要拥抱他。对于初学者来说,写表演实例是一个很好的练习;我认为这是故意的必要。@AndrewC-Hmm,很好的观点。我没有考虑过教学的价值。尽管如此,我认为尽快适应“现实世界”平台是有价值的(我学会了使用GHCI,就像大多数Haskell开发者一样——我不知道为什么我们认为现在刚起步的人需要额外的帮助)。@KudayarPirimbaev你在用什么解释器?还是拥抱?如果您正在使用拥抱,您应该尽快切换到GHCI。@KudayarPirimbaev哪个
let x=…
语句?有两个。尽管当我将它们粘贴到GHCI中时,它们都工作得很好。Hugs的问题之一是它只包括大小为7的元组的
Show
实例,并且您的一个示例使用了大小为10的元组。如果你无法使用Hugs,你必须自己编写
Show
实例(但你应该告诉你的讲师更新到GHCI-Hugs已经过时5年多了)。@ChrisTaylor Hugs是一个更好的教学平台,因为它编译速度更快,错误信息也更好。这就是为什么他的教练要拥抱他。对于初学者来说,写表演实例是一个很好的练习;我认为这是故意的必要。@AndrewC-Hmm,很好的观点。我没有考虑过教学的价值。尽管如此,我认为尽快适应“现实世界”平台是有价值的(我学会了使用GHCI,就像大多数Haskell开发人员一样——我不知道为什么我们认为现在刚起步的人需要额外的帮助)。