>>261みたいなのってxsを2回スキャンするの?

y<-xs,x<yの部分(なんて呼ぶのかわからんので教えてくれるとありがたい)は
firter hantei (x:xs) = if (hantei x)
then (x:(firter hantei xs))
else firter hantei xs
相当のことしてるの ?

quicksort (x:xs) = let sub [(as,bs)] (y:ys) = if y < x
then sub [((y:as), bs)] ys
else sub [(as, (y:bs)] ys
sub lst [] = lst
in
let (small, large) = sub [([], []) xs
in (quicksort small) ++ [x] ++ (quicksort large)

ってやったら効率よくなる ?
それとも無駄 ?

あと、
quicksort [] = []
は必要だよNE ?