Haskell Language
ओवरलोडेड साहित्य
खोज…
टिप्पणियों
पूर्णांक साहित्य
एक दशमलव बिंदु के बिना एक अंक है
उदाहरण के लिए 0
, 1
, 42
, ...
परोक्ष करने के लिए लागू किया जाता है fromInteger
जो का हिस्सा है Num
प्रकार वर्ग तो यह वास्तव में टाइप है Num a => a
- यह है कि यह किसी भी प्रकार का एक उदाहरण है कि हो सकता है Num
आंशिक साहित्य
एक दशमलव बिंदु के साथ एक अंक है
उदाहरण के लिए 0.0
, -0.1111
, ...
fromRational
रूप से लागू किया fromRational
जो Fractional
प्रकार वर्ग का हिस्सा है, इसलिए यह वास्तव में a => a
- प्रकार a => a
- यह है कि किसी भी प्रकार का हो सकता है जो Fractional
का एक उदाहरण है
स्ट्रिंग साहित्य
यदि आप भाषा एक्सटेंशन को OverloadedStrings
जोड़ते हैं तो GHC में आप String
-लिटरल के लिए समान हो सकते हैं जो तब Data.String.IsString
प्रकार वर्ग से fromString
लागू होते हैं
इसका उपयोग अक्सर String
को Text
या ByteString
से बदलने के लिए किया जाता है।
सूची का साहित्य
सूचियों को [1, 2, 3]
शाब्दिक वाक्य रचना के साथ परिभाषित किया जा सकता है। जीएचसी 7.8 और उसके बाद, यह OverloadedLists
साथ अन्य सूची जैसी संरचनाओं को परिभाषित करने के लिए भी इस्तेमाल किया जा सकता है।
डिफ़ॉल्ट रूप से, []
का प्रकार है:
> :t []
[] :: [t]
OverloadedLists
साथ, यह बन जाता है:
[] :: GHC.Exts.IsList l => l
पूर्णांक संख्या
शाब्दिक का प्रकार
Prelude> :t 1
1 :: Num a => a
एनोटेशन के साथ एक ठोस प्रकार चुनना
आप तब तक निर्दिष्ट कर सकते हैं जब तक कि लक्ष्य प्रकार एक एनोटेशन के साथ Num
:
Prelude> 1 :: Int
1
it :: Int
Prelude> 1 :: Double
1.0
it :: Double
Prelude> 1 :: Word
1
it :: Word
यदि कंपाइलर शिकायत नहीं करेगा
प्रस्तावना> 1 :: स्ट्रिंग
<interactive>:
No instance for (Num String) arising from the literal `1'
In the expression: 1 :: String
In an equation for `it': it = 1 :: String
तैरता हुआ अंक
शाब्दिक का प्रकार
Prelude> :t 1.0
1.0 :: Fractional a => a
एनोटेशन के साथ एक ठोस प्रकार चुनना
आप प्रकार को एनोटेशन के साथ निर्दिष्ट कर सकते हैं। केवल आवश्यकता यह है कि प्रकार में एक Fractional
उदाहरण होना चाहिए।
Prelude> 1.0 :: Double
1.0
it :: Double
Prelude> 1.0 :: Data.Ratio.Ratio Int
1 % 1
it :: GHC.Real.Ratio Int
यदि कंपाइलर शिकायत नहीं करेगा
Prelude> 1.0 :: Int
<interactive>:
No instance for (Fractional Int) arising from the literal `1.0'
In the expression: 1.0 :: Int
In an equation for `it': it = 1.0 :: Int
स्ट्रिंग्स
शाब्दिक का प्रकार
किसी भी एक्सटेंशन के बिना, एक स्ट्रिंग शाब्दिक का प्रकार - यानी, दोहरे उद्धरणों के बीच कुछ - बस एक स्ट्रिंग है, वर्णों की उर्फ सूची:
Prelude> :t "foo"
"foo" :: [Char]
हालाँकि, जब OverloadedStrings
एक्सटेंशन सक्षम हो जाता है, तो स्ट्रिंग शाब्दिक पॉलीमोर्फिक बन जाते हैं, संख्या शाब्दिक के समान:
Prelude> :set -XOverloadedStrings
Prelude> :t "foo"
"foo" :: Data.String.IsString t => t
यह हमें किसी भी स्पष्ट रूपांतरण की आवश्यकता के बिना स्ट्रिंग-प्रकार के मूल्यों को परिभाषित करने की अनुमति देता है। संक्षेप में, OverloadedStrings
fromString
एक्सटेंशन जेनेरिक कनवर्ज़न फ़ंक्शन से जेनरिक में प्रत्येक स्ट्रिंग शाब्दिक को लपेटता है, इसलिए यदि संदर्भ String
बजाय अधिक कुशल Text
मांग करता है, तो आपको उस बारे में चिंता करने की आवश्यकता नहीं है।
स्ट्रिंग शाब्दिक का उपयोग करना
{-# LANGUAGE OverloadedStrings #-}
import Data.Text (Text, pack)
import Data.ByteString (ByteString, pack)
withString :: String
withString = "Hello String"
-- The following two examples are only allowed with OverloadedStrings
withText :: Text
withText = "Hello Text" -- instead of: withText = Data.Text.pack "Hello Text"
withBS :: ByteString
withBS = "Hello ByteString" -- instead of: withBS = Data.ByteString.pack "Hello ByteString"
ध्यान दें कि कैसे हम स्पष्ट रूप से स्ट्रिंग को एन्कोड करने के लिए प्रत्येक प्रकार के pack
फ़ंक्शन का उपयोग करने के बजाय साधारण String
(या [Char]
) मानों का निर्माण करते हैं, उसी तरह से Text
और ByteString
मूल्यों का निर्माण करने में सक्षम थे।
OverloadedStrings
भाषा एक्सटेंशन के बारे में अधिक जानकारी के लिए, विस्तार प्रलेखन देखें।
सूची का साहित्य
जीएचसी का ओवरलोडेडलिस्ट आपको सूची शाब्दिक सिंटैक्स के साथ सूची जैसी डेटा संरचनाओं का निर्माण करने की अनुमति देता है।
यह आपको इस तरह Data.Map करने की अनुमति देता है:
> :set -XOverloadedLists
> import qualified Data.Map as M
> M.lookup "foo" [("foo", 1), ("bar", 2)]
Just 1
इसके बजाय (अतिरिक्त M.fromList के उपयोग पर ध्यान दें):
> import Data.Map as M
> M.lookup "foo" (M.fromList [("foo", 1), ("bar", 2)])
Just 1