packages feed

haskell-debug-adapter-0.0.34.0: src/Haskell/Debug/Adapter/State/DebugRun/InternalTerminate.hs

{-# LANGUAGE MultiParamTypeClasses #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module Haskell.Debug.Adapter.State.DebugRun.InternalTerminate where

import Control.Monad.IO.Class
import qualified System.Log.Logger as L

import Haskell.Debug.Adapter.Type
import Haskell.Debug.Adapter.Constant
import qualified Haskell.Debug.Adapter.Utility as U
import qualified Haskell.Debug.Adapter.State.Utility as SU

-- |
--  Any errors should be sent back as False result Response
--
instance StateActivityIF DebugRunStateData HdaInternalTerminateRequest where
  action _ (InternalTerminateRequest req) = do
    liftIO $ L.debugM _LOG_APP $ "DebugRunState InternalTerminateRequest called. " ++ show req
    app req

-- |
--
app :: HdaInternalTerminateRequest -> AppContext (Maybe StateTransit)
app _ = do
  SU.terminateGHCi

  U.sendTerminatedEvent
  U.sendExitedEvent

  return $ Just DebugRun_Shutdown