let 表达式中发生了什么?

What is going on in this let expression?

我正在通读这篇 blog post 关于与 Scotty 在 Haskell 中编写 API 的内容,并且我看到了有关 monad 转换器的部分。我了解 monad 转换器的概念,但我无法理解这里发生的事情:

let r m = runReaderT (runConfigM m) c

m 在使用它的同一 let 表达式中声明时,表达式如何引用 m?这里发生了什么?什么是 m

这是一个名为 r 的(本地)函数声明。 m 是函数的参数。相当于:

let r = \m -> runReaderT (runConfigM m) c