Создайте список из ввода, используя интерактив в Haskell - PullRequest
0 голосов
/ 28 февраля 2020

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

import Data.List

readIn = sort . map read . words 
writeOut = unlines . map show
rangeList [n,m] = [n .. m] 
main = interact (writeOut . rangeList . readIn)

По какой-то причине он не будет печатать числа. Не могли бы вы помочь мне?

1 Ответ

2 голосов
/ 28 февраля 2020

interact требует, чтобы вы вводили конец файла (EOF) в stdin с помощью Ctrl + D (или Ctrl + Z по Windows); когда я набираю эту комбинацию, вывод появляется как требуется. Это необходимо, потому что, как указано в документации для interact, «весь ввод от стандартного устройства ввода передается [взаимодействовать] в качестве аргумента»; из-за этого вам нужно явно указать место, где заканчивается stdin.

(Кстати, я даже не уверен, как вы получили программу для компиляции; GH C дает мне много «неоднозначного» ошибки типа ', когда я пытаюсь. Мне пришлось добавить сигнатуры типа, чтобы заставить его работать, и в этот момент я нашел решение выше, чтобы работать.)

...