Почему этот код Haskell производит “бесконечный тип” ошибка?

Я рекомендую использовать селен , а не бс.
Селен может контролировать браузер и анализ. например, прокрутка вниз, нажатие кнопки и т. д.

Этот пример предназначен для прокрутки вниз, чтобы получить всех похожих пользователей в Instagram.
https://stackoverflow.com/a/54882356/5611675

73
задан stites 2 September 2016 в 00:32
поделиться

3 ответа

Проблема в последнем предложении, где вы рассматриваете x и y как элементы, а они являются списками. Это будет работать:

intersperse _ [] = []
intersperse _ [x] = x 
intersperse s (x:y:xs) = x ++ [s] ++ y ++ intersperse s xs

Ошибка бесконечного типа возникает из-за того, что оператор: имеет тип a -> [a] -> [a], а вы рассматриваете его как [a] -> a -> [a], что означает, что [a] должен быть идентифицирован с a, что означало бы, что a является бесконечно вложенным списком. Это недопустимо (и в любом случае не то, что вы имеете в виду).

Редактировать: В приведенном выше коде есть и другая ошибка. Должно быть:

intersperse _ [] = []
intersperse _ [x] = x
intersperse s (x:xs) = x ++ [s] ++ intersperse s xs
32
ответ дан 24 November 2019 в 12:26
поделиться

Я могу ошибаться, но, похоже, вы пытаетесь решить более сложная проблема. Ваша версия intersperse не только перемежает значение с массивом, но и выравнивает его на один уровень.

Модуль List в Haskell фактически обеспечивает функцию перемежения. Он вставляет значение, указанное между каждым элементом в списке. Например:

intersperse 11 [1, 3, 5, 7, 9] = [1, 11, 3, 11, 5, 11, 7, 11, 9]
intersperse "*" ["foo","bar","baz","quux"] = ["foo", "*", "bar", "*", "baz", "*", "quux"]

Я предполагаю, что это то, что вы хотите сделать, потому что это то, что мой профессор хотел, чтобы мы делали, когда я изучал Haskell. Я мог бы, конечно, быть полностью вне.

Это то, что мой профессор хотел, чтобы мы делали, когда я изучал Хаскель. Я мог бы, конечно, быть полностью вне.

Это то, что мой профессор хотел, чтобы мы делали, когда я изучал Хаскель. Я мог бы, конечно, быть полностью вне.

3
ответ дан 24 November 2019 в 12:26
поделиться

Также я нашел это , в котором объясняется смысл ошибки.

Каждый раз, когда интерпретатор / компилятор выдает мне эту ошибку, это связано с тем, что я использую некоторый параметризованный кортеж в качестве формального параметра. Все работает правильно, если удалить определение типа функции, которое содержало переменные типа.

Я до сих пор не могу понять, как исправить это и сохранить определение типа функции.

0
ответ дан 24 November 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: