Haskell UI do子句,如何打印?

von*_*dip 2 monads haskell threepenny-gui

这是一个后续的问题这个.我在Haskell中使用一个名为Threepenny-GUI的图形库.在这个库中,main函数返回一个UImonad对象.我正在尝试执行一个简单的打印命令但没有成功.什么是正确的解决方案来启用打印以进行调试.

码:

main :: IO ()
main = startGUI defaultConfig setup

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

print "debug message 1 "
Run Code Online (Sandbox Code Playgroud)

错误:

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

Dav*_*vid 5

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

liftIO (print "debug message 1")
Run Code Online (Sandbox Code Playgroud)

该表达式的类型可以是,UI ()因为它UI是一个实例,MonadIO并且print "debug message 1"具有类型IO ().