在 Data.List 的分区中使用 ~(惰性模式匹配)有哪些性能优势。惰性模式匹配的人为示例表明,当元组构造函数中的值从不使用时(f (x,y) = 1),它很有用。在分区(select,下面)中,总是使用列表 ts、fs(如果应用于 x 的谓词 p 为 True,或不是)。我确信这是一个非常明智的决定使用〜,但有什么意义呢?为什么不严格模式匹配?
partition :: (a -> Bool) -> [a] -> ([a],[a])
{-# INLINE partition #-}
partition p xs = foldr (select p) ([],[]) xs
select :: (a -> Bool) -> a -> ([a], [a]) -> ([a], [a])
select p x ~(ts,fs) | p x = (x:ts,fs)
| otherwise = (ts, x:fs)
(注意:我已经看过这里!它没有回答上述问题)