我一直在尝试使用haskell中的readFile语法,但当我尝试这样做时,我得到了一个错误,我不知道如何修复。
我的代码:
import System.Environment
maze_path = "maze2.txt"
get_maze :: String -> IO [String]
get_maze file =
do
x <- readFile file
return (read x)
错误:
*** Exception: Prelude.read: no parse
使用"mape_path"字符串执行函数"get_maze"时出现此错误。
我只是想把文件的全部内容转换成常规的字符串格式,如有任何帮助,我将不胜感激。
1条答案
按热度按时间k2arahey1#
这条线
按照您的假设工作,并将给定文件的内容作为
String
赋给变量x
。错误由read
函数抛出。read
函数将String
转换为给定的输出类型。在您的示例中,给定get_maze :: String -> IO [String]
类型,Haskell确定read
必须具有String -> [String]
类型。因此,文本文件应包含格式化的字符串数组,本质上就是您通过写入show ["Hello", "World"]
(["Hello","World"]
)所得到的数组。文件似乎不是以这种方式格式化的。如果
read
不能解析输入,它将抛出上面的错误。在Haskell中有更健壮的方法来解析东西,但我可以想象你的文件只是没有以这种方式格式化,你想使用不同的函数。例如,如果你只想得到一个行的列表,Haskell中有
lines :: String -> [String]
函数,它把一个字符串分割成一个行的列表。