A Fortran 2003 module, which provides a quaternion type with common operations as type-bound procedures and several functions on type quaternion (including overloading of + / - / * / =)