Skip to content

Permettre de prendre un composant en argument de généricité

  1. Il faut que le composant propose une notation d'appel:
component inv[Size : Int]
    (i_data) = o_data

    i_data : bSize
    o_data : bSize

o_data = ~i_data
  1. Il faut créer des types de fonction (T) -> U soit:
  • arrow
    • braces
      • seplist[,, Type]
    • Type
  1. Le composant est une "valeur" de généricité. Comme tout composant, on l'instancie avec new
component map[T, U, F : (T) -> U, N : Int]
    (i_data) = o_data

    i_data : N * T
    o_data : N * U

o_data[@I] = new F(i_data[I])
  1. On l'appelle de la manière suivante:
let ys = map[F = inv](xs)

(inférence de type: soit T type de xs. inv : (T) -> T donc U = T donc ys : T)

On ne peut pas fixer de générique ici, peut-être que ça va poser problème.

Edited by come_744
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information