urbit-hob

Hoon-style atom manipulation and printing functions

https://github.com/urbit/urbit-hob

Version on this page:0.3.2
LTS Haskell 20.26:0.3.3
Stackage Nightly 2022-11-17:0.3.3
Latest on Hackage:0.3.3

See all snapshots urbit-hob appears in

MIT licensed by Jared Tobin
Maintained by [email protected]
This version can be pinned in stack with:urbit-hob-0.3.2@sha256:a99df6d73c8123f7d28c16d81564f508ca72ba4bc18411dd70d3a5159b47ac8b,3806

Module documentation for 0.3.2

Here you can primarily find functions for dealing with the "patp" and "patq" phonetic bases used by Urbit. The @p encoding is used for naming ships, while the @q encoding is used for arbitrary data; they each uniquely represent an underlying natural number (or atom) in a memorable and pronounceable fashion.

The @p encoding is an obfuscated representation of an underlying atom, in particular, hence the "ob" in the library's name.

The Urbit.Ob module exposes two families of functions, patp and fromPatp, and then patq and fromPatq, for converting between representations. You can also render a Patp or Patq value as Text via the renderPatp and renderPatq functions, or parse them from Text via parsePatp and parsePatq.

Since @p values represent ships, some utilities for dealing with ships are also exposed. The clan and sein functions are useful for determining a ship's class and (default) parent, respectively.

Some quick examples:

:set -XOverloadedStrings
import qualified Urbit.Ob as Ob
let nidsut = Ob.patp 15663360
let marzod = Ob.patq (Ob.fromPatp nidsut)
Ob.renderPatp nidsut
"~nidsut-tomdun"
Ob.renderPatq marzod
"~mun-marzod"
Ob.fromPatp nidsut
15663360
Ob.parsePatp "~nidsut-tomdun"
Right ~nidsut-tomdun
Ob.clan nidsut
Planet
Ob.sein nidsut
~marzod