Tobias Nipkow and Simon Finn were both kind enough to point
out that my Trie example was wrong, in that it is perfectly
typeable in ML (or Haskell).

Tries are like Mark's datatype X.  The untypeable version is like
Mark's datatype Y.

        data  Try a  =  Atom a | List (Try [a])

        maptry :: (a -> b) -> Try a -> Try b
        maptry f (Atom a)    =  Atom (f a)
        maptry f (List ast)  =  List (maptry (map f) ast)

I hope I got that right this time.  Thanks, guys!  -- P


Reply via email to