packages feed

Plot-ho-matic-0.6.0.0: examples/SetExample.hs

{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE DeriveGeneric #-}

-- export Bar/Foo to silence warnings about unused records
module Main ( Bar(..), Foo(..), main ) where

import GHC.Generics ( Generic )

import Data.IORef ( newIORef, readIORef, writeIORef )

import SetHo ( runSetter )
import Accessors ( Lookup )

data Bar =
  Bar
  { bar1 :: Double
  , bar2 :: Int
  , bar3 :: Bool
  } deriving (Generic, Show)
instance Lookup Bar

data Foo =
  Foo
  { foo1 :: Double
  , foo2 :: Int
  , fooBar :: Bar
  } deriving (Generic, Show)
instance Lookup Foo

initialFoo :: Foo
initialFoo = Foo pi 42 (Bar 1 2 True)

main :: IO ()
main = do
  fooRef <- newIORef initialFoo
  let refresh = readIORef fooRef
      commit x = print x >> writeIORef fooRef x
  runSetter initialFoo refresh commit