"Talvez"-função do bool e lista?
-
27-09-2019 - |
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.
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 []
.