This repository was archived by the owner on Oct 7, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 204
This repository was archived by the owner on Oct 7, 2020. It is now read-only.
Plugin function definition #16
Copy link
Copy link
Closed
Milestone
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 IdeResponseThe 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
Dispatcherhave the signatureIdeRequest -> IdeM IdeResponse
This means theIdeMtype has to be inhaskell-ide-plugin-api, and the various instances
required become orphans, or need to be inhaskell-ide-plugin-api. - Include
GhcModTin 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 IdeResponseMetadata
Metadata
Assignees
Labels
No labels