Gói mang tính xây dựng-đại số cho phép bạn xác định các trường hợp đại số module (như không gian vectơ nhưng sử dụng một chiếc nhẫn nơi một lĩnh vực được yêu cầu)Xác định một mô-đun đại số sử dụng gói mang tính xây dựng-đại số
Đây là cố gắng của tôi ở việc xác định một mô-đun :
{-# 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]
.210
Nó thất bại bởi:
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.
Nếu tôi nhận xét các trường hợp Group
ra, sau đó:
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.
tôi đọc này là yêu cầu một thể hiện của Ring A
có Module Integer A
mà không có ý nghĩa và là không bắt buộc trong định nghĩa lớp học:
class (CommutativeRing r, AbelianGroup m) => Module r m where
-- | Scalar multiplication.
(*>) :: r -> m -> m
Bạn có thể giải thích điều này không?
Bạn có lo ngại rằng cá thể 'Nhóm' của bạn đối với' A' không thực sự xác định một nhóm? Ví dụ, 'let a = [(1," foo ")]', sau đó 'a <+> neg a = [(1," foo "), (- 1," foo ")]' không giống như 'zero'. –
Vâng, tôi biết. Ý tưởng ban đầu là giảm 'a ++ b' bằng cách nhóm vào các chuỗi giống hệt nhau. Tôi bỏ qua để giảm hình thức bình thường để làm cho ví dụ đơn giản hơn. – user21338