Job Vranish <jvran...@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@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe