Sequence (toBlock $ VarDeclAssign "foo" (JBool False)) (Return $ JBool True)
这是我目前唯一能做到的方法。我尝试了foldl
,但EmptyBlock
有不同的类型,因此无法构建。
我可以在这里使用记号或其他东西吗?
答案 0 :(得分:2)
查看the documentation,问题是EmptyBlock
和Sequence
的类型是
EmptyBlock :: Block ()
Sequence :: Block () -> Stmt t -> Block t
除Stmt ()
外,大多数语句都属于Return :: Expr t -> Stmt t
类型。据我所知,这是为了确保一个块中只能有一个return语句,并且它必须在最后。
foldl Sequence EmptyBlock
不适合您的原因是foldl
的类型为(a -> b -> a) -> a -> [b] -> a
,如果您查看第一个参数,很明显Sequence
只有在您t = ()
和a = Block ()
选择b = Stmt ()
时才能使用。
这意味着您可以使用foldl
组合Return
的所有语句除,您必须在最后手动插入。希望这不应该太不方便。