मैं नौकर documentation पढ़ रहे हैं और इस लाइन में आए किया गया था:सूची के सामने एक एस्ट्रोफ़े ('[कुछ]] का अर्थ हैस्केल में क्या है?
type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
क्या '
उस सूची को कर रहा है?
मैं नौकर documentation पढ़ रहे हैं और इस लाइन में आए किया गया था:सूची के सामने एक एस्ट्रोफ़े ('[कुछ]] का अर्थ हैस्केल में क्या है?
type UserAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [User]
क्या '
उस सूची को कर रहा है?
यह DataKinds
कार्रवाई में है, जो:
हालांकि यह प्रकार के स्तर पर भ्रम का कारण बनता है। अब, प्रकार में, [X]
या तो [X] :: *
, सूची के- X
प्रकार हो सकता है, या बजाय हम उठाने की वजह से [X] :: [T]
हो सकता है - कि मूल्य [X]
(केवल एकल मान X
युक्त सूची), प्रकार की X
साथ है T
, प्रकार के स्तर पर उठाया गया।
इस अस्पष्टता को दूर करने के लिए, जीएचसी को उठाए गए मूल्य निर्माणकर्ताओं के सामने एक उद्धरण की आवश्यकता है। तो, हमारे पास [X] :: *
है, और '[X] :: [T]
है।
Concretely, आपके मामले में, Get '[JSON] [User]
दोनों सूची मूल्य [JSON]
प्रकार स्तर तक उठा लिया, और सूची प्रकार [User]
शामिल है। अंतर की बेहतर सराहना करने के लिए, ध्यान दें कि '[JSON]
प्रकार के कोई (उपयोगी) शब्द नहीं हैं, क्योंकि यह एक सूची प्रकार नहीं है। हम Get '[JSON,JSON,JSON] [User]
भी एक अच्छी तरह से अभिव्यक्ति अभिव्यक्ति के रूप में, या यहां तक कि Get '[] [User]
भी हो सकता है। इसके बजाय, [User,User]
के बाद से हमारे पास Get '[JSON] [User,User]
नहीं हो सकता है।
(प्रकार Get '[JSON,JSON,JSON] [User]
, भले ही वह वैध है, सार्थक नौकर पुस्तकालय द्वारा इस्तेमाल किया नहीं जा सका। मैं क्या उस सूची को उठा लिया नौकर में के लिए प्रयोग किया जाता है की कोई अंदाज़ा नहीं है।)
उद्धरण प्रयुक्त प्रकार के प्रकार-स्तरीय रचनाकार बनाम टर्म-स्तरीय रचनाकारों को अलग करने के लिए उपयोग किए जाते हैं।
उदाहरण के लिए:
{-# LANGUAGE DataKinds #-}
data Which = One | Two
myPick :: Which -- Type
myPick = One
type MyPick :: Which -- Kind
type MyPick = 'One
वैसे, तरह एनोटेशन type MyPick :: Which
हास्केल मान्य नहीं है, लेकिन यह आप अवधि और प्रकार के स्तर के बीच पत्राचार की एक विचार देता है।
{-# LANGUAGE TypeFamilies #-}
type family MyPick :: Which where
MyPick = 'One