Từ template haskell docs on the VarI Info contructor:
A "giá trị" biến (như trái ngược với một biến kiểu, xem TyVarI
). Trường Maybe Dec
chứa Just
tuyên bố đã xác định biến - bao gồm RHS của tờ khai - hoặc khác Nothing
, trong trường hợp RHS không khả dụng cho trình biên dịch. Hiện tại, giá trị này là luôn luônNothing
: trả lại RHS chưa được triển khai do thiếu sự quan tâm.
Nhìn vào ghc source mirror on github, các string VarI
only appears twice, và cả trong compiler/typecheck/TcSplice.lhs thực hiện reifyThing
chức năng:
reifyThing :: TcTyThing -> TcM TH.Info
-- The only reason this is monadic is for error reporting,
-- which in turn is mainly for the case when TH can't express
-- some random GHC extension
reifyThing (AGlobal (AnId id))
= do { ty <- reifyType (idType id)
; fix <- reifyFixity (idName id)
; let v = reifyName id
; case idDetails id of
ClassOpId cls -> return (TH.ClassOpI v ty (reifyName cls) fix)
_ -> return (TH.VarI v ty Nothing fix)
}
reifyThing (AGlobal (ATyCon tc)) = reifyTyCon tc
reifyThing (AGlobal (ADataCon dc))
= do { let name = dataConName dc
; ty <- reifyType (idType (dataConWrapId dc))
; fix <- reifyFixity name
; return (TH.DataConI (reifyName name) ty
(reifyName (dataConOrigTyCon dc)) fix)
}
reifyThing (ATcId {tct_id = id})
= do { ty1 <- zonkTcType (idType id) -- Make use of all the info we have, even
-- though it may be incomplete
; ty2 <- reifyType ty1
; fix <- reifyFixity (idName id)
; return (TH.VarI (reifyName id) ty2 Nothing fix) }
reifyThing (ATyVar tv tv1)
= do { ty1 <- zonkTcTyVar tv1
; ty2 <- reifyType ty1
; return (TH.TyVarI (reifyName tv) ty2) }
reifyThing thing = pprPanic "reifyThing" (pprTcTyThingCategory thing)
Giống như các tài liệu mẫu Haskell nói, giá trị sử dụng cho lĩnh vực mà luôn luôn là Nothing
.
Đào giá rẻ hơn, this code was added in 2003, giống như viết lại hệ thống thống nhất. Vì vậy, nó dường như không được quan tâm nhiều trong việc làm cho nó hoạt động vì nó đã được hơn 10 năm lĩnh vực đó luôn luôn có giá trị Nothing
. Vì vậy, tôi đoán nếu bạn muốn các tính năng bạn sẽ phải thực hiện nó cho mình (hoặc đề xuất một trường hợp sử dụng tốt để danh sách gửi thư phát triển ghc mà sẽ khuyến khích người khác làm điều đó).
Nguồn
2013-11-21 17:48:49
Đó là một câu hỏi hay. Tôi đã thử đánh dấu định nghĩa 'INLINE' hoặc' INLINEABLE' và không tạo ra bất kỳ sự khác biệt nào. Tôi nghi ngờ nó không được thực hiện ở tất cả, nhưng tôi không biết. – Carl
có thể trùng lặp của [Làm thế nào để sử dụng mẫu Haskell để có được cơ thể của hàm?] (Http://stackoverflow.com/questions/13983391/how-to-use-template-haskell-to-get-the-body-of -chức năng) – jberryman