RFC: general sequences

Henning Thielemann lemming at henning-thielemann.de
Tue May 24 05:00:05 EDT 2005


On Tue, 24 May 2005, Ross Paterson wrote:

> On Mon, May 23, 2005 at 10:22:38PM +0200, Benjamin Franksen wrote:
>>
>> A agree completely. Almost all of the functions in Data.Seq have the
>> same name and type signature (modulo the data type) and provide the
>> same functionality as the corresponding ones for lists (in the
>> Prelude). A type class Sequence to capture these common features would
>> be great. It would also mean we can import module Sequence unqualified.
>> A problem is that the names conflict with the ones from the Prelude, so
>> that this style can only be used when hiding all the list stuff from
>> Prelude.
>
> This can't be fixed by adding a new class.  We can't change the type of
> Prelude.length, and that includes generalizing it.  The only alterative
> to hiding/qualification is to give our functions different names.

What is so bad about qualification? Although it might be cumbersome for 
everyday functions like 'map' and infix operators it's good style for any 
other functions. With qualification a user module would look like

import qualified SomeGoodNameForASequenceClassModule as GenSeq
import qualified Data.Sequence as Seq

filterEven :: GenSeq.C s => s Int -> s Int
filterEven = GenSeq.filter even

filterEven' :: Seq.T Int -> Seq.T Int
filterEven' = GenSeq.filter even


More information about the Libraries mailing list