Обработка списка пар в Haskell - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь изучить список пар, [(a, a)], но не могу заставить его работать.Я пробовал что-то вроде:

showList :: [(a, a)] -> IO ()
showList (x, y):[] = putStrLn (x, y)
showList (x, y):xs = do 
    putStrLn (x, y)
    showList xs

Есть какое-нибудь решение для этого?Я хотел бы что-то вроде того, что я там сделал.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Пробелы не влияют на приоритет оператора.

showList (x, y):[] анализируется как (showList (x, y)) : [].

Приложение функции имеет более высокий приоритет, чем любой инфиксный оператор, включая :.

Вы хотите

showList ((x, y) : []) = ...
0 голосов
/ 05 июня 2018

Ваша самая большая ошибка в том, что вы думали, что кортеж - это строка.Кортеж (x, y) не является строкой.Для подписи putStrLn :: String -> IO () требуется строка в качестве аргумента.

Вы можете использовать print :: Show a => a -> IO () для печати всего, что имеет экземпляр Show.

В качестве примечания: вы могли бывместо этого используется mapM_ print.

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