nvim-hs-0.0.1: library/Neovim/Plugin/IPC/Classes.hs
{-# LANGUAGE ExistentialQuantification #-}
{- |
Module : Neovim.Plugin.IPC.Classes
Description : Classes used for Inter Plugin Communication
Copyright : (c) Sebastian Witte
License : Apache-2.0
Maintainer : woozletoff@gmail.com
Stability : experimental
Portability : GHC
-}
module Neovim.Plugin.IPC.Classes
where
import Data.Data (Typeable, cast)
-- | Taken from xmonad and based on ideas in /An Extensible Dynamically-Typed
-- Hierarchy of Exceptions/, Simon Marlow, 2006.
--
-- User-extensible messages must be put into a value of this type, so that it
-- can be sent to other plugins.
data SomeMessage = forall msg. Message msg => SomeMessage msg
class Typeable message => Message message where
-- | Try to convert a given message to a value of the message type we are
-- interested in. Will evaluate to 'Nothing' for any other type.
fromMessage :: SomeMessage -> Maybe message
fromMessage (SomeMessage message) = cast message