Haskell 在客户机/服务器编程中使用三便士gui/reactive

Haskell 在客户机/服务器编程中使用三便士gui/reactive,haskell,threepenny-gui,Haskell,Threepenny Gui,我试图找出如何使用Haskell及其功能来编写一个程序,让 用户从列表框中选择一个项目 将所选内容发送到外部服务器 从服务器获取结果列表 用结果填充列表框 重复 似乎我需要使用Handler、newEvent和register来完成上述操作。如果有人能给我指出一些现有的代码,这些代码可以做类似上面的事情,那就太好了 我在threepenny gui samples目录中找到的最接近的是GameThing.hs,但它不使用register 更新: 我想问的是,我是否应该使用Handler、newE

我试图找出如何使用Haskell及其功能来编写一个程序,让

用户从列表框中选择一个项目 将所选内容发送到外部服务器 从服务器获取结果列表 用结果填充列表框 重复 似乎我需要使用Handler、newEvent和register来完成上述操作。如果有人能给我指出一些现有的代码,这些代码可以做类似上面的事情,那就太好了

我在threepenny gui samples目录中找到的最接近的是GameThing.hs,但它不使用register

更新:

我想问的是,我是否应该使用Handler、newEvent和register,如果是的话,还应该使用这些函数的一些说明或示例

此外,需要明确的是,大局是:

browser  --> threepenny-gui (on localhost) --> backend server (anywhere on network)
         <--                               <--
换句话说,我需要根据用户选择执行一些IO,然后显示该IO的结果

更新:以下是我根据@Taldykin的回复提出的解决方案:

这是一段代码。稍后我将添加描述

{-# LANGUAGE LambdaCase #-}
import Graphics.UI.Threepenny as UI


main :: IO ()
main = do
  (evFillList, doFillList) <- newEvent
  initialList <- valuesSupply ""
  behFillList <- stepper initialList evFillList

  startGUI defaultConfig $ \win -> do
    list <- ul
    sel <- listBox
        behFillList
        (pure Nothing)
        (pure $ \it -> UI.span # set text it)

    getBody win #+ [grid [[element list, element sel]]]
    setFocus $ getElement sel

    on selectionChange (getElement sel) $ \case
      Nothing -> return ()
      Just ix -> do
        items <- currentValue behFillList
        let it = items !! ix
        liftIO $ valuesSupply it >>= doFillList
        element list #+ [li # set html it]
        setFocus $ getElement sel


valuesSupply :: String -> IO [String]
valuesSupply x = return [x ++ show i | i <- [0..9]]

你试过了吗?要求堆栈溢出为您设计应用程序是徒劳的;在要求我们处理大局之前,你为什么不试着把问题分解成更小的部分并实施它们呢?我们很乐意为您提供更多有针对性的问题,但这太宽泛了。我已经尝试过了,我不是在要求应用程序设计。看我的更新。太好了。这正是我需要的。谢谢我终于抽出时间写了一篇关于这个的小博客。谢谢你的帮助。