X {..} < - getYesod表示法

Ric*_*ook 8 haskell yesod

我在Yesod Web应用程序的示例代码中看到了这种表示法,并且不知道它意味着什么:

getHomeR :: Handler Html
getHomeR = do
    App {..} <- getYesod
Run Code Online (Sandbox Code Playgroud)

这个语法是什么意思?

我也看到了以下内容,我假设相关的符号:

getHomeR :: Handler Html
getHomeR = do
    App x <- getYesod
Run Code Online (Sandbox Code Playgroud)

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

Lee*_*Lee 10

这些被称为记录通配符 - 给定记录定义(App在这种情况下),该模式App { .. }将所有字段名称带入范围.例如,给出以下记录定义

{-# LANGUAGE RecordWildCards #-}
data Test = Test { a :: Int, b :: Int }
Run Code Online (Sandbox Code Playgroud)

你可以在一个模式中匹配它,将ab字段放在范围内,例如

sumTest :: Test -> Int
sumTest Test {..} = a + b
Run Code Online (Sandbox Code Playgroud)

  • @TaylorFausak - 谢谢,我更新了链接. (2认同)