Understanding (>> =). (>> =)

I am trying to understand (>>=).(>>=)what GHCi is talking about:

(>>=)       :: Monad m => m a -> (a -> m b) -> m b
(>>=).(>>=) :: Monad m => m a -> (m b -> (a -> m b) -> b1) -> (a -> m b) -> b1

Can you give a step-by-step explanation of how the result is obtained?

And has this composition ever been used?

Update:

I can fulfill fmap.fmap, but not get out (>>=).(>>=), I can get to (.)(>>=) :: Monad m => (a1 -> m a) -> a1 -> (a -> m b) -> m b, but the afterword is starting to get a little confused. Any help would be appreciated simply by trying to find out here.

+4
source share
1 answer

TL DR . We use a monad instance in ((->) rbetween.


We have to look at (.) (>>=). So let's first repeat the types:

(>>=) :: Monad m => m a -> ((a -> m b) -> m b)
(.)   ::            (y  -> z                 ) -> (x -> y) -> (x -> z)

Therefore, we have

(.) (>>=) :: Monad m => (x -> m a) -> (x -> ((a -> m b) -> m b))
-- or, with less parentheses
(.) (>>=) :: Monad m => (x -> m a) -> x -> (a -> m b) -> m b

Now we connect one more (>>=):

(.) (>>=) :: Monad m => (x ->  m a               ) -> x -> (a -> m b) -> m b
(>>=)     :: Monad k => k i -> ((i -> k j) -> k j)

. Monad m => m a ((i -> k j) -> k j) . ? , , monad

Monad k => (->) (i -> k j)

, ,

instance Monad ((->) r)

r. m ((->) (i -> k j), m (i -> k j) ->:

(.) (>>=) ::             (x -> (i -> k j) -> a) -> x -> (a -> (i -> k j) -> b) -> (i -> k j) -> b
(>>=)     :: Monad k => k i -> ((i -> k j) -> k j)

x ~ k i, a ~ k j

(.) (>>=) ::             (x -> (i -> k j) -> a) -> x -> (a -> (i -> k j) -> b) -> (i -> k j) -> b
(>>=)         :: Monad k => k i -> ((i -> k j) -> k j)
(>>=) . (>>=) :: Monad k => k i -> (k j -> (i -> k j) -> b) -> (i -> k j) -> b

, k m, i a j b2,

(>>=) . (>>=) :: Monad m => m a -> (m b2 -> (a -> m b2) -> b) -> (a -> m b2) -> b
+11

Source: https://habr.com/ru/post/1693047/


All Articles