10
votes

Comment "décompresser" une structure à Haskell

J'ai récemment rencontré ce problème et j'ai trouvé une solution mais je me demande s'il y a de meilleures solutions (ou simplement plus d'idiomatique).

J'ai une structure pour une couleur: xxx < / pré>

et il y a une fonction que j'aimerais transmettre les composants de couleur individuellement, en réalité du Caire: xxx

donc j'ai besoin de "décompresser" cette Structure de données, car setsourcergbb ne prend pas un rgb . J'ai trouvé deux manières. On est de définir une fonction pour appliquer le contenu d'un rgb : xxx

puis je peux faire: xxx < / Pre>

Une autre façon que j'ai proposée est de faire une expression de Lambda en ligne avec un cas, ce qui signifie que je n'ai pas à définir une fonction séparée: xxx p > Je ne suis pas complètement satisfait de cela, en quelque sorte appliquer une fonction juste pour réussir certaines valeurs ne semble pas bien. J'aimerais pouvoir le tourner et "convertir" le rgb vers le type de droite pour setSourcergb . Malheureusement, il me semble que c'est impossible d'avoir une fonction xxx

qui peut être transmis à setSourcergbb . Peut-être que applyrgb est la meilleure solution, mais je me demande s'il y a une meilleure façon qui me laissera l'exprimer comme: xxx


1 commentaires

Qu'est-ce qui est avec le cas de ? (\ (rgb r g b) -> setsource r g b) rvb


3 Réponses :


3
votes

Non, vous ne pouvez pas écrire quelque chose comme SetSourcergb (Frossrgb RVB), car il va simplement donner un argument à la fonction, alors applyRgB semble être la meilleure solution. Si vous aimez ce genre de chose, vous pouvez également utiliser ApplyRgB en tant que fonction Infix:

setSource `applyRgb` rgb


0 commentaires

5
votes

BTW, vous devriez presque certainement avoir:

data Rgb = Rgb !Double !Double !Double


0 commentaires

2
votes

Vous ne pouvez pas "décompresser" quelque chose dans plusieurs arguments sans envelopper la fonction elle-même des moyens que vous avez compris.

Cependant, pour la cohérence, je nommerais probablement l'aide quelque chose comme ça. xxx


2 commentaires

Vous devez corriger la définition pour correspondre à la signature. En ce moment les cas diffèrent.


Augh, faute de frappe. Eh bien, des différences d'orthographe de côté, il s'agit de la même définition que OP's ApplyRGB ...