Question

Quelquefois, je me Progamming le modèle « si le Bool est pas faux » ou « si la liste est vide, il utilise pas, sinon utiliser quelque chose d'autre ».

Je cherche des fonctions pour Bool et la liste qui sont ce que la fonction « peut-être » est peut-être. Y at-il?

Mise à jour: Je voulais utiliser le Bool cas comme une généralisation de la liste des cas. Par exemple lorsque vous travaillez avec data.text comme T:

if T.null x then x else foo x

Je cherche à réduire ce code plaque de la chaudière.

Était-ce utile?

La solution

Je pense que la réponse est sans doute qu'il n'y a pas une telle fonction générique. Comme le dit DJV, vous pouvez peut-être construire sur Data.Monoid d'écrire un, quelque chose comme:

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

Mais je ne connais pas toutes les fonctions de la bibliothèque standard comme ça (ou tout qui pourrait facilement être composé ensemble pour le faire).

Autres conseils

est peut-être le catamorphisme du type Maybe.

foldr est le catamorphisme du type de liste.

Si vous aviez utilisé peut-être comme: maybe x (const y)

Vous pouvez utiliser: foldr (const (const y)) x

Pour Bool me manque aussi catamorphisme dans la bibliothèque standard, mais il serait:

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

Vérifier Data.Monoid , c'est une description des types de classe de types de données qui ont une valeur vide désignée et vous pouvez modèle match sur elle pour écrire votre fonction générique. Il y a des cas pour Bool avec False valeur vide et List avec [] valeur vide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top