X {..} <- getYesod 符号的含义是什么?

8

我在Yesod Web应用程序的示例代码中看到这种符号,但不知道它的含义:

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

这个语法是什么意思?

我还看到了以下类似的表示法,我想应该是相关的:

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

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

1个回答

10

这些被称为记录通配符 - 给定一个记录定义(在这种情况下是App),模式App { .. }将所有字段名称引入作用域。例如,给定以下记录定义

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

你可以在模式匹配中对其进行匹配,使ab字段进入作用域,例如:

在模式匹配中匹配它,将ab字段引入作用域,例如:

(Two possible translations depending on the intended meaning, please provide more context if needed.)
sumTest :: Test -> Int
sumTest Test {..} = a + b

1
您可以直接链接到 GHC 文档中的某个部分。例如: https://downloads.haskell.org/~ghc/7.10.2/docs/html/users_guide/syntax-extns.html#record-wildcards - Taylor Fausak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接