我有一个[(String, [String], IO Int)]
列表,我想排序。 sortBy (\x -> ...) list
要求我使用IO来获取IO Int
的内部值,这意味着我无法Ordering
只返回IO Ordering
sortBy
功能。有没有办法对列表进行排序?
答案 0 :(得分:7)
每个元组的第三个元素是IO Int
,因此它的值取决于外部世界。因此,排序列表的顺序取决于外部世界。所以不,没有办法让[(String, [String], IO Int)]
按IO Int
的值排序。
给你另一个IO [(String, [String], Int)]
,它将产生一个按sortBy
排序的列表。这不是一个纯粹的列表,但是您可以将任何其他纯函数注入IO
monad以对其执行任意纯计算。
这样的事情可以做到:
IO [(String, [String], Int)]
我应该提一下,因为它可能并不明显,这将按照它们最初出现在列表中的顺序运行Int
个动作。但是要对它们进行排序,您必须运行它们才能获得IO
值,并且必须以某些顺序运行它们。