-// To write this down in Rust, we use a `struct`, which is a lot like structs in C:
-// Just a bunch of named fields. Every field can be private to the current module (which is the default),
-// or public (which is indicated by a `pub` in front of the name). For the sake of the tutorial, we make
-// `data` public - otherwise, the next parts of this course could not work on `BigInt`s. Of course, in a
-// real program, one would make the field private to ensure that the invariant (no trailing zeros) is maintained.
+//@ In the course of the next few parts, we are going to build a data-structure for computations
+//@ with *big* numbers. We would like to not have an upper bound to how large these numbers can
+//@ get, with the memory of the machine being the only limit.
+//@
+//@ We start by deciding how to represent such big numbers. One possibility here is to use a vector
+//@ "digits" of the number. This is like "1337" being a vector of four digits (1, 3, 3, 7), except
+//@ that we will use `u64` as type of our digits, meaning we have 2^64 individual digits. Now we
+//@ just have to decide the order in which we store numbers. I decided that we will store the least
+//@ significant digit first. This means that "1337" would actually become (7, 3, 3, 1). <br/>
+//@ Finally, we declare that there must not be any trailing zeros (corresponding to
+//@ useless leading zeros in our usual way of writing numbers). This is to ensure that
+//@ the same number can only be stored in one way.
+
+//@ To write this down in Rust, we use a `struct`, which is a lot like structs in C:
+//@ Just a bunch of named fields. Every field can be private to the current module (which is the
+//@ default), or public (which is indicated by a `pub` in front of the name). For the sake of the
+//@ tutorial, we make `data` public - otherwise, the next parts of this course could not work on
+//@ `BigInt`s. Of course, in a real program, one would make the field private to ensure that the
+//@ invariant (no trailing zeros) is maintained.