Один из способов вычисления сигнатуры типа - попросить компилятор сделать для вас вывод типа:
Prelude> let mag (x,y) = sqrt (x**2 + y**2)
Prelude> :t mag
mag :: Floating a => (a, a) -> a
Это, вероятно, тот тип, который вам нужен.
Теперь, ваш тип берет пару символов a и каким-то образом преобразует их в ab в классе Num
.Вы имеете в виду преобразование в более общий класс Num
?Если это так, вам понадобится truncate
или что-то в этом роде и fromIntegral
.
Я предполагаю, что это не то, что вы хотите, но вы можете сделать это,
Prelude> let mag (x,y) = fromIntegral . truncate $ sqrt (x**2 + y**2)
Prelude> :t mag
mag :: (Floating a, RealFrac a, Floating a) => (a, a) -> c