Pergunta

Às vezes, eu me vejo progaminando o padrão "se o bool não for falso" ou "se a lista não estiver vazia, use -o, caso contrário, use outra coisa".

Estou procurando funções para Bool e listar que é a função "talvez" talvez seja. Há alguns?

ATUALIZAÇÃO: Eu pretendia usar o caixa BOOL como uma generalização do caso da lista. Por exemplo, ao trabalhar com dados.text como t:

if T.null x then x else foo x

Estou procurando reduzir esse código da placa da caldeira.

Foi útil?

Solução

Eu acho que a resposta é provavelmente que não há uma função tão genérica. Como DJV diz, talvez você possa desenvolver dados.monoid para escrever um, algo como:

maybe' :: (Eq a, Monoid a) => b -> (a -> b) -> a -> b
maybe' repl f x = if x == mempty then repl else f x

Mas não conheço nenhuma função na biblioteca padrão como essa (ou qualquer outra que possa ser facilmente composta para fazê -lo).

Outras dicas

Talvez seja o catamorfismo do tipo talvez.

Foldr é o catamorfismo do tipo de lista.

Se você tivesse usado talvez: maybe x (const y)

Você poderia usar: foldr (const (const y)) x

Para Bool, também sinto falta do catamorfismo na biblioteca padrão, mas seria:

bool :: a -> a -> Bool -> a
bool t _ True = t
bool _ f False = f

Verificar Data.monoid, é um TypeClass que descreve os tipos de dados que possuem um valor vazio designado e você pode corresponder a padrões para escrever sua função genérica. Existem instâncias para Bool com valor vazio False e para List com valor vazio [].

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top