Eh bien, il serait utile de savoir ce que vous étiez attend à faire. Mais peut-être il serait utile de mettre des parenthèses explicites dans p
:
q :: Int -> Int
q v = v %? (\z -> z * (2 %? (\z -> z + 3)))
Peut-être que vous vous attendiez quelque chose comme ceci:
p2 :: Int -> Int
p2 v = v %? (\z -> (z * 2) %? (\z -> z + 3))
Il est probablement une bonne idée d'ajouter une déclaration infix
pour tous les opérateurs vous déclarez, pour éviter ce genre de confusion. Les opérateurs arithmétiques ont une préséance moyenne, mais compte tenu de la fonction, vous voulez probablement une préséance très faible de toute façon. En aparté, les lambdas s'étendent tout à fait vers la droite, mais je suppose que ce n'est pas ce qui vous fait trébucher.
Cela ressemble beaucoup à des devoirs ... – intoverflow