使用 ThreepennyGUI 删除 UI monad

Remove UI monad with ThreepennyGUI

我是 threepenny gui 的新手,我想做这样的事情:

on UI.click button $ const $ do
        element reverseArea # set UI.text (reverse (get value area))

因此,当我单击页面上的某个按钮时,我从文本区域获取文本,将其反转并显示在不同的文本区域中。 但是,当我尝试 运行 时,出现错误:

 Couldn't match expected type ‘[Char]’ with actual type ‘UI String’

所以我想知道如何删除 UI monad 以便我可以操作文本

我不熟悉三便士-ui,但我想你需要这样的东西:

on UI.click button $ const $ do
    s <- get value area
    element reverseArea # set UI.text (reverse s)

粗略的想法是:当你有一个 UI String 类型的值时,你可以在 do 中使用 x <- value 来获取字符串(没有 UI)并且将其绑定到变量 x。如果 do 时钟的其余部分在末尾 returns 类型的值 UI T 对于某种类型 T.

,则只能执行此操作

因此,根据需要使用 <- 以获得纯值。

顺便说一下,这不是 UI 特有的:每个 monad 都遵循这个原则。您会在网上找到大量 monad 教程。