haskell - 如何渲染列表的动态(`Dynamics t [a]`)?
问题描述
我可以绘制元素Dynamic t Item
但不知道如何绘制元素Dynamic t [Item]
import Reflex.Dom
data ItemType
= Apple
| Banana
deriving (Eq, Show)
-- In the real-world, this function build complex DOM. Oversimplified here for MCVE
--
itemElDyn :: MonadWidget t m => Dynamic t ItemType -> m ()
itemElDyn = display
type Items = [ItemType]
-- listItemElDyn :: MonadWidget t m => Dynamic t Items -> m ()
-- listItemElDyn = mapM_ display . sequenceA
-- listItemElDyn lsDyn = do
-- let dynList = sequenceA lsDyn
-- mapM_ display dynList
main :: IO ()
main = mainWidget $ itemElDyn (constDyn Apple)
检查类型ghci
似乎是一个有效的组合
```λ> :t mapM_ display . sequence $ constDyn [Apple,Banana]
mapM_ display . sequence $ constDyn [Apple,Banana]
:: (PostBuild t m, DomBuilder t m, Traversable (Dynamic t)) => m ()
*Main
λ> :t mapM_ display . sequenceA $ constDyn [Apple,Banana]
mapM_ display . sequenceA $ constDyn [Apple,Banana]
:: (PostBuild t m, DomBuilder t m, Traversable (Dynamic t)) => m ()
但是尝试运行时出错
λ> mapM_ display . sequence $ constDyn [Apple,Banana]
<interactive>:72:1: error:
• No instance for (Traversable (Dynamic t0))
arising from a use of ‘it’
• In a stmt of an interactive GHCi command: print it
解决方案
怎么样mconcat
?类似(未经测试):
main = mainWidget $ display itemsDyn
where
itemsDyn = mconcat $ fmap (itemElDyn . constDyn) [Apple,Banana]
(你见过https://github.com/reflex-frp/reflex/blob/develop/Quickref.md吗?)
推荐阅读
- php - Apache服务器搜索目录而不是路由
- javascript - 在 getJSON 之外调用变量
- java - 更新后调用删除时有时会出现 org.hibernate.StaleStateException
- azure - 在 Azure 中创建多个子网
- html - 模态框 - 仅显示框的内部
- python - 如何在kivy中单击按钮时更新MDLabel的文本
- python - 在图像上添加/读取标签 Python
- microsoft-information-protection - MIP SDK 1.10.97 以 -1073740791 静默退出
- python - 如果键存在,则添加嵌套字典的值
- python - 具有多列的数据框的不同聚合