2015-10-22 6 views
6

GHC के नवीनतम संस्करण का उपयोग करने के लिए शुरुआती हास्केल शिक्षण के लिए, कुछ कार्यों के प्रकार Foldable-traversable में प्रस्तावना (एफ़टीपी) की वजह से भ्रमित हो सकते हैं। उदाहरण के लिए, इस तरह के length, sum और product के रूप में सूची में बुनियादी कार्यों प्रकार है कि Foldable बाधा foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b शामिल है। इसी तरह कुछ प्रारंभिक उच्च आदेश कार्यों के लिए उदा। foldl :: Foldable t => (b -> a -> b) -> b -> t a -> bबनाना GHC पद एफ़टीपी महसूस पूर्व एफ़टीपी

अस्थायी रूप से पूर्व एफ़टीपी व्यवहार को सक्षम करने के एक हल्के तरीका क्या है? फिर शुरुआती अभी भी हाल ही में एक GHC के सभी लाभों का आनंद ले सकते हैं, और, पुराने संस्करणों को स्थापित करने की कोशिश कर या हग्स का उपयोग कर का सहारा लेना (जैसे के रूप में edX के FP101x 2015 संस्करण के लिए सुझाव दिया) नहीं है।

$ ghci 
Prelude> import Prelude hiding (length, sum, product, foldr, foldl, and, or, any, all) 
Prelude> import GHC.OldList 
Prelude GHC.OldList> 

तो फिर तुम सब कुछ के लिए पुराने प्रकार है कि छिपा हुआ था मिलता है, उदाहरण के लिए:

+1

क्यों न सिर्फ GHC 7.8 का उपयोग करें? गले का उपयोग करके मैं – jberryman

+2

की अनुशंसा नहीं करता हूं, मैं सहमत हूं कि मैं गले की सिफारिश नहीं करूंगा। लेकिन, जीएचसी 7.10 का उपयोग करने के बाद और बाद में भी काफी आसान कामकाज है, न ही मैं जीएचसी 7.8 की सिफारिश करता हूं। – algotrific

+1

मुझे लगता है कि मुझे यह पूछना चाहिए था: आप शिक्षा के लिए 7.10 क्या चाहते हैं? वे दोनों बड़े कंपाइलर हैं, जो स्टैकेज लेफ्ट्स द्वारा समर्थित हैं, इंस्टॉल करने के लिए समान रूप से आसान हैं आदि। असल में मैक पर नवीनतम 7.10 के साथ कुछ समस्याएं नहीं हैं? – jberryman

उत्तर

9

यह ठीक काम कर सकता है, लेकिन हम कुछ http://haskellbook.com/ के लिए कम थकाऊ साथ जाने का फैसला किया, क्या हमने किया हम समझाया क्या बदल गया है और उन्हें बताएंगे कि कैसे आप सूची के आधार पर प्रकार जोर सकता था।

Prelude> :t length 
length :: Foldable t => t a -> Int 
Prelude> :t length :: [a] -> Int 
length :: [a] -> Int 

कि और प्रकार के बीच उदाहरण & अभ्यास में कहा, इस पर्याप्त है और अगर वे गलती से इसे में Foldable के साथ एक प्रकार का सामना करते हैं, यह मुसीबत का कारण नहीं है क्योंकि हम उन्हें बता दिया है कि कैसे चीजों को बदल दिया है।

उन्हें आयात सामान बनाना और, उन्हें बता के रूप में वे भ्रमित हो जाएगा अगर वे खुश पथ उतरना क्या हुआ भंगुर लगता है परेशान नहीं।

7

एक विकल्प के रूप में इस का प्रदर्शन किया

length :: [a] -> Int 
sum :: Num a => [a] -> a 
product :: Num a => [a] -> a 
foldr :: (a -> b -> b) -> b -> [a] -> b 
foldl :: (b -> a -> b) -> b -> [a] -> b 
and :: [Bool] -> Bool 
any :: (a -> Bool) -> [a] -> Bool 
all :: (a -> Bool) -> [a] -> Bool 
+3

या बेहतर अभी तक: अपने स्वयं के comppat परिभाषित करें। मॉड्यूल बिटमैपैप के उत्तर पर आधारित है, और उन्हें अपनी सामग्री को देखने और समझने दें। –