(This is a refinement of Burak Serdar's proposal at https://gist.github.com/bserdar/8f583d6e8df2bbec145912b66a8874b3)
The simplest way to specify a contract is to provide a list of the types that fulfill it:
contract byteSequence string, []byte
contract unsigned uint, uint8, uint16, uint32, uint64, uintptr
contract signed int, int8, int16, int32, int64