Convolutional and Linear block codes
A memoryless channel is one where the probability of an error at a particular bit is independent of what happened at all prior bit positions.  A channel can have memory if errors are correlated across bit positions.

For instance, consider the following simple binary channel: if there was no error in the prior position, then there is a probability of 0.1 that this position and the next 7 positions are all flipped (have an error); otherwise (with probability 0.9) this position is not flipped (no error).  This would be an example of a channel with memory, because the probability of error for a particular bit depends upon the location of previous errors.  Slightly more generally, bursty errors are an example of a channel with errors.

Note that the question of whether the channel has memory is independent from whether the code has memory.  You can use a memoryless code with a channel that has memory; or use a code with memory with a memoryless channel.