derive Eq, Show and Read instead of writing inefficient versions by hand