好的,我是来自Python的Haskell社区的新手,这使我发疯。
我有一个文本文件,看起来像: “ 1.2 1.423 2.43“。
我想读取此文本文件,并将其存储为list_var中的双打列表。所以list_var = [1.2,1.423,2.43]。该list_var将在程序中进一步使用。
我似乎没有找到有关如何执行此操作的答案,大多数答案都可以打印出list_var,例如Haskell - Read a file containing numbers into a list,但我还需要list_var!
我尝试过:
DevoSnsTopic
不起作用,readLines为
get_coefficients :: String -> [Double]
get_coefficients file_1 = do
coefficients_fromfile <- readLines "test2.txt"
let coefficients = map readDouble coefficients_fromfile
return coefficients
,readDouble是
readLines :: FilePath -> IO [String]
readLines = fmap lines . readFile
谢谢!
答案 0 :(得分:2)
由于您使用return
,因此您的输出以monad表示,在本例中为IO
monad。错误消息告诉您,您应该更改此行:
get_coefficients :: String -> [Double]
对此:
get_coefficients :: String -> IO [Double]
这是由于Haskell的核心原则:参照透明性。
如果要使用生成的[Double]
,则仍必须将其保存在IO
monad中,就像这样:
main :: IO ()
main = do
-- This can be thought of as taking out values from the monad,
-- but requires the promise that it'll be put back into a monad later.
doubles <- get_coefficients "This argument does nothing, why?"
-- This prints the list of doubles. Note: it returns an IO (),
-- thus fufills the promise!
-- print :: Show a => a -> IO ()
print doubles