में कार्टेशियन उत्पाद मुझे पता है कि sequence
फ़ंक्शन [[1, 2], [3, 4]] -> [[1, 3], [1, 4], [2, 3], [2, 4]]
समस्या को संभाल सकता है।एन-आरी की गणना करें (विभिन्न प्रकारों के साथ !!) हास्केल
लेकिन मुझे लगता है कि असली कार्टशियन उत्पाद ([1, 2], ['a', 'b']) -> [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
समस्या को संभालना चाहिए, और प्रत्येक सूची का प्रकार अलग है और न ही बाहरी ट्यूपल के प्रकार (आकार) के बारे में ध्यान रखना चाहिए। ([a1], [a2], [a3] ...) -> [(a1, a2, a3 ...)]
मैं जानता हूँ कि वहाँ प्रकार प्रणाली के साथ यहाँ कुछ समस्या है:
तो, cartProd
समारोह मैं चाहता हूँ इस तरह की एक प्रकार है। लेकिन क्या इस cartProd
के एक परिपूर्ण संस्करण को लागू करने का कोई तरीका है? Nil
और एक अन्य :>
मामले के लिए के लिए
{-# LANGUAGE
UndecidableInstances, GADTs,
TypeFamilies, MultiParamTypeClasses,
FunctionalDependencies, DataKinds, TypeOperators,
FlexibleInstances #-}
import Control.Applicative
data HList xs where
Nil :: HList '[]
(:>) :: x -> HList xs -> HList (x ': xs)
infixr 5 :>
-- A Show instance, for illustrative purposes here.
instance Show (HList '[]) where
show _ = "Nil"
instance (Show x, Show (HList xs)) => Show (HList (x ': xs)) where
show (x :> xs) = show x ++ " : " ++ show xs
हम आम तौर पर HLists
वर्गों के प्रयोग पर काम करता है लिखते हैं, एक उदाहरण के साथ:
@chi वास्तव में? मेरी व्याख्या में, वह संयोजनों के लिए पूछता है, ज़िप नहीं; यानी, लिफ्टए 2 (,) 'और इसी तरह (सूचियों के लिए)। – phg
@phb आप सही हैं।फिर भी, अगर हम tuples के बजाय नेस्टेड जोड़े का उपयोग कर सकते हैं तो हम इसे एक प्रकार के वर्ग और 'liftA2 (,)' के माध्यम से हल करने में सक्षम होंगे, जैसा कि आप प्रस्तावित करते हैं। Tuples के साथ यह कठिन है क्योंकि एन-टुपल से एन + 1-टुपल तक जाने का कोई आसान तरीका नहीं है। – chi
मजेदार तथ्य: जीएचसी 62 प्रविष्टियों से अधिक लंबे समय तक tuples का समर्थन नहीं करता है: https://downloads.haskell.org/~ghc/latest/docs/html/libraries/ghc-prim-0.3.1.0/src/GHC-Tuple। एचटीएमएल। इसलिए हाथ से 62 तक सभी 'कार्टप्रोडन' प्रकारों को लागू करने का निश्चित रूप से एक तरीका है;)। ऐसा कहा जा रहा है, क्या आपको _really_ मनमानी कार्टेशियन उत्पादों की आवश्यकता है? संभवतः एक कारण है कि 'ज़िप * * और इसके रूपों को '7' पर रोक दिया गया है ... – Zeta