Not at all, Zach, great questions.  I have only one question in
response (Customer Feedback Survey #42): which docs did you read in
which order, and which helped the most?

i) The pretty-printing of floats (and everything) is not in :dojo, but
in hoon.hoon (++co) (specifically in r-co).  Note that I didn't write
the floating-point code -- it's a contributor's work (Max Greer).

ii) In older versions of Hoon there was no constraint on equality
testing, because you can test any two nouns for equality.  This was
only one of many things in Hoon that horrified people with a
traditional typed FP background.  In this case I decided that the
traditionalists were right, because I have seen this check turn up
bugs.  On the other hand, most other people who know Hoon are a little
horrified by most of my recent changes, so it could be that I'm just
losing my mojo.  In any case, equality testing requires one side of
the test to be a subtype of the other (nest within it).

iii) A core contains compiled Hoon code in Nock form.  An invertible
printer would have to decompile it, or something -- basically
impossible.  You've lost informatoion.

iv) Ha!  This is a bug (if a small one).  Do you want to file it?
You'll get valuable Bug Points which may in future be exchangeable for
exciting action figures.

v) This is because (a) we can't statically verify auras (for obvious
reasons, since Hoon is not Coq), and (b) we don't in practice check
them adequately before feeding them to the console, resulting in wacky
formatting for invalid strings (another small bug).

vi) One, Hoon can't actually validate that a mold is idempotent
(because not Coq).  Two, ;; doesn't normalize; if (mold a) doesn't
equal a, it crashes.  There are cases where normalization is good
practice, but they tend to be the exception, even though defining
molds as normalizers is a good design.  For instance, in networking,
Urbit has definitely moved away from Postel's law, which seems to be a
lot less relevant when you have, like, types and stuff.

vii) There isn't but that's a great idea (thanks ghci).  There is
history with a kill buffer, though, so ^P^A^K^N^Y will do the same
thing.  I'd have to think about how to fit this into the dojo, though,
it's non-obvious.

viii) The "type" output in the prettyprinter is its own thing -- it is
not either a mold or a span, just a thing derived from inspecting the
span.  See under "not invertible."  In this case, we see that your
structure is a repeating structure of the form {i/item t/tail}, which
happens to be what ++list makes, so we're basically saying it's a
list.  If you make this same span with any other mold, though, you'll
get the same results -- all typing in Hoon is structural.





On Mon, Aug 15, 2016 at 6:13 AM, Zach Gotsch <orbipe...@gmail.com> wrote:
> Hey I was looking at some of the Hoon resources this weekend and I had a few
> questions and things I didn't understand. I hope this is an appropriate
> place for my questions.
>
> i)
> There seems to be some sort of output formatting for floats, since
>
>> (add:rs .0.1 .0.2)
> .3e-1
>
> but
>
>> (add:rd .~0.1 .~0.2)
> .~3.0000000000000004e-1
>
> Where can I see how the pretty-printing in dojo is happening (if that's even
> what this is...)?
>
> ii)
> I don't think I understand how constant nouns (rocks?) are represented.
> %a has aura (mold? not sure of the difference here either) $a, but the raw
> value 97
> %97 also has raw value 97, but aura $97
>
> I would expect =(%a %97) to be .y, since I don't expect the types to have
> any bearing on equality testing. Instead it is an error. I guess my main
> question here is "When do types (er, auras?) matter?" Something like (add
> %97 1) doesn't cause an error, and produces 98, which I expect if add
> doesn't care about types. Side note, casting the rocks seems to prevent the
> error and I get the behavior I expect:
>
>> =(`@ud`%a `@ud`%97)
>
> %.y
>
>
> iii)
> From the docs: "When we print b, or any core, we see that typed noun
> printing can't be an invertible function in Hoon". I don't understand why
> it's not invertable. Is it because the battery is Nock, and you can't enter
> nock code in Hoon?
>
> iv)
> @n seems to be a thing but I can't use it at the prompt without causing an
> error. Is this like undefined/bottom in haskell?
>
> v)
> I was messing around with auras and I was wondering if `@tr`1 was something
> like ~s1 (or milliseconds or microseconds). When I typed it into dojo, it
> printed all sorts of stuff and overwrote the prompt. What is the stuff that
> it prints and why does this happen? (After typing this out, I realized that
> it's a runtime error of some kind. Where can I learn how to interpret the
> printed stuff?)
>
> vi)
> In the documentation, it says ;; applies a mold, asserting fixed point. All
> molds should have fixed points for all inputs because they are idempotent,
> right? So is this just a function application of the mold and an assertion
> that it is, in fact idempotent?
>
> vii)
> Is there a way to refer to the last twig in the dojo prompt (like `it` in
> ghci)?
>
> viii)
> When I do:
>
>> ? (gulf `@u`0 `@u`5)
>   it(@)
> ~[0 1 2 3 4 5]
>
> I don't understand the type of gulf's output, it isn't a cell, and I haven't
> seen `it(@)`. Does `it` mean "iterated". Is `@` a type parameter here?
>
>
> I hope this wasn't too much for the mailing list but since the network is
> down I haven't been able to bother people on :talk
>
> Zach
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "urbit" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to urbit-dev+unsubscr...@googlegroups.com.
> To post to this group, send email to urbit-dev@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"urbit" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to urbit-dev+unsubscr...@googlegroups.com.
To post to this group, send email to urbit-dev@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to