2014-04-21 78 views
0

我已經通過本教程的工作我的方式:耶索德形式語法

http://pbrisbin.com/posts/developing_web_applications_with_yesod/

lemonadeForm :: Form Lemonade 
lemonadeForm = renderTable $ Lemonade 
    <$> pure Nothing 
    <*> areq (selectField optionsEnum) "Size" Nothing 
    <*> pure 0.0 
    <*> areq intField "Quantity" Nothing 

我對這個語法的幾個問題。

1)它在本教程的後面幾行說:「使用純的行在處理時提供值,但實際上不顯示任何字段。」這是否意味着形式不知道Nothing0.0的含義?

2)語法<$><*>分別是什麼意思?

+1

以下解釋對我有幫助:<$>是函數$是函數的功能:最後讀到<$>的左邊。至少這有助於我理解發生了什麼。對於<*>不幸的是,我無法想出一個有用的類比:按照@sibi建議的類型進行操作。 – dganti

+0

我讀「<$>」和「<*>」最簡單的方法就是正常的功能應用。當你有這樣一個表達式時,你必須認識到作者「想要」寫的是'fabc',但不能因爲所有'f','a','' b','c'被包裹在某種效果中。然後在這個有效的上下文中函數應用。閱讀LYAH可以更好地理解Functors和Applicative Functors,它們是Haskell中重要的組織和設計工具。 – acomar

回答

3

Lemonade數據類型如下:在處理時

data Lemonade = Lemonade 
    { lemonadeOrder :: Maybe OrderId 
    , lemonadeSize :: Size 
    , lemonadePrice :: Price 
    , lemonadeQty :: Qty 
    } 

使用純的線提供的值,但不 實際顯示的任何字段。

這意味着當窗體在瀏覽器中以HTML格式顯示時,不會顯示已使用pure的字段。雖然該值將在內部使用,但不會顯示給用戶。在您的示例中,lemonadeOrderlemonadePrice的字段不會顯示在表單中。

語法<$><*>分別表示什麼意思?

<$>fmap的別名。 <*>用於應用風格編程。您可以通過檢查其類型並閱讀Typeclassopedia或其他相關材料來了解更多關於它們的信息。