История изменений
Исправление Miguel, (текущая версия) :
Не увидел сложного способа.
Дженерик-тип зависит только от типов. Функторы дают возможность типам зависеть от переменных. Не от их значений, правда, а от их identity, но чтобы сделать такое без них, нужно сильно извратиться. Даже на Хаскеле.
module type T = sig val x : int end
module type SF = functor (A : T) -> sig type t val a : t end
module S : SF = functor (A : T) -> struct type t = int let a = 146 + A.x end
module T1 = struct let x = 0 end
module T2 = struct let x = 1 end
module T3 = struct let x = 0 end
module S1 = S(T1)
module S2 = S(T2)
module S3 = S(T3)
Исправление Miguel, :
Не увидел сложного способа.
Дженерик-тип зависит только от типов. Функторы дают возможность типам зависеть от переменных. Не от их значений, правда, а от их identity, но чтобы сделать такое без них, нужно сильно извратиться. Даже на Хаскеле.
module type T = sig val x : int end
module type SF = functor (A : T) -> sig type t val a : t end
module S : SF = functor (A : T) -> struct type t = int let a = 146 + A.a end
module T1 = struct let x = 0 end
module T2 = struct let x = 1 end
module T3 = struct let x = 0 end
module S1 = S(T1)
module S2 = S(T2)
module S3 = S(T3)
Исправление Miguel, :
Не увидел сложного способа.
Дженерик-тип зависит только от типов. Функторы дают возможность типам зависеть от переменных. Не от их значений, правда, а от их identity, но чтобы сделать такое без них, нужно сильно извратиться. Даже на Хаскеле.
module type T = sig val x : int end
module type SF = functor (A : T) -> sig type t val a : t end
module S : SF = functor (A : T) -> struct type t = int let a = 146 + T.a end
module T1 = struct let x = 0 end
module T2 = struct let x = 1 end
module T3 = struct let x = 0 end
module S1 = S(T1)
module S2 = S(T2)
module S3 = S(T3)
Исходная версия Miguel, :
Не увидел сложного способа.
Дженерик-тип зависит только от типов. Функторы дают возможность типам зависеть от переменных. Не от их значений, правда, а от их identity, но чтобы сделать такое без них, нужно сильно извратиться. Даже на Хаскеле.
module type T = sig val x : int end
module type SF = functor (A : T) -> sig type t val a : t end
module S : SF = functor (A : T) -> struct type t = int let a = 146 end
module T1 = struct let x = 0 end
module T2 = struct let x = 1 end
module T3 = struct let x = 0 end
module S1 = S(T1)
module S2 = S(T2)
module S3 = S(T3)