packages feed

essence-of-live-coding-0.2.7: src/LiveCoding/Migrate/Debugger.hs

{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE RecordWildCards #-}

module LiveCoding.Migrate.Debugger where

-- base
import Data.Data

-- essence-of-live-coding
import LiveCoding.Debugger
import LiveCoding.Migrate.Migration

maybeMigrateToDebugging ::
  (Typeable state', Typeable state) =>
  Debugging dbgState state ->
  state' ->
  Maybe (Debugging dbgState state)
maybeMigrateToDebugging Debugging {dbgState} state' = do
  state <- cast state'
  return Debugging {..}

-- | Tries to cast the current state into the joint state of debugger and program.
migrationToDebugging :: Migration
migrationToDebugging = migrationTo2 maybeMigrateToDebugging

maybeMigrateFromDebugging ::
  (Typeable state', Typeable state) =>
  Debugging dbgState state ->
  Maybe state'
maybeMigrateFromDebugging Debugging {state} = cast state

-- | Try to extract a state from the current joint state of debugger and program.
migrationFromDebugging :: Migration
migrationFromDebugging = constMigrationFrom2 maybeMigrateFromDebugging

-- | Combines 'migrationToDebugging' and 'migrationFromDebugging'.
migrationDebugging :: Migration
migrationDebugging = migrationToDebugging <> migrationFromDebugging