首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CouchDB.Conduit:将视图映射到数据

CouchDB.Conduit:将视图映射到数据
EN

Stack Overflow用户
提问于 2012-12-08 19:33:37
回答 1查看 100关注 0票数 0
代码语言:javascript
复制
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveGeneric, ScopedTypeVariables #-}

import Data.Generics (Data, Typeable)
import Data.Conduit
import qualified Data.Conduit.List as CL
import Database.CouchDB.Conduit.Generic
import Database.CouchDB.Conduit
import Database.CouchDB.Conduit.View
import Data.ByteString.Char8 (ByteString, empty)
import Control.Monad.IO.Class (liftIO)
import Data.Aeson
import Data.Aeson.Types
import GHC.Generics

data Page = Page { id_ :: ByteString, url :: ByteString }
            deriving (Show, Data, Typeable, Generic)

instance FromJSON Page

getPages :: IO ()
getPages = runCouch (def { couchHost = "192.168.0.103" }) $ do
    couchView_ "reader" "reader" "pages" [] $ CL.mapM_ (liftIO . print)

这是可行的,并提供了以下内容:

代码语言:javascript
复制
    *Main> getPages 
    fromList [("key",String "802e343945c7f8da2d8a71fdb80025a7"),("id",String "802e343945c7f8da2d8a71fdb80025a7"),("value",String "http://yandex.ru")]`

但我实际上想要一个函数getPages :: IO [Page],所以我尝试了一下:

代码语言:javascript
复制
getPages = runCouch (def { couchHost = "192.168.0.103" }) $ do
    couchView_ "reader" "reader" "pages" [] $ toType =$ CL.consume`

这给了我类型错误:

代码语言:javascript
复制
`Reader/Couch.hs:24:47:
    Couldn't match expected type `Object' with actual type `Value'
    Expected type: Conduit Object m1 b0
      Actual type: Conduit Value m0 a0
    In the first argument of `(=$)', namely `toType'
    In the second argument of `($)', namely `toType =$ CL.consume'
Failed, modules loaded: none.

这并不奇怪,因为couchView需要Sink Object m a作为参数。

问题是:如何实现getPages ::IO页面

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-11 02:27:53

我不熟悉conduit、aeson或couchDB,但这至少是类型检查:

代码语言:javascript
复制
getPages :: IO [Result Page]
getPages = runCouch (def { couchHost = "192.168.0.103" }) $ do
    couchView_ "reader" "reader" "pages" [] $ CL.map (fromJSON . Object) =$ CL.consume
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13777057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档