... который по сути такой же как:

вопрос возникает из этого ответа впример функтора, который является Аппликативным, но не Монадой: Утверждается, что

data PoE a = Empty | Pair a a deriving (Functor,Eq)

не может иметь экземпляр монады, но я не вижу этого с:

instance Applicative PoE where
    pure x = Pair x x
    Pair f g <*> Pair x y = Pair (f x) (g y)
    _        <*> _        = Empty
instance Monad PoE where
    Empty    >>= _ = Empty
    Pair x y >>= f = case (f x, f y) of 
                       (Pair x' _,Pair _ y') -> Pair x' y'
                       _ -> Empty

Фактическая причина, по которой я считаю это монадой, состоит в том, что она изоморфнаMaybe (Pair a) с участиемPair a = P a a, Они обе монады, оба проходимы, поэтому их состав тоже должен образовывать монаду.О, я узнал не всегда.

Какой контр-пример терпит неудачу, какой монадный закон? (и как это выяснить систематически?)

редактировать: Я не ожидал такого интереса к этому вопросу. Теперь я должен принять решение, если я приму лучший пример или лучший ответ на «систематически» часть.

Между тем, я хочу представить, какjoin работает для более простогоPair a = P a a:

                   P
          ________/ \________
         /                   \
        P                     P
       / \                   / \
      1   2                 3   4

он всегда идет по внешнему пути, уступаяP 1 4, более известный как диагональ в матричном представлении. Для монады ассоциативности мне нужны три измерения, лучше работает визуализация дерева. Из ответа Чи, это неудачный пример объединения, и как я могу его понять.

                  Pair
          _________/\_________
         /                    \
       Pair                   Pair
        /\                     /\
       /  \                   /  \
    Pair  Empty           Empty  Pair
     /\                           /\
    1  2                         3  4

Теперь вы делаетеjoin . fmap join сначала сворачивая нижние уровни, дляjoin . join коллапс от корня.

Ответы на вопрос(5)

Ваш ответ на вопрос