こんなもの欲しい
splitBy pred list = ( filter pred list, filter (not . pred) list )
しかし、1回のパスで。
partition
あなたはからの関数を探していますData.List
:
partition :: (a -> Bool) -> [a] -> ([a], [a])
foldを使用してうまく実装できます。
splitBy pred = foldr f ([], [])
where f x ~(yes, no) = if pred x then (x : yes, no)
else (yes, x : no)