4

和:

mailHandler = do 
  name  <- param "name"
  email <- param "email"
  renderSendMail $ forwardMail name email

main = scotty 3000 $ post "/mail" mailHandler

我收到以下类型错误:

    Couldn't match type `IO'
                  with `Web.Scotty.Internal.Types.ActionT T.Text IO'
    Expected type: Web.Scotty.Internal.Types.ActionT T.Text IO ()
      Actual type: IO ()
    In a stmt of a 'do' block: renderSendMail $ forwardMail name email
    In the expression:
      do { name <- param "name";
           email <- param "email";
           renderSendMail $ forwardMail name email }
    In an equation for `mailHandler':
        mailHandler
          = do { name <- param "name";
                 email <- param "email";
                 renderSendMail $ forwardMail name email }
Failed to install server-0.0.1
cabal: Error: some packages failed to install:
server-0.0.1 failed during the building phase. The exception was:
ExitFailure 1

花了几个小时后,我仍然不知道如何解决这个问题。如果我使用 Scotty 内部的函数,没问题,但如果我想在外部处理任何事情,我会收到上面的错误。我怎样才能克服这个Web.Scotty.Internal.Types.ActionT T.Text IO ()

4

1 回答 1

11

Web.Scotty.Internal.Types.ActionT T.Text IO ()是一个单子IO变压器。这些通常实现MonadIO类,以便您可以使用该liftIO函数(从Control.Monad.IO.Class,如果尚未导入)将IO操作“提升”到它们中:

liftIO . renderSendMail $ forwardMail name email
于 2014-08-31T04:18:34.180 回答