module Main where
import qualified Control.Stasis as S

main :: IO ()
main = do
        -- put the value "abc" into stasis
        s <- S.stasis "abc"
        v <- S.get s
        ver <- S.version s
        print(show ver ++ ":" ++ v) -- version 1, abc
        --forever $ do
        -- replace "abc" with hello
        _ <- S.put "hello "  s
        v2 <- S.get s
        ver2 <- S.version s
        print(show ver2 ++ ":" ++ v2) -- version 2, hello
        --freeze version two
        frozenS <- S.freeze s
        _ <- S.put " replaced hello" s
        v3 <- S.get s
        ver3 <- S.version s
        -- notice action on frozen version is pure, always returns same thing
        let v2Frozen = S.fetch frozenS
        let ver2F = S.versionF frozenS
        print(show ver3 ++ ":" ++ v3)
        -- 2:hello because these values were frozen at version 2
        print(show ver2F ++ ":" ++ v2Frozen) --