in reply to sorting and grouping by

Here is some (admittedly, very inmature) Haskell to solve this problem.
```type Data = (Int, Int, String)

bottom (b, _, _) = b
top    (_, t, _) = t
ide    (_, _, i) = i

contains :: Data -> Data -> Bool
x `contains` y = bottom x <= bottom y && top x >= top y

rangeSort1 :: [Data] -> [(Data, [Data])]
rangeSort1 r = map (\x -> (x, (filter (contains x) (filter (/=x) r))))
+  r

----

test :: [Data]
test = [ (11, 22, "A")
, (22, 45, "B")
, (22, 33, "C")
, (25, 28, "D")
, (47, 49, "E")
]
And here is the corresponding Perl, or at least, this is the closest I could get to this 'declarational' style in Perl:
```sub bottom { shift->[0] };
sub top    { shift->[1] };
sub ide    { shift->[2] };

sub contains { bottom(\$_[0]) <= bottom(\$_[1]) && top(\$_[0]) >= top(\$_[
+1]) };

sub rangeSort1 { map { my \$x = \$_;
[\$x, [grep {contains(\$x, \$_)}
(grep { ide(\$_) ne ide(\$x) } @_) ] ]
} @_ };

my \$test = [ [11, 22, "A"]
, [22, 45, "B"]
, [22, 33, "C"]
, [25, 28, "D"]
, [47, 49, "E"]
];
```rangeSort1 :: [Data] -> [(Data, [Data])]