我尝试在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
语法。
我假设还有其他有用的函子/应用/单子函数也因此不受支持。
是否有针对性的解决方案?