This could equally well be a function which takes a string and a seed and returns the hash.
The more concrete the type signatures become the less they become documenting.
A signature of a -> a defines the id function because the type is so generic. A function of String->String can do pretty much anything.