Library support for sorting with Text.Data.ICU.Collate.MCollator?

I'm trying to sort a list of Text values using a collator obtained from the Text.Data.ICU.Collate module in the text-icu package on Hackage. Unfortunately, I can't use the normal Data.List.sortBy function with one of these collators, because the collators return (IO Ordering), not Ordering. It's easy to write sortWithCollator :: [Text] -> IO [Text], but I'd rather not have to. I haven't been able to find library support for this anywhere -- am I overlooking it, or do I need to write the sort function myself? Thanks, Richard

On Mon, Sep 19, 2011 at 4:26 PM, Richard Cobbe
I'm trying to sort a list of Text values using a collator obtained from the Text.Data.ICU.Collate module in the text-icu package on Hackage. Unfortunately, I can't use the normal Data.List.sortBy function with one of these collators, because the collators return (IO Ordering), not Ordering.
It's easy to write sortWithCollator :: [Text] -> IO [Text], but I'd rather not have to. I haven't been able to find library support for this anywhere -- am I overlooking it, or do I need to write the sort function myself?
Hi Richard, You want to use freeze[1] to get an immutable collator, and then use the pure collate[2] function. Michael [1] http://hackage.haskell.org/packages/archive/text-icu/0.6.3.4/doc/html/Data-T... [2] http://hackage.haskell.org/packages/archive/text-icu/0.6.3.4/doc/html/Data-T...

On Mon, Sep 19, 2011 at 04:29:03PM +0300, Michael Snoyman wrote:
On Mon, Sep 19, 2011 at 4:26 PM, Richard Cobbe
wrote: I'm trying to sort a list of Text values using a collator obtained from the Text.Data.ICU.Collate module in the text-icu package on Hackage. Unfortunately, I can't use the normal Data.List.sortBy function with one of these collators, because the collators return (IO Ordering), not Ordering.
It's easy to write sortWithCollator :: [Text] -> IO [Text], but I'd rather not have to. I haven't been able to find library support for this anywhere -- am I overlooking it, or do I need to write the sort function myself?
Hi Richard,
You want to use freeze[1] to get an immutable collator, and then use the pure collate[2] function.
Ah -- perfect. Can't think how I missed freeze. Thanks! Richard
participants (2)
-
Michael Snoyman
-
Richard Cobbe