Tenez compte « composition » fonctions avec la signature suivante (pseudo):En utilisant des lentilles pour composer les fonctions
(a1 -> a2 -> ... -> an -> r) ->
(s -> ai) ->
a1 -> a2 -> ... -> ai -> ... an -> r
where i in [1..n]
Bien sûr, nous ne pouvons pas écrire ce qui est ci-dessus dans Haskell, mais voici un exemple concret:
f4change3 ::
(a1 -> a2 -> a3 -> a4 -> r) ->
(s -> a3) ->
a1 -> a2 -> s -> a4 -> r
f4change3 f g x1 x2 x3 x4 = f x1 x2 (g x3) x4
Comme vous pouvez le voir, il y a une collection de n
fonctions pour chaque fonction d'arité n
, donc le nombre de fonctions dont nous avons besoin croît de façon quadratique avec l'arité.
Je pourrais juste écrire ceux dont j'ai besoin, mais d'abord, je ne veux pas réinventer la roue, donc ce serait bien de savoir si la bibliothèque a déjà fait cela. Mais aussi, alors que j'ai à peine utilisé des lentilles, j'ai lu un peu à leur sujet, et ce genre de problème semble être leur allié, mais je ne sais pas exactement comment le faire. Un exemple de code serait génial si c'est possible.
Je ne comprends pas la question ... – mb14
Je pense que vous demandez essentiellement sur http://conal.net/blog/posts/semantic-editor-combinators – Carl
Vous ne pouvez pas utiliser * modèle Haskell * pour cette? –