X {..} <- getYesod 符号

X {..} <- getYesod notation

我在 Yesod 网络应用程序的示例代码中看到了这种符号,但不知道它是什么意思:

getHomeR :: Handler Html
getHomeR = do
    App {..} <- getYesod

这个语法是什么意思?

我还看到以下内容,我认为相关,符号:

getHomeR :: Handler Html
getHomeR = do
    App x <- getYesod

即一些标识符 x 代替了神秘的 {..}.

这些称为 record wildcards - 给定记录定义(在本例中为 App),模式 App { .. } 将所有字段名称纳入范围。例如给定以下记录定义

{-# LANGUAGE RecordWildCards #-}
data Test = Test { a :: Int, b :: Int }

您可以在模式中匹配它,将 ab 字段纳入范围,例如

sumTest :: Test -> Int
sumTest Test {..} = a + b