पैकेज रचनात्मक-बीजगणित आप बीजीय के उदाहरण को परिभाषित करने की अनुमति देता है मॉड्यूल (जैसे vectorial रिक्त स्थान लेकिन एक अंगूठी जहां एक क्षेत्र आवश्यक था का उपयोग करके)रचनात्मक-बीजगणित पैकेज का उपयोग कर एक बीजगणित मॉड्यूल को परिभाषित करना
{-# LANGUAGE MultiParamTypeClasses, TypeSynonymInstances #-}
module A where
import Algebra.Structures.Module
import Algebra.Structures.CommutativeRing
import Algebra.Structures.Group
newtype A = A [(Integer,String)]
instance Group A where
(A a) <+> (A b) = A $ a ++ b
zero = A []
neg (A a) = A $ [((-k),c) | (k,c) <- a]
instance Module Integer A where
r *> (A as) = A [(r <*> k,c) | (k,c) <- as]
:
यह एक मॉड्यूल को परिभाषित करने में मेरी कोशिश है 63,210
यह द्वारा विफल रहता है:
A.hs:15:10:
Overlapping instances for Group A
arising from the superclasses of an instance declaration
Matching instances:
instance Ring a => Group a -- Defined in Algebra.Structures.Group
instance Group A -- Defined at A.hs:9:10-16
In the instance declaration for `Module Integer A'
A.hs:15:10:
No instance for (Ring A)
arising from the superclasses of an instance declaration
Possible fix: add an instance declaration for (Ring A)
In the instance declaration for `Module Integer A'
Failed, modules loaded: none.
मैं बाहर टिप्पणी तो Group
उदाहरण है, तो:
A.hs:16:10:
No instance for (Ring A)
arising from the superclasses of an instance declaration
Possible fix: add an instance declaration for (Ring A)
In the instance declaration for `Module Integer A'
Failed, modules loaded: none.
मैं Module Integer A
के लिए Ring A
का एक उदाहरण की आवश्यकता होती है जो मतलब नहीं है और है के रूप में इस पढ़ा कक्षा परिभाषा में आवश्यक नहीं:
class (CommutativeRing r, AbelianGroup m) => Module r m where
-- | Scalar multiplication.
(*>) :: r -> m -> m
क्या आप इसे समझा सकते हैं?
क्या आप चिंतित हैं कि 'ए' के लिए आपका 'समूह' उदाहरण वास्तव में किसी समूह को परिभाषित नहीं करता है? उदाहरण के लिए, 'ए = [(1, "foo")]', फिर '<+> नकारात्मक ए = [(1," foo "), (- 1," foo ")] 'जो कि जैसा नहीं है 'zero'। –
हाँ, मुझे पता है। मूल विचार समान स्ट्रिंग्स पर समूहबद्ध करके 'ए ++ बी' को कम करना था। उदाहरण को सरल बनाने के लिए मैंने सामान्य रूप में कमी को छोड़ दिया। – user21338