well: if the DTD provides rules like
<!ELEMENT x     (a|b|c|d)>

Dtd2Haskell will produce code like:
data X = X (OneOf4 A B C D)

The problem is that there are no more functions defined than
OneOf2 .. OneOf4

It seems to produce a lot of work to integrate e.g. OneOf5,
because you have to write Show-, Read- and Parsingrules for it.

For being able to handle more interesting wide spread DTDs you would
need even more OneOf -constroctors. xhtml e.g. needs OneOf22.

See AllDescriptorsAndAssociations.hs for the result of
dtd2haskell.

