تفاوت بین اپراتور اتصال و اپراتور 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