The models may be split into these categories (list below is not fully saturated):
procedure model/function model
functions get called, functions exited. Some objects are allocated using stack and some others are allocated and managed by user. functions may have special semantics like static keywords in c or c++. Since we need to support function currying, we may in a quite different situation. A new call convention may need being created to serve our purpose.
POD (plain old data, please allow me to borrow words from OOP)
this is one of things we need to support to create a C friendly interface.
The models may be split into these categories (list below is not fully saturated):