subsecuencias de longitud n desde el rendimiento de la lista

Implementé una versión de esta respuesta.https://stackoverflow.com/a/9920425/1261166 (No sé lo que pretendía la persona que responde)

sublistofsize 0 _        = [[]]
sublistofsize _ []       = []
sublistofsize n (x : xs) = sublistsThatStartWithX ++ sublistsThatDontStartWithX
  where sublistsThatStartWithX = map (x:) $ sublistofsize (n-1) xs
        sublistsThatDontStartWithX = sublistofsize n xs

de lo que no estoy seguro essublistsThatStartWithX = map (x:) $ sublistofsize (n-1) xs

Asumo que el mapa (x :) da un problema de rendimiento, pero no estoy seguro de cómo resolverlo. He hecho perfilado enprint $ length $ sublistofsize 5 $ primesToTakeFrom 50

COST CENTRE                                  MODULE                                        no.     entries  %time %alloc   %time %alloc
sublistofsize                             Main                                          112     4739871   46.9   39.9    96.9  100.0
 sublistofsize.sublistsThatDontStartWithX Main                                          124     2369935    2.2    0.0     2.2    0.0
 sublistofsize.sublistsThatStartWithX     Main                                          116     2369935   47.8   60.1    47.8   60.1

¿Lo implementé de buena manera? ¿Hay alguna forma más rápida de hacerlo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta