Sau đây không biên dịch:Template Haskell tờ khai dữ liệu mà lấy Hiện
import Language.Haskell.TH
makeAlpha n = [d| data Alpha = Alpha $(conT n) deriving (Show, Read) |]
Tôi không thể làm ra những gì lỗi nghĩa ở tất cả:
Can't derive instances where the instance context mentions
type variables that are not data type parameters
Offending constraint: Show t_d
When deriving the instance for (Show Alpha)
In the Template Haskell quotation
[d| data Alpha = Alpha $(conT n) deriving (Show, Read) |]
In the expression:
[d| data Alpha = Alpha $(conT n) deriving (Show, Read) |]
Có thể làm Mục từ như thế này?
Tôi nghĩ rằng vấn đề có thể là nó đang cố gắng tìm ra các trường hợp trước khi nó được * n *; tức là nó đang cố mở rộng mối nối của bạn để chứa các thể hiện, nhưng không thể, bởi vì nó không biết '$ (conT n)' trông như thế nào. Không chắc chắn mặc dù. – ehird
Tôi nghĩ tương tự, nhưng tôi thường không thể chắc chắn những gì được cho phép và không với mẫu Haskell ... Trong kịch bản này, tôi nghĩ rằng nó rõ ràng nó không thể lấy được các trường hợp nào và cần phải chờ đợi cho việc sử dụng các chức năng để mở rộng . Đây có phải là một lỗi? – Ana
Hmm, đợi đã, không phải là 'dữ liệu Alpha = $ (conT n) 'hay gì đó? Tôi nghĩ rằng những gì bạn có bây giờ là một lỗi kiểu, ít nhất là từ liếc nhìn [định nghĩa của 'Dec'] (http://hackage.haskell.org/packages/archive/template-haskell/2.6.0.0/doc/html /Language-Haskell-TH-Syntax.html#t:Dec). – ehird