Actualmente me estoy enseñando a mí mismo Haskell, y me pregunto cuáles son las mejores prácticas cuando se trabaja con cadenas en Haskell.Implementación eficiente de cadenas en Haskell
La implementación de cadena predeterminada en Haskell es una lista de Char. Esto es ineficaz para entrada-salida de archivo, según Real World Haskell, ya que cada carácter se asigna por separado (supongo que esto significa que una cadena es básicamente una lista vinculada en Haskell, pero no estoy seguro)
Pero si la implementación de cadena predeterminada es ineficaz para el archivo de E/S, ¿también es ineficaz para trabajar con cadenas en la memoria? ¿Por qué o por qué no? C usa una matriz de caracteres para representar una Cadena, y asumí que esta sería la forma predeterminada de hacer las cosas en la mayoría de los idiomas.
Según lo veo, la implementación de la lista de String ocupará más memoria, ya que cada carácter requerirá sobrecarga, y también más tiempo para iterar, porque se requerirá una desreferenciación del puntero para llegar al siguiente carácter. Pero hasta ahora me ha gustado jugar con Haskell, así que quiero creer que la implementación predeterminada es eficiente.
La implementación predeterminada es lo que es más conveniente para trabajar, para cadenas pequeñas y las operaciones comunes que uno quiere realizar en ellas. Para las cadenas grandes que quiere considerar básicamente como un bloque de bytes, no es eficiente; use Data.ByteString o Data.ByteString.Lazy – ShreevatsaR