2015-06-28 65 views
10

我一直在試圖尋找在哈斯克爾參考使用這樣的:

getHomeR = defaultLayout $ do 
    setTitle "My Awesome Site" 
    $(widgetFile "home") 

具體做法是:

$(widgetFile "home") 

我知道$運營商給出的優先無論是它的權利,但我一直無法理解$()的用法。任何人?

回答

10

這不是使用$應用程序運算符,而是涉及Template Haskell slice

非常粗略地,widgetFile "home"是在編譯時運行的代碼:它生成Haskell代碼,然後像往常一樣編譯。它是Haskell中metaprogramming的一種形式。

+0

我看到這麼有無關$操作符。 'widgetFile「home」'然後將負責在編譯時動態生成此代碼? –

+1

@LuisDosReis是的。例如,它可能訪問外部文件,處理它並根據它生成一些Haskell代碼。這可以用來獲得廣泛的'#include',例如,包含的文件可以使用不同的語法。 – chi

+0

哦有趣,所以我可以應用元編程操縱不同的語言。 –