में functors निम्नलिखित बहुरूपी कार्योंउच्च आदेश प्रकार निर्माणकर्ता और OCaml
let id x = x;;
let compose f g x = f (g x);;
let rec fix f = f (fix f);; (*laziness aside*)
प्रकार/प्रकार कंस्ट्रक्टर्स या मॉड्यूल/functors के लिए लिखा जा सकता है? मैंने
type 'x id = Id of 'x;;
type 'f 'g 'x compose = Compose of ('f ('g 'x));;
type 'f fix = Fix of ('f (Fix 'f));;
प्रकारों के लिए प्रयास किया लेकिन यह काम नहीं करता है।
data Id x = Id x
data Compose f g x = Compose (f (g x))
data Fix f = Fix (f (Fix f))
-- examples:
l = Compose [Just 'a'] :: Compose [] Maybe Char
type Natural = Fix Maybe -- natural numbers are fixpoint of Maybe
n = Fix (Just (Fix (Just (Fix Nothing)))) :: Natural -- n is 2
-- up to isomorphism composition of identity and f is f:
iso :: Compose Id f x -> f x
iso (Compose (Id a)) = a
मैं "100% निश्चित नहीं हूँ, क्योंकि मैं हास्केल पता नहीं है और मैं क्या FGX = ... लिखें वास्तव में हास्केल में इसका मतलब है पर स्पष्ट नहीं हूँ, लेकिन आप को पता है कि रुचि हो सकती है ओसीएएमएल के विकास संस्करण में प्रथम श्रेणी के मॉड्यूल हैं। – nlucaroni
मुझे यकीन है कि आप इसे एमएल में नहीं कर सकते हैं, क्योंकि आपको उच्च-प्रकार के पॉलीमोर्फिज्म की आवश्यकता है। क्या आप कुछ उदाहरण दे सकते हैं कि आप इन प्रकारों का उपयोग हास्केल में कैसे करेंगे? –
nlucaroni, बहुत रोचक! (लिंक http://caml.inria.fr/cgi-bin/viewcvs.cgi/ocaml/branches/fstclassmod/ मेरा मानना है) क्रिस कॉन्वे, मैंने कुछ उदाहरण जोड़े। – sdcvvc