ধরুন আমার কাছে একটি প্যারামিটার রয়েছে যা কেবলমাত্র টাইপ সিস্টেমের সুবিধার জন্যই বিদ্যমান, উদাহরণস্বরূপ এই ছোট প্রোগ্রামের মতো:
{-# 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
কাঠামোতে প্রক্সি আর্গুমেন্ট এবং সদস্যদের পলিমারফিক মাইপোলি বজায় রাখার সময় টাইপ চেকিংয়ে সহায়তা করার জন্য কেবল কম্পাইল সময়ে সত্যই উপস্থিত থাকা প্রয়োজন (এই ক্ষেত্রে, প্রোগ্রামটি এটি ছাড়াই সংকলন করবে, তবে এই স্বীকৃত উদাহরণটি আরও সাধারণ সমস্যা যেখানে রয়েছে প্রমাণ বা প্রক্সি যা কেবলমাত্র সংকলনের সময় প্রয়োজন) - প্রক্সিটির জন্য কেবলমাত্র একজন নির্মাতা রয়েছে, এবং প্রকারের আর্গুমেন্টটি ভুতের ধরণ om
Gc এর সাথে সংকলন -ddump-stg
দেখায় যে কমপক্ষে এসটিজি পর্যায়ে, কনস্ট্রাক্টরের কাছে প্রক্সি যুক্তি বা কনস্ট্রাক্টরের তৃতীয় যুক্তির কোনও ক্ষয় হয় না।
এগুলিকে কেবল সংকলনকালীন হিসাবে চিহ্নিত করার কোনও উপায় আছে, বা অন্যথায় জিএইচসি কে প্রুফ মুছতে এবং সেগুলি বাদ দিতে সহায়তা করে?