does this have a name (recusive datatypes)

Hal Daume III hdaume@ISI.EDU
Wed, 10 Apr 2002 11:44:34 -0700 (PDT)


[Lots of very useful information snipped...]

> Not true. Binary leaf trees cannot be captured as `S' always has
> a label in the internal nodes:
> 
> 	data LTree a = Leaf a | Fork (LTree a) (LTree a)

Well, you could say:

> ltree2s (Leaf a) = S a (Pair (Nil,Nil))
> ltree2s (Fork l r) = S undefined (Pair (ltree2s l, ltree2s r))

and

> s2ltree (S a (Pair (Nil,Nil))) = Leaf a
> s2ltree (S _ (Pair (l,r))) = Fork (s2ltree l) (s2ltree r)

so perhaps not exactly isomorphic, since there are two different strees
which get mapped to the same ltree, but "pretty close" (at least we have a
homomorphism in one direction).

but really, thanks for the pointers...i'll get reading :)

 - Hal