|
|
|
|
|
by b33j0r
185 days ago
|
|
You implemented type-checking. For a project this ambitious, I am surprised here. “Generics” should mean that the compiler or interpreter will generate new code paths for a function or structure based on usage in the calling code. If I call tragmorgify(int), tragmorgify(float), or tragmorgify(CustomNumberType), the expectation is that tragmorgify(T: IsANumber) tragmorgifies things that are number-like in the same way. For a compiled language this usually means monomorphization, or generating a function for each occurring tuple of args types. For an interpreted language it usually means duck-typing. This is not a bad language feature per se, but also not what engineers want from generics. I would never write code like your example. The pattern of explicit type-checking itself is a well-known codesmell. There is not a good usecase for adding 2.0 to a float input but 1 to an integer input. That makes your function, which should advertise a contract about what it does, a liar ;) |
|