This repository was archived by the owner on Oct 7, 2020. It is now read-only.
This repository was archived by the owner on Oct 7, 2020. It is now read-only.
Plugin function definition #16
Closed
Description
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 signatureIdeRequest -> IdeM IdeResponse
This means theIdeM
type has to be inhaskell-ide-plugin-api
, and the various instances
required become orphans, or need to be inhaskell-ide-plugin-api
. - Include
GhcModT
in the constraints on theDispatcher
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
Metadata
Metadata
Assignees
Labels
No labels