Каков пример Монады, которая является Альтернативой, но не МонадПлюс?

Вего ответ на вопрос «Различие между типами классов,MonadPlusAlternative, а также ?"MonoidЭдвард Кметт говорит, что

Более того, даже еслиApplicative был суперклассомMonad, вы'буду нуждаться вMonadPlus класс в любом случае, потому что подчиняясь

empty  m = empty

ISN»достаточно строго, чтобы доказать это

empty >>= f = empty

Так утверждая, что что-тоMonadPlus сильнее, чем утверждать, что это так.Alternative

Это'Ясно, что любой аппликативный функторне монада автоматически является примеромAlternative который не являетсяMonadPlusно Эдвард Кметтответ предполагает, что существуетмонада который являетсяAlternative но неMonadPlus: егоempty а также будет удовлетворятьAlternative Законы, 1 но неMonadPlus laws.2 Я могу'я сам не смог привести пример этого; Кто-нибудь знает один? 1

 Я не былне может найти каноническую ссылку для набораAlternative законы, но я выкладываю то, что я считаю, что они примерно на полпутимой ответ на вопрос «Смущен смысломAlternative класс типов и его связь с другими типами классов » (поиск по фразе «правильная дистрибутивность »). Четыре закона, которые я считаю необходимыми:

Правильное распределение (из):(f g) a = (f a) (g a)Правильное поглощение (для):empty a = emptyЛевая дистрибутивность (изfmap):f (a b) = (f a) (f b)Левое поглощение (дляfmap):Я'f empty = empty

Я также с радостью принимаю более полезный наборAlternative laws.2

 я знаю этотам'некоторая неясность о том, чтоMonadPlus законы; Я'Я доволен ответом, в котором используется левый дистрибутив или левый улов, хотя я бы слабо предпочел первый.

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

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