Пытаясь понять почтовый индекс - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь понять, как использовать zip в Haskell. Недавно я изучал Haskell и пытаюсь создать список кортежей из двух отдельных списков

У меня есть следующее:

createList :: [Char] -> [Char] -> [(Char,Char)]    
createList xs ys = zip(xs,ys)

Я понимаю, что zip должен создать списоккортежам даны два списка, но я получаю следующую ошибку:

Couldn't match expected type ‘[a0]’
              with actual type ‘([Char], [Char])’

Может кто-нибудь объяснить мне, где я спотыкаюсь?

Ответы [ 2 ]

6 голосов
/ 26 октября 2019

Вызовы функций Haskell не используют скобки или запятые.

Вы можете написать функцию createList как:

createList xs ys = zip xs ys

или просто

createList = zip

Таким образом, функция createList является избыточной;это просто zip. Единственное потенциальное использование псевдонима, о котором я могу подумать, - это если вы действительно хотите ограничить тип как указано.

4 голосов
/ 26 октября 2019

Если вы удалите скобки вокруг zip вызова, ваш код должен работать:

createList :: [Char] -> [Char] -> [(Char,Char)]

createList xs ys = zip xs ys

Объяснение:

Полная ошибка, которую я получаю при запуске zip ([1, 2, 3], [4, 5, 6]) (обратите внимание наparens):

<interactive>:4:5:
    Couldn't match expected type ‘[a]’
                with actual type ‘([Integer], [Integer])’
    Relevant bindings include
      it :: [b] -> [(a, b)] (bound at <interactive>:4:1)
    In the first argument of ‘zip’, namely ‘([1, 2, 3], [4, 5, 6])’
    In the expression: zip ([1, 2, 3], [4, 5, 6])
    In an equation for ‘it’: it = zip ([1, 2, 3], [4, 5, 6])

Обратите внимание на часть с надписью In the first argument of ‘zip’, namely ‘([1, 2, 3], [4, 5, 6])’. Парены интерпретируются как конструктор кортежа . zip Функция ожидает список в качестве первого аргумента, но мы передаем ему кортеж.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...