मान लीजिए कि मेरे पास एक पैरामीटर है जो केवल प्रकार प्रणाली के लाभ के लिए मौजूद है, उदाहरण के लिए इस छोटे से कार्यक्रम में:
{-# LANGUAGE GADTs #-}
module Main where
import Data.Proxy
import Data.List
data MyPoly where
MyConstr :: Proxy a -> a -> (Proxy a -> a -> Int -> Int) -> MyPoly
listOfPolys :: [MyPoly]
listOfPolys = [MyConstr Proxy 5 (const (+))
, MyConstr Proxy 10 (const (+))
, MyConstr Proxy 15 (const (+))]
main = print $ foldl' (\v (MyConstr p n a) -> a p n v) 0 listOfPolys
संरचना में प्रॉक्सी तर्कों और सदस्यों को वास्तव में कंपाइल समय पर मौजूद रहने की जरूरत है ताकि पॉलीमॉर्फिक मायपॉली को बनाए रखते हुए टाइप चेकिंग में मदद मिल सके (इस मामले में, कार्यक्रम इसके बिना संकलन करेगा, लेकिन यह आकस्मिक उदाहरण एक अधिक सामान्य समस्या है जहां हैं सबूत या परदे के पीछे जो केवल संकलन के समय की आवश्यकता होती है) - प्रॉक्सी के लिए केवल एक कंस्ट्रक्टर है, और प्रकार तर्क एक प्रेत प्रकार है।
Ghc के साथ संकलित करने से -ddump-stg
पता चलता है कि कम से कम STG चरण में, निर्माता के लिए प्रॉक्सी तर्क का कोई क्षरण नहीं है या निर्माणकर्ता के लिए तीसरा तर्क नहीं है।
क्या इन्हें केवल संकलन-समय के रूप में चिह्नित करने का कोई तरीका है, या अन्यथा सबूत मिटाने और उन्हें बाहर करने में ghc की मदद करें?