KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm looking at OCaml's functors . It looks to me pretty identical to the so called generic objects in C++ / C# / Java . If you ignore Java's type erasion for now, and ignore the implementation details for C++ templates (I'm interested with the language feature), functors are quite indentical to generics. If I understand it correctly, functor gives you a new set of functions from a type you provide, so that for example List<MyClass>.GetType() != List<MyOtherClass>.GetType() But you could roughly rewrite OCaml's #module Set = functor (Elt: ORDERED_TYPE) -> struct type element = Elt.t type set = element list let empty = [] let rec add x s = match s with [] -> [x] | hd::tl -> match Elt.compare x hd with Equal -> s (* x is already in s *) | Less -> x :: s (* x is smaller than all elements of s *) | Greater -> hd :: add x tl let rec member x s = match s with [] -> false | hd::tl -> match Elt.compare x hd with Equal -> true (* x belongs to s *) | Less -> false (* x is smaller than all elements of s *) | Greater -> member x tl end;; into C# class Set<T> where T : ISortable { private List<T> l = new List<T>(); static public Set<T> empty = new Set<T>(); public bool IsMember(T x) {return l.IndexOf(x) > -1;} public void Add(T x) {l.Add(x);} } Sure there's a slight different since a functor affects a Module (which is just a bunch of types function and values definitions, similar to C# '
Tags (comma-separated)
Save Edits
Cancel