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.