On Wed, Aug 21, 2002 at 04:44:03PM +0930, Dr Mark H Phillips wrote:
> ...
> I would like to represent this structure in Haskell, but 
> am not sure quite the best way of doing it.  (I am relatively
> new to Haskell.)  I think I want to do something like:
> 
> [
> [(2,5),[(1,3),[(2,0)]],
>        [(1,2),[(1,1),[(1,0)]]],
>        [(3,1)]],
> [(1,5),[(2,4),[(2,0)]],
>        [(1,4),[(1,3),[(1,1),[(1,0)]]],
>               [(2,2),[(1,0)]],
>               [(1,2),[(2,1)]]],
>        [(2,3),[(1,2),[(1,0)]],
>               [(2,1)]],
>        [(1,3),[(2,2),[(1,1)]]],
>        [(4,2)]]
> ]
> 
> But what is the best way to represent this in Haskell?  (Clearly
> I can't do exactly this, because Haskell requires all list elements
> to be of the same type.)

This is the same as one way of representing search trees, called a
"trie".  Two representations in Haskell are:

> data Trie a = Trie [(a, Trie a)]

or, using the FiniteMap module, if you only care about the set of
lists,

> data Trie a = Trie (FiniteMap a (Trie a))

(There are slight variations depending on your exact needs.)

Best,
        Dylan

Attachment: msg11413/pgp00000.pgp
Description: PGP signature

Reply via email to