
Hi there, I'm trying to use any version of couchdb with Haskell and Database.CouchDB and I'm not having a ton of luck. I've talked to others in the past that have used it without a problem so I'm wondering what it is that I'm doing wrong. I can connect, and create new databases without a problem - do any of you couchdb-using haskell people see a problem with this line? runCouchDB' $ newDoc (db "testify") $ JSObject $ toJSObject [("name",JSString $ toJSString $ "value")] I figured I would start small and just try to put something basic into a document. The rest of this email is also at a gist at http://gist.github.com/417442 Here is a list of the revisions of couchdb and the different errors I'm getting back as well as some of the code I'm using to try to test this.. Hopefully it will help. {- CouchDB 0.11.0: [error] [<0.95.0>] attempted upload of invalid JSON undefined [info] [<0.95.0>] 127.0.0.1 - - 'PUT' /honks/cmoore? 400 CouchDB Trunk as of 5/28 - 10:26 PST: [info] [<0.95.0>] 127.0.0.1 - - 'PUT' /honks? 201 [debug] [<0.114.0>] 'PUT' /honks/cmoore? {1,1} Headers: [{'Connection',"keep-alive"}, {'Content-Type',"application/json"}, {'Host',"localhost:5984"}, {'User-Agent',"hs-HTTP-4000.0.5"}] [debug] [<0.114.0>] OAuth Params: [] [error] [<0.114.0>] attempted upload of invalid JSON undefined [info] [<0.114.0>] 127.0.0.1 - - 'PUT' /honks/cmoore? 400 [debug] [<0.114.0>] httpd 400 error response: {"error":"bad_request","reason":"invalid UTF-8 JSON"} CouchDB rev 818083: [debug] [<0.107.0>] 'PUT' /honks/cmoore? {1,1} Headers: [{'Connection',"keep-alive"}, {'Content-Type',"application/json"}, {'Host',"localhost:5984"}, {'User-Agent',"hs-HTTP-4000.0.5"}] [debug] [<0.107.0>] OAuth Params: [] [debug] [<0.107.0>] Minor error in HTTP request: {invalid_json,undefined} [debug] [<0.107.0>] Stacktrace: [{mochijson2,decode,1}, {couch_httpd_db,db_doc_req,3}, {couch_httpd_db,do_db_req,2}, {couch_httpd,handle_request,5}, {mochiweb_http,headers,5}, {proc_lib,init_p_do_apply,3}] [info] [<0.107.0>] 127.0.0.1 - - 'PUT' /honks/cmoore? 500 [debug] [<0.107.0>] httpd 500 error response: {"error":"invalid_json","reason":"undefined"} CouchDB 0.10.1: [error] [<0.278.0>] attempted upload of invalid JSON undefined [info] [<0.278.0>] 127.0.0.1 - - 'POST' /testify? 400 -} module Main where import Text.JSON import Database.CouchDB import Database.CouchDB.JSON data Person = Person { name :: String, email :: String } deriving (Eq,Show) instance JSON Person where showJSON (Person nm em) = JSObject $ toJSObject [("name", showJSON nm),("email", showJSON em)] readJSON val = do obj <- jsonObject val nm <- jsonField "name" obj em <- jsonField "email" obj return (Person nm em) create = runCouchDB "localhost" 5984 $ createDB "honks" main :: IO () main = do _ <- runCouchDB "localhost" 5984 $ newNamedDoc (db "honks") (doc "cmoore") $ Person "cmoore" "cmoore@w.com" putStrLn "Honk." --- Later, against 0.10.1: cmoore@cathedral:~/tmp$ ghci GHCi, version 6.12.2: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Loading package ffi-1.0 ... linking ... done. Prelude> :m +Database.CouchDB Prelude Database.CouchDB> :m +Text.JSON Prelude Database.CouchDB Text.JSON> :set prompt "> "
runCouchDB' $ createDB "testify" Loading package array-0.3.0.0 ... linking ... done. Loading package syb-0.1.0.2 ... linking ... done. Loading package base-3.0.3.2 ... linking ... done. Loading package bytestring-0.9.1.6 ... linking ... done. Loading package mtl-1.1.0.2 ... linking ... done. Loading package parsec-2.1.0.1 ... linking ... done. Loading package network-2.2.1.5 ... linking ... done. Loading package old-locale-1.0.0.2 ... linking ... done. Loading package old-time-1.0.0.4 ... linking ... done. Loading package HTTP-4000.0.8 ... linking ... done. Loading package containers-0.3.0.0 ... linking ... done. Loading package pretty-1.0.1.1 ... linking ... done. Loading package json-0.4.4 ... linking ... done. Loading package CouchDB-0.10.2 ... linking ... done. runCouchDB' $ newDoc (db "testify") $ JSObject $ toJSObject [("name",JSString $ toJSString $ "value")] *** Exception: HTTP/1.1 400 Bad Request Server: CouchDB/0.10.1 (Erlang OTP/R13B) Date: Fri, 28 May 2010 18:46:36 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 54 Cache-Control: must-revalidate

I hav not run your examples. But 1. May be you have put to couchdb only *object* (braked by {}) but not array? 2. Why not to define data (data Mydata = Mydata {...}) and declare it as instance of JSON you can find example of using couchDB via google.com/codesearch (lang:haskell couchDB) -- Никитин Лев. nlv@lab321.ru, Leon.V.Nikitin@gmail.com
participants (2)
-
Clint Moore
-
Лев Никитин