2015-01-29 6 views
135

मैं hint का उपयोग करके एक हास्केल दुभाषिया को एम्बेड करने की उम्मीद कर रहा था ताकि मैं अपने प्रोग्राम के साथ उपयोग करने के लिए हास्केल में प्लगइन लिख सकूं। मैं अपने निष्पादन योग्य के लिए हानिकारक हास्केल मंच को शिप नहीं करना चाहता हूं। आम तौर पर, हास्केल निष्पादन योग्य सुंदर आत्मनिर्भर होते हैं। उदाहरण के लिए, PATH मिटाकर एक समस्या का कारण नहीं है:भाषा के साथ निष्पादन योग्य कैसे शिप करें। Haskell.Interpreter?

$ PATH=. TryHint 
GhcException "panic! (the 'impossible' happened)\n (GHC version 7.8.3 for x86_64-apple-darwin):\n\tDynamic linker not initialised\n\nPlease report this as a GHC bug: http://www.haskell.org/ghc/reportabug\n" 

क्या पुस्तकालयों या निष्पादनयोग्य है उपलब्ध होने की:

$ PATH=. Hello 
Hello world 

हालांकि, एक साधारण परीक्षण runInterpreter बम का उपयोग कर कार्यक्रम अगर मैं PATH मिटा इसके लिए पर्यावरण में काम करने के लिए?

otool ज्यादा मार्गदर्शन नहीं देता:

otool -L TryHint 
TryHint: 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0) 
    /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0) 
    /usr/local/lib/libgmp.10.dylib (compatibility version 13.0.0, current version 13.0.0) 

TryHint के लिए परीक्षण कोड ज्यादा कुछ नहीं करता है:

import Control.Monad 
import Language.Haskell.Interpreter 

main = do 
    f <- runInterpreter $ loadModules ["Test"] >> setTopLevelModules ["Test"] >> interpret "f" (as :: Int -> Int) 
    case f of 
    Left e -> print e 
    Right r -> mapM_ (print . r) [1..10] 

यह सिर्फ Test.hs में एक समारोह के लिए f बांधता में व्याख्या की जा करने के लिए रन-टाइम। Test.hs इस तरह दिखता है:

module Test where 
f :: Int -> Int 
f x = x + 1 
+6

मैं इस समस्या को पुन: उत्पन्न नहीं कर सकता। जब मैं 'PATH =।/TryHint' चलाता हूं, सब कुछ सुचारू रूप से चला जाता है: यह कुछ संख्याओं को प्रिंट करता है, फिर बाहर निकलता है। मैं जीएचसी 7.8.3 का भी उपयोग कर रहा हूं। आप 'TryHint' कैसे बना रहे हैं? –

+1

'PATH = के बारे में क्या। TryHint' (ध्यान दें कि जगह कहां है)? निष्पादन योग्य 'TryHint' वर्तमान कार्यशील निर्देशिका में होना चाहिए। – ErikR

+0

@ user5402 मैंने दोनों की कोशिश की। वे बिल्कुल वही हैं। –

उत्तर

2

Language.Haskell.Interpreter साथ एक निष्पादन शिपिंग जिस तरह से आप से पता चला है के साथ पूर्ण जाना जा रहा है। आपको अपनी PATH उस स्क्रिप्ट पर सेट करना होगा जिसे आप निष्पादित करना चाहते हैं।

और टिप्पणियों में @ बेनोफ द्वारा वर्णित साइड नोट के रूप में, जीएचसी एपीआई को स्थिर रूप से जोड़ना जीएचसी 7.8 में पेश किए गए नए गतिशील लिंकर के साथ काम नहीं करता है, (इंटरैक्टिव कोड निष्पादन अब गतिशील पुस्तकालयों की आवश्यकता है)।

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