{-# LANGUAGE ExistentialQuantification #-}
module Neovim.Plugin.Internal (
ExportedFunctionality (..),
getFunction,
getDescription,
NeovimPlugin (..),
Plugin (..),
wrapPlugin,
) where
import Neovim.Context (Neovim)
import Neovim.Plugin.Classes (
FunctionalityDescription,
HasFunctionName (..),
)
import Data.MessagePack (Object)
newtype ExportedFunctionality env
= EF (FunctionalityDescription, [Object] -> Neovim env Object)
getDescription :: ExportedFunctionality env -> FunctionalityDescription
getDescription :: forall env. ExportedFunctionality env -> FunctionalityDescription
getDescription (EF (FunctionalityDescription
d, [Object] -> Neovim env Object
_)) = FunctionalityDescription
d
getFunction :: ExportedFunctionality env -> [Object] -> Neovim env Object
getFunction :: forall env.
ExportedFunctionality env -> [Object] -> Neovim env Object
getFunction (EF (FunctionalityDescription
_, [Object] -> Neovim env Object
f)) = [Object] -> Neovim env Object
f
instance HasFunctionName (ExportedFunctionality env) where
name :: ExportedFunctionality env -> FunctionName
name = forall a. HasFunctionName a => a -> FunctionName
name forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall env. ExportedFunctionality env -> FunctionalityDescription
getDescription
nvimMethod :: ExportedFunctionality env -> NvimMethod
nvimMethod = forall a. HasFunctionName a => a -> NvimMethod
nvimMethod forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall env. ExportedFunctionality env -> FunctionalityDescription
getDescription
data Plugin env = Plugin
{ forall env. Plugin env -> env
environment :: env
, forall env. Plugin env -> [ExportedFunctionality env]
exports :: [ExportedFunctionality env]
}
data NeovimPlugin = forall env. NeovimPlugin (Plugin env)
wrapPlugin :: Applicative m => Plugin env -> m NeovimPlugin
wrapPlugin :: forall (m :: * -> *) env.
Applicative m =>
Plugin env -> m NeovimPlugin
wrapPlugin = forall (f :: * -> *) a. Applicative f => a -> f a
pure forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall env. Plugin env -> NeovimPlugin
NeovimPlugin