haskell - 如何使用 JavaScript 将语句链接到一个 block 中

标签 haskell

Sequence (toBlock $ VarDeclAssign "foo" (JBool False)) (Return $ JBool True)

这是我目前唯一能做到的方法。我尝试了 foldlEmptyBlock 有不同的类型,因此它无法构建。

我可以在这里使用 do 表示法或其他东西吗?

最佳答案

查看 the documentation ,问题是 EmptyBlockSequence 的类型是

EmptyBlock :: Block ()   
Sequence :: Block () -> Stmt t -> Block t

大多数语句都是 Stmt () 类型,Return::Expr t -> Stmt t 除外。据我所知,这是为了确保一个 block 中只能有一个 return 语句,并且它必须位于最后。

foldl Sequence EmptyBlock 不适合您的原因是 foldl 的类型为 (a -> b -> a) -> a -> [b] -> a,如果你看第一个参数,很明显,只有选择 t = () 才能使用 Sequence > 这样a = Block ()b = Stmt ()

这意味着您可以使用 foldl 来组合除 Return 之外的所有语句,您必须在末尾手动插入这些语句。希望这不会太不方便。

关于haskell - 如何使用 JavaScript 将语句链接到一个 block 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7994054/

相关文章:

haskell - 如何解决 Haskell 类型错误

Haskell:如何从权利中提取值

haskell - 如何根据列的值从列表中删除行

Haskell,forM - 为什么这段代码返回这样的结果?

haskell - 为什么 foldr 给我这个错误?

multithreading - 从线程本身内部取消异步线程

haskell - 如何在 Haskell 中实现实际解​​析已经完成的 Read 实例?

haskell - 通过 IO 了解 Haskell 中的纯函数

performance - 使用动态规划的 Haskell 性能

haskell - 如何调试抖动规则执行?