我正在尝试创建一个动态小部件列表,其中小部件的数量由用户输入的数值确定。此外,每个小部件都会返回一个点击事件。这是我用来获取用户输入的内容:
settings :: MonadWidget t m => m (Dynamic t (Maybe Int))
然后我用它来生成一个随机数生成器列表(这些是值的事实RandomGen
并不重要。它们仅用于每个元素的内容,而不是元素的数量)。:
split' :: RandomGen g => Int -> g -> [g]
-- ...
gs <- mapDyn (maybe (split' 1 g) (flip split' g)) =<< settings
现在我有gs :: (MonadWidget t m, RandomGen g) => Dynamic t [g]
. g
每个小部件一个。这些小部件返回Event
值,因此我需要将它们组合起来(即),然后在某处leftmost
使用该值。foldDyn
go :: (MonadWidget t m, Random g) => g -> m (Event t MyType)
-- ...
clicked <- el "div" $ do
-- omg
xs <- simpleList gs go
-- would like to eventually do this
dynEvent <- mapDyn leftmost xs
return $ switch (current dynEvent)
但到目前为止,我最终得到了xs :: Dynamic t [Dynamic t (m (Event t MyType))]
.
我认为我真正需要的是以某种方式xs :: MonadWidget t m => Dynamic t [Event t MyType]
代替,但即使使用除simpleList
.