root edited this page Oct 11, 2017 · 5 revisions

In facts before deciding between Records and Modules, consider the following:

  • Will you need to build a structure of this "type" "à la volée"
    • If so, a Record is probably better as you can't do inside terms a "let m := [module] in [expr]"
  • Do you want something very modular; for instance given three module types A, B and C, and two functors, f: A -> B and g: B -> C, be able to define the functor h: A -> C, by h=*g*o*f*?
    • If so, Records are more ... modular than ... modules...
  • Will your structure be extracted or do you want it extractable to caml/Haskell/...?
    • If so, I don't recommend use of Record (except maybe if you can express it directly with a record in the target language)
  • Will you need to define useful tactics inside your module?
    • If so you won't be able to define them inside Records, and lose the "dot" notation.
  • Will you need some toplevel instructions, such as "Implicit Arguments", "Print" and so...
    • Use Modules (Note that for Notations, you have a way to use "Reserved Notation" and "where" for Records)
  • Will you need some performances?
    • Use Modules, all is defined at toplevel and won't require function calls

In all other cases, Records are often a better solution.

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.