Я пытаюсь написать функцию, которая рекурсивные отсчитывает Тейлор:Haskell Нет экземпляра для ... возникающие
mcloren x = log (1+x)/(1-x)
compareWithDelta' :: (Num a, Floating a, Integral a, Ord a) => a -> a -> Bool
compareWithDelta' x acc = abs (acc - mcloren x) < 1.0e-10
mcl :: (Floating a, Integral a, Num a) => a -> a
mcl x =
let
mcl' x acc y
| compareWithDelta' x acc = acc
| otherwise = mcl' x (2*(x^(2*y+1)/(2*y+1))) (y+1)
in
mcl' x 0 0
Но у меня есть эти сообщения об ошибках:
No instance for (Num a0) arising from a use of 'mcl'
The type variable 'a0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)
Note: there are several potential instances:
instance Num Double — Defined in 'GHC.Float'
instance Num Float — Defined in 'GHC.Float'
instance Integral a => Num (GHC.Real.Ratio a)
— Defined in 'GHC.Real'
...plus three others
In the expression: mcl 1
In an equation for 'it': it = mcl 1
Что это значит и как Исправить это ?
Желательно, чтобы GHC позволял указывать запрограммированные пользователем предупреждения/ошибки для таких случаев. Как и в случае «если после проверки/вывода типа вы найдете« Num (a-> b) «предположите, что ...». – chi