Каков пример Монады, которая является Альтернативой, но не МонадПлюс?
Вего ответ на вопрос «Различие между типами классов,MonadPlus
Alternative
, а также ?"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
законы; Я'Я доволен ответом, в котором используется левый дистрибутив или левый улов, хотя я бы слабо предпочел первый.