It is for the moment mostly a suggestion.  But I would like most datatypes (e.g. channels, commitments, etc.) to be considered as abstract data types. Thus I would prefer a stronger separation between the interface and the implementation.

Consider an arbitrary abstract datatype  `MyType` : 
 - the interface goes into `MyType.h`   (abstract type declaration + public functions)
 - the representation goes into `MyType_repr.h`   (struct/union definition + "package" functions)
 - the implementation goes into `MyType.c`   (private functions + implementation of public functions)

Of course, this requires to include two distinct headers.   But when reading the source code, and if we
want to implement distinct representations, then this 3-levels separation is better.