您可以使用<>
运算符。在此示例bigSort
中,按字符串的数值对字符串进行排序,首先比较长度,然后按字典顺序进行比较。
import Data.List (sortBy)
import Data.Ord (compare, comparing)
bigSort :: [String] -> [String]
bigSort = sortBy $ (comparing length) <> compare
例子:
bigSort ["31415926535897932384626433832795","1","3","10","3","5"] =
["1","3","3","5","10","31415926535897932384626433832795"]
<>
是mappend
来自Data.Monoid module
(参见jberryman答案)的别名。
(免费)书Learn You a Haskell for Great Good!在第 11 章中解释了它是如何工作的
instance Monoid Ordering where
mempty = EQ
LT `mappend` _ = LT
EQ `mappend` y = y
GT `mappend` _ = GT
实例是这样设置的:当我们mappend
有两个Ordering
值时,左边的那个被保留,除非左边的值为EQ
,在这种情况下,右边的就是结果。身份是EQ
。