--Load Queue2.hs - lazy rebuilding queue :l Queue2.hs --Start ghc-vis :vis let x = empty :view x --Insert a value - view new queue; we already triggered the reverse let y = insert 1 x :view y --Remove the value - forces the evaluation in y, but we discard the new tree let (z,_) = remove y print z :update --Add another element to y; now there's one in the right list let a = insert 2 y :view a --Add one more, and we trigger the swap again let b = insert 3 a :view b --We can add 3 more and still not swap let c = insert 6 $ insert 5 $ insert 4 b :view c --One more, and now we trigger the swap let d = insert 7 c :view d --Let's remove one by one and see how evaluation progresses let (e,f) = remove d print e :view f let (g,h) = remove f print g :view h let (i,j) = remove h print i :view j let (k,l) = remove j print k :view l let (m,n) = remove l print m :view n