diff --git a/muppet/puppet/ast.py b/muppet/puppet/ast.py
index 5b4afb994e28700b633479d910af966be19b6020..de266e8c4d5980861f666311aafc713c0b1e6fd9 100644
--- a/muppet/puppet/ast.py
+++ b/muppet/puppet/ast.py
@@ -111,6 +111,7 @@ class PuppetCall(PuppetAST):
 
     func: PuppetAST
     args: list[PuppetAST]
+    block: Optional[PuppetAST] = None
 
 
 @dataclass
@@ -579,6 +580,12 @@ def build_ast(form: Any) -> PuppetAST:
         case ['array', *items]:
             return PuppetArray([build_ast(x) for x in items])
 
+        case ['call', {'functor': func, 'args': args, 'block': block}]:
+            return PuppetCall(
+                build_ast(func),
+                [build_ast(x) for x in args],
+                build_ast(block))
+
         case ['call', {'functor': func, 'args': args}]:
             return PuppetCall(
                 build_ast(func),
diff --git a/muppet/puppet/format/parser.py b/muppet/puppet/format/parser.py
index 0ad5bb1692a7279d903be5f1b3267f0ea938d418..872a1f5811577bb371faf45ae47a4dba0f2afc82 100644
--- a/muppet/puppet/format/parser.py
+++ b/muppet/puppet/format/parser.py
@@ -365,7 +365,9 @@ class ParserFormatter(Serializer[ParseDirective]):
 
     @override
     def _puppet_call(self, it: PuppetCall) -> ParseDirective:
-        return ws & self.s(it.func) & ws & self.known_array('()', it.args)
+        return ws & self.s(it.func) & \
+                optional(ws & self.known_array('()', it.args)) & \
+                optional(ws & self.s(it.block))
 
     @override
     def _puppet_call_method(self, it: PuppetCallMethod) -> ParseDirective: