Files
p2p-rendering-computation/Docs/haskell/P2PRC.html

36 lines
53 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /><title>P2PRC</title><link href="linuwial.css" rel="stylesheet" type="text/css" title="Linuwial" /><link rel="stylesheet" type="text/css" href="quick-jump.css" /><link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=PT+Sans:400,400i,700" /><script src="haddock-bundle.min.js" async="async" type="text/javascript"></script><script type="text/x-mathjax-config">MathJax.Hub.Config({ tex2jax: { processClass: "mathjax", ignoreClass: ".*" } });</script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script></head><body><div id="package-header"><span class="caption">p2prc-0.1.0.0: P2PRC haskell library</span><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul></div><div id="content"><div id="module-header"><table class="info"><tr><th valign="top">Copyright</th><td>Copyright (C) 2024-2024 Jose Fernandes</td></tr><tr><th>License</th><td>GNU GPL, version 2 or above</td></tr><tr><th>Maintainer</th><td>Jose Fernandes &lt;jf94.uk@gmail.com&gt;</td></tr><tr><th>Stability</th><td>beta</td></tr><tr><th>Portability</th><td>portable</td></tr><tr><th>Safe Haskell</th><td>Safe-Inferred</td></tr><tr><th>Language</th><td>GHC2021</td></tr></table><p class="caption">P2PRC</p></div><div id="table-of-contents"><div id="contents-list"><p class="caption" onclick="window.scrollTo(0,0)">Contents</p><ul><li><a href="#g:1">Functions</a></li><li><a href="#g:2">Data Types</a><ul><li><a href="#g:3">Interface data types</a></li><li><a href="#g:4">Primitive data types</a></li><li><a href="#g:5">Type Synonyms</a></li></ul></li></ul></div></div><div id="description"><p class="caption">Description</p><div class="doc"><p>This library provides an interface to the P2Prc runtime.</p><p>This Module intends to export the main functions and data type definitions necessary to get started with the P2PRC api.</p><p>A minimal application will require the import of <code><a href="P2PRC.html#v:runP2PRC" title="P2PRC">runP2PRC</a></code> function that accepts a <code><a href="P2PRC.html#t:MapPortRequest" title="P2PRC">MapPortRequest</a></code> value that exposes a specific port number and associates it with a domain name in the internet.</p><p>This is a small template to get quickly get started with this interface. We assume the user has already an application listening on the tcp socket &quot;8080&quot;.</p><pre>module Main where
import P2PRC
( runP2PRC
, MapPortRequest(MkMapPortRequest)
)
main :: IO ()
main =
runP2PRC
( MkMapPortRequest 8080 &quot;jose.akilan.io&quot;
)</pre></div></div><div id="synopsis"><details id="syn"><summary>Synopsis</summary><ul class="details-toggle" data-details-id="syn"><li class="src short"><a href="#v:runP2PRC">runP2PRC</a> :: <a href="P2PRC.html#t:MapPortRequest" title="P2PRC">MapPortRequest</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/System-IO.html#t:IO" title="System.IO">IO</a> ()</li><li class="src short"><a href="#v:getP2prcAPI">getP2prcAPI</a> :: <a href="P2PRC.html#t:IOEitherError" title="P2PRC">IOEitherError</a> <a href="P2PRC.html#t:P2PRCapi" title="P2PRC">P2PRCapi</a></li><li class="src short"><span class="keyword">data</span> <a href="#t:P2PRCapi">P2PRCapi</a> = <a href="#v:MkP2PRCapi">MkP2PRCapi</a> {<ul class="subs"><li><a href="#v:startServer">startServer</a> :: <a href="P2PRC.html#t:IOEitherError" title="P2PRC">IOEitherError</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/process-1.6.19.0/System-Process.html#t:ProcessHandle" title="System.Process">ProcessHandle</a></li><li><a href="#v:execInitConfig">execInitConfig</a> :: <a href="P2PRC.html#t:IOEitherError" title="P2PRC">IOEitherError</a> <a href="P2PRC.html#t:P2prcConfig" title="P2PRC">P2prcConfig</a></li><li><a href="#v:execListServers">execListServers</a> :: <a href="P2PRC.html#t:IOEitherError" title="P2PRC">IOEitherError</a> <a href="P2PRC.html#t:IPAddressTable" title="P2PRC">IPAddressTable</a></li><li><a href="#v:execMapPort">execMapPort</a> :: <a href="P2PRC.html#t:MapPortRequest" title="P2PRC">MapPortRequest</a> -&gt; <a href="P2PRC.html#t:IOEitherError" title="P2PRC">IOEitherError</a> <a href="P2PRC.html#t:MapPortResponse" title="P2PRC">MapPortResponse</a></li></ul>}</li><li class="src short"><span class="keyword">newtype</span> <a href="#t:P2prcConfig">P2prcConfig</a> = <a href="#v:MkP2prConfig">MkP2prConfig</a> {<ul class="subs"><li><a href="#v:machineName">machineName</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></li></ul>}</li><li class="src short"><span class="keyword">data</span> <a href="#t:MapPortRequest">MapPortRequest</a> = <a href="#v:MkMapPortRequest">MkMapPortRequest</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></li><li class="src short"><span class="keyword">newtype</span> <a href="#t:MapPortResponse">MapPortResponse</a> = <a href="#v:MkMapPortResponse">MkMapPortResponse</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></li><li class="src short"><span class="keyword">newtype</span> <a href="#t:IPAddressTable">IPAddressTable</a> = <a href="#v:MkIPAddressTable">MkIPAddressTable</a> [<a href="P2PRC.html#t:ServerInfo" title="P2PRC">ServerInfo</a>]</li><li class="src short"><span class="keyword">data</span> <a href="#t:ServerInfo">ServerInfo</a> = <a href="#v:MkServerInfo">MkServerInfo</a> {<ul class="subs"><li><a href="#v:name">name</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/text-2.0.2/Data-Text.html#t:Text" title="Data.Text">Text</a></li><li><a href="#v:ip">ip</a> :: <a href="P2PRC.html#t:IPAddress" title="P2PRC">IPAddress</a></li><li><a href="#v:latency">latency</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></li><li><a href="#v:download">download</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></li><li><a href="#v:upload">upload</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></li><li><a href="#v:serverPort">serverPort</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></li><li><a href="#v:bareMetalSSHPort">bareMetalSSHPort</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Maybe.html#t:Maybe" title="Data.Maybe">Maybe</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></li><li><a href="#v:nat">nat</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a></li><li><a href="#v:escapeImplementation">escapeImplementation</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Maybe.html#t:Maybe" title="Data.Maybe">Maybe</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/text-2.0.2/Data-Text.html#t:Text" title="Data.Text">Text</a></li><li><a href="#v:customInformation">customInformation</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Maybe.html#t:Maybe" title="Data.Maybe">Maybe</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/text-2.0.2/Data-Text.html#t:Text" title="Data.Text">Text</a></li></ul>}</li><li class="src short"><span class="keyword">data</span> <a href="#t:IPAddress">IPAddress</a><ul class="subs"><li>= <a href="#v:MkIPv4">MkIPv4</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></li><li>| <a href="#v:MkIPv6">MkIPv6</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></li></ul></li><li class="src short"><span class="keyword">data</span> <a href="#t:Error">Error</a><ul class="subs"><li>= <a href="#v:MkCLISystemError">MkCLISystemError</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></li><li>| <a href="#v:MkErrorSpawningProcess">MkErrorSpawningProcess</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></li><li>| <a href="#v:MkUnknownError">MkUnknownError</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></li></ul></li><li class="src short"><span class="keyword">type</span> <a href="#t:IOEitherError">IOEitherError</a> a = <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/System-IO.html#t:IO" title="System.IO">IO</a> (<a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Either.html#t:Either" title="Data.Either">Either</a> <a href="P2PRC.html#t:Error" title="P2PRC">Error</a> a)</li></ul></details></div><div id="interface"><a href="#g:1" id="g:1"><h1>Functions</h1></a><div class="doc"><p>These are the available functions available to interact with the P2Prc environment, at a lower level of abstraction.
It is intended this way to give freedom to the developer to implement their own orchestration strategies.</p></div><div class="top"><p class="src"><a id="v:runP2PRC" class="def">runP2PRC</a> <a href="#v:runP2PRC" class="selflink">#</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="P2PRC.html#t:MapPortRequest" title="P2PRC">MapPortRequest</a></td><td class="doc"><p>TCP Port Request</p></td></tr><tr><td class="src">-&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/System-IO.html#t:IO" title="System.IO">IO</a> ()</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>This function starts and bootstraps the P2PRC runtime that associates the a specific host's machine port to a DNS address to expose a certain application to the P2PRC network. You will only need to also import the <code><a href="P2PRC.html#v:MkMapPortRequest" title="P2PRC">MkMapPortRequest</a></code> data constructor to represent the this port request.</p><h4 class="subheading details-toggle-control details-toggle" data-details-id="ch:runP2PRC0">Example</h4><details id="ch:runP2PRC0"><summary class="hide-when-js-enabled">Expand</summary><p>This example demonstrates how it can be ran on the IO context:</p><pre> example :: IO ()
example = do
runP2PRC
( MkMapPortRequest 8080 &quot;jose.akilan.io&quot;
)
</pre></details></div></div><div class="top"><p class="src"><a id="v:getP2prcAPI" class="def">getP2prcAPI</a> :: <a href="P2PRC.html#t:IOEitherError" title="P2PRC">IOEitherError</a> <a href="P2PRC.html#t:P2PRCapi" title="P2PRC">P2PRCapi</a> <a href="#v:getP2prcAPI" class="selflink">#</a></p><div class="doc"><div class="warning"><p>Warning: This function is currently unstable since it assumes that the Haskell program is executed from the P2PRC &quot;haskell&quot; subfolder and the &quot;p2prc&quot; executable in the the root folder.</p></div><p>This function cleans the previous running state (ensuring a pure P2PRC runtime state) and builds up a conditional <code><a href="P2PRC.html#t:P2PRCapi" title="P2PRC">P2PRCapi</a></code> instance.</p><h4 class="subheading details-toggle-control details-toggle" data-details-id="ch:getP2prcAPI0">Example</h4><details id="ch:getP2prcAPI0"><summary class="hide-when-js-enabled">Expand</summary><p>The following example show how this function can be used to expose the runtime functionalities:</p><pre> example :: IOEitherError P2PRCapi
example = do
eitherP2prcAPI &lt;- getP2prcAPI
case eitherP2prcAPI of
( Right
( MkP2PRCapi
{ startServer = startServer
, execInitConfig = execInitConfig
, execListServers = execListServers
, execMapPort = execMapPort
}
)) -&gt; do
-- Your code logic
errValue -&gt; errValue
</pre></details></div></div><a href="#g:2" id="g:2"><h1>Data Types</h1></a><div class="doc"><p>This section describes and explains the library's type system, more specifically, the interfaces and primitive types.</p></div><a href="#g:3" id="g:3"><h2>Interface data types</h2></a><div class="doc"><p>This section gives an overview on the runtime and host machine interfaces.</p></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:P2PRCapi" class="def">P2PRCapi</a> <a href="#t:P2PRCapi" class="selflink">#</a></p><div class="doc"><p>Lower level P2PRC Haskell api that exposes basic functionality necessary to joint the network.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:MkP2PRCapi" class="def">MkP2PRCapi</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src"><a id="v:startServer" class="def">startServer</a> :: <a href="P2PRC.html#t:IOEitherError" title="P2PRC">IOEitherError</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/process-1.6.19.0/System-Process.html#t:ProcessHandle" title="System.Process">ProcessHandle</a></dfn><div class="doc"><p>Start server</p></div></li><li><dfn class="src"><a id="v:execInitConfig" class="def">execInitConfig</a> :: <a href="P2PRC.html#t:IOEitherError" title="P2PRC">IOEitherError</a> <a href="P2PRC.html#t:P2prcConfig" title="P2PRC">P2prcConfig</a></dfn><div class="doc"><p>Instantiate server configuration</p></div></li><li><dfn class="src"><a id="v:execListServers" class="def">execListServers</a> :: <a href="P2PRC.html#t:IOEitherError" title="P2PRC">IOEitherError</a> <a href="P2PRC.html#t:IPAddressTable" title="P2PRC">IPAddressTable</a></dfn><div class="doc"><p>List servers in network</p></div></li><li><dfn class="src"><a id="v:execMapPort" class="def">execMapPort</a> :: <a href="P2PRC.html#t:MapPortRequest" title="P2PRC">MapPortRequest</a> -&gt; <a href="P2PRC.html#t:IOEitherError" title="P2PRC">IOEitherError</a> <a href="P2PRC.html#t:MapPortResponse" title="P2PRC">MapPortResponse</a></dfn><div class="doc"><p>Exposes and associates a local TCP port with a remote DNS address</p></div></li></ul></div></td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">newtype</span> <a id="t:P2prcConfig" class="def">P2prcConfig</a> <a href="#t:P2prcConfig" class="selflink">#</a></p><div class="doc"><div class="warning"><p>Warning: This type is unstable at the moment due to the P2PRC's library error handling bug. For more information visit: <a href="https://github.com/Akilan1999/p2p-rendering-computation/issues/114#issuecomment-2474737015">https://github.com/Akilan1999/p2p-rendering-computation/issues/114#issuecomment-2474737015</a></p></div><p>This represents the server configuration that defines its attributes and behaviours in the network, as well as, the location of the runtime persistence artifacts.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:MkP2prConfig" class="def">MkP2prConfig</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src"><a id="v:machineName" class="def">machineName</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></dfn><div class="doc"><p>Machine Name</p></div></li></ul></div></td></tr></table></div><div class="subs instances"><h4 class="instances details-toggle-control details-toggle" data-details-id="i:P2prcConfig">Instances</h4><details id="i:P2prcConfig" open="open"><summary class="hide-when-js-enabled">Instances details</summary><table><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:P2prcConfig:FromJSON:1"></span> <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:FromJSON" title="Data.Aeson.Types">FromJSON</a> <a href="P2PRC.html#t:P2prcConfig" title="P2PRC">P2prcConfig</a></span> <a href="#t:P2prcConfig" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:P2prcConfig:FromJSON:1"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="JSON.html">JSON</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:parseJSON">parseJSON</a> :: <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Value" title="Data.Aeson.Types">Value</a> -&gt; <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Parser" title="Data.Aeson.Types">Parser</a> <a href="P2PRC.html#t:P2prcConfig" title="P2PRC">P2prcConfig</a> <a href="#v:parseJSON" class="selflink">#</a></p><p class="src"><a href="#v:parseJSONList">parseJSONList</a> :: <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Value" title="Data.Aeson.Types">Value</a> -&gt; <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Parser" title="Data.Aeson.Types">Parser</a> [<a href="P2PRC.html#t:P2prcConfig" title="P2PRC">P2prcConfig</a>] <a href="#v:parseJSONList" class="selflink">#</a></p><p class="src"><a href="#v:omittedField">omittedField</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Maybe.html#t:Maybe" title="Data.Maybe">Maybe</a> <a href="P2PRC.html#t:P2prcConfig" title="P2PRC">P2prcConfig</a> <a href="#v:omittedField" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:P2prcConfig:Show:2"></span> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:Show" title="Text.Show">Show</a> <a href="P2PRC.html#t:P2prcConfig" title="P2PRC">P2prcConfig</a></span> <a href="#t:P2prcConfig" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:P2prcConfig:Show:2"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="JSON.html">JSON</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="P2PRC.html#t:P2prcConfig" title="P2PRC">P2prcConfig</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="P2PRC.html#t:P2prcConfig" title="P2PRC">P2prcConfig</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="P2PRC.html#t:P2prcConfig" title="P2PRC">P2prcConfig</a>] -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></details></td></tr></table></details></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:MapPortRequest" class="def">MapPortRequest</a> <a href="#t:MapPortRequest" class="selflink">#</a></p><div class="doc"><p>This defines the request required to create an association between a TCP socket port and a DNS server in the network. If successful, it makes a resource available in the network.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:MkMapPortRequest" class="def">MkMapPortRequest</a></td><td class="doc"><p>P2PRC's port allocation request value</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src"><a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></dfn><div class="doc"><p>TCP socket number</p></div></li><li><dfn class="src"><a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></dfn><div class="doc"><p>Network domain name</p></div></li></ul></div></td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">newtype</span> <a id="t:MapPortResponse" class="def">MapPortResponse</a> <a href="#t:MapPortResponse" class="selflink">#</a></p><div class="doc"><div class="warning"><p>Warning: This newtype is unstable at the moment due to the P2PRC's library error handling bug. For more information visit: <a href="https://github.com/Akilan1999/p2p-rendering-computation/issues/114#issuecomment-2474737015">https://github.com/Akilan1999/p2p-rendering-computation/issues/114#issuecomment-2474737015</a></p></div><p>This represents P2PRC's response to the TCP port and DNS address allocation. This value will confirm the successful allocation and return information about it.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:MkMapPortResponse" class="def">MkMapPortResponse</a></td><td class="doc"><p>Allocation information value</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src"><a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></dfn><div class="doc"><p>Column separated Host's IP address and Port String</p></div></li></ul></div></td></tr></table></div><div class="subs instances"><h4 class="instances details-toggle-control details-toggle" data-details-id="i:MapPortResponse">Instances</h4><details id="i:MapPortResponse" open="open"><summary class="hide-when-js-enabled">Instances details</summary><table><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:MapPortResponse:FromJSON:1"></span> <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:FromJSON" title="Data.Aeson.Types">FromJSON</a> <a href="P2PRC.html#t:MapPortResponse" title="P2PRC">MapPortResponse</a></span> <a href="#t:MapPortResponse" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:MapPortResponse:FromJSON:1"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="JSON.html">JSON</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:parseJSON">parseJSON</a> :: <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Value" title="Data.Aeson.Types">Value</a> -&gt; <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Parser" title="Data.Aeson.Types">Parser</a> <a href="P2PRC.html#t:MapPortResponse" title="P2PRC">MapPortResponse</a> <a href="#v:parseJSON" class="selflink">#</a></p><p class="src"><a href="#v:parseJSONList">parseJSONList</a> :: <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Value" title="Data.Aeson.Types">Value</a> -&gt; <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Parser" title="Data.Aeson.Types">Parser</a> [<a href="P2PRC.html#t:MapPortResponse" title="P2PRC">MapPortResponse</a>] <a href="#v:parseJSONList" class="selflink">#</a></p><p class="src"><a href="#v:omittedField">omittedField</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Maybe.html#t:Maybe" title="Data.Maybe">Maybe</a> <a href="P2PRC.html#t:MapPortResponse" title="P2PRC">MapPortResponse</a> <a href="#v:omittedField" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:MapPortResponse:Show:2"></span> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:Show" title="Text.Show">Show</a> <a href="P2PRC.html#t:MapPortResponse" title="P2PRC">MapPortResponse</a></span> <a href="#t:MapPortResponse" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:MapPortResponse:Show:2"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="JSON.html">JSON</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="P2PRC.html#t:MapPortResponse" title="P2PRC">MapPortResponse</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="P2PRC.html#t:MapPortResponse" title="P2PRC">MapPortResponse</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="P2PRC.html#t:MapPortResponse" title="P2PRC">MapPortResponse</a>] -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></details></td></tr></table></details></div></div><a href="#g:4" id="g:4"><h2>Primitive data types</h2></a><div class="doc"><p>These types represent the core data that is communicated between requests and the runtime.</p></div><div class="top"><p class="src"><span class="keyword">newtype</span> <a id="t:IPAddressTable" class="def">IPAddressTable</a> <a href="#t:IPAddressTable" class="selflink">#</a></p><div class="doc"><div class="warning"><p>Warning: This newtype is highly unstable due to undergoing work on improving P2PRC's server api. For more information, visit: <a href="https://github.com/Akilan1999/p2p-rendering-computation/issues/114">https://github.com/Akilan1999/p2p-rendering-computation/issues/114</a></p></div><p>This is a wrapper value that parses a json key value from the list of ip addresses in the network.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:MkIPAddressTable" class="def">MkIPAddressTable</a></td><td class="doc"><p>Wrapping constructor</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src">[<a href="P2PRC.html#t:ServerInfo" title="P2PRC">ServerInfo</a>]</dfn><div class="doc"><p>List current network servers</p></div></li></ul></div></td></tr></table></div><div class="subs instances"><h4 class="instances details-toggle-control details-toggle" data-details-id="i:IPAddressTable">Instances</h4><details id="i:IPAddressTable" open="open"><summary class="hide-when-js-enabled">Instances details</summary><table><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:IPAddressTable:FromJSON:1"></span> <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:FromJSON" title="Data.Aeson.Types">FromJSON</a> <a href="P2PRC.html#t:IPAddressTable" title="P2PRC">IPAddressTable</a></span> <a href="#t:IPAddressTable" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:IPAddressTable:FromJSON:1"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="JSON.html">JSON</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:parseJSON">parseJSON</a> :: <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Value" title="Data.Aeson.Types">Value</a> -&gt; <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Parser" title="Data.Aeson.Types">Parser</a> <a href="P2PRC.html#t:IPAddressTable" title="P2PRC">IPAddressTable</a> <a href="#v:parseJSON" class="selflink">#</a></p><p class="src"><a href="#v:parseJSONList">parseJSONList</a> :: <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Value" title="Data.Aeson.Types">Value</a> -&gt; <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Parser" title="Data.Aeson.Types">Parser</a> [<a href="P2PRC.html#t:IPAddressTable" title="P2PRC">IPAddressTable</a>] <a href="#v:parseJSONList" class="selflink">#</a></p><p class="src"><a href="#v:omittedField">omittedField</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Maybe.html#t:Maybe" title="Data.Maybe">Maybe</a> <a href="P2PRC.html#t:IPAddressTable" title="P2PRC">IPAddressTable</a> <a href="#v:omittedField" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:IPAddressTable:Show:2"></span> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:Show" title="Text.Show">Show</a> <a href="P2PRC.html#t:IPAddressTable" title="P2PRC">IPAddressTable</a></span> <a href="#t:IPAddressTable" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:IPAddressTable:Show:2"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="JSON.html">JSON</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="P2PRC.html#t:IPAddressTable" title="P2PRC">IPAddressTable</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="P2PRC.html#t:IPAddressTable" title="P2PRC">IPAddressTable</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="P2PRC.html#t:IPAddressTable" title="P2PRC">IPAddressTable</a>] -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></details></td></tr></table></details></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:ServerInfo" class="def">ServerInfo</a> <a href="#t:ServerInfo" class="selflink">#</a></p><div class="doc"><div class="warning"><p>Warning: This type is highly unstable due to undergoing work on improving P2PRC's server api. For more information, visit: <a href="https://github.com/Akilan1999/p2p-rendering-computation/issues/114">https://github.com/Akilan1999/p2p-rendering-computation/issues/114</a></p></div><p>This is a record that keeps track of the current state of every node in the network. It is crucial information required for orchestration strategies.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:MkServerInfo" class="def">MkServerInfo</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src"><a id="v:name" class="def">name</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/text-2.0.2/Data-Text.html#t:Text" title="Data.Text">Text</a></dfn><div class="doc"><p>Machine name</p></div></li><li><dfn class="src"><a id="v:ip" class="def">ip</a> :: <a href="P2PRC.html#t:IPAddress" title="P2PRC">IPAddress</a></dfn><div class="doc"><p>Machine IP address</p></div></li><li><dfn class="src"><a id="v:latency" class="def">latency</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></dfn><div class="doc"><p>Response latency</p></div></li><li><dfn class="src"><a id="v:download" class="def">download</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></dfn><div class="doc"><p>Download speed</p></div></li><li><dfn class="src"><a id="v:upload" class="def">upload</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></dfn><div class="doc"><p>Upload speed</p></div></li><li><dfn class="src"><a id="v:serverPort" class="def">serverPort</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></dfn><div class="doc"><p>Server port number</p></div></li><li><dfn class="src"><a id="v:bareMetalSSHPort" class="def">bareMetalSSHPort</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Maybe.html#t:Maybe" title="Data.Maybe">Maybe</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></dfn><div class="doc"><p>SSH machine port number</p></div></li><li><dfn class="src"><a id="v:nat" class="def">nat</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Bool.html#t:Bool" title="Data.Bool">Bool</a></dfn><div class="doc"><p>Checking if node is behind a NAT</p></div></li><li><dfn class="src"><a id="v:escapeImplementation" class="def">escapeImplementation</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Maybe.html#t:Maybe" title="Data.Maybe">Maybe</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/text-2.0.2/Data-Text.html#t:Text" title="Data.Text">Text</a></dfn><div class="doc"><p>Type of NAT trasversal technique</p></div></li><li><dfn class="src"><a id="v:customInformation" class="def">customInformation</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Maybe.html#t:Maybe" title="Data.Maybe">Maybe</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/text-2.0.2/Data-Text.html#t:Text" title="Data.Text">Text</a></dfn><div class="doc"><p>Custom String information</p></div></li></ul></div></td></tr></table></div><div class="subs instances"><h4 class="instances details-toggle-control details-toggle" data-details-id="i:ServerInfo">Instances</h4><details id="i:ServerInfo" open="open"><summary class="hide-when-js-enabled">Instances details</summary><table><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:ServerInfo:FromJSON:1"></span> <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:FromJSON" title="Data.Aeson.Types">FromJSON</a> <a href="P2PRC.html#t:ServerInfo" title="P2PRC">ServerInfo</a></span> <a href="#t:ServerInfo" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:ServerInfo:FromJSON:1"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="JSON.html">JSON</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:parseJSON">parseJSON</a> :: <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Value" title="Data.Aeson.Types">Value</a> -&gt; <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Parser" title="Data.Aeson.Types">Parser</a> <a href="P2PRC.html#t:ServerInfo" title="P2PRC">ServerInfo</a> <a href="#v:parseJSON" class="selflink">#</a></p><p class="src"><a href="#v:parseJSONList">parseJSONList</a> :: <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Value" title="Data.Aeson.Types">Value</a> -&gt; <a href="file:///home/xecarlox/.local/state/cabal/store/ghc-9.6.5/aeson-2.2.3.0-c320273fcef10264900d2ffa69f31fdcd9eff83389e3056c85943ad38f01ba76/share/doc/html/Data-Aeson-Types.html#t:Parser" title="Data.Aeson.Types">Parser</a> [<a href="P2PRC.html#t:ServerInfo" title="P2PRC">ServerInfo</a>] <a href="#v:parseJSONList" class="selflink">#</a></p><p class="src"><a href="#v:omittedField">omittedField</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Maybe.html#t:Maybe" title="Data.Maybe">Maybe</a> <a href="P2PRC.html#t:ServerInfo" title="P2PRC">ServerInfo</a> <a href="#v:omittedField" class="selflink">#</a></p></div></details></td></tr><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:ServerInfo:Show:2"></span> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:Show" title="Text.Show">Show</a> <a href="P2PRC.html#t:ServerInfo" title="P2PRC">ServerInfo</a></span> <a href="#t:ServerInfo" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:ServerInfo:Show:2"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="JSON.html">JSON</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="P2PRC.html#t:ServerInfo" title="P2PRC">ServerInfo</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="P2PRC.html#t:ServerInfo" title="P2PRC">ServerInfo</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="P2PRC.html#t:ServerInfo" title="P2PRC">ServerInfo</a>] -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></details></td></tr></table></details></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:IPAddress" class="def">IPAddress</a> <a href="#t:IPAddress" class="selflink">#</a></p><div class="doc"><p>This is a simple representation of the IP address of nodes in the network.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:MkIPv4" class="def">MkIPv4</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></td><td class="doc"><p>IP version 4 address</p></td></tr><tr><td class="src"><a id="v:MkIPv6" class="def">MkIPv6</a> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></td><td class="doc"><p>IP version 6 address</p></td></tr></table></div><div class="subs instances"><h4 class="instances details-toggle-control details-toggle" data-details-id="i:IPAddress">Instances</h4><details id="i:IPAddress" open="open"><summary class="hide-when-js-enabled">Instances details</summary><table><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:IPAddress:Show:1"></span> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:Show" title="Text.Show">Show</a> <a href="P2PRC.html#t:IPAddress" title="P2PRC">IPAddress</a></span> <a href="#t:IPAddress" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:IPAddress:Show:1"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="JSON.html">JSON</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="P2PRC.html#t:IPAddress" title="P2PRC">IPAddress</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="P2PRC.html#t:IPAddress" title="P2PRC">IPAddress</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="P2PRC.html#t:IPAddress" title="P2PRC">IPAddress</a>] -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></details></td></tr></table></details></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a id="t:Error" class="def">Error</a> <a href="#t:Error" class="selflink">#</a></p><div class="doc"><p>Haskell-side Error value. This type is designed to parse and track System and P2PRC's error signals in a safe and effective manner.</p><p>It does have an <code><a href="P2PRC.html#v:MkUnknownError" title="P2PRC">MkUnknownError</a></code> value which is meant to be warn about new kinds of error not yet accounted in this client. Github issues and pull requests are very welcome to improve error handling by parsing more types of errors.</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a id="v:MkCLISystemError" class="def">MkCLISystemError</a></td><td class="doc"><p>This is a CLI System Error</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src"><a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a></dfn><div class="doc"><p>System error code</p></div></li><li><dfn class="src"><a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></dfn><div class="doc"><p>Command name executed</p></div></li><li><dfn class="src"><a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></dfn><div class="doc"><p>Error output</p></div></li></ul></div></td></tr><tr><td class="src"><a id="v:MkErrorSpawningProcess" class="def">MkErrorSpawningProcess</a></td><td class="doc"><p>Spawing process error</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src"><a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></dfn><div class="doc"><p>Spawning executable name</p></div></li></ul></div></td></tr><tr><td class="src"><a id="v:MkUnknownError" class="def">MkUnknownError</a></td><td class="doc"><p>This is an unparsed P2PRC's error</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><ul><li><dfn class="src"><a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a></dfn><div class="doc"><p>Unparsed error message</p></div></li></ul></div></td></tr></table></div><div class="subs instances"><h4 class="instances details-toggle-control details-toggle" data-details-id="i:Error">Instances</h4><details id="i:Error" open="open"><summary class="hide-when-js-enabled">Instances details</summary><table><tr><td class="src clearfix"><span class="inst-left"><span class="instance details-toggle-control details-toggle" data-details-id="i:id:Error:Show:1"></span> <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:Show" title="Text.Show">Show</a> <a href="P2PRC.html#t:Error" title="P2PRC">Error</a></span> <a href="#t:Error" class="selflink">#</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><details id="i:id:Error:Show:1"><summary class="hide-when-js-enabled">Instance details</summary><p>Defined in <a href="Error.html">Error</a></p> <div class="subs methods"><p class="caption">Methods</p><p class="src"><a href="#v:showsPrec">showsPrec</a> :: <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Int.html#t:Int" title="Data.Int">Int</a> -&gt; <a href="P2PRC.html#t:Error" title="P2PRC">Error</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showsPrec" class="selflink">#</a></p><p class="src"><a href="#v:show">show</a> :: <a href="P2PRC.html#t:Error" title="P2PRC">Error</a> -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-String.html#t:String" title="Data.String">String</a> <a href="#v:show" class="selflink">#</a></p><p class="src"><a href="#v:showList">showList</a> :: [<a href="P2PRC.html#t:Error" title="P2PRC">Error</a>] -&gt; <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Text-Show.html#t:ShowS" title="Text.Show">ShowS</a> <a href="#v:showList" class="selflink">#</a></p></div></details></td></tr></table></details></div></div><a href="#g:5" id="g:5"><h2>Type Synonyms</h2></a><div class="doc"><p>This section is reserved to some useful type synonyms that add significant ergonomics.</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a id="t:IOEitherError" class="def">IOEitherError</a> a = <a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/System-IO.html#t:IO" title="System.IO">IO</a> (<a href="${pkgroot}/../../../../dcnyq1a8qi8x59n5p53d0dx42cl8hf8x-ghc-9.6.5-doc/share/doc/ghc/html/libraries/base-4.18.2.1/Data-Either.html#t:Either" title="Data.Either">Either</a> <a href="P2PRC.html#t:Error" title="P2PRC">Error</a> a) <a href="#t:IOEitherError" class="selflink">#</a></p><div class="doc"><p>Type synonym for an IO action with either returns an Error or a parsed value</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.29.2</p></div></body></html>