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

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

0 ответов

Другие вопросы по тегам