在Idris的ST中使用Functor / Applicative / Monad构造的惯用方式

时间:2019-02-24 17:10:11

标签: monads idris

我尝试在when : Applicative f => Bool -> Lazy (f ()) -> f () do块内使用ST

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语法。

我假设还有其他有用的函子/应用/单子函数也因此不受支持。

是否有针对性的解决方案?

0 个答案:

没有答案