Well, this came after some debate with @ianoc . I originally defined a new type Hashable which served as a one way injection (we could still do this -- I think it should be in bijection if we do). Either way, his argument was that in order to more heavily leverage bijection's existing combinators, it made more sense to represent a hash function as a one way injection (that type is in Hash) to a strongly typed value class that says "this is a hash function." I think both approaches have their strengths.