【发布时间】:2017-12-12 13:04:38
【问题描述】:
我正在关注 this 教程,该教程使用 scotty 和持久性来创建一个简单的 API。
但是,我正在尝试使用 scotty 和 mysql 简单库创建一个简单的 api。
现在我卡在代码中的某一点上。
在下面的代码中,我无法将 getUser 函数转换为类型 "ActionT Error ConfigM",因为我的代码失败了。
谁能帮助我了解如何转换 getUser 函数以实现所需的类型签名?
代码
type Error = Text
type Action = ActionT Error ConfigM ()
config :: Config
config = Config
{ environment = Development
,db1Conn = connect connectionInfo
}
main :: IO ()
main = do
runApplication config
runApplication :: Config -> IO ()
runApplication c = do
o <- getOptions (environment c)
let r m = runReaderT (runConfigM m) c
scottyOptsT o r application
application :: ScottyT Error ConfigM ()
application = do
e <- lift (asks environment)
get "/user" getTasksA
getTasksA :: Action
getTasksA = do
u <- getUser
json u
getUser :: IO User
getUser = do
e <- asks environment
conn <- db1Conn config
[user]<- query_ conn "select login as userId, email as userEmail from member limit 1"
return user
错误
• Couldn't match type ‘IO’ with ‘ActionT Error ConfigM’
Expected type: ActionT Error ConfigM User
Actual type: IO User
• In a stmt of a 'do' block: u <- getUser
In the expression:
do { u <- getUser;
json u }
In an equation for ‘getTasksA’:
getTasksA
= do { u <- getUser;
json u }
【问题讨论】:
-
如果你放弃
IO User的签名,它可能会起作用。 -
试过了。出现以下错误无法将类型“IO”与“ActionT Error ConfigM”匹配预期类型:ActionT Error ConfigM a0 实际类型:IO a0