تفاوت بین اپراتور اتصال و اپراتور kleisli در هاکل و تفاوت آنها با یکدیگر چیست؟
پاسخ 1:
فرض می کنم:
- "عملگر اتصال" اتصال monadic است: >> = 'عملگر Kleisli' ترکیب فلش Kleisli (همچنین به عنوان "ماهی" شناخته می شود):> =>
اول ، یک فلش Kleisli تابعی از فرم است
a -> mb
برای چند ماه ما می توانیم دو فلش از این شکل را در کنار هم قرار دهیم تا یک شکل سوم درست شود ، مانند ترکیب عملکرد طبیعی (به جز ترتیب آرگومان ها). این عملگر ترکیب فلش Kleisli (همچنین به عنوان "ماهی" شناخته می شود):
(> =>) :: (a -> mb) - اولین پیکان Kleisli -> (b -> mc) - فلش Kleisli دوم -> (a -> mc)
اگر monad را با بازگشت و پیوستن تعریف کنیم ، می توانیم این را بنویسیم
(f> => g) x = بپیوندید (g <$> fx)
در آنجا
(g $ fx) :: m (mc)
جایی که <$> نوع infix از fmap است. در نماد بدون نقطه:
f> => g = بپیوندید. fmap g. f
(به یاد داشته باشید که بازگشت مقدار خالص را محصور می کند و پیوستن سطح لانه سازی (m (ma) -> ma) را حذف می کند.)
عملگر اتصال یک پیکان Kleisli را به یک مقدار monadic اعمال می کند:
(>> =) :: ma - مقدار monadic -> (a -> mb) - پیکان Kleisli -> mb
همچنین می تواند از نظر بازده تعریف شود و به آنها ملحق شود:
mx >> = f = پیوستن (f <$> mx)
به همین ترتیب
(f $ mx) :: m (mb)
ما در واقع می توانیم پیوند را به عنوان "ماهی" تعریف کنیم و برعکس:
mx >> = f = (const mx> => f) () (f> => g) x = fx >> = g
نوشته شده در ۰۲-۰۳-۲۰۲۰