[Haskell-cafe] unsafeDestructiveAssign?

John Van Enk vanenkj at gmail.com
Tue Aug 11 12:23:26 EDT 2009

> unsafeHorribleThings

I think we have a name for this new feature.

I can see how something like this would be useful to some areas. There
are many cases (graphs!) where it's just easier to build up structures
destructively, seal them, and return them to happyPureFunTimesLand.

Even if GHC does do just as good of a job as performing the unsafe
button pushing our selves, it would be an interesting exercise.

On Tue, Aug 11, 2009 at 12:14 PM, Max
Desyatov<explicitcall at googlemail.com> wrote:
> Job Vranish <jvranish at gmail.com> writes:
>> Does anybody know if there is some unsafe IO function that would let me do destructive assignment?
>> Something like:
>> a = 5
>> main = do
>>   veryUnsafeAndYouShouldNeverEveryCallThisFunction_DestructiveAssign a 8
>>   print a
>>> 8
> Aren't StateT or IORefs the exact thing you are looking for?
>> I'm also looking for a way to make actual copies of data.
>> so I could do something like this:
>> a = Node 5 [Node 2 [], Node 5 [a]]
>> main = do
>>   b <- makeCopy a
>>   veryUnsafeAndYouShouldNeverEveryCallThisFunction_DestructiveAssign b (Node 0 [])
>>   -- 'a' is unchanged
>> It would be even more fantastic, if the copy function was lazy.
>> I think the traverse function might actually make a copy, but I would be happier with something more general (doesn't
>> require membership in traversable), and more explicit (was actually designed for making real copies).
> Same thing, IORefs could help you.  Anyway, I can't imagine any case
> where veryUnsafeAndYouShouldNeverEveryCallThisFunction_DestructiveAssign
> could be useful with its imperative semantics as you've described.  The
> point is that Haskell is pure language and I use it because of this
> feature (not only because of this, to be exact).  I don't want to use
> any library code that brokes pure semantics and launches nuclear bombs
> behind the IO monad.  GHC is smart enough these days to do all optimised
> destructive assignments, copies and all that imperative stuff and there
> are plenty of other ways to get a performance boost without
> unsafeHorribleThings.
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

More information about the Haskell-Cafe mailing list