On Tue, Jul 19, 2011 at 11:14 PM, yi huang <yi.codepla...@gmail.com> wrote:
> 2011/7/20 Eugene Kirpichov <ekirpic...@gmail.com> > >> reallyUnsafePointerEq#, and it really is as unsafe as it sounds :) >> >> Why is it so unsafe? i can't find any documentation on it. > I think always compare pointer first is a good optimization. > Any number of conditions could make it fail, but most especially GC. It is almost always better to explicitly model a property when you want it. Uniqueness based on construction, for example, can be modeled with a monad and protected by an ADT. > module Unique ( HasUnique(..), Unique, newUnique, openUnique) where > class HasUnique m uid where > newUniqueID :: m uid > > data Unique uid a = U !uid a > > newUnique :: (HasUnique m uid, Monad m) => a -> m (Unique uid a) > newUnique a = newUniqueID >>= \ uid -> return (U uid a) > > openUnique :: (Unique m a) -> a > openUnique (U _ x) = x > > instance (Eq uid) => Eq (Unique uid a) > instance (Ord uid) => Ord (Unique uid a)
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe