Plot-ho-matic-0.5.0.1: examples/Example.hs
{-# OPTIONS_GHC -Wall #-}
{-# Language DeriveGeneric #-}
module Main where
import qualified Control.Concurrent as CC
import GHC.Generics ( Generic )
--import qualified System.Remote.Monitoring as EKG
import PlotHo ( Lookup, XAxisType(..), runPlotter, addHistoryChannel )
data Xyz a = MkXyz { x :: Double
, y :: Double
, z :: Double
, zz :: a
} deriving Generic
data Axyz = MkAxyz { lol :: Double
-- , xyzList :: S.Seq Xyz
, xyz1 :: Xyz (Xyz (Xyz Double))
, xyz2 :: Xyz Double
} deriving Generic
instance Lookup a => Lookup (Xyz a)
instance Lookup Axyz
axyz0 :: Axyz
axyz0 = MkAxyz
7
-- (S.fromList [MkXyz 1 2 3])
(MkXyz 1 2 3 (MkXyz 4 5 6 (MkXyz 7 8 9 10)))
(MkXyz 1 2 3 4)
xyz0 :: Xyz Double
xyz0 = MkXyz 1 2 3 0.1
incrementAxyz :: Axyz -> Axyz
incrementAxyz (MkAxyz a _ _) = MkAxyz
(a+0.2)
(xyz' (xyz' (xyz' (sin (3*a)))))
(xyz' (sin (2*a)))
where
xyz' w = MkXyz (sin a) (cos a) (sin a * cos a) w
incrementXyz :: Xyz a -> Xyz a
incrementXyz (MkXyz a _ _ b) = MkXyz (a+0.3) (2 * sin a) (3 * cos a) b
-- a random function to write a bunch of data to a chan
channelWriter :: Int -> Int -> (a -> a) -> a -> (a -> Bool -> IO ()) -> IO ()
channelWriter count delay increment x' chan = do
--putStrLn $ "writing: " ++ show count
CC.threadDelay delay
chan (increment x') False
channelWriter (count + 1) delay increment (increment x') chan
main :: IO ()
main = do
-- ekgTid <- fmap EKG.serverThreadId $ EKG.forkServer "localhost" 8000
runPlotter $ do
addHistoryChannel "posPlos" XAxisTime $ channelWriter 0 50000 incrementAxyz axyz0
addHistoryChannel "pos" XAxisCount $ channelWriter 0 60000 incrementXyz xyz0
addHistoryChannel "posPlos" XAxisTime0 $ channelWriter 0 50000 incrementAxyz axyz0
addHistoryChannel "pos" XAxisCount0 $ channelWriter 0 60000 incrementXyz xyz0