あれ、あんまりいいアイディアじゃなかったかな…。
(元質問者とは違うんだけどせっかく思いついたので) もう一度だけ説明させてください。

例えば '[g-d]' という指定の場合 (g f e d 0x00 0x01 ... a b c h i j k ...) という、
g-d の部分だけを通常のASCIIテーブルから抜き出して (より優先度の高い) 先頭の方に移動したリストを考えて、
さらにこれをつなげた表現 '[g-d][g-e]' がリストを (gg gf ge fg ff fe ... aa ab) の順に並べるような
文字列同士の大小を比較する predicate を生成する、と約束すると sort関数 に渡すだけで
リスト内の文字列の昇順降順を自在に操ることができそうなんだけど、どうかな?