错误是
*** Exception: Incompatible {errSQLType = "int8", errHaskellType = "Int", errMessage = "types incompatible"}
Run Code Online (Sandbox Code Playgroud)
看起来count(*)查询中返回的任何值都必须转换为Integer而不是Int.如果我将这些特定变量更改为Integer类型,则查询可以正常工作.
但是在具有相同确切代码的另一台机器上没有引发此错误.第一台机器是32位,另一台机器是64位.这是我能辨别的唯一区别.
有没有人对正在发生的事情有任何见解?
postgresql-simple 提供用于流式查询的功能,例如
fold
:: (FromRow row, ToRow params)
=> Connection -> Query -> params -> a -> (a -> row -> IO a) -> IO a
Run Code Online (Sandbox Code Playgroud)
我想创建一个充分利用流媒体的管道源.
mySource :: (FromRow row, Monad m) => Source m row
Run Code Online (Sandbox Code Playgroud)
不幸的是,因为IO出现在一个逆变的位置(我认为?)fold,我真的很难与这些类型斗争.以下类型检查,但在产生值之前折叠整个流.
getConduit :: Connection -> IO (C.ConduitM () Event IO ())
getConduit conn = fold_ conn queryEventRecord CL.sourceNull foo
where
foo :: C.ConduitM () Event IO () -> Event -> IO (C.ConduitM () Event IO ())
foo cond evt …Run Code Online (Sandbox Code Playgroud) 我是 Haskell 的新手,老实说,我遇到了困难。但它扩展了我的想法,所以我们走了。我正在尝试运行一个非常简单的 Web 服务器,它查询 Postgres 数据库并应将结果作为 JSON 返回。
查询非常简单:“Select id,data from MYTABLE where id = 1”
但是 haskell 的类型系统现在正在杀死我,我的行为的最终类型不匹配。我使用Spock和PostgreSQL-Simple作为组合。
大多数教程对于我想要做的事情来说要么很简单,要么很困难。我介于两者之间,错过了很多对 Haskell 的理解,我之前的很多问题我已经通过简单的复制和粘贴解决了,并且得到了一个简单的版本。
但是一旦我尝试传递路由变量,我就会失败。这是我的工作版本。我的数据库表在这里称为“信封”,重要的调用是它说get "json":
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE FlexibleInstances #-}
module Main where
import Web.Spock
import Web.Spock.Config
import Database.PostgreSQL.Simple
import Data.Pool
import Data.Aeson (ToJSON(toJSON), object, (.=),Value)
import Database.PostgreSQL.Simple.FromRow
type AppAction a = SpockActionCtx () Connection AppSession AppState a
data AppState = EmptyState
data AppSession = EmptySession
data Envelope = Envelope { …Run Code Online (Sandbox Code Playgroud) 我正在学习Haskell所以我决定编写一个Web应用程序.我选择PostgreSQL Simple来处理数据库.我成功连接到它并尝试了简单的数学运算,但我在尝试将记录映射到数据时遇到了问题.此代码无法编译:
module Handlers.SurveyReplies where
import Database.PostgreSQL.Simple
data AnswersSet = AnswersSet {
sex ? Integer,
ageRange ? Integer,
country ? Integer,
commune ? Maybe Integer
} deriving (Show)
instance FromRow AnswersSet where
fromRow = AnswersSet <$> field <*> field <*> field <*> field
instance ToRow AnswersSet where
toRow r = [toField (sex r), toField (ageRange r), toField (country r), toField (commune r)]
Run Code Online (Sandbox Code Playgroud)
错误是:
‘fromRow’ is not a (visible) method of class ‘FromRow’
|
17 | fromRow = AnswersSet <$> field …Run Code Online (Sandbox Code Playgroud)