3

私は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 を解析しています。

4

1 に答える 1

2

何らかの方法で状態をモデル化する必要があります。あなたは初心者なので、簡単な方法を試してみましょう: 状態を追跡するパラメーターをサーバーに追加します。

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

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

この関数は返されることはなく、本棚に対して何もしないため、それ自体では役に立ちませんが、わかりましたか?

于 2013-03-14T19:01:18.507 に答える