diff --git a/base_tp/src/lambda/lambda.scala b/base_tp/src/lambda/lambda.scala
index 29b38b5d93cdcfa16eadaad60d8f18a96ec9386e..4582d022eaee5657811d73a30604162d747b9fd8 100644
--- a/base_tp/src/lambda/lambda.scala
+++ b/base_tp/src/lambda/lambda.scala
@@ -12,7 +12,7 @@ object Predicates {
    * La méthode 'not' retourne un nouveau prédicat dont le résultat
    * est toujours la négation du résultat de l'argument.
    */
-  def not[A]( p: (A)=>Boolean ): (A)=>Boolean = { (a:A) =>
+  def not[A]( p: P[A] ): P[A] = { (a:A) =>
     !p(a)
   }
 
@@ -20,7 +20,7 @@ object Predicates {
    * La méthode 'and' retourne un nouveau prédicat dont le résultat
    * est toujours la conjonction des résultats des deux arguments.
    */
-  def and[A]( p1: (A)=>Boolean, p2: (A)=>Boolean ): (A)=>Boolean = { (a:A) =>
+  def and[A]( p1: P[A], p2: P[A] ): P[A] = { (a:A) =>
     p1(a) && p2(a)
   }
 
@@ -28,7 +28,7 @@ object Predicates {
    * La fonction 'or' retourne un nouveau prédicat dont le résultat
    * est toujours la disjonction des résultats des deux arguments.
    */
-  def or[A]( p1: (A)=>Boolean, p2: (A)=>Boolean ): (A)=>Boolean = { (a:A) =>
+  def or[A]( p1: P[A], p2: P[A] ): P[A] = { (a:A) =>
     p1(a) || p2(a)
   }
 
@@ -37,7 +37,7 @@ object Predicates {
    * résultat est vrai si au moins un des prédicat de l'argument est
    * vrai.
    */
-  def exists[A]( ps: List[(A)=>Boolean] ): (A)=>Boolean = { (a:A) =>
+  def exists[A]( ps: List[P[A]] ): P[A] = { (a:A) =>
     ps match {
         case p :: Nil => p(a)
         case p :: _ if p(a) => true
@@ -50,7 +50,7 @@ object Predicates {
    * résultat est vrai si et seulement si tous les prédicats de
    * l'argument sont vrais.
    */
-  def forall[A]( ps: List[(A)=>Boolean] ): (A)=>Boolean = { (a:A) =>
+  def forall[A]( ps: List[P[A]] ): P[A] = { (a:A) =>
     ps match {
         case p :: Nil => p(a)
         case p :: _ if !p(a) => false