Haskell:
Работа с CSV

Как:

Чтобы работать с CSV в Haskell, можно использовать библиотеку cassava. Установите её, добавив cassava в ваш файл .cabal или используя Stack. Вот как декодировать и кодировать данные CSV:

{-# LANGUAGE OverloadedStrings #-}

import Data.Csv
import qualified Data.ByteString.Lazy as BL
import qualified Data.Vector as V

-- Предположим, мы работаем с этим типом
type Person = (String, Int, Bool)

-- Пример данных CSV
csvData :: BL.ByteString
csvData = "John Doe,30,true\nJane Smith,25,false"

-- Декодирование данных CSV
decodePeople :: BL.ByteString -> Either String (V.Vector Person)
decodePeople = fmap snd . decode NoHeader

-- Кодирование данных в CSV
encodePeople :: V.Vector Person -> BL.ByteString
encodePeople = encode

-- Пример использования
main :: IO ()
main = do
  -- Декодирование
  case decodePeople csvData of
    Left err -> putStrLn err
    Right v -> print v
  
  -- Кодирование
  let people = V.fromList [("Alice", 23, True), ("Bob", 35, False)]
  BL.putStrLn $ encodePeople people

Пример вывода:

[("John Doe",30,True),("Jane Smith",25,False)]
"Alice",23,True
"Bob",35,False

Глубокое погружение

Обработка CSV в Haskell эволюционировала. Самые ранние методы включали в себя ручной разбор строк, что было подвержено ошибкам. cassava предлагает типобезопасный парсинг, опираясь на сильную систему типов Haskell. К альтернативам относится пакет csv, но cassava более эффективна и гибка. С точки зрения реализации, cassava использует потоки для эффективности памяти и скорости, что важно при работе с большими наборами данных.

Смотрите также