How lazy is DData.Seq?
Wolfgang Jeltsch
wolfgang at jeltsch.net
Sat May 8 22:10:52 EDT 2004
Am Samstag, 8. Mai 2004 20:58 schrieben Sie:
> On Sat, May 08, 2004 at 08:28:37PM +0200, Wolfgang Jeltsch wrote:
> > Am Samstag, 8. Mai 2004 18:37 schrieben Sie:
> > > --- Wolfgang Jeltsch <wolfgang at jeltsch.net> wrote:
> > > > Hello,
> > > >
> > > > I would suspect that in DData.Seq the result of
> > > > head (singleton 'a' `append` undefined)
> > > > is 'a' but instead it is _|_. Why is this the case?
> > >
> > > I have the invariant that sublists are not empty.
> > > There is, for example:
> > >
> > > append as None = as
> >
> > Is this necessary/desirable? I have an application where I think that it
> > can be important for efficiency that the above expression evaluates to
> > 'a'. So I would like it to not result in _|_.
>
> Yes, it's necessary, if you want to maintain any sort of balanced tree
> (which is crucial for efficiency). In 'append as bs', you need to know
> how large 'as' and 'bs' are in order to construct the balanced
> structure.
For what do we need a balanced tree? At least, O(1) concatenation and O(n)
conversion to an ordinary list should also work with unbalanced trees.
> [...]
>
> Peace,
> Dylan
Wolfgang
More information about the Libraries
mailing list