我试图弄清楚如何使用Haskell 三重奏及其反应式功能来编写一个程序
看来我需要使用Handler、newEvent和register来完成上面的工作。如果有人能向我指出一些现有的代码,做类似上述的事情,那就太好了。
我发现的最接近的是GameThing.hs目录中的threepenny gui samples目录(但它不使用register)。
更新:
我是在问我是否应该使用Handler、newEvent和register --如果应该的话,还应该对这些函数做一些澄清或举例说明。
此外,要明确的是,总体情况是:
browser --> threepenny-gui (on localhost) --> backend server (anywhere on network)
<-- <--换句话说,我需要做一些IO (基于用户选择),然后显示该IO的结果。
更新:这是我的解决方案(基于@Taldykin的回复):https://github.com/haroldcarr/rdf-triple-browser/tree/master/haskell/src
发布于 2014-07-17 10:39:30

这是一段代码。稍后我会添加描述。
{-# 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]]https://stackoverflow.com/questions/24784883
复制相似问题