我在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)
你可以在一个模式中匹配它,将a和b字段放在范围内,例如
sumTest :: Test -> Int
sumTest Test {..} = a + b
Run Code Online (Sandbox Code Playgroud)