Hoon-style atom manipulation and printing functions.
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