I must admit that I have not done this often (though I have done it), but I
see more than "limited" value in creating a type, defining operations for
it, and then deriving independent types that inherit the same operations.