Haskell Platform Proposal: add the 'text' library

wren ng thornton wren at community.haskell.org
Wed Sep 8 20:21:24 EDT 2010


On 9/8/10 10:18 AM, Ian Lynagh wrote:
> On Tue, Sep 07, 2010 at 11:21:19PM +0100, Duncan Coutts wrote:
>> Many of these are deliberate and sensible.
>
> Some at least seem just gratuitously different, e.g.:
>
> BS:   break :: (Char ->  Bool) ->  ByteString ->  (ByteString, ByteString)
>        breakSubstring :: ByteString ->  ByteString ->  (ByteString, ByteString)
> Text: break :: Text ->  Text ->  (Text, Text)
>        breakBy :: (Char ->  Bool) ->  Text ->  (Text, Text)

One consistency problem I see with this is that the ByteString versions 
permit breaking on a disjunctive pattern (e.g., \c -> c=='a' || c=='q') 
whereas the Text version would require multiple passes to perform these 
queries, since it takes a Text instead of a (Text->Bool).

Since proper usage of Text.break requires being able to do various 
normalizations on the query, it's unclear whether this inconsistency can 
be remedied effectively. If it cannot, then it seems that the names of 
the functions should be adjusted in order to make it clear that there is 
this difference.

Other than that, I do agree with the philosophy of the "deliberate and 
sensible" differences. Though, given the philosophy that these aren't 
Char-wise operations, why does Text.breakBy accept a (Char->Bool)? Is 
this just an optimization for common cases like breaking on 
Unicode-defined whitespace codepoints?

-- 
Live well,
~wren


More information about the Libraries mailing list