2024-03-25 20:08:53 +01:00

53 lines
1.3 KiB
Plaintext

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
import Prelude hiding (filter)
import Data.Csv -- this is from the Cassava library
import GHC.IO.Exception
import Data.List
import Control.Exception (try)
import qualified Data.ByteString.Lazy as BL
import qualified Data.Vector as V
import Graphics.Matplotlib
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)
data CsvData = 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 :: Either ErrorMsg CsvData -> [Float]
getList maybeCsvData = case maybeCsvData of
CsvData (_, v) -> map datum v
ErrorMsg _ -> []
getList parseCsv dataPath
d1 =<< (fmap (\x -> ) (parseCsv dataPath))
-- getValue :: TimestampedDatum -> Float
-- getValue = datum
onscreen $ getList parseCsv dataPath