I am currently reading Learn You a Haskell for Great Good! and am stumbling on the explanation for the evaluation of a certain code block. I've read the explanations several times and am starting to doubt if even the author understands what this piece of code is doing.

## Trying to implement “the essence of the iterator pattern”

I came across the paper "https://www.cs.ox.ac.uk/jeremy.gibbons/publications/iterator.pdf" which has code examples in quite an abstract pseudo haskell syntax.

## How does <*> derived from pure and (>>=)?

(<*>) can be derived from pure and (>>=):For the line I am confused by the usage of >>=. I think it takes a functor f a and a function, then return another functor f b. But in this expression, I feel lost.

## I think there is a type mismatch in default definition in instance Applicative Maybe in Haskell

I am currently studying Haskell with Prof. Hutton's "Programming in Haskell", and I found something strange regarding the definition of Maybe as an instance of the class Applicative.

## What is the purpose of `pure` in Applicative Functor

Meet the Applicative typeclass. It lies in the Control.Applicative module and it defines two methods, pure and <*>. It doesn't provide a default implementation for any of them, so we have to define them both if we want something to be an applicative functor.

## Is there a zipWith analogue for tuples?

Preliminary note: this is a respin of a deleted question by SeanD.Just like there is zipWith for lists...

## How is “a monoid on applicative functors” different than “a monoid in the category of endofunctors”?

Perhaps neither of these statements are categorically precise, but a monad is often defined as "a monoid in the category of endofunctors"; a Haskell Alternative is defined as "a monoid on applicative functors", where an applicative functor is a "strong lax monoidal functor". Now these two definitions sound pretty similar...