Migration 如何将Control.ST代码迁移到Idris 2(Control.App)?
Idris 2没有,只有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 : (
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更活跃。