x.ordinal compare y.ordinal data RGB = Red | Green | Blue deriving(Eq,Ord,Show) enum RGB : case Red, Green, Blue TestCase (assertEqual "sort integers" [1,2,3,3,4,5] (qsort [5,1,3,2,4,3])) TestCase (assertEqual "sort doubles" [1.1,2.3,3.4,3.4,4.5,5.2] (qsort [5.2,1.1,3.4,2.3,4.5,3.4])) TestCase (assertEqual "sort chars" "abccde" (qsort "acbecd")) TestCase (assertEqual "sort strings" ["abc","efg","uvz"] (qsort ["abc","uvz","efg"]) ) TestCase (assertEqual "sort colours" [Red,Green,Blue] (qsort [Blue,Green,Red])) assert(qsort(List(5,1,2,4,3)) == List(1,2,3,4,5)) assert(qsort(List(5.2,1.1,3.4,2.3,4.5,3.4)) == List(1.1,2.3,3.4,3.4,4.5,5.2)) assert(qsort(List(Blue,Green,Red)) == List(Red,Green,Blue)) assert(qsort("acbecd".toList) == "abccde".toList) assert(qsort(List ("abc","uvz","efg")) == List("abc","efg","uvz")) And here are some Haskell and Scala tests for qsort.