Domanda

A volte mi ritrovo programmazione il pattern "se il Bool non è falsa" o "se l'elenco non è uso vuota, altrimenti utilizzare qualcos'altro".

Cerco funzioni per Bool e Lista che sono ciò che la funzione "forse" è quello di darsi. Ci sono dei?

Aggiornamento: Ho intenzione di utilizzare il Bool caso come una generalizzazione della lista e minuscole. Per esempio quando si lavora con data.text come T:

if T.null x then x else foo x

Sto cercando di ridurre tale codice piastra della caldaia.

È stato utile?

Soluzione

Credo che la risposta è probabilmente che non c'è una funzione di tale generica. Come djv dice, si può forse costruire su Data.Monoid di scriverne uno, qualcosa come:

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

Ma io non conosco alcuna funzione nella libreria standard del genere (o qualsiasi che potrebbe facilmente essere composto insieme per farlo).

Altri suggerimenti

forse è il catamorphism del tipo Forse.

foldr è la catamorphism del tipo di elenco.

Se avessi usato forse come: maybe x (const y)

È possibile utilizzare: foldr (const (const y)) x

Per Bool Ho anche manca il catamorphism nella libreria standard, ma sarebbe:

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

Data.Monoid , è un typeclass che descrive i tipi di dati che hanno un valore vuoto designato ed è possibile pattern-partita su di esso per scrivere la funzione generica. Ci sono casi di Bool con False valore vuoto e per List con [] valore vuoto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top