more type checking
working on function subtyping
trait method subtyping