String.replace with anonymous function with multiple matches

A silly question that bugs me a lot. Why does Regex.replace take a (... -> String.t) as the third argument instead of a ([String.t] -> String.t)?

And, when I run this piece of code

Regex.replace(~r/\b\w+\b/, "hello, world", fn [capture] ->
  String.reverse(capture)
end)

it gives me an error

** (FunctionClauseError) no function clause matching in :erl_eval."-inside-an-interpreted-fun-"/1    
    
    The following arguments were given to :erl_eval."-inside-an-interpreted-fun-"/1:
    
        # 1
        "hello"

So what is a interpreted function?