Haskell持久列表

时间:2013-03-14 17:26:03

标签: 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。

1 个答案:

答案 0 :(得分:2)

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

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

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

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