我在Yesod Web应用程序的示例代码中看到这种符号,但不知道它的含义:
getHomeR :: Handler Html
getHomeR = do
App {..} <- getYesod
这个语法是什么意思?
我还看到了以下类似的表示法,我想应该是相关的:
getHomeR :: Handler Html
getHomeR = do
App x <- getYesod
即用一些标识符x
代替神秘的{..}
。
这些被称为记录通配符 - 给定一个记录定义(在这种情况下是App
),模式App { .. }
将所有字段名称引入作用域。例如,给定以下记录定义
{-# LANGUAGE RecordWildCards #-}
data Test = Test { a :: Int, b :: Int }
你可以在模式匹配中对其进行匹配,使a
和b
字段进入作用域,例如:
在模式匹配中匹配它,将a
和b
字段引入作用域,例如:
sumTest :: Test -> Int
sumTest Test {..} = a + b