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: p> et il y a une fonction que j'aimerais transmettre les composants de couleur individuellement, en réalité du Caire: P> donc j'ai besoin de "décompresser" cette Structure de données, car puis je peux faire: p> 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: p> qui peut être transmis à setsourcergbb code> ne prend pas un
rgb code>. J'ai trouvé deux manières. On est de définir une fonction pour appliquer le contenu d'un
rgb code>: p>
rgb code> vers le type de droite pour
setSourcergb code>. Malheureusement, il me semble que c'est impossible d'avoir une fonction p>
setSourcergbb code>. Peut-être que
applyrgb code> est la meilleure solution, mais je me demande s'il y a une meilleure façon qui me laissera l'exprimer comme: p>
3 Réponses :
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
BTW, vous devriez presque certainement avoir:
data Rgb = Rgb !Double !Double !Double
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. P>
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 code> ...
Qu'est-ce qui est avec le cas
de code>?
(\ (rgb r g b) -> setsource r g b) rvb code>