首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试测试threepenny-gui时出现错误

尝试测试threepenny-gui时出现错误
EN

Stack Overflow用户
提问于 2015-04-11 03:44:30
回答 1查看 134关注 0票数 0

我想试试haskell的3便士-gui包。所以我跑了

代码语言:javascript
复制
cabal install threepenny-gui

..。没有任何问题

因此,我尝试了以下示例:

代码语言:javascript
复制
module Main where

import qualified Graphics.UI.Threepenny as UI
import                  Graphics.UI.Threepenny.Core

main :: IO ()
main = do
    startGUI defaultConfig setup

setup :: Window -> IO ()
setup window = do
    return window # set UI.title "Hello World!" 

    button <- UI.button # set UI.text "Click me!"
    getBody window #+ [element button]

    on UI.click button $ const $ do
        element button # set UI.text "I have been clicked!"

但是我得到了一个关于类型的错误:

代码语言:javascript
复制
threePennyHelloWorld.hs:8:28:
    Couldn't match type `IO ()' with `UI ()'
    Expected type: Window -> UI ()
      Actual type: Window -> IO ()
    In the second argument of `startGUI', namely `setup'
    In a stmt of a 'do' block: startGUI defaultConfig setup

threePennyHelloWorld.hs:12:25:
    Couldn't match type `UI Window' with `IO a0'
    Expected type: UI Window -> IO a0
      Actual type: UI Window -> UI Window
    In the second argument of `(#)', namely `set title "Hello World!"'
    In a stmt of a 'do' block: return window # set title "Hello World!"

threePennyHelloWorld.hs:14:31:
    Couldn't match type `UI Element' with `IO Element'
    Expected type: UI Element -> IO Element
      Actual type: UI Element -> UI Element
    In the second argument of `(#)', namely `set text "Click me!"'
    In a stmt of a 'do' block:
      button <- UI.button # set text "Click me!"

threePennyHelloWorld.hs:15:9:
    Couldn't match type `UI' with `IO'
    Expected type: IO Element
      Actual type: UI Element
    In a stmt of a 'do' block: getBody window #+ [element button]
    In the expression:
      do { return window # set title "Hello World!";
           button <- UI.button # set text "Click me!";
           getBody window #+ [element button];
           on UI.click button
           $ const $ do { element button # set text "I have been clicked!" } }
    In an equation for `setup':
        setup window
          = do { return window # set title "Hello World!";
                 button <- UI.button # set text "Click me!";
                 getBody window #+ [element button];
                 .... }

threePennyHelloWorld.hs:17:9:
    Couldn't match type `UI' with `IO'
    Expected type: IO ()
      Actual type: UI ()
    In a stmt of a 'do' block:
      on UI.click button
      $ const $ do { element button # set text "I have been clicked!" }
    In the expression:
      do { return window # set title "Hello World!";
           button <- UI.button # set text "Click me!";
           getBody window #+ [element button];
           on UI.click button
           $ const $ do { element button # set text "I have been clicked!" } }
    In an equation for `setup':
        setup window
          = do { return window # set title "Hello World!";
                 button <- UI.button # set text "Click me!";
                 getBody window #+ [element button];
                 .... }

即使当我尝试运行示例文件时,也会得到相同的错误

有谁知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2015-04-11 03:54:59

设置位于UI monad中,而不是IO中,因此请更改类型声明:

代码语言:javascript
复制
setup :: Window -> UI()

例如,在https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/samples/BarTab.hs

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29569542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档