would it be possible to not expose `Node` to the public?
`peek` return `T` instead?