1

假设我*File想阅读它的全部内容,并将每一行作为不同的元素存储在列表中。

我直观的解决方案是:

first (x,y) = x

readFile:: *File -> [{#Char}]
readFile file 
    | first (fend (file))   = []
    | otherwise             = [ line : readFile (file)] 
where
    line = first(freadline (file))

两者freadlinefend来自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来存储 one 的值freadline,但显然它不起作用。

请考虑我是新手Clean,唯一性规则对我来说不是很清楚。非常感谢!

4

0 回答 0