2010-03-20 7 views

cevap

13

Yalnızca bir olası uygulama var, ancak birinci sınıf modüller, temel olarak varolan bir türü ve bu türü kullanan bir değeri paketleyen bir modülle, varolan türleri kodlamayı kolaylaştırır). Örneğin, Alain Frisch (dyntypes üzerinde çalışmak Alain Frisch alınan kod: http://caml.inria.fr/cgi-bin/viewvc.cgi/ocaml/branches/dyntypes/stdlib/dyntypes.ml?view=markup) Dinamik türleri üzerinde çalışmak görün

module type DYN = sig 
    type t 
    val x: t 
    val t: t ttype 
end 

type dyn = (module DYN) 

let dyn (type s) t x = 
    let module M = struct 
    type t = s 
    let x = x 
    let t = t 
    end 
    in 
    (module M : DYN) 

burada fikir "ttype" bu tür somut temsili, Int ile cebirsel veri türü olmasıdır , Float kurucuları ve benzerleri, ve burada, türü gizlenmiş, ancak bu türden somut bir temsili taşıyan, örneğin daha güvenli bir serileştirme/serileştirme elde etmek için kullanabileceğiniz bir değere sahipsiniz.

+0

Güzel. Gördüğüm aynı kavramın başka bir uygulaması: varoluşsal bir türü, bir nesneyi diğerine “bağlayabilme” ve tip sisteme göre kontrol etme yeteneği ile birleştirmek. Örneğin. Bir veritabanı bağlantısı için bir imleç oluşturun ve ardından farklı bir bağlantıyla kullanılamadığını kontrol edin. Tatlı! –