Confused by the meaning of the 'Alternative' type class and its relationship to other type classes
Eu tenho passado peloTypeclassopedia para aprender as classes de tipos. Eu estou entendendoAlternative
(eMonadPlus
, para esse assunto).
Os problemas que estou tendo:
o 'pedia diz que' a classe de tipo Alternativa é para functores Aplicativos que também possuem uma estrutura monóide. ' Eu não entendo isso - a alternativa não significa algo totalmente diferente do Monoid? isto é, eu entendi o ponto da classe de tipos Alternativa como escolher entre duas coisas, enquanto eu entendi que os Monoids eram sobre combinar coisas.
Por que a Alternative precisa de umempty
método / membro? Eu posso estar errado, mas parece não ser usado ... pelo menos nocódigo Eu poderia encontrar. E parece não se encaixar no tema da aula - se eu tenho duas coisas e preciso escolher uma, para que preciso de um 'vazio'?
Por que a classe de tipo Alternativa precisa de uma restrição Aplicativa, e por que ela precisa de um tipo de* -> *
? Por que não apenas ter<|> :: a -> a -> a
? Todas as instâncias ainda poderiam ser implementadas da mesma maneira ... Eu acho (não tenho certeza). Qual o valor que o Monoid não oferece?
qual é o objetivo doMonadPlus
tipo de classe? Não posso desbloquear toda a sua bondade usando apenas algo como umMonad
eAlternative
? Por que não apenas abandoná-lo? (Tenho certeza que estou errado, mas não tenho contraexemplos)
Espero que todas essas perguntas sejam coerentes ...!
Atualização de recompensa: A resposta do @ Antal é um ótimo começo, mas o Q3 ainda está aberto: o que a Alternative fornece que o Monoid não oferece? eu achoesta resposta insatisfatório, uma vez que carece de exemplos concretos e uma discussão específica de como a superioridade da Alternativa a distingue do monóide.
Se é para combinar efeitos do aplicativo com o comportamento do Monoid, porque não apenas:
liftA2 mappend
Isso é ainda mais confuso para mim porque muitas instâncias Monoid são exatamente iguais às instâncias Alternativas.
É por isso que estou procurandoexemplos específicos isso mostra porque a alternativa é necessária, e como é diferente - ou significa algo diferente - de Monoid.