Both data types have the same name ( Module ), so as convention we will qualify the imports of the libraries to distinguish between the two.

    We can also generate the assembly code for our given module by passing a specification of the CPU and platform information we wish to target, called the .

    In addition to this we’ll often be dealing with operations which can fail in an EitherT monad if given bad code. We’ll often want to lift this error up the monad transformer stack with the pattern: