45 lines
1.2 KiB
Haskell

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
-- This requires my custom BootTidal.hs
import Prelude hiding (filter)
import qualified Data.ByteString.Lazy as BL
import Data.Csv -- this is from the Cassava library
import qualified Data.Vector as V
-- import System.Directory (doesFileExist)
-- import Text.Printf
-- import Control.Monad (forM_)
import GHC.IO.Exception
import Control.Exception (try)
data TimestampedDatum = TimestampedDatum {
timestamp :: String,
datum :: Float
} deriving Show
dataPath = "../data/weather/balcony_temperature.csv"
instance FromNamedRecord TimestampedDatum where
parseNamedRecord r =
TimestampedDatum
<$> r .: "time"
<*> r .: "C.value"
type ErrorMsg = String
type CsvData = (Header, V.Vector TimestampedDatum)
parseCsv :: FilePath -> IO (Either ErrorMsg CsvData)
parseCsv filePath = do
result <- try $ BL.readFile filePath
return $ case result of
Left (exception :: IOException) -> Left $ show exception
Right contents -> decodeByName contents
getList :: CsvData -> V.Vector TimestampedDatum
getList = snd
-- getValue :: TimestampedDatum -> Float
-- getValue = datum