Pregunta

A veces me encuentro programación del patrón "si el Bool no es falsa" o "si la lista no está vacía uso, de lo contrario usar otra cosa".

Busco a funciones de Bool y lista que se cuál es la función "tal vez" es lo mejor. ¿Hay alguna?

Actualización: Me refiero a utilizar el Bool caso como una generalización de la Lista de los casos. Por ejemplo cuando se trabaja con data.text como T:

if T.null x then x else foo x

Busco para reducir dicho código placa de la caldera.

¿Fue útil?

Solución

Creo que la respuesta es, probablemente, que no es una función de este tipo genérico. Como dice DJV, puede quizá construir sobre Data.Monoid a escribir uno, algo como:

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

Pero no sé de ninguna función en la biblioteca estándar de esa manera (o cualquier que podría ser fácilmente integrado en conjunto para hacerlo).

Otros consejos

tal vez es la catamorphism del tipo Tal vez.

foldr es la catamorphism del tipo de lista.

Si se hubiera usado tal como: maybe x (const y)

Se puede usar: foldr (const (const y)) x

Para Bool También extraño la catamorphism en la biblioteca estándar, pero sería:

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

Data.Monoid , que es una clase de tipos que describe los tipos de datos que tienen un valor vacío designado y se puede patrón-partido en él para escribir su función genérica. Hay casos para Bool con valor False vacío y para List con valor [] vacía.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top