diff --git a/exe/Main.hs b/exe/Main.hs
--- a/exe/Main.hs
+++ b/exe/Main.hs
@@ -16,6 +16,7 @@
 import qualified Data.Cache as C
 import Data.Default
 import qualified Data.Text as T
+import qualified Data.List as L
 import Data.Typeable (typeOf)
 import HsInspect.LSP.Impl
 import qualified Language.Haskell.LSP.Control as CTRL
@@ -64,6 +65,18 @@
 lspOptions = def { Core.textDocumentSync = Just syncOptions
                  }
 
+
+makeParameterInformation :: T.Text -> Maybe [J.ParameterInformation]
+makeParameterInformation typ = do
+  let cleanSig = T.strip <$> (T.splitOn "->" . L.last . T.splitOn "::") typ
+  let numParams = L.length cleanSig
+  if numParams > 1
+  then do
+    let params = L.take (numParams - 1) cleanSig
+    paramInfoList <- Just (map (\lbl -> (J.ParameterInformation lbl Nothing )) params)
+    return paramInfoList
+  else Nothing
+
 -- TODO replace haskell-lsp (which is huge!) with a minimal jsonrpc
 --      implementation that covers only the things we actually support. The
 --      advantage would be to speedup installation for the user.
@@ -134,11 +147,6 @@
             Core.sendFunc lf . RspHover $ Core.makeResponseMessage req (Just halp)
 
       ReqCompletion req@(J.RequestMessage _ _ _ (J.CompletionParams (toFileAndNormalizedUri -> Just (filePath, uri)) (toPos -> pos) _ _)) -> do
-        -- let fileUri :: J.NormalizedUri
-        -- -- fileUri  = notification ^. J.params
-        -- --                          . J.textDocument
-        -- --                          . J.uri
-        -- --                          . to J.toNormalizedUri
         U.logs $ "reactor:complete:" ++ show (uri, pos)
         mFile <- Core.getVirtualFileFunc lf uri
         U.logs $ "mfile contents: " ++ show (VFS.virtualFileText <$> mFile)
@@ -156,17 +164,23 @@
                 Core.sendFunc lf . RspCompletion $ Core.makeResponseMessage req (J.Completions . J.List $ render <$> symbols)
           Nothing -> do
             Core.sendFunc lf . RspCompletion $ Core.makeResponseMessage req none
-        -- res <- runExceptT $ completionProvider caches file pos
-        -- let none = J.Completions $ J.List []
-        -- case res of
-        --   Left err -> do
-        --     U.logs $ "reactor:complete:err:" ++ err
-        --     Core.sendFunc lf . RspCompletion $ Core.makeResponseMessage req none
 
-        --   Right symbols -> do
-        --     let render txt = J.CompletionItem txt Nothing (J.List []) Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
-        --     Core.sendFunc lf . RspCompletion $ Core.makeResponseMessage req (J.Completions . J.List $ render <$> symbols)
+      ReqSignatureHelp req@(J.RequestMessage _ _ _ (J.TextDocumentPositionParams (toFile -> Just file) (toPos -> pos) _)) -> do
+        U.logs $ "reactor:signaturehelp:" ++ show (file, pos)
+        res <- runExceptT $ hoverProvider caches file pos
+        case res of
+          Left err -> do
+            U.logs $ "reactor:signaturehelp:err:" ++ err
 
+          Right Nothing -> do
+            U.logs $ "reactor:signaturehelp:nothing"
+
+          Right (Just (Span _ _ _ _, txt)) -> do
+            U.logs $ "reactor:signaturehelp:ok" ++ (show txt)
+            let sigInfo = J.SignatureInformation txt Nothing (makeParameterInformation txt)
+            let sigHelp = J.SignatureHelp (J.List [sigInfo]) Nothing Nothing
+            Core.sendFunc lf . RspSignatureHelp $ Core.makeResponseMessage req sigHelp
+
       -- preemptively populate caches
       NotDidOpenTextDocument (J.NotificationMessage _ _ params) -> do
         U.logs "reactor:open"
@@ -186,7 +200,6 @@
                 J.ShowMessageParams J.MtWarning $ T.pack err
 
       -- TODO definitionProvider
-      -- TODO signatureHelpProvider
       -- TODO import symbol at point (CodeActionQuickFix?)
 
       om -> do
@@ -199,6 +212,7 @@
   in def { Core.hoverHandler = Just $ passHandler ReqHover
          , Core.completionHandler = Just $ passHandler ReqCompletion
          , Core.definitionHandler = Just $ passHandler ReqDefinition
+         , Core.signatureHelpHandler = Just $ passHandler ReqSignatureHelp
          , Core.initializedHandler = Just $ passHandler NotInitialized
          , Core.didOpenTextDocumentNotificationHandler = Just $ passHandler NotDidOpenTextDocument
          , Core.didSaveTextDocumentNotificationHandler   = Just $ passHandler NotDidSaveTextDocument
diff --git a/hsinspect-lsp.cabal b/hsinspect-lsp.cabal
--- a/hsinspect-lsp.cabal
+++ b/hsinspect-lsp.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.2
 name:          hsinspect-lsp
-version:       0.0.5
+version:       0.0.6
 synopsis:      LSP interface over the hsinspect binary.
 license:       GPL-3.0-or-later
 license-file:  LICENSE
