Я пробовал бесчисленные поисковые запросы Google, но, будучи довольно новым для Haskell, я не понял половину вещей, которые я нашел, а другая половина просто не совсем соответствовала.Haskell не может вывести тип?
Моя проблема заключается в следующем, если я бегу эти заявления в GHCI
Prelude> let x = 5 :: (Num a) => a
Prelude> sqrt x
я получаю то, что я ожидал
2.23606797749979
Но, если бы это в файл и скомпилировать (должное то, что я делаю здесь довольно тривиально)
sqrtNum :: (Num a, Floating b) => a -> b
sqrtNum x = sqrt x
Я получаю эту
myfile.hs:2:18:
Could not deduce (a ~ b)
from the context (Num a, Floating b)
bound by the type signature for
sqrtNum :: (Num a, Floating b) => a -> b
at test2.hs:1:12-40
`a' is a rigid type variable bound by
the type signature for sqrtNum :: (Num a, Floating b) => a -> b
at test2.hs:1:12
`b' is a rigid type variable bound by
the type signature for sqrtNum :: (Num a, Floating b) => a -> b
at test2.hs:1:12
Relevant bindings include
x :: a (bound at test2.hs:2:9)
sqrtNum :: a -> b (bound at test2.hs:2:1)
In the first argument of `sqrt', namely `x'
In the expression: sqrt x
Проблема, вероятно, очень проста, и я просто наблюдаю за ней (как таковой мой опыт с каждой другой ошибкой, с которой я сталкиваюсь), но этот просто не щелкает.
Заранее благодарен!
Ваш тип утверждает, что вы можете конвертировать из одного типа чисел 'a' в другой тип' b'. Но 'sqrt' не делает этого. –