Haskell: ввод-вывод и возврат из функции

Пожалуйста, терпите меня, поскольку я новичок в функциональном программировании и Haskell. Я пытаюсь написать функцию в Haskell, которая принимает список целых чисел, печатает заголовок указанного списка, а затем возвращает конец списка. Функция должна иметь тип [Целое число] -> [Целое число]. Чтобы дать немного контекста, Я пишу интерпретатор, и эта функция вызывается, когда соответствующая команда ищется в ассоциативном списке (ключ - это команда, значение - функция).

Вот код, который я написал:

dot (x:xs) = do print x
      return xs

Компилятор дает следующее сообщение об ошибке:

forth.hs:12:1:
Couldn't match expected type `[a]' against inferred type `IO [a]'
  Expected type: ([Char], [a] -> [a])
  Inferred type: ([Char], [a] -> IO [a])
In the expression: (".", dot)

Я подозреваю, что именно вызов print в функции точки является причиной того, что предполагаемый тип является IO [a]. Есть ли способ игнорировать возвращаемый тип print, поскольку все, что мне нужно вернуть, - это конец списка, передаваемого в точку.

Заранее спасибо.

6
задан Don Stewart 2 May 2011 в 21:05
поделиться