2013-07-31 10 views
5

मैं इस उदाहरण Yesod पुस्तक से लिया में टेम्पलेट Haskell द्वारा बनाया गया कोड समझने की कोशिश कर थोड़ी देर के खर्च किया है (प्रकार मार्शलिंग का एक बहुत), लेकिन एक खंड अभी भी मुझे confuses:समझौता Yesod लगातार वें द्वारा बनाया गया कोड

instance PersistEntity (PersonGeneric backend) where 
    data instance Unique (PersonGeneric backend) = 
    data instance EntityField (PersonGeneric backend) typ 
     = typ ~ KeyBackend backend (PersonGeneric backend) => PersonId | 
     typ ~ String => PersonName | 
     typ ~ Int => PersonAge 
    type instance PersistEntityBackend (PersonGeneric backend) = 
     backend 

डेटा उदाहरण instance EntityField (PersonGeneric backend) typ तीन डेटा कंस्ट्रक्टर्स है, जो (डेटाबेस में प्रत्येक स्तंभ के लिए एक) समझ में आता है है, लेकिन फिर भी ऊपर देखने के बाद क्या tilde हैकेल में करता है, मैं अंडर नहीं कर सकता टेंड यह क्या कर रहा है। => क्यों है, जो आमतौर पर सार्वभौमिक मात्रा के लिए उपयोग किया जाता है, जो किसी भी प्रकार के पुन: उपयोग करने के लिए प्रतीत नहीं होता है?

कृपया मुझे बताएं कि क्या मैं किसी भी तरह से अधिक स्पष्ट हो सकता हूं।

उत्तर

8

यह वाक्यविन्यास जीएडीटी-सिंटैक्स के बिना जीएडीटी घोषित करने के लिए प्रयोग किया जाता है।

उदाहरण के लिए,

data Z a b = (a ~ Int, b ~ Bool) => Z1 a b 
      | (Show a, b ~ Float) => Z2 a b 

data Z a b where 
    Z1 :: Int -> Bool -> Z Int Bool 
    Z2 :: Show a => a -> Float -> Z a Float 
के बराबर है
संबंधित मुद्दे