编辑和 运行 纸浆 psci 的卤素应用

Editing and running Halogen applications from pulp psci

我正在开发一个生成可视化的小型 Purescript 应用程序。然而,我的架构有点非传统,而且我遇到了一些问题。这就是我想要的:

  1. 启动 pulp psci -- --port 8080 并连接浏览器
  2. 调用函数 go 接受可视化的定义并将其与一些控件一起呈现
  3. 查看结果。返回 REPL 并可能创建一些新定义。
  4. 转到第 2 步并使用 go 绘制新可视化效果。

这种方法适用于我目前所拥有的,但我的问题是重复调用 go 不会替换 DOM 的内容,而是添加到它们中。这意味着在几次调用之后,我最终得到了所有控件和所有内容的许多副本。

我意识到这有点 hack,但我能想到的提供这种交互式界面的唯一其他方法是实现 editor/parser,这工作量太大了有没有办法避免这个?

这是我对 go 的定义,我认为它需要更改:

go :: Vis -> Eff (HA.HalogenEffects ()) Unit
go vis = HA.runHalogenAff do
  body <- HA.awaitBody
  runUI checks vis body

经过 大量 的试验,我发现至少一个看似合理的解决方法是显式删除旧的子节点。我真的不知道后台发生了什么(我 运行 是一堆毫无意义的进程吗?)但这对我有用:

go :: VVis -> Eff (HA.HalogenEffects ()) Unit
go vis = HA.runHalogenAff do
  body <- HA.awaitBody
  let nb = htmlElementToNode body
  _ <- H.liftEff $ whileJust
    (firstChild (htmlElementToNode body))
    (\n -> removeChild n (htmlElementToNode body))
  runUI checks vis body