list - Haskell 持久列表

标签 list haskell persistent

我是 Haskell 的新手,想知道是否有一种简单的方法可以创建一个数据结构,我可以通过连续的函数调用向其中添加记录,并且不会在函数调用之间丢失结构的状态(持久性?),而无需数据库的需要。所以我有:

data Book = Book  { title  :: String
                  , author :: String
                  , ISBN   :: String
                  }
                  deriving (Eq, Show)

type BookShelf = [Book]

我很欣赏 Haskell 这样做的方法是复制数据结构并在尝试执行此类操作时返回更新。所以这会像这样工作:

addToBookShelf :: Book -> BookShelf -> BookShelf
addToBookShelf b bs = b : bs

所以我可以从其他函数递归调用它来填充 BookShelf。我不相信这对我有用,因为我试图通过 JSON PUT 请求添加记录,而且我不想返回更新的列表以供外部 HTTP 客户端递归调用的函数?我相信一定有一个简单的答案!

附加信息:我正在使用 Web.Scotty 来解析 JSON POST/GET。

最佳答案

您需要以某种方式对状态进行建模。由于您是新手,让我们采用一种简单的方法:向您的服务器添加一个参数来跟踪状态:

getBookViaJSON :: IO Book
-- listen, convert, ...

server :: BookShelf -> IO () 
server bookshelf = do
    book <- getBookViaJSON
    server (book:bookshelf)

这个函数永远不会返回,也永远不会对书架做任何事情,所以它本身没有用,但你明白了吗?

关于list - Haskell 持久列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15416102/

相关文章:

c - C中的列表维护问题

haskell - 为什么它使用 Double 而不是给我一个歧义错误?

bash - 编写 haskell 脚本时,在意外标记附近出现语法错误

Perl 使用 Data::Dumper 持久化数据存储

list - 在 Groovy 的多重赋值中获取列表的尾部

c++ - 如何创建一个用列表初始化的构造函数?

python - 将字符串格式的数据转换为列表 - python

haskell - 使用 - 在 haskell 中加入两个 IO

ios - 持久数据和原始数据类型 Ios 编程

caching - 如何记住匿名投票