I tried it and indeed, the results involving NaN are... interesting
quicksort :: Ord a => [a] -> [a]
.. quicksort [] = []
.. quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
.. where
.. lesser = filter (< p) xs
.. greater = filter (>= p) xs
quicksort([sqrt(i)|i<-[0 .. 3]])
=> [0.0,1.0,1.4142135623730951,1.7320508075688772]
quicksort([sqrt(i)|i<-[-3 .. 3]])
=> [NaN]
quicksort([sqrt(i)|i<-[3 .. -3]])
=> []
Now, just for fun, let's reverse the condition...
quicksort :: Ord a => [a] -> [a]
.. quicksort [] = []
.. quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
.. where
.. lesser = filter (\x -> not(x < p)) xs
.. greater = filter (\x -> not(x >= p)) xs
quicksort([sqrt(i)|i<-[0 .. 3]])
=> [1.7320508075688772,1.4142135623730951,1.0,0.0]
quicksort([sqrt(i)|i<-[-3 .. 3]])
=> [1.7320508075688772,1.4142135623730951,1.0,0.0,NaN,1.7320508075688772,1.4142135623730951,1.0,0.0,NaN,1.7320508075688772,1.4142135623730951,1.0,0.0,NaN,1.7320508075688772,1.4142135623730951,1.0,0.0,NaN,1.7320508075688772,1.4142135623730951,1.0,0.0,NaN,1.7320508075688772,1.4142135623730951,1.0,0.0,NaN,1.7320508075688772,1.4142135623730951,1.0,0.0,NaN,1.7320508075688772,1.4142135623730951,1.0,0.0]
The last example will explode with larger values, like [-100..100].
Note, it is actually the first time I tried Haskell. And no, I don't think the language is broken because of that. In fact, it is exactly the behavior I expected.