urbit-hob-0.3.3: Hoon-style atom manipulation and printing functions

Copyright(c) 2019 Jared Tobin
LicenseMIT
MaintainerJared Tobin <jared@jtobin.io>
Stabilityunstable
Portabilityghc
Safe HaskellNone
LanguageHaskell2010

Urbit.Ob.Co

Description

General functions for atom printing.

Roughly analogous to the +co arm in hoon.hoon.

Synopsis

Documentation

newtype Patp Source #

Hoon's @p encoding.

This encoding is an obfuscated representation of some underlying number, but a pronounceable, memorable, and unique one.

The representation exists for any natural number, but it's typically used only for naming Azimuth points, and thus normal 32-bit Urbit ships.

(It's also used for naming comets, i.e. self-signed 128-bit Urbit ships.)

Constructors

Patp 

Fields

Instances
Eq Patp Source # 
Instance details

Defined in Urbit.Ob.Co

Methods

(==) :: Patp -> Patp -> Bool #

(/=) :: Patp -> Patp -> Bool #

Ord Patp Source # 
Instance details

Defined in Urbit.Ob.Co

Methods

compare :: Patp -> Patp -> Ordering #

(<) :: Patp -> Patp -> Bool #

(<=) :: Patp -> Patp -> Bool #

(>) :: Patp -> Patp -> Bool #

(>=) :: Patp -> Patp -> Bool #

max :: Patp -> Patp -> Patp #

min :: Patp -> Patp -> Patp #

Show Patp Source # 
Instance details

Defined in Urbit.Ob.Co

Methods

showsPrec :: Int -> Patp -> ShowS #

show :: Patp -> String #

showList :: [Patp] -> ShowS #

Generic Patp Source # 
Instance details

Defined in Urbit.Ob.Co

Associated Types

type Rep Patp :: Type -> Type #

Methods

from :: Patp -> Rep Patp x #

to :: Rep Patp x -> Patp #

type Rep Patp Source # 
Instance details

Defined in Urbit.Ob.Co

type Rep Patp = D1 (MetaData "Patp" "Urbit.Ob.Co" "urbit-hob-0.3.3-GmptVDoU9eA8sPD2nb7Adb" True) (C1 (MetaCons "Patp" PrefixI True) (S1 (MetaSel (Just "unPatp") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 ByteString)))

newtype Patq Source #

Hoon's @q encoding.

Unlike @p, the @q encoding is a non-obfuscated representation of an atom.

It's typically used for serializing arbitrary data in a memorable and pronounceable fashion.

Constructors

Patq 

Fields

Instances
Eq Patq Source # 
Instance details

Defined in Urbit.Ob.Co

Methods

(==) :: Patq -> Patq -> Bool #

(/=) :: Patq -> Patq -> Bool #

Ord Patq Source # 
Instance details

Defined in Urbit.Ob.Co

Methods

compare :: Patq -> Patq -> Ordering #

(<) :: Patq -> Patq -> Bool #

(<=) :: Patq -> Patq -> Bool #

(>) :: Patq -> Patq -> Bool #

(>=) :: Patq -> Patq -> Bool #

max :: Patq -> Patq -> Patq #

min :: Patq -> Patq -> Patq #

Show Patq Source # 
Instance details

Defined in Urbit.Ob.Co

Methods

showsPrec :: Int -> Patq -> ShowS #

show :: Patq -> String #

showList :: [Patq] -> ShowS #

Generic Patq Source # 
Instance details

Defined in Urbit.Ob.Co

Associated Types

type Rep Patq :: Type -> Type #

Methods

from :: Patq -> Rep Patq x #

to :: Rep Patq x -> Patq #

type Rep Patq Source # 
Instance details

Defined in Urbit.Ob.Co

type Rep Patq = D1 (MetaData "Patq" "Urbit.Ob.Co" "urbit-hob-0.3.3-GmptVDoU9eA8sPD2nb7Adb" True) (C1 (MetaCons "Patq" PrefixI True) (S1 (MetaSel (Just "unPatq") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 ByteString)))

patp :: Natural -> Patp Source #

Convert a Natural to @p.

>>> patp 0
~zod
>>> patp 256
~marzod
>>> patp 65536
~dapnep-ronmyl
>>> patp 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
~fipfes-fipfes-fipfes-fipfes--fipfes-fipfes-fipfes-fipfes

patq :: Natural -> Patq Source #

Convert a Natural to @q.

>>> patq 0
~zod
>>> patp 256
~marzod
>>> patp 65536
~nec-dozzod
>>> patp 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
~fipfes-fipfes-fipfes-fipfes-fipfes-fipfes-fipfes-fipfes

fromPatp :: Patp -> Natural Source #

Convert a @p value to its corresponding Natural.

>>> let zod = patp 0
>>> fromPatp zod
0

fromPatq :: Patq -> Natural Source #

Convert a @q value to its corresponding Natural.

>>> let zod = patq 0
>>> fromPatq zod
0

renderPatp :: Patp -> Text Source #

Render a @p value as Text.

>>> renderPatp (patp 0)
"~zod"
>>> renderPatp (patp 15663360)
"~nidsut-tomdun"

renderPatq :: Patq -> Text Source #

Render a @p value as Text.

>>> renderPatq (patq 0)
"~zod"
>>> renderPatq (patq 15663360)
"~mun-marzod"

parsePatp :: Text -> Either Text Patp Source #

Parse a @p value existing as Text.

>>> parsePatp "~nidsut-tomdun"
Right ~nidsut-tomdun
> parsePatp "~fipfes-fipfes-fipfes-doznec"
Right ~fipfes-fipfes-fipfes-doznec

parsePatq :: Text -> Either Text Patq Source #

Parse a @q value existing as Text.

>>> parsePatq "~nec-dozzod"
Right ~nec-dozzod
> parsePatq "~fipfes-fipfes-fipfes-doznec"
Right ~fipfes-fipfes-fipfes-doznec