अद्भुत सवाल।
मुझे कोई भी तरीका नहीं है जो जीएचसीआई आरईपीएल में फिर से प्रवेश कर सकता है, ताकि हम इसका उपयोग सीपीएस कार्यों में कर सकें। शायद दूसरे कुछ सुझाव दे सकते हैं।
हालांकि, मैं एक हैक का सुझाव दे सकता हूं। असल में, कोई भी इस मामले में आईओ मोनैड पर आधारित होने पर सीपीएस को अंदर लाने के लिए समवर्तीता का फायदा उठा सकता है।
यहाँ हैक है:
data CPSControl b = CPSControl (MVar()) (MVar b)
startDebugCps :: ((a -> IO()) -> IO b) -> IO (a, CPSControl b)
startDebugCps cps = do
cpsVal <- newEmptyMVar
retVal <- newEmptyMVar
stop <- newEmptyMVar
_ <- forkIO $ do
x <- cps $ \c -> putMVar cpsVal c >> takeMVar stop
putMVar retVal x
s <- takeMVar cpsVal
return (s, CPSControl stop retVal)
stopDebugCps :: CPSControl b -> IO b
stopDebugCps (CPSControl stop retVal) = do
putMVar stop()
takeMVar retVal
testCps :: (String -> IO()) -> IO String
testCps act = do
putStrLn "testCps: begin"
act "here's some string!"
putStrLn "testCps: end"
return "some return value"
एक त्वरित परीक्षण:
> (x, ctrl) <- startDebugCps testCps
testCps: begin
> x
"here's some string!"
> stopDebugCps ctrl
testCps: end
"some return value"
'withSession' हैक automatize के लिए एक GHCi सत्र
एक छोटा सा पुस्तकालय में इस का उपयोग फ़ंक्शन ठीक कार्य है जो एक सत्र प्रदान करता है। 'सत्र' के साथ पारित समारोह के शरीर के भीतर 'sess' पैरामीटर में हेरफेर करके आप सत्र प्राप्त करते हैं। दूसरे शब्दों में, यदि आपके पास 'main = withession ..' है तो कार्रवाई को चलाने के लिए ghci प्रॉम्प्ट पर बस 'main' (या': main') टाइप करें। अब तक "लाइन द्वारा निरंतरता लाइन का मूल्यांकन करें", आपको उस तर्क को स्वयं लागू करना होगा। – user2407038
वाह, अद्भुत सवाल! सीपीएस-शैली पुस्तकालय कार्यों के लिए जीएचसीआई प्रतिलिपि दोबारा दर्ज करने में सक्षम होना वास्तव में अच्छा होगा। – chi