Чистый язык: читать содержимое текстового файла в список строк. Можно ли избежать уникальности? - PullRequest
1 голос
/ 10 марта 2019

Предполагая, что у меня есть *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 и правилах уникальностимне не очень понятно.Большое спасибо!

...