Semigroup package:parameterized

Parameterized version of (<>) in Semigroup If used in conjunction with Empty, ie as a parameterized Monoid, then the instance should follow the following laws: * pmempty' pmappend' x = x * x pmappend' pempty' = x * x pmappend' (y pmappend' z) = (x pmappend' y) pmappend' z