Чистый язык: читать содержимое текстового файла в список строк. Можно ли избежать уникальности?
Предполагая, что у меня есть *File
что я хочу прочитать весь его контент и сохранить каждую строку как отдельный элемент в списке.
Моё интуитивное решение было:
first (x,y) = x
readFile:: *File -> [{#Char}]
readFile file
| first (fend (file)) = []
| otherwise = [ line : readFile (file)]
where
line = first(freadline (file))
И то и другое freadline
а также fend
родом из StdFile
модуль:
/**
* Reads a line from a textfile, including a newline character, except for the
* last line. `freadline` cannot be used on data files.
*/
freadline :: !*File -> (!*{#Char},!*File)
/**
* @result Whether end-of-file has been reached
*/
fend :: !*File -> (!Bool,!*File)
Но, конечно, я получил ошибку, так как нарушил некоторые правила Uniquness:
Атрибут требуемого файла не может быть предложен совместно используемым объектом.
Как избежать этой проблемы уникальности? Я пытался использовать where
хранить ценность одного freadline
, но, видимо, это не работает.
Пожалуйста, примите во внимание тот факт, что я новичок в Clean
и правила уникальности мне не очень понятны. Большое спасибо!