Извините за то, что, вероятно, идиотский вопрос - пытается узнать Хаскелл на данный момент;Бесконечные квадраты Корни: не могут соответствовать ожидаемому типу и не могут построить бесконечный тип
Я пытаюсь создать базовую функцию, которая создаст бесконечный список квадратных корней на число, поэтому я могу получить практику с функцией принятия и как она работает.
Я написал следующий код;
infisqrt x = infisqrt'((x :: Float) [])
-- helper method
infisqrt' x xs = infisqrt'(sqrt(x) (xs ++ [(sqrt(x))]))
Однако при попытке загрузить библиотеку это возвращается с двумя ошибками;
:l isq
isq.hs:1:24:
Couldn't match expected type ‘[t0] -> a’ with actual type ‘Float’
Relevant bindings include
infisqrt :: Float -> [a] -> t (bound at isq.hs:1:1)
The function ‘x :: Float’ is applied to one argument,
but its type ‘Float’ has none
In the first argument of ‘infisqrt'’, namely ‘((x :: Float) [])’
In the expression: infisqrt' ((x :: Float) [])
isq.hs:5:33:
Occurs check: cannot construct the infinite type: a ~ [a] -> a
Relevant bindings include
xs :: [a] (bound at isq.hs:5:13)
x :: a (bound at isq.hs:5:11)
infisqrt' :: a -> [a] -> t (bound at isq.hs:5:1)
In the first argument of ‘sqrt’, namely ‘(x)’
In the first argument of ‘infisqrt'’, namely
‘(sqrt (x) (xs ++ [(sqrt (x))]))’
Может ли кто-нибудь сообщить мне, где я ошибаюсь?
несовершеннолетний примечание стороны: 'Float' вроде типа специального назначения, используется в основном для алгоритмов, разработанных специально вокруг него, или в определенных ситуациях, когда размер важнее точности. В большинстве случаев тип с плавающей запятой вам нужен «Double». – dfeuer
Я закрыл этот вопрос. Нет ничего * неправильного * с вопросом, но маловероятно, что кто-либо, совершивший эту конкретную ошибку в будущем, сможет его найти, - они получат другое сообщение об ошибке, описывающее разные типы, в процессе выполнения чего-то другого , – dfeuer