Create TP 

Bueno, acá les dejo mi versión del tp. Usé list comprehension, que no es nada del otro mundo, es como cuando en matemática decís { x ε Naturales / f(x) = x^2}. Por ejemplo, en concatenar usé [j | k <- (x:xs), j <- k], que se lee: todos los elementos 'j' tal que 'k' son los elementos de la lista (x:xs) y 'j' los elementos de k. Entonces, los elementos de la lista de listas serían las listas de adentro, y los elementos de esas listas, todos juntos en una sola lista, serían la concatenación. Otro ejemplo en eEquivalentes: [x | x <- (listaRotac (e n k)), head x == 1], esto se lee: los 'x' tales que x son los elementos de la lista de rotaciones de E(n,k) y cumplen con el predicado "head x == 1".
Agregué también el string de error en el ejercicio 2, aunque antes había hinchado para sacarlo, porque no da que se te tilde la compu porque te confundiste el orden de los números. 
Por último elegí dentro de lo posible usar ':' en vez de '++' para aumentar un poco la velocidad. Por ejemplo en la función auxiliar rotar y listaRotac.