multimethods with issues
solve using pattern matching