use existing abstractions to implement cherry