At the moment the plugin callback function for a particular command is defined as
type Dispatcher = forall m. (MonadIO m,GHC.GhcMonad m,HasIdeState m)
=> IdeRequest -> m IdeResponse
The monad used inside HIE is defined as
newtype IdeM a = IdeM { unIdeM :: GM.GhcModT (GM.GmOutT (StateT IdeState IO)) a}
deriving ( Functor
, Applicative
, Alternative
, Monad
, MonadPlus
, MonadIO
, GM.GmEnv
, GM.GmOut
, GM.MonadIO
, ExceptionMonad
)
data IdeState = IdeState
{
idePlugins :: Plugins
} deriving (Show)
There is a specific haskell-ide-plugin-api package for the Dispatcher type, and IdeM is defined
in the main haskell-ide-egine package.
There are a number of options for this.
- Leave things as they are. But then the GhcModT is not available to a plugin action.
- Make
Dispatcher have the signature IdeRequest -> IdeM IdeResponse
This means the IdeM type has to be in haskell-ide-plugin-api, and the various instances
required become orphans, or need to be in haskell-ide-plugin-api.
- Include
GhcModT in the constraints on the Dispatcher
Another consideration is that the haskell-ide-engine looks like it may be a
general IDE backend, usable for other languages e.g. PureScript, Idris, et al.
In this case having anything GHC related is unneccessary. In this case,
perhaps the type should be simply
type Dispatcher = forall m. (MonadIO m,HasIdeState m)
=> IdeRequest -> m IdeResponse
At the moment the plugin callback function for a particular command is defined as
The monad used inside
HIEis defined asThere is a specific
haskell-ide-plugin-apipackage for theDispatchertype, andIdeMis definedin the main
haskell-ide-eginepackage.There are a number of options for this.
Dispatcherhave the signatureIdeRequest -> IdeM IdeResponseThis means the
IdeMtype has to be inhaskell-ide-plugin-api, and the various instancesrequired become orphans, or need to be in
haskell-ide-plugin-api.GhcModTin the constraints on theDispatcherAnother consideration is that the
haskell-ide-enginelooks like it may be ageneral IDE backend, usable for other languages e.g. PureScript, Idris, et al.
In this case having anything GHC related is unneccessary. In this case,
perhaps the type should be simply