Hola, tengo algunas de dudas.
La primera es si lo que se pide es que cada función tenga la forma
takeWhileR p xs = unfoldr ... (para el caso Repr)
takeWhileS p xs = unfoldS ... (para el caso Stream)
...
donde unfoldr y unfoldS son las que están definidas en streamFusion.hs.
Por otro lado, en el caso de tails, tuve que concatenar la lista [ [ ] ] depués del unfoldr / unfoldS. No logro ver cómo hacerlo a nivel de la representación.
Lo último. Comparando las funciones con las dos representaciones, me quedaron esencialmente iguales. No veo cómo sacar ventaja del hecho que Stream te permite hacer "transiciones silenciosas del autómata" mediante Skip (de hecho, no utilicé Skip). Se me ocurre que podría utilizar Skip en la función evens, para omitir los elementos en posiciones impares, pero tendría que saber de alguna forma en qué posición estoy en cada momento.
Saludos