【发布时间】:2019-05-01 12:14:19
【问题描述】:
再次停留在一些可能是理论上的东西上。 Haskell 中有很多库,我想尽量少用。如果我有这样的类型:
data Note = Note { _noteID :: Int
, _noteTitle :: String
, _noteBody :: String
, _noteSubmit :: String
} deriving Show
并使用它来创建[Note {noteID=1...}, Note {noteID=2...}, ] 等列表。我现在有一个Note 类型的列表。现在我想使用writeFile 将其写入文件。考虑到 writeFile 的类型为FilePath -> String -> IO (),可能 ghc 不会允许它。但我也想避免一直解构(writeFile)和构造(readFile)类型,假设我不会离开Haskell“领域”。有没有办法做到这一点,而不使用特殊的库?再次:非常感谢。 Haskell 上的书籍很好,但 StackOverflow 是书籍和现实世界之间的粘合剂。
【问题讨论】:
-
你有一个
[Note]类型的列表。 -
为什么不只是
writeFile path show [Note {noteID=1...}, Note {noteID=2...}, ]? -
这个问题非常广泛。您应该从“生成的文件应该是什么样子?”这个问题开始,然后编写代码来完成它。
-
所以你想要一个
FilePath -> [Note] -> IO ()类型的操作,但你有FilePath -> String -> IO (),你有一个[Note]类型的值?似乎您需要将该值转换为String类型值,从而使用[Note] -> String类型的函数。show就是这样一种功能。 -
因此为您的数据类型派生
Read,read data :: [Note]应该可以正常工作。嵌套引号应该不是问题,除非您需要read以外的其他内容来处理它,在这种情况下,我们将返回“生成的文件应该是什么样子?”
标签: haskell types type-conversion