Migration 如何将Control.ST代码迁移到Idris 2(Control.App)?

Migration 如何将Control.ST代码迁移到Idris 2(Control.App)?,migration,monads,idris,st-monad,Migration,Monads,Idris,St Monad,Idris 2没有,只有Control.Monad.ST,这是一个完全不同的野兽(它与Haskell的Control.Monad.ST基本相同,即在一个安全、纯粹的界面后面有可变的引用)。似乎这大概是应该取代它的东西。但是,编写Control.App文档时没有考虑Control.ST,我也不知道迁移路径应该是什么 例如,在中,我们有以下Idris 1 API: public export interface Dom (m : Type -> Type) where DomRef : (

Idris 2没有,只有
Control.Monad.ST
,这是一个完全不同的野兽(它与Haskell的
Control.Monad.ST
基本相同,即在一个安全、纯粹的界面后面有可变的引用)。似乎这大概是应该取代它的东西。但是,编写
Control.App
文档时没有考虑
Control.ST
,我也不知道迁移路径应该是什么

例如,在中,我们有以下Idris 1 API:

public export
interface Dom (m : Type -> Type) where
  DomRef : (a:Type) -> (f : a -> Type) -> (g : a -> Type) -> a -> Type

  initBody : List (DomOption a f g) -> ((x:a) -> f x -> Html (g x)) -> (z:a) -> f z -> ST m Var [add (DomRef a f g z)]
  clearDom : (dom : Var) -> ST m () [remove dom (DomRef a f g z)]
  domPut : (dom : Var) -> {x:a} -> f x -> ST m () [dom ::: (DomRef a f g x)]

现在还不清楚这个界面的
App
版本是什么。它是否应该在任何地方都使用
App{l}e()
,而
e
DomRef{e}
之间的关系将以不同的方式跟踪?
initBody
/
clearDom
是否应该将
模式一起使用,即类似于
与dom:(App{l}e())->App{l}e()
?如果
domPut:{x:a}->fx->App{l}e()
f
的类型如何连接到
DomRef{e}

如果你在这里没有得到答案,你可以试着在空闲时询问。Slack更活跃。