https://en.wikipedia.org/wiki/Kleene_algebra
This is always fun. We could have a method to get the BoundedSemilattice from the + operation.
I guess this extends Rig. So something like:
trait KleeneAlgebra[A] extends Rig[A] {
def star(a: A): A
def additiveSemilattice: BoundedSemilattice[A]
}