On Wed, Aug 12, 2009 at 4:41 AM, John Lato<jwl...@gmail.com> wrote: > Hi Job, > > I don't think this hypothetical function could exist; you may as well > call it "notEverSafeOhTheHumanity" and be done with it. > > Since Haskell provides no guarantees about when (if ever) any given > function/data will be evaluated, you would need some mechanism to tell > the compiler that a data chunk has a certain value at one time and a > different value at another. The language provides this in the IO (and > ST) monads. So the function would need to live within IO, and you > don't gain anything. If you try to take it outside of IO, with e.g. > unsafePerformIO, then the compiler will no longer treat it like IO and > the result is free to be evaluated whenever, so you're back where you > started. > > Also, keep in mind that purity is a language requirement in Haskell > and such a function really would "break everything". Specifically, > you would get differing output depending on the exact transformations > performed by the compiler, which in general would be difficult to > predict in advance, probably not the same between different compiler > versions, changed by compiler flags and phases of the moon, etc. I > have an example in a darcs repo somewhere... > > Cheers, > John > >> From: Job Vranish <jvran...@gmail.com> >> Subject: Re: [Haskell-cafe] unsafeDestructiveAssign? >> >> Ga! Before to many people start flooding me responses of "This is really >> dumb idea don't do it!" I would like to clarify that for the most part >> IKnowWhatI'mDoing(TM) >> >> I am well aware of the usual ST/IORefs as the usual solutions to data >> mutability in haskell. >> I very very much understand purity, and why it is a good thing, and why we >> should try to stay away from IO and ST as much as possible. >> I am very much away that even if I had such a function that it will probably >> break everything. >> I am not just trying to make things run faster. >> >> What I am trying to do is hyper unusual and I really do need an >> unsafeHorribleThings to do it. >> >> - Job
(To Alberto as well.) Unsurprisingly, Lennart stated the real issue, but I'll re-emphasize it. As much trouble as such a profound violation of purity would cause, it's not the biggest problem. If that were all, you could easily write a C/assembly function that would do what was desired. The real problem is that there isn't necessarily any "data chunk" at all, i.e. there may not be anything to mutate. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe