Siempre escribió mi lista productoras de funciones recursivas en este formato:Lista Haskell concatenación frente (cabeza: la cola) Formato
recursiveFunc :: [a] -> [b]
recursiveFunc (x:xs) = [change x] ++ resursiveFunc xs where
change :: a -> b
change x = ...
Soy consciente de cualquier función como el arriba puede ser escrito para el caso a -> b
y luego simplemente map
ed sobre un conjunto [a]
, pero tome esta situación diluida como un ejemplo.
HLint sugiere reemplazar [change x] ++ recursiveFunc xs
con change x : recursiveFunc xs
.
¿Es esta sugerencia puramente estética, o hay algún efecto sobre cómo Haskell ejecuta la función?
Bueno, con un primer argumento de elemento único, '++' * * solo * cons' una vez y luego se cierra, pero es una forma muy indirecta de anteponer un solo valor. – delnan
Su versión tiene la ventaja de que si en algún momento decide modificar su función de modo que se agregue más de un elemento a la lista, habrá menos cambios. –
hlint sugerencias no cambian el resultado de una expresión. –