Maybe some instances of Sets can be built with just equality (Eq) rather than Ordering (Ord) on the element? The multi-param class makes the element type tangible so you can use a different constraint: -- List - the poor man's set. instance (Eq a) => Set [] a where empty = [] insert a as = nub (a:as) ...