packages feed

hanalyze-0.2.0.0: src/Hanalyze/DataIO/External.hs

{-# LANGUAGE OverloadedStrings #-}
-- |
-- Module      : Hanalyze.DataIO.External
-- Description : Hackage dataframe 経由の Parquet / JSON 外部フォーマットローダ
-- Copyright   : (c) 2026 Aelysce Project (Toshiaki Honda)
-- License     : BSD-3-Clause
--
-- External data-format loaders (Parquet / JSON) via the Hackage
-- @dataframe@ library.
--
-- Returns Hackage's 'DataFrame.Internal.DataFrame.DataFrame' directly.
-- For CSV and TSV use 'Hanalyze.DataIO.CSV.loadCSV' / @loadTSV@ instead.
module Hanalyze.DataIO.External
  ( loadParquet
  , loadJSON
  ) where

import qualified DataFrame.IO.Parquet          as DX
import qualified DataFrame.Internal.DataFrame as DXD
import qualified DataFrame.IO.JSON            as DXJ

import Control.Exception (SomeException, try)

-- | Load an Apache Parquet file (columnar, supports compression).
loadParquet :: FilePath -> IO (Either String DXD.DataFrame)
loadParquet = loadRaw DX.readParquet

-- | Load a JSON file in records-of-objects format.
loadJSON :: FilePath -> IO (Either String DXD.DataFrame)
loadJSON = loadRaw DXJ.readJSON

loadRaw :: (FilePath -> IO DXD.DataFrame)
        -> FilePath -> IO (Either String DXD.DataFrame)
loadRaw reader path = do
  result <- try (reader path) :: IO (Either SomeException DXD.DataFrame)
  return $ case result of
    Left  e  -> Left ("External loader failed: " ++ show e)
    Right df -> Right df