The ones that come to mind off the top of my head: - [x] `MVar` - [x] `MutVar` - [x] `Weak` - [ ] `StablePtr` - [ ] `TVar` - [ ] `TMVar`, using the "null pointer" trick. ~~and `Ptr`.~~ As I recall, there's a classic `MVar`-based concurrent queue implementation that involves `MVar (MVar ...)`; we could offer an improved version.