h& Safe-Inferredlockfree-queueThis only checks that the node type is the same and in the case of a Cons Pair checks that the underlying MutVar#s are pointer-equal. This suffices to check equality since each IORef is never used in multiple Pair values.lockfree-queuePush a new element onto the queue. Because the queue can grow, this always succeeds.lockfree-queueAttempt to pop an element from the queue if one is available. tryPop will return semi-promptly (depending on contention), but will return  if the queue is empty.lockfree-queueCreate a new queue.lockfree-queueIs the queue currently empty? Beware that this can be a highly transient state. Safe-Inferredlockfree-queueThis queue is not fully general, it covers only part of the configuration space:    +lockfree-queue-0.2.4-7h19miqXozXKMerIGfpIut"Data.Concurrent.Queue.MichaelScott0Data.Concurrent.Queue.MichaelScott.DequeInstance LinkedQueuepushLtryPopRnewQnullQ$fDequeClassLinkedQueuepairEqbase GHC.MaybeNothing)D:R:DequeltrtSingleEndSingleEndbndsafeelt