This is an alternative generic idea set, which should be Go 1 compatible.
It tries to use the same syntax forms as builtin generics.
Different from the official draft, it adopts a from-top-to-bottom pattern,
instead of the from-bottom-to-top pattern, to describe type parameters.
For example, given a map type parameter M, its key and element types could
be denoted as M.key and M.element, whereas to use a map type parameter,
its key and elements must also present in the declaration signarure or constraint definitions.