I wonder if we need `Abstract` and `AbstractToHash`. what about having `Abstract`, `Benevolent`, `Strict` instead of `Abstract`, `AbstractToHash`, `BenevolentToHash`, `StrictToHash`?