packages feed

charter-0.1.1.0: app/Examples/Random.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
module Examples.Random where

import Charts
import Control.Monad.Random
import Data.Traversable
import Data.Aeson
import Control.Concurrent

randomChart :: IO Chart
randomChart = do
    rows <- for [1..10] $ \i -> do
                a <- randomRIO (0, 1)
                b <- randomRIO (0, 1)
                return [toJSON @Int i, toJSON @Float a, toJSON @Double b]
    return $ buildChart defaultChartOptions ScatterChart [NumberColumn "Iteration", NumberColumn "Value A", NumberColumn "Value B"] rows

buildRandomChart :: (Chart -> IO ()) -> IO ()
buildRandomChart sendChart = forever $ do
    randomChart >>= sendChart
    threadDelay 2000000

serveUpdatingRandomChart :: IO ()
serveUpdatingRandomChart = serveDynamicChart 8080 buildRandomChart