Permettre de prendre un composant en argument de généricité
- 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
- Il faut créer des types de fonction
(T) -> U
soit:
- arrow
- braces
- seplist[
,
, Type]
- seplist[
- Type
- braces
- 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])
- 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