Я получаю следующее сообщение об ошибке при компиляции:
Подпись повторяющегося типа:
weightedMedian.hs:71:0-39: findVal :: [ValPair] -> Double -> Double
weightedMedian.hs:68:0-36: findVal :: [ValPair] -> Целый -> Двойной
Мое решение состоит в том, чтобы иметь findValI и findValD. Однако findValI просто преобразует тип Int в Double и вызывает findValD.
Также я не могу сопоставлять шаблоны для типов Num (Int, Double), поэтому я не могу просто изменить сигнатуру типа на
findVal :: [ValPair] -> Num -> Double
На многих языках мне не понадобятся разные имена. Зачем мне нужны разные имена в Haskell? Сложно ли будет добавить это в язык? Или там драконы?
:t findVal
, чтобы увидеть автоматически вычисляемую сигнатуру функции. Вероятно, у него не было бы ни Int, ни Double, а вместо этого он выглядел бы какNum a => [ValPair] -> a -> Double
, а это именно то, что вам нужно. - person Anupam Jain   schedule 25.05.2011