প্রথমত, আমাদের মনোরম সংজ্ঞা রয়েছে
x = 1 : map (2*) x
এটি নিজেই কিছুটা মনোমুগ্ধকর হয় যদি আপনি এটি আগে কখনও না দেখেন। যাইহোক এটি অলসতা এবং পুনরাবৃত্তিগুলির মোটামুটি মানক কৌশল। এখন, আমরা স্পষ্ট পুনরাবৃত্তি fixএবং পয়েন্ট-ফ্রি-ইফআই ব্যবহার করে মুক্তি পাব।
x = fix (\vs -> 1 : map (2*) vs)
x = fix ((1:) . map (2*))
পরবর্তী কাজটি আমরা যাচ্ছি সেটি হচ্ছে :বিভাগটি প্রসারিত করা এবং mapঅযথা জটিল করে তোলা।
x = fix ((:) 1 . (map . (*) . (*2)) 1)
ঠিক আছে, এখন আমাদের কাছে সেই ধ্রুবকের দুটি অনুলিপি রয়েছে 1। এটি কখনই করবে না, তাই আমরা পাঠক আবেদনকারীকে এটির নকল করতে ব্যবহার করব। এছাড়াও, ফাংশন রচনাটি কিছুটা আবর্জনা, সুতরাং আসুন (<$>)আমরা যেখানেই পারি সেখানে এটি প্রতিস্থাপন করুন ।
x = fix (liftA2 (.) (:) (map . (*) . (*2)) 1)
x = fix (((.) <$> (:) <*> (map . (*) . (*2))) 1)
x = fix (((<$>) <$> (:) <*> (map <$> (*) <$> (*2))) 1)
পরবর্তী: এই কলটি mapখুব বেশি পঠনযোগ্য। তবে ভয়ের কিছু নেই: আমরা মনড আইনটিকে আরও প্রসারিত করতে ব্যবহার করতে পারি। বিশেষত fmap f x = x >>= return . f, তাই
map f x = x >>= return . f
map f x = ((:[]) <$> f) =<< x
আমরা পয়েন্ট-ফ্রি-ইফাই করতে পারি, এর সাথে প্রতিস্থাপন (.)করতে পারি (<$>)এবং তারপরে কিছু উত্সাহী বিভাগ যুক্ত করতে পারি:
map = (=<<) . ((:[]) <$>)
map = (=<<) <$> ((:[]) <$>)
map = (<$> ((:[]) <$>)) (=<<)
আমাদের পূর্ববর্তী পদক্ষেপে এই সমীকরণটি প্রতিস্থাপন:
x = fix (((<$>) <$> (:) <*> ((<$> ((:[]) <$>)) (=<<) <$> (*) <$> (*2))) 1)
অবশেষে, আপনি আপনার স্পেসবারটি ভেঙে চমত্কার চূড়ান্ত সমীকরণ তৈরি করেন
x=fix(((<$>)<$>(:)<*>((<$>((:[])<$>))(=<<)<$>(*)<$>(*2)))1)