Monads Idris中ST中使用Functor/Applicative/Monad构造的惯用方法
我尝试在Monads Idris中ST中使用Functor/Applicative/Monad构造的惯用方法,monads,idris,Monads,Idris,我尝试在STdo块中使用when:Applicative f=>Bool->Lazy(f())->f() loop : (ConsoleIO m, Draw m) => (draw : Var) -> (state : GameState) -> ST m () [draw ::: SDraw {m}] loop draw state = with ST do print (f state) -- works when Tr
ST
do块中使用when:Applicative f=>Bool->Lazy(f())->f()
loop : (ConsoleIO m, Draw m) =>
(draw : Var) ->
(state : GameState) ->
ST m () [draw ::: SDraw {m}]
loop draw state = with ST do
print (f state) -- works
when True (print (f state)) -- error
?what
这是一个错误,因为ST
显然不是应用程序,它只支持do
语法
我假设还有其他有用的functor/applicative/monad函数也因此不受支持
是否有一些惯用的解决方案来解决这个问题