Sorting Haskell-按字母顺序对元组中的字符串进行排序

Sorting Haskell-按字母顺序对元组中的字符串进行排序,sorting,haskell,tuples,Sorting,Haskell,Tuples,我有一个包含元组的列表,我想对其进行排序,以便它们包含的值按字母顺序显示。我玩弄了Data.List-sorting,但只对列表进行了排序,而没有对元组的值进行排序 从本质上讲,有没有什么方法可以改变 [("foo","bar"),("stack","overflow"),("help","please")] 列入清单 [("bar","foo"),("overflow","stack"),("help","please")] 一个元组只能是有序的,也可以是逆序的,因为它总是正好有两个元素,

我有一个包含元组的列表,我想对其进行排序,以便它们包含的值按字母顺序显示。我玩弄了Data.List-sorting,但只对列表进行了排序,而没有对元组的值进行排序

从本质上讲,有没有什么方法可以改变

[("foo","bar"),("stack","overflow"),("help","please")]
列入清单

[("bar","foo"),("overflow","stack"),("help","please")]

一个元组只能是有序的,也可以是逆序的,因为它总是正好有两个元素,所以它们是唯一的排列。因此,您只需检查哪种情况是这样,如有必要,翻转元组一次

sortTuple :: Ord a => (a,a) -> (a,a)
sortTuple (x,y)
  | x>y        = ...
  | otherwise  = ...
这个问题与列表无关,因为您只是将操作独立地应用于每个元素

sortTuplesInList :: Ord a => [(a,a)] -> [(a,a)]
sortTuplesInList = map sortTuple

虽然元组的长度可以不同(我认为最多64个元素),但包装器列表必须是同质的(即所有元组元素的长度都相同)。这使得使用类似列表理解的内容变得简单:

import Data.List

let sortedPairs = [(x,y) | [x,y] <- tmp]
  where tmp = [sort [x,y] | (x,y) <- [("m","l"),("p","q"),("s","r")]]
导入数据。列表

sortedPairs=[(x,y)|[x,y]谢谢,地图关键字是我一直在寻找的,我们的导师在Haskell课程中还没有对它进行过检查。它不是关键字,而是函数。