genericfun.type1 <- function(x, sub=1) x - sub
genericfun.type2 <- function(x, y) sum(x, y)
The single case can be differentiated: genericfun(x)
But which function are we calling with: genericfun(x, y)
I don't know about Julia and how it solves this. Maybe by not allowing to pass nameless optional arguments.