Estoy trabajando en el análisis de un archivo CSV en un tipo CSV que es una lista de registros que es una lista de campos, que son solo cadenas. Después de insertar una nueva fila y luego intentar acceder al csv obtengo el error de desbordamiento de c stack. He leído que este error puede provenir de un "thunk" demasiado grande al usar la recursividad de la cola, pero no creo que eso sea lo que estoy haciendo mal."ERROR - Desbordamiento de pila C" en Haskell usando los abrazos
type CSV = [Record]
type Record = [Field]
type Field = String
run :: IO()
run =
do
inFile <- readFile "myFile.csv"
let csv = parse inFile
let csv = (insertRow "abc,def,ghi" csv)
putStr (show csv)
insertRow :: String -> CSV -> CSV
insertRow newRow csv = csv ++ [toRecord newRow]
parse :: String -> CSV
parse file = map toRecord (parseLines file "" [])
toRecord :: String -> Record
toRecord line = parseWords line "" []
-- parseLine input partialCSV records
parseLines :: String -> String -> [String] -> [String]
parseLines [] partial records = records ++ [partial]
parseLines ('\r':xs) partial records = parseLines xs [] (records ++ [partial])
parseLines (x:xs) partial records = parseLines xs (partial ++ [x]) records
-- parseWords input partialRecord fields
parseWords :: String -> String -> [String] -> [String]
parseWords [] partial fields = fields ++ [partial]
parseWords ('"':xs) partial fields = parseQuotes xs partial fields
parseWords (',':xs) partial fields = parseWords xs [] (fields ++ [partial])
parseWords (x:xs) partial fields = parseWords xs (partial ++ [x]) fields
parseQuotes :: String -> String -> [String] -> [String]
parseQuotes ('"':xs) partial fields = parseWords xs [] (fields ++ [partial])
parseQuotes (x:xs) partial fields = parseQuotes xs (partial ++ [x]) fields
Sin relación con su problema, la última versión de abrazos tiene más de cinco años. El lenguaje evoluciona aún más, también ghci tiene un mejor rendimiento (y viene con un compilador;). Aunque es triste, recomiendo no seguir abrazando (hasta que alguien lo reviva). –