`hash` and `fmt` would also need to handle cycles