Supports multiple matchable things
Now with extension methods and None or Both types