{-# LANGUAGE CPP, TypeFamilies #-} #if __GLASGOW_HASKELL__ >= 701 {-# LANGUAGE Safe #-} #endif module Compiler.Hoopl.Checkpoint ( CheckpointMonad(..) ) where -- | Obeys the following law: -- for all @m@ -- @ -- do { s <- checkpoint; m; restart s } == return () -- @ class Monad m => CheckpointMonad m where type Checkpoint m checkpoint :: m (Checkpoint m) restart :: Checkpoint m -> m ()