<ELLIOTTCABLE>
brought some really high-abv craft beers to a party
<ELLIOTTCABLE>
that I really shouldn't have gone to
<ELLIOTTCABLE>
was some awkward, insane bullshit
<ELLIOTTCABLE>
like, the story, if I even could explain, would be, I just, can't.
<devyn>
was there sex involved
<ELLIOTTCABLE>
but. yeah. ended up basically chugging my beers to get drunker and drunker because I didn't want to be there and was hurt by shit going on,
<devyn>
oh.
<devyn>
okay.
<ELLIOTTCABLE>
was a *miracle* that I didn't puke in the cab on the ride home.
<devyn>
:(
<devyn>
that sucks
<ELLIOTTCABLE>
and beyond a miracle that I had the presence-of-mind and self-control to *not puke at home*, either. Like, I'm so totally impressed with myself, all the other shitty shit aside, that I kept my shit together, walked my dogs, and sat on the couch doing nothing, without puking anywhere.
<ELLIOTTCABLE>
meh. anyway.
<ELLIOTTCABLE>
devyn: btw, no single implementation *needs* to make it easy to add more types.
<ELLIOTTCABLE>
The spec, obviously, has to allow for it, so implementations themselves can include, say, a number, or string, or dog, type.
<ELLIOTTCABLE>
but there's no reason, once *you've* decided you're going to include a number and a string type, that you must *also* support later extension with a Dog type.
<ELLIOTTCABLE>
that's a decision you can make if you *want*, I mean, extensibility of implementation is cool and all. Just not required.
<ELLIOTTCABLE>
if it's simplest to make Object, Label, and Execution *completely separate things*, that just happen to share some details, then go ahead and do so.
<ELLIOTTCABLE>
hope that's good news.
<devyn>
alright then, I may just pull a lua and include some kind of generic "userdata" type that is mostly useless except for using as a handle
<ELLIOTTCABLE>
eh. later. too hungover for Haskell.
<devyn>
basically it allows you to cast types at runtime by keeping whatever the actual type of something is handy, and then you can do a type-safe cast from a typeclass-only object to an actual concrete object
<ELLIOTTCABLE>
thought Haskell didn't need tests, really. Isn't that sort of the point?
<devyn>
static typing catches a lot of dumb mistakes but programs can still typecheck and be functionally wrong
<devyn>
this helps ensure that you're doing what you actually think you're doing
<devyn>
but you definitely need fewer tests
<devyn>
a lot fewer basic sanity tests
<devyn>
and more of the statistical verifying, this is what it actually does kind
<devyn>
there's even a Haskell package called QuickCheck that will basically generate tons of completely random values for you to throw at your functions to test them
<devyn>
to hopefully verify that they can handle what they're expected to
<devyn>
but yeah it's way more about the *functionality* than the "this returns the kind of thing it's supposed to"
<ELLIOTTCABLE>
I don't know, that doesn't sound like it'd prevent me from writing most of the tests I write. o_O
<ELLIOTTCABLE>
curiosity:
<ELLIOTTCABLE>
alexgordon, devyn, etc:
<ELLIOTTCABLE>
opinions on contracts-style programming?
<ELLIOTTCABLE>
can't remember if that's what it's actually called
<devyn>
I don't normally write tests in Haskell. I'm kinda just trying it out
<devyn>
since you requested like, as clear as possible
<devyn>
everything
<ELLIOTTCABLE>
but basically bolting a type-checking system ontop of a pre-existing dynamic system.
<devyn>
:p
<ELLIOTTCABLE>
devyn: <'3
<ELLIOTTCABLE>
awesome.
<alexgordon>
hi
<ELLIOTTCABLE>
good idea.
<ELLIOTTCABLE>
I am very heather-grey, today. Grey socks, grey lazy-sweatpants, grey sport-jacket-thingie-that's-a-size-too-large-for-me-but-that-I-wear-anyway-cuz-Apple
<ELLIOTTCABLE>
afaict, contracts are an opt-in, run-time-only, type-checking system.
<ELLIOTTCABLE>
to do exactly what strong typing, as described above, at least: obviate the need for writing any tests that test basic type-related functionality.
<devyn>
yeah pretty much, although not just type-checking
<devyn>
more like
<devyn>
value-dependent type checking
<ELLIOTTCABLE>
hm?
<devyn>
you can actually make sure that the values are in a certain range
<devyn>
etc.
<devyn>
because it's at runtime
* ELLIOTTCABLE
nods
<ELLIOTTCABLE>
contracts were always attractive to me
<ELLIOTTCABLE>
because they're so *flexible*. Opt-in.
<ELLIOTTCABLE>
Obviously you lose a lot of the power of static typing when it's not pervasive / built-in / prescriptionary
<ELLIOTTCABLE>
but … it's me, I like giving the programmer lots of rope to hang themselves with, you know
<devyn>
I totally misunderstood it until yesterday
<ELLIOTTCABLE>
wassat
<devyn>
blockchain-as-an-application-platform
<devyn>
basically
<devyn>
lol
<ELLIOTTCABLE>
oh, that's the
<ELLIOTTCABLE>
yeah that
<ELLIOTTCABLE>
you misunderstood it? why?
<devyn>
when I heard contracts I thought it was limited to just like, micro-versions of traditional contracts, where people are bound to an agreement over money
<devyn>
but it's more than that
<devyn>
it does that too, but more
<ELLIOTTCABLE>
oh yeah definitely
<ELLIOTTCABLE>
definitely missed the point :P
<ELLIOTTCABLE>
Ethereum looks neat.
<devyn>
yeah
<devyn>
lol
<devyn>
you know I haven't slept and I'm actually still really excited to work on Paws
<devyn>
^_^
<ELLIOTTCABLE>
devyn: ('=
<devyn>
tell me more about NoObject. is it just a singleton? can it have members and such? does it ever even appear?
<ELLIOTTCABLE>
It's a specification mechanism, nothing more.
<ELLIOTTCABLE>
There were a couple algorithms in the spec (themselves, not even actually necessarily implemented the way they were described, which was a lot of whitequark's issue with the spec),
<ELLIOTTCABLE>
that had really confusing / wishy-washy “… if so, then this algorithm has no result.”
<ELLIOTTCABLE>
and then footnotes saying ‘Having no result is different from returning a nothing …’
<ELLIOTTCABLE>
and then other algorithms which invoked them, and depended on whether they terminated without result, or whether they returned nothingness, or …
<ELLIOTTCABLE>
yeah it was a mess.
<ELLIOTTCABLE>
most likely, your implementation will involve a semaphore result (returning `undefined` in my JavaScript implementation, for instance), or involve throwing an exception which the consumer is expected to catch, or similar.
<ELLIOTTCABLE>
far from perfectly specified right now. |=
<devyn>
5:59AM EDT (UTC -4): At this time all hosts are up and running. All Linodes within the Newark datacenter should be running or are in the queue to be started shortly. If you have questions or concerns, please feel free to open a ticket via the Linode Manager.
<devyn>
so I guess there goes that
<devyn>
you better contact them.
<ELLIOTTCABLE>
yeah, shit
<ELLIOTTCABLE>
no purr?
<vigs>
RIP purr
glowcoil has joined #elliottcable
ec has joined #elliottcable
<devyn>
glowcoil
<devyn>
aww
<devyn>
lol
<joelteon>
typeable is designed for writing ruby code in haskell
<devyn>
no, not really. Ruby doesn't have interfaces
<devyn>
this is targeted at an entirely different problem :p
<joelteon>
lol yeah
<joelteon>
that's what Dynamic is for
alexgordon has joined #elliottcable
<ELLIOTTCABLE>
no purr? /=
<ELLIOTTCABLE>
gruuuump
<ELLIOTTCABLE>
glowcoil: hey, you.
<joelteon>
rrrrrrrr
* ELLIOTTCABLE
pats joelteon
purr has joined #elliottcable
* joelteon
nibbles ELLIOTTCABLE's fingers
<joelteon>
fucking meow
<vigs>
purr! \o/
purr has quit [Remote host closed the connection]
<ELLIOTTCABLE>
writing a systemd service for purr, 'cuz fuck this
purr has joined #elliottcable
purr has quit [Remote host closed the connection]
purr has joined #elliottcable
purr has quit [Remote host closed the connection]
eligrey has quit [Ping timeout: 258 seconds]
yorick has quit [Remote host closed the connection]
<ELLIOTTCABLE>
hi, all
<vigs>
hello elliott
<ELLIOTTCABLE>
hello.
<vigs>
It took me three tries to type your name. My boss is named Eliot (he's French) and I guess being French means he has fewer consonants in his name.
<vigs>
aaanyway what's up?
<ELLIOTTCABLE>
watching Archer with some friends
<vigs>
nice
<vigs>
I need to catch up on Archer :|
<ELLIOTTCABLE>
GW2, I think
<ELLIOTTCABLE>
time for that
<vigs>
nice
<vigs>
I've just been playing guitar for a few hours. What is responsibility, right?