Usage of PhandomData here is pretty clear, H is unused in struct definition and PhandomData is here to make compiler happy.
Also, usage of fn() -> H is probably to let readers know that the values of type H are only produced (not owned) in BuildHasherDefault implementations. Is there any other reason to use fn() -> H here apart from documentation purposes?
I read Table of PhantomData patterns, but it doesn't tell much why I could use one, not another.