2015-03-08 10 views
21

के माध्यम से इंटरप्रेटर ऑटो-चयन मैं ऐप आर्किटेक्चर और हैकेल में मुफ्त मोनैड के साथ खेल रहा हूं। मुझे यह स्पष्ट हो गया है कि मेरे "निर्देश" को मेरे तांबे के सही स्लॉट में स्पष्ट रूप से पूर्ण बाएं/दाएं पथ के बिना कैसे उठाया जाए।फ्री मोनाड और कॉपॉडक्ट

यहाँ Haskell उदाहरण मैं से काम कर रहा है या नहीं: https://gist.github.com/aaronlevin/87465696ba6c554bc72b#file-reasonable-hs

यहाँ, coproduct में प्रकार सुई, हम स्पष्ट रूप से पथ का उल्लेख है।

उदाहरण के लिए:

Program :: Coproduct Interaction (Coproduct Auth Logging) a 
logC :: (Functor f) => (forall a. Logging a -> f a) -> String -> Free f() 

logger :: String -> Free Program() 
logger = logC (Program . Coproduct . Right . Coproduct . Right) 

यहाँ, लकड़हारा के साथ मैन्युअल रूप से coproduct में सही स्लॉट में डाल किया जाना है Coproduct . Right . Coproduct . Right

स्केला में रुनर की बात निहित प्रकार रूपांतरण और इस लक्ष्य को हासिल करने के लिए एक सुई का उपयोग करता typeclass परिणाम: https://gist.github.com/runarorama/a8fab38e473fafa0921d#file-gistfile1-scala-L119

संक्षेप में, मुझे आश्चर्य है कि हैकेल में ऐसा करने का कोई तरीका है या नहीं।

+10

मुझे स्विएस्टेरा के डेटाहैंड [डेटा प्रकार ए ला कार्टे] (http://journals.cambridge.org/action/displayAbstract?fromPage=online&aid=1899152) को याद दिलाता है जो एक प्रकार की कक्षा प्रोलॉग चाल का उपयोग करता है ताकि सही जगह पर प्रभाव डाला जा सके। ढेर। –

+0

यह सही जवाब था। यही मेरी मदद करता है: http://okmij.org/ftp/Haskell/extensible/ALaCarte.hs मुझे उत्तर देने के लिए बहुत बहुत धन्यवाद – Brian

+1

@Brian यदि आपने अपनी समस्या हल कर ली है तो क्या आप इसका जवाब दे सकते हैं सवाल और इसे स्वीकार करते हैं? – Bakuriu

उत्तर

1

मूल प्रश्न के लिए टिप्पणियों से जवाब अनुभाग भरना ...

मूल हास्केल कागज यहां पाया जा सकता: Data Types à la Carte

एक हास्केल कार्यान्वयन यहां पाया जा सकता: ALaCarte.hs

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