+getInteraction ∷ Rsrc NormalInteraction
+getInteraction = Rsrc ask
+
+-- |Get the 'Config' value for this httpd.
+getConfig ∷ Rsrc Config
+getConfig = niConfig <$> getInteraction
+
+-- |Get the 'SockAddr' of the remote host.
+getRemoteAddr ∷ Rsrc SockAddr
+getRemoteAddr = niRemoteAddr <$> getInteraction
+
+#if defined(HAVE_SSL)
+-- | Return the X.509 certificate of the client, or 'Nothing' if:
+--
+-- * This request didn't came through an SSL stream.
+--
+-- * The client didn't send us its certificate.
+--
+-- * The 'OpenSSL.Session.VerificationMode' of
+-- 'OpenSSL.Session.SSLContext' in 'SSLConfig' has not been set to
+-- 'OpenSSL.Session.VerifyPeer'.
+getRemoteCertificate ∷ Rsrc (Maybe X509)
+getRemoteCertificate = niRemoteCert <$> getInteraction
+#endif
+
+-- |Return the 'Request' value representing the request header. You
+-- usually don't need to call this function directly.
+getRequest ∷ Rsrc Request
+getRequest = niRequest <$> getInteraction
+
+-- |Get the path of this 'Rsrc' (to be exact, 'Resource') in the
+-- corresponding 'Network.HTTP.Lucu.ResourceTree'. The result of this
+-- action is the exact path in the tree even when the 'Resource' is
+-- 'Network.HTTP.Lucu.greedy'.
+--
+-- Example:
+--
+-- @
+-- main :: 'IO' ()
+-- main = let tree :: 'Network.HTTP.Lucu.ResourceTree'
+-- tree = 'fromList' [ (["foo"], 'Network.HTTP.Lucu.greedy' resFoo) ]
+-- in 'Network.withSocketsDo' '.' 'Network.HTTP.Lucu.runHttpd' 'defaultConfig' $ 'Network.HTTP.Lucu.resourceMap' tree
+--
+-- resFoo :: 'Resource'
+-- resFoo = 'singleton'
+-- ( 'GET'
+-- , do requestURI <- 'getRequestURI'
+-- resourcePath <- 'getResourcePath'
+-- pathInfo <- 'getPathInfo'
+-- -- 'Network.URI.uriPath' requestURI '==' \"/foo/bar/baz\"
+-- -- resourcePath == ["foo"]
+-- -- pathInfo == ["bar", "baz"]
+-- ...
+-- )
+-- @
+getResourcePath ∷ Rsrc Path
+getResourcePath = niResourcePath <$> getInteraction