Tôi chỉ tò mò tại sao tôi phải viết những dòng này,lời giải thích cho "loại bất hợp pháp gia đình đồng nghĩa"
instance (HzMonad , Data.Suitable.Suitable α, γ ~ ExprTyp α) => VarDecl γ where
var = varhz
thay vì điều này
instance (HzMonad , Data.Suitable.Suitable α) => VarDecl (ExprTyp α) where
var = varhz
-- error
Hz2/Language.hs:114:53:
Illegal type synonym family application in instance: ExprTyp α
In the instance declaration for `VarDecl (ExprTyp α)'
nơi
varhz ::
(HzMonad , Data.Suitable.Suitable α) =>
String -> ExprTyp α -> (ExprTyp α)
là gì dấu ngã chưa? Cảm ơn rất nhiều.
Tôi không có năng lượng (tối nay) để đánh giá câu trả lời đầy đủ, nhưng câu trả lời ngắn gọn là đây là một ví dụ khác về các giả định sâu sắc về những thứ loại cấp đang được chuyển thành sai khi gõ gia đình được thêm vào hỗn hợp. Dấu ngã là xác nhận bình đẳng kiểu. –
Ah, tôi hiểu ngay bây giờ, không có vấn đề gì. Cảm ơn bạn đã lưu ý. Làm thế nào để có được xung quanh nó là một câu chuyện khác, mà tôi vẫn đang cố gắng tìm ra. – gatoatigrado