11

Tôi đang cố gắng để làm cho một trường hợp SemigroupVerifiedSemigroup trên tùy chỉnh của tôi Bool datatype cả trên hành && và điều hành ||:Sử dụng tên trường cho các trường hợp khác

%case data Lógico = Cierto | Falso 

(&&) : Lógico -> Lógico -> Lógico 
(&&) Cierto Cierto = Cierto 
(&&) _ _ = Falso 

(||) : Lógico -> Lógico -> Lógico 
(||) Falso Falso = Falso 
(||) _ _ = Cierto 

Vì vậy, lần đầu tiên tôi thực hiện một tên dụ cho Semigroup trên số && nhà điều hành:

-- Todos 
instance [TodosSemigroup] Semigroup Lógico where 
    (<+>) a b = a && b 

Nhưng khi tạo ví dụ VerifiedSemigroup, làm thế nào để tôi báo cho Idris sử dụng ví dụ TodosSemigroup của Lógico?

instance [TodosVerifiedSemigroup] VerifiedSemigroup Lógico where 
    semigroupOpIsAssociative l c r = ?vsemigroupTodos 

Đó là mã mang lại cho tôi những lỗi sau:

When elaborating type of Prelude.Algebra.Main.TodosVerifiedSemigroup , method semigroupOpIsAssociative : Can't resolve type class Semigroup Lógico

+0

@dfeuer, tôi nghĩ rằng vấn đề là không được thực hiện. – chamini2

Trả lời

0

Có một cơ chế mới được giới thiệu cho điều này với các từ khóa using:

%case data Lógico = Cierto | Falso 

(&&) : Lógico -> Lógico -> Lógico 
(&&) Cierto Cierto = Cierto 
(&&) _ _ = Falso 

(||) : Lógico -> Lógico -> Lógico 
(||) Falso Falso = Falso 
(||) _ _ = Cierto 

instance [TodosSemigroup] Semigroup Lógico where 
    (<+>) a b = a && b 

instance [TodosVerifiedSemigroup] VerifiedSemigroup Lógico using where 
    semigroupOpIsAssociative l c r = ?vsemigroupTodos 
2

Có một open issue tại kho Idris-dev. Edwin Brady nói rằng

Currently (by design) named instances can only be used to resolve a class by being named explicitly, even if there is no normal instance.

Vì vậy, ở đây chúng tôi đã Idris cố gắng để giải quyết giấu tên Semigroup Lógico dụ, đó là cần thiết để xác định một trường hợp VerifiedSemigroup Lógico.

Chúng tôi cần một số cách để xác định, trong tờ khai dụ, một trường hợp được đặt tên nên được sử dụng để đáp ứng một hạn chế lớp. Tôi không biết liệu điều này là có thể. Trích dẫn Edwin từ các vấn đề liên quan:

this behaviour isn't documented anywhere

+0

Vâng, vâng, tôi biết đó là vấn đề. Những gì tôi cần biết là làm thế nào tôi có thể nói ví dụ của VerifiedSemigroup để sử dụng cá thể Semigroup đã được định nghĩa trước đó. – chamini2

Các vấn đề liên quan