у меня была идея запилить обобщённый тип числа аля вот такой, принимать операцию для Num a => a -> a -> a и после по каким-то правилам коэрсить/применять её для двух Number я правильно понимаю, у меня это никак не получится?
Пока разбирался в GADT в двух местах прочитал что-то вроде такого и смутился:
However, it's generally considered best practice not to do this. Instead, put the Num constraint only on the functions that use Scales and need the Num constraint.