假设我*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
来存储 one 的值freadline
,但显然它不起作用。
请考虑我是新手Clean
,唯一性规则对我来说不是很清楚。非常感谢!