OCaml karşılıklı özyinelemeli modül tanımları kullanırken, hatta .ml
dosyada, imzaları vermek gereklidir. Bu benim de iki kez imza tekrarlayarak sona kadar, .mli
, belirli bir arabirim göstermesini istediğiniz bir sıkıntıdır. :(!OCaml'deki karşılıklı özyinelemeli modüllerdeki imza gereksinimi neden?
module rec Client : sig
type ('serv,'cli) t
(* functions ... *)
end = struct
type ('serv,'cli) t =
{ server: ('serv,'cli) Server.t
; (* other members ... *)
}
end
and Server : sig
type ('serv,'cli) t
(* functions ... *)
end = struct
type ('serv,'cli) t =
{ mutable clients: ('serv,'cli) Client.t list
; mutable state: 'serv
}
(* functions again ... *)
end
Bu ne yapıyorum kaba bir tahmindir (Client
tip nesneler onları örneği Server
biliyorum. Server
ler kendi Client
s biliyorum). Elbette
, imzalar vardır . .mli
tekrarlanan neden gereklidir
(Not:. Ben şikayetçi değilim, ama aslında bir tip-teori ya da "sert derleyici sorunu" Bunun lı sebebi varsa bilmek istiyorum)?
Bu mantıklı. Gerçekten de, ".mli" deki dış tüketiciler için farklı bir tür imzasını ortaya çıkararak bu "özellikten" yararlanıyorum; Fark etmeliydim. – Ashe
İyi tahmin. Tip ek açıklamaları gereklidir, çünkü karşılıklı olarak özyinelemeli modüller ve fiderler durumunda çıkarım genel olarak kabul edilemez. Literatür, minimum ek açıklama gerekliliklerini optimize etmek ve sağlamlığı korumak için tip sistemleri iyileştirme girişimleri ile doludur. OCaml'ın tip sisteminin, ek açıklama zorunluluğunu azaltmak için geliştirilip geliştirilemeyeceği tartışmalıdır. –