2015-10-02 5 views
9

चूंकि चीजें इतनी तेजी से बदलती हैं, इसलिए मैंने इस सवाल को पोस्ट किया है ताकि उम्मीद है कि हास्केल परियोजना शुरू करने के लिए समुदाय-सहमत तरीके को स्पष्ट किया जा सकता है। कल्पना कीजिए कि मैं दो अलग-अलग परियोजनाओं:हास्केल परियोजनाओं के निर्माण के लिए अद्यतित मानक वर्कफ़्लो क्या है?

  • परियोजना # 1: वर्ग, पुस्तकालय कि वर्गों संख्या। कोई डीपी नहीं

    -- Square.hs 
    
    module Square where 
    
    square :: Num a => a -> a 
    square x = x * x 
    
  • परियोजना # 2: कर्ण, पुस्तकालय और निष्पादन योग्य है कि एक समकोण त्रिभुज की लंबाई की ओर पाता है। # 1 पर निर्भर करता है:,

    -- Hypotenuse.hs 
    
    module Hypotenuse where 
    
    import Square 
    
    hypotenuse :: Floating a => a -> a -> a 
    hypotenuse x y = sqrt $ square x + square y 
    

    -- Main.hs 
    
    import System.Environment 
    import Hypotenuse 
    
    main = do 
        [x,y] <- fmap (map read) getArgs 
        print $ hypotenuse x y 
    

GHC 7.10.2 के साथ एक कंप्यूटर के साथ शुरू, ढेर और कबाल स्थापित है, और एक ही निर्देशिका, ~/OrganizeMe, ~/OrganizeMe/Square.hs, ~/OrganizeMe/Hypotenuse.hs युक्त और ~/OrganizeMe/Main.hs, जैसा कि ऊपर प्रस्तुत किया गया है - यूनिक्स कमांड का एक पूरा सेट क्या है अनुभवी हैस्केलर उन परियोजनाओं को आर्किटेक्ट करने के लिए उपयोग करेगा? इसमें शामिल हैं:

  1. उन परियोजनाओं के निर्देशिका पेड़ को व्यवस्थित करना;

  2. को विन्यस्त Stack/Cabal/etc (और git, वैकल्पिक);

  3. उन्हें स्थानीय रूप से भवन/स्थापित करना;

  4. Hackage/Stackage पर प्रकाशित।

+0

मैंने स्टैक और कुछ कैबल ट्यूटोरियल के लिए पूरे दस्तावेज़ को पढ़ा है। अब मुझे कई विशेषताओं के बारे में पता है, लेकिन मुझे अभी भी पता नहीं है कि निर्देशिका पेड़ कैसे व्यवस्थित किए जाने चाहिए। क्या मुझे परियोजनाओं के लिए स्टैक और एकाधिक उप-निर्देशिकाओं के लिए एक निर्देशिका की आवश्यकता है, प्रत्येक को '। Cabal' फ़ाइल वाला'? या इसके बजाय क्या? मैं एक दूसरे से आयात स्थानीय परियोजनाओं को कैसे जोड़ सकता हूं? आशा है कि एक ठोस उदाहरण उन और अन्य सवालों को स्पष्ट कर सकता है। – MaiaVictor

+0

ढेर/ढेर अच्छा है। वाणिज्यिक समर्थन और सब कुछ है। –

+1

मेरे मोबाइल पर अधिक समय के बिना, लेकिन आपको सही विचार मिल गया है। पुस्तकालय प्रति एक उपनिर्देशिका, प्रत्येक एक कैबल फ़ाइल के साथ, और stack.yaml फ़ाइल से प्रत्येक डीआईआर संदर्भ। वाई रेपो इस –

उत्तर

4

यह एक पूरा जवाब नहीं है, यह आपके OrganizeMe निर्देशिका के साथ शुरू नहीं करता है (वहाँ अपने कोड में कुछ त्रुटियाँ हैं) और यह Hackage/Stackage पर प्रकाशित करने से शामिल नहीं है। मैं दोनों पैकेजों को रखने के लिए stackenv निर्देशिका से शुरू करता हूं लेकिन आप इसे बिल्कुल अलग तरीके से कर सकते हैं।

mkdir stackenv && cd stackenv/ 
mkdir square && cd square 
vim Square.hs # The file you describe without the x in the type of square 
cabal init # Go through the questions and choose "library" 
stack init 
cd ../ && mkdir hypotenuse && cd hypotenuse/ 
vim Hypotenuse.hs # The file you describe 
vim Main.hs # The file you describe but importing Hypotenuse 
cabal init # Go through the questions... "executable" this time 
stack init 
vim hypotenuse.cabal # add "square" or chosen package name to build-depends 
vim stack.yaml # add "- '../square/'" below packages 
stack install 
hypotenuse 3 4 # works because ~/.local/bin is in my PATH 

उम्मीद है कि इससे मदद मिलती है।

+0

वूप्स। मुझे प्रश्न पोस्ट करने से पहले प्रोग्राम को संकलित करना चाहिए था। उसके लिए माफ़ करना। यह मेरे लिए उचित लग रहा है, मैं सर्वसम्मति के संकेत के रूप में और अधिक उत्साह का इंतजार करूंगा। धन्यवाद। – MaiaVictor

+0

व्यक्तिगत रूप से, मैं 'hypotenuse' के तहत 'lib' और' bin' निर्देशिका (या समान) रखने की अनुशंसा करता हूं। इस तरह आप यह सुनिश्चित करने के लिए 'एचएस-स्रोत-डीआईआरएस' का उपयोग कर सकते हैं कि निष्पादन योग्य में आयात किया गया 'हाइपोटिन्यूज' मॉड्यूल स्थानीय 'Hypotenuse.hs' के बजाय' hypotenuse' पैकेज से आता है, जो संकलन समय पर कटौती करता है । –

+0

@DanielWagner: मुझे यकीन नहीं है कि मैं समझता हूं। मेरे पास आमतौर पर संगठन के लिए 'src /' dir में मेरा कोड होता है। यदि आप 'Hypotenuse.hs' से' Hypotenuse 'आयात करते हैं तो यह केवल तभी संकलित होता है यदि आप इसे बदलते हैं, है ना? और वही है यदि आप इसे पैकेज में एक पैकेज से आयात करते हैं? 'Hypotenuse' या 'Hypotenuse.hs' से आयात करने के बीच वैचारिक अंतर क्या है? –

संबंधित मुद्दे