Haskell UI做子句,如何打印?

Haskell UI do clause, how to print?

这是 . I'm using a graphic library in Haskell called Threepenny-GUI. In this library the main function returns a UI monad 对象的后续问题。我试图执行一个简单的打印命令但没有成功。为调试目的启用打印的正确解决方法是什么。

代码:

main :: IO ()
main = startGUI defaultConfig setup

setup :: Window -> UI ()
setup w = do

print "debug message 1 "

错误:

Couldn't match type ‘IO’ with ‘UI’
Expected type: UI ()
  Actual type: IO ()
In a stmt of a 'do' block: print "labels and values "

基于类型,这是 liftIO 的一个很好的应用。 liftIO 有一个类型 MonadIO m => IO a -> m a 所以它可以像这样使用:

liftIO (print "debug message 1")

该表达式的类型可以是 UI (),因为 UIMonadIO 的一个实例,而 print "debug message 1" 的类型是 IO ().