List 在Haskell中使用元组列表

List 在Haskell中使用元组列表,list,haskell,tuples,List,Haskell,Tuples,我在Haskell中有一个10个元组的列表,我想从这个元组列表中得到第n个元组。但正如我看到的,只有length函数可以处理该列表头部,尾部或功能不起作用。你能告诉我该怎么办吗?元组由整数和字符串组成。 例如,当我尝试以下方法时: tail [(3,5,"String1","String2","String3","String4","String5","String6","String7","String8"),(3,5,"String1","String2","String3","String

我在Haskell中有一个10个元组的列表,我想从这个元组列表中得到第n个元组。但正如我看到的,只有length函数可以处理该列表头部尾部功能不起作用。你能告诉我该怎么办吗?元组由整数和字符串组成。 例如,当我尝试以下方法时:

tail [(3,5,"String1","String2","String3","String4","String5","String6","String7","String8"),(3,5,"String1","String2","String3","String4","String5","String6","String7","String8"),(3,5,"String1","String2","String3","String4","String5","String6","String7","String8")]
我从hugs收到以下错误消息:

ERROR - Cannot find "show" function for:
*** Expression : tail [(3,5,"String1","String2","String3","String4","String5","String6","String7","String8"),(3,5,"String1","String2","String3","String4","String5","String6","String7","String8"),(3,5,"String1","String2","String3","String4","String5","String6","String7","String8")]
*** Of type    : [(Integer,Integer,[Char],[Char],[Char],[Char],[Char],[Char],[Char],[Char])]

下面是如何为3元组声明
Show
实例。希望这说明了这个想法,您可以将其扩展到更多元素:

import Data.List (intercalate) instance (Show a, Show b, Show c) => Show (a, b, c) where show (a, b, c) = "(" ++ (intercalate "," ([show a, show b, show c])) ++ ")" 导入数据列表(插入) 实例(Show a,Show b,Show c)=>Show(a,b,c)其中 show(a,b,c)=“(“++(插入)”,“([show a,show b,show c]))+” 您可以像阅读逻辑含义一样阅读实例声明:如果我可以显示类型a、b和c的值,那么我可以显示类型(a、b、c)的元组,如下所示


GHC为最多15个元组的所有内容定义了一个Show实例,因此您可能不需要在您的案例中定义它。

您的示例对我来说非常适合,并给出了
[(3,5,“String1”、“String2”、“String3”、“String4”、“String4”、“String5”、“String5”、“String6”、“String7”、“String8”),(3,5,“String1”、“String2”、“String3”、“String4”、“String5”、“String6”、“String8”)]
。然而,比起这些巨大的元组,你仍然可以更好地使用结构。你使用的是什么解释器?它看起来像拥抱我。。。自2010年发布的6.12.2版以来,GHCi至少支持多达60个组件(包括Show实例,这是这里的问题)的元组。感谢您的警告。我在拥抱。在读了你所说的之后,我发现它对ghci有效,但对拥抱无效。我该怎么做才能让拥抱也起作用?你有什么想法吗?为包含7个以上(IIRC)组件的元组编写自己的
Show
实例。但是《拥抱》的最后一次发布是在2006年秋天,所以《拥抱》几乎已经死了。悲伤,但这就是生活。移动到ghci,它附带了一个编译器以获得额外的好处。
实例(Show a,Show b,…)=>Show(a,b,…)其中Show(x,y,…)=“(“++Show x++”,“++Show y++…””
。基本的,但乏味的。当然,您可以自动生成实例。