[Haskell-cafe] using mutable data structures in pure functions

Stephen Tetley stephen.tetley at gmail.com
Mon Mar 12 09:09:28 CET 2012

There is a "trick" to `nub` where you couldn't implement the internal
lookup list with an (assumed faster) search tree anyway.

`nub` only mandates equality not ordering, so building a ordered
structure like a binary tree is impossible. In practice i would be
hard to beat list as the intermediate structure in this case.

On 12 March 2012 03:38, E R <pc88mxer at gmail.com> wrote:
> For example, consider the definition of Data.List.nub:
> nub l                   = nub' l []
>  where
>    nub' [] _           = []
>    nub' (x:xs) ls
>        | x `elem` ls   = nub' xs ls
>        | otherwise     = x : nub' xs (x:ls)
> Clearly the memory allocated to ls never escapes nub', so it seems
> that ls could be replaced with a mutable data structure (with an eye
> towards improving performance in special cases).

More information about the Haskell-Cafe mailing list