On 08-Jan-2003, Andrew J Bromage <ajb@spamcop.net> wrote:
On Wed, Jan 08, 2003 at 08:42:20AM +1100, Thomas Conway wrote:
Mercury has a type "univ" which might be declared something like:
data Univ = forall a. Univ a
I believe (nth hand) that something similar has been done in haskell, but my understanding is that it isn't in the standard library.
That would be Data.Dynamic:
data Dynamic -- abstract toDyn :: (Typeable a) => a -> Dynamic fromDynamic :: (Typeable a) => Dynamic -> Maybe a ... The Typeable class basically implements RTTI explicitly:
class Typeable a where typeOf :: a -> TypeRep
Unfortunately, Typeable can't be derived automatically.
That's not the only problem. The other problem is that because `Typeable' instances aren't built-in, `fromDynamic' is not type-safe. The implementation of `fromDynamic' calls `typeOf' and then if the types match, it does an unsafe cast. If `typeOf' lies, then `fromDynamic' may break type safety. So it is not safe to allow the use of `fromDynamic' if you are executing untrusted code.
Maybe in Haskell 2.
Yes, it would be nice to have a built-in, type-safe, version of Dynamic in Haskell 2. -- Fergus Henderson <fjh@cs.mu.oz.au> | "I have always known that the pursuit The University of Melbourne | of excellence is a lethal habit" WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp.