Rust可能要有refinement type了
https://github.com/rust-lang/keyword-generics-initiative/blob/backwards-compatible-pattern-types/evaluation/pattern-types.md
https://github.com/rust-lang/keyword-generics-initiative/blob/backwards-compatible-pattern-types/evaluation/pattern-types.md