←2013-02-13 2013-02-14 2013-02-15→ ↑2013 ↑all
00:00:52 <kmc> non-associative semicategory
00:01:26 <kmc> ok this is another term that i google and the only instance is me making the joke here before
00:01:39 <nooodl_> non-associative semicategories, like the word "apple"
00:01:51 <oerjan> <boily> oerjan: again with dead people. are you a zombie or something? <-- try bribing me with brains...
00:02:57 <boily> will brawn do? delicious, savoury brawn spread on hot and buttered toasts?
00:03:06 <oerjan> MAYBE
00:03:52 <olsner> brawn on bran over brain
00:04:17 <boily> the new BBBBLT sandwich.
00:05:39 <oerjan> can you add some brown cheese?
00:05:46 <oerjan> sort of seems to fit
00:05:53 <boily> what's brown cheese?
00:06:00 <oerjan> norwegian specialty
00:06:36 <oerjan> http://en.wikipedia.org/wiki/Brunost
00:07:06 <boily> I think I can find that somewhere.
00:07:14 <boily> oh well. time to go eat again.
00:07:15 <oerjan> compulsory part of our foreigner test kit, together with lutefisk
00:07:17 <olsner> http://en.wikipedia.org/wiki/File:Messmor.jpg this is disgusting
00:07:25 <boily> lutefisk will come after that.
00:07:27 -!- boily has quit (Quit: Poulet!).
00:07:30 -!- cuttlefish has quit (Remote host closed the connection).
00:08:03 <Sgeo> Hmm... I think I'm going to write some repetitive code for the sake of occasional TCO
00:08:34 <kmc> nooooo don't write repetitive code
00:08:38 <monqy> sgeo
00:08:39 <monqy> dont
00:08:50 <kmc> "what monqy said" (am i doing this right)
00:09:04 <Sgeo> I'm sure I could make it unrepetitive
00:09:15 <monqy> then why don't you
00:09:25 <Sgeo> It will still make the code slightly uglier
00:09:48 <monqy> what do you mean by tco anyway
00:09:51 <oerjan> Sgeo: is this like when interpreting the last element of a list? it rings a bell
00:10:14 <Sgeo> Yes
00:10:49 <Sgeo> If the last element that I'm interpreting is Compile, then there's no more work to be done save for that Compile, which starts interpreting the next element on the compiler stack
00:10:59 <monqy> maybe you should use a different data structure alt. not care because this is a silly proof of concept and not a production quality whatever the heck you're making
00:11:29 <oerjan> i think it came up similarly for ^ in an underload interpreter
00:11:37 <oerjan> or was it elliott's compiler
00:12:02 <Sgeo> Compile being the last element is going to be the most common case, I think
00:13:15 <Sgeo> I can make the rare case work by simply calling to the common case while protecting the state, I think
00:13:25 <nooodl_> what's sgeo doing
00:13:33 <oerjan> nooodl_: TCO'ing
00:13:52 <Sgeo> There is an StateT s m a thing that calls StateT s m a while reverting back afterwards, right?
00:14:28 <monqy> what do you mean by while reverting
00:14:55 <oerjan> :t mapStateT
00:14:57 <lambdabot> (m (a, s) -> n (b, s)) -> StateT s m a -> StateT s n b
00:15:08 <Sgeo> That is, something like
00:15:12 <oerjan> wrong mapping thing
00:15:26 <Sgeo> StateT s m a -> StateT s m a
00:15:39 <monqy> are you looking for something like `local`
00:15:43 <Sgeo> Possibly
00:15:50 <oerjan> local works on StateT?
00:15:50 <monqy> what's possibly
00:15:54 <monqy> no
00:16:33 <Sgeo> withStateT I think I saw which the name makes me think along those lines
00:16:54 <Sgeo> Wait, no
00:17:00 <monqy> how about you use precise words to describe what you want
00:17:22 <Sgeo> I want to take a stateful action and execute it and then undo the changes to the state
00:17:27 <monqy> ok
00:18:02 <Sgeo> Possibly get >>= runStateT /
00:18:03 <Sgeo> ?
00:18:18 <Sgeo> Erm, well, something along those lines
00:18:41 <oerjan> get >>= \s -> do v <- x; put s; return v
00:18:50 <monqy> i was just about to say that but with applicative notation
00:18:53 <monqy> "much prettier"
00:19:14 <oerjan> i'm not sure you can do it with only applicative notation
00:19:20 <monqy> i mean
00:19:31 <monqy> instead of just part of it
00:19:37 <oerjan> x <* put s i guess
00:19:40 <monqy> yes
00:19:49 <Sgeo> I also don't need the result
00:19:52 <monqy> ok
00:19:54 <Sgeo> I'm doing it for the side effects
00:19:57 <monqy> ok
00:20:34 <oerjan> anyway, the above should work
00:20:54 <monqy> no it won't!!!! keeping the result around ⇒ bloat ⇒ unacceptable
00:20:55 <oerjan> unless you need to catch throws inside x too
00:21:06 <oerjan> *from inside
00:21:16 <oerjan> and reset the state even then
00:26:07 <Sgeo> What's wrong with my runStateT solution?
00:28:08 <oerjan> <Phantom_Hoover> Halite, if you're interested in learning how to write interpreters, the standard first language to target is eodermdrome <-- nice try
00:29:30 <Phantom_Hoover> it's my master plan
00:29:36 <Phantom_Hoover> someday a savant will enter the channel
00:29:48 <Phantom_Hoover> and we will all be propelled into a glorious new dawn
00:32:58 <Sgeo> FUCK YOU KATE
00:33:24 <Sgeo> Typing on a line beginning with [] does NOT mean "indent me indent me please please please"
00:34:37 <Phantom_Hoover> oh dear, is it making your brainfuck code too unreadable
00:37:38 <Sgeo> It's turning my correct Haskell code into incorrect Haskell code
00:37:56 <Sgeo> :t runStateT
00:37:58 <lambdabot> StateT s m a -> s -> m (a, s)
00:39:38 <Sgeo> Blah, oerjan's way was easier
00:41:02 <Sgeo> My code, as it currently stands
00:41:06 <Sgeo> It compiles so far :) https://gist.github.com/Sgeo/fe54715fc61d1d98f4cc
00:42:02 <Phantom_Hoover> oh
00:42:10 <Phantom_Hoover> in that case; why are you using kate
00:42:49 <Sgeo> Because it wasn't irritating me until just then
00:42:59 <Sgeo> I can live with sometimes faulty code hilighting
00:43:27 <Phantom_Hoover> but there's a whole hierarchy of why here
00:43:34 <Phantom_Hoover> for instance: why are you using kde
00:44:21 <Sgeo> Because I like KDE? Also this system is a bit broken, in such a way that whether I'm using KDE or GNOME tends to vary on whether X works when I boot up
00:44:28 <Sgeo> Although X has been working, so
00:44:34 <kmc> ah linux
00:44:53 <kmc> i do recall switching to KDE because i fuckxed up my GNOME install
00:45:56 <Phantom_Hoover> i think the horrific brokenness that ultimately trashed my laptop started when i experimented briefly with kde
00:46:04 <Phantom_Hoover> it's a gateway drug
00:58:30 <Sgeo> I can feel this thing getting closer to completion
01:07:34 -!- augur_ has joined.
01:16:45 <Sgeo> I just need to remember how to parse parens
01:16:50 <Sgeo> Parens, my eternal nemesis
01:20:33 <Sgeo> Conceptually, the code I'm writing is the result of compiling ,+[-:,+]! by hand
01:21:13 <Sgeo> (EOF=-1)
01:25:20 <Sgeo> :t runWriter
01:25:22 <lambdabot> Writer w a -> (a, w)
01:26:34 <Sgeo> :t execState
01:26:36 <lambdabot> State s a -> s -> s
01:26:43 <Sgeo> I never rember exec vs eval
01:28:01 <Sgeo> I wonder if the State monad is good or bad for my globals addiction
01:28:19 <Sgeo> With it, one writes code that looks like it's accessing a global, but it's all confined
01:28:47 <Sgeo> On the one hand, it lets me write in that style, on the other, when I move into other languages...
01:29:41 -!- Phantom_Hoover has quit (Remote host closed the connection).
01:36:01 <monqy> globals addition
01:37:41 <monqy> ****addiction
01:39:14 <shachaf> ★★★★hi monqy
01:40:54 <monqy> hi
01:41:15 <shachaf> @quote monqy
01:41:15 <lambdabot> Plugin `quote' failed with: getRandItem: empty list
01:42:19 <Sgeo> What might an interpreted Trustfuck look like/!
01:42:33 <monqy> good question
01:46:22 <kmc> i wonder if there are good generalizations of poker
01:47:06 <kmc> there's kolmogorov poker
01:47:21 <kmc> where instead of a fixed hand ranking, you can challenge someone's hand by producing a shorter program to generate your hand
01:47:39 <kmc> probably a p. shitty game tho
02:02:03 <kmc> Sgeo: most languages have some way to confine 'globals'
02:02:46 <kmc> i like how the Linux kernel shoehorns basically a fourth layer of scoping for static-storage variables into the C language
02:04:15 <kmc> 'static' vars in functions have static scope, 'static' vars at file level have file scope, non-'static' vars at file level are scoped to a whole kernel module
02:04:26 <kmc> but if you want it to be visible outside that kernel module you have to add EXPORT_SYMBOL(foo) as well
02:05:06 * Sgeo decides that the state monad is analogous to dynamic scoping
02:05:16 <Sgeo> With an implicit name
02:09:55 <kmc> and only one value
02:18:20 <oerjan> the reader monad with its local might fit even better.
02:23:22 <pikhq> kmc: That's one of those tricky linker tricks, isn't it?
02:24:13 <Sgeo> Maybe I should just have one very long line representing the bulk of the program
02:24:23 <Sgeo> Rather than a multitude
02:24:55 <monqy> what do you mean by that
02:25:12 <Sgeo> code = all the code in the program save for two lines
02:25:17 * Sgeo is deja vuing
02:25:39 <Sgeo> This program needs to ultimately output almost itself save for two lines
02:25:55 <Sgeo> And those two lines are different
02:26:13 <kmc> pikhq: well, the trick is just that the kernel has its own dynamic linker/loader for modules, and so gets to decide which symbols are dynamically resolvable
02:26:26 <kmc> i don't actually know if they implement this layer of scoping when stuff gets compiled in
02:26:39 <kmc> you might need unique names anyway for the compiled-in case
02:27:24 <pikhq> They probably do; as far as I know, they link each module into a single object and then vmlinuz is linked from those.
02:27:35 <kmc> mm
02:27:53 <pikhq> (binutils has some thing where you can link a bunch of objects into a single object file that's still not fully linked...)
02:30:39 <kmc> there's ld -r
02:33:56 <oerjan> Sgeo: do you know about explicit {} blocks in haskell?
02:34:16 <Sgeo> For things like do? Yes
02:34:32 <oerjan> so that you don't need to care about layout
02:35:15 <Sgeo> Some of these functions are on multiple lines. I don't see what's wrong with just outputting what's here
02:35:56 <oerjan> just trying to help in case getting indentation right trips you up
02:35:56 <Sgeo> Seriously, it's going to output a mostly-quine with two things changed, and those two things are not functions
02:36:02 <Sgeo> Ok
02:36:56 <Sgeo> > let a=1; b=2 in a+b
02:36:57 <lambdabot> 3
02:38:28 * Sgeo sets indentation to none
02:38:32 <Sgeo> Fuck you, fuck you, and fuck you Kat
02:38:34 <Sgeo> Kate
02:39:34 <coppro> lol
02:39:43 <kmc> an omnishambles
02:41:31 -!- copumpkin has quit (Read error: Connection reset by peer).
02:41:59 -!- copumpkin has joined.
02:44:16 -!- WeThePeople has joined.
02:45:49 <Sgeo> TYPING THE WORD IN DOES NOT MEAN INDENT INSANELY
02:46:09 <Sgeo> Nor does typing a comma
02:50:59 <Sgeo> Meh, my parser is not perfect at detecting unbalanced []
02:52:07 <Sgeo> It assumes [ have a ] at the end if there isn't, and ] followed by nothing might just be dropped
02:52:13 <Sgeo> Is this a big deal?
02:57:24 <oerjan> what i did in the fueue brainfuck interpreter was to keep a flag of whether i'm already inside a loop. then it's easy to discern those cases.
02:59:29 <Sgeo> :t runStateT
02:59:30 <oerjan> then in either case, exactly one of ] and eof are permitted to occur.
02:59:30 <lambdabot> StateT s m a -> s -> m (a, s)
03:02:07 <oerjan> mind you, in haskell it should still be simpler to use parsec.
03:02:25 <Sgeo> Probably >.>
03:02:46 <Sgeo> Right now I'm so close to getting this working
03:02:48 <Sgeo> fsvo working
03:06:24 <Sgeo> A 4,886 character line
03:06:32 <Sgeo> Maybe this is not the best idea for readability
03:07:11 <Sgeo> Oh crud
03:11:00 <monqy> hm?
03:11:08 <Sgeo> I forgot to write main
03:11:13 <Sgeo> At least, that what that crud was about
03:11:16 <Sgeo> Currently having another crud
03:11:21 <Sgeo> This program is going to be a PITA to edit
03:11:48 <monqy> what were you expecting
03:12:38 <Sgeo> Not to need to edit it very much
03:13:32 <shachaf> monqy: Something ... someone ... nothing.
03:13:42 <shachaf> Are you hungry?
03:13:50 <monqy> ????????????????
03:14:25 <shachaf> hi
03:14:46 <monqy> hi
03:14:49 <shachaf> did you ever explain comma categories
03:15:11 <shachaf> or was it just that "limited version" of them
03:15:31 <monqy> i explained the specific instance of them you want for free objects...for a more general explanation you'd be better served just looking them up
03:15:54 <shachaf> good point
03:16:18 <shachaf> mr.hird and i did a few "adjunctions" to get "free functors´
03:16:23 <shachaf> it was p. great
03:16:39 <monqy> alrite
03:16:50 <Sgeo> https://gist.github.com/Sgeo/fe54715fc61d1d98f4cc
03:16:54 <Sgeo> Still need to test it
03:17:11 <shachaf> monqy: you know how you can make the "Cont monad" out of adjunction of (-> r) -| (-> r)?
03:17:25 <monqy> probably you've said that? maybe??? idk
03:17:34 <shachaf> going into Haskᵒᵖ
03:17:44 <shachaf> monqy: its "pretty nifty"
03:18:10 <shachaf> monqy: have you ever noticed that Cont'sjoin = contramap (Cont'sreturn)??
03:19:04 <Sgeo> primitive.o: In function `rQf_info':
03:19:04 <Sgeo> (.text+0xa74): undefined reference to `mtlzm1zi1zi0zi2_ControlziMonadziTrans_zdfMonadIOIO_closure'
03:19:07 <Sgeo> wat
03:19:27 <shachaf> mtl-1.1.0.2_Control.Monad.Trans_$fMonadIOIO_closure
03:19:27 <shachaf> hth
03:19:33 <monqy> probably you did something bad
03:21:05 <Sgeo> Not only that, I tried to mess around in GHCi a bit
03:21:06 <Sgeo> There's a big
03:21:08 <Sgeo> bug
03:21:36 <oerjan> ouch
03:21:49 <Sgeo> That big was a typo for bug
03:21:52 <shachaf> a big
03:21:53 <shachaf> bug?
03:21:57 <shachaf> that soudns dangerous
03:22:10 <shachaf> so big that you have to pause after saying big
03:22:26 <Sgeo> As soo as it saw , as input it output
03:22:34 <shachaf> i've written some pretty terrible bugs
03:22:40 <shachaf> but i've never written a big
03:22:41 <shachaf> bug
03:24:34 -!- impomatic has quit (Read error: Connection reset by peer).
03:28:10 <Sgeo> There's no bug. I'm just an idiot.
03:28:29 <oerjan> yay!
03:29:12 <Sgeo> Well, there's still a bug
03:29:17 <Sgeo> Just not what I was thinking
03:29:30 -!- nooodl_ has quit (Ping timeout: 260 seconds).
03:30:01 <Sgeo> I think.
03:30:07 -!- oklopol has quit (Read error: Connection reset by peer).
03:30:27 -!- oklopol has joined.
03:30:43 <shachaf> In this case https://plus.google.com/107913314994758123748/posts/3adHiA9yq9D
03:30:53 <shachaf> elliott: We should get around to doing Kan extensions.
03:31:29 <shachaf> Hmm, wrong channel.
03:31:45 <shachaf> I guess elliott is in both channels.
03:32:14 <oerjan> he's been idle for quite a while.
03:32:53 <shachaf> I know.
03:39:01 <Sgeo> Ok, so one problem: Input is broken
03:39:18 <shachaf> Problem two: Output is cobroken.
03:39:31 <Sgeo> I think loops are broken too
03:41:11 <Sgeo> if eof then Just <$> getChar else return Nothing
03:41:14 <Sgeo> derp
03:41:16 <shachaf> ƪ
03:41:35 <oerjan> oops
03:41:58 <kmc> time of check time of use!
03:42:56 <Sgeo> Um. I guess that's a theoretical problem with the isEOF vs my original catch-based way, but that's not the large bug
03:44:13 <oerjan> :t \f -> return True >>= f . guard
03:44:15 <lambdabot> (Monad m, MonadPlus m1) => (m1 () -> m b) -> m b
03:44:34 <Sgeo> Anyways, now to see waht the deal with loops is
03:44:35 <oerjan> :t \f g -> return True >>= maybe f g . guard
03:44:36 <lambdabot> Monad m => m b -> (() -> m b) -> m b
03:44:53 <oerjan> :t \f g -> return True >>= fromMaybe g . guard
03:44:55 <lambdabot> Couldn't match expected type `m0 b0' with actual type `()'
03:44:55 <lambdabot> Expected type: Bool -> Maybe (m0 b0)
03:44:55 <lambdabot> Actual type: Bool -> Maybe ()
03:44:59 <oerjan> :t \f g -> return True >>= fromMaybe f g . guard
03:45:01 <lambdabot> (Monad m, MonadPlus m1) => (m1 () -> m b) -> Maybe (m1 () -> m b) -> m b
03:45:57 <oerjan> :t \x -> guard :: Maybe ()
03:45:58 <lambdabot> Couldn't match expected type `Maybe ()'
03:45:58 <lambdabot> with actual type `Bool -> m0 ()'
03:45:58 <lambdabot> In the expression: guard :: Maybe ()
03:46:02 <oerjan> :t \x -> guard x :: Maybe ()
03:46:04 <lambdabot> Bool -> Maybe ()
03:46:17 <oerjan> oh
03:47:10 <Sgeo> Ok, so loops are broken somehow
03:49:01 <Sgeo> Or maybe output's broken, wat
03:49:30 <oerjan> the primTranslate cases for [] look fine to me
03:50:55 * Sgeo is assuming the problem is in interpret'
03:51:01 <Sgeo> I'm testing things out by changing program
03:56:59 -!- pikhq has quit (Read error: Connection reset by peer).
03:57:00 <Sgeo> Well, that's one problem
03:57:06 <Sgeo> Out doesn't continue interpretation
03:57:16 -!- pikhq has joined.
04:04:40 -!- Arc_Koen has quit (Quit: Arc_Koen).
04:05:52 <Sgeo> I think some of this is me failiing at Brainfuck
04:05:55 <Sgeo> failing
04:07:02 -!- copumpkin has quit (Read error: Connection reset by peer).
04:07:19 -!- copumpkin has joined.
04:08:13 <shachaf> kmc: http://www.theproofistrivial.com/
04:09:27 <oerjan> "Just biject it to a trivial algebra whose elements are semi-decidable posets", sounds quite trivial.
04:09:52 <Sgeo> I just successfully compiled and ran a trivial Trustfuck program
04:10:20 <oerjan> excellent. now we can take over the world.
04:10:37 <Sgeo> The gist is now updated with the latest version
04:10:57 <kmc> very good
04:11:03 <coppro> http://www.youtube.com/watch?v=KmK0bZl4ILM
04:11:05 <coppro> truth
04:14:42 <Sgeo> Ok, so my next test will be this:
04:15:06 <Sgeo> Creating a compiler for a variation of Trustfuck in which each character maps to the character above it
04:15:14 <Sgeo> And then writing a cat program in that dialect
04:15:58 <Sgeo> Erm
04:16:05 <Sgeo> Easiest thing to do, character below it
04:16:27 <Sgeo> > inc
04:16:29 <lambdabot> Not in scope: `inc'
04:16:29 <lambdabot> Perhaps you meant one of these:
04:16:29 <lambdabot> `int' (imported fro...
04:16:35 <oerjan> > succ
04:16:37 <lambdabot> No instance for (GHC.Show.Show (a0 -> a0))
04:16:37 <lambdabot> arising from a use of `M77076...
04:16:38 <Sgeo> ty
04:18:04 <Sgeo> > map pred ",+[-.,+]"
04:18:06 <lambdabot> "+*Z,-+*\\"
04:19:44 <Sgeo> fuck
04:21:02 <Sgeo> I'm an idiot who can barely remember how to use his own language
04:23:45 <Sgeo> module `main:Main' is defined in multiple files: predtest.hs
04:23:46 <Sgeo> predtest.hs
04:23:55 <Sgeo> Oh
04:24:14 <Sgeo> It works!
04:24:23 <Sgeo> I guess there are some things currently untested
04:31:56 <Sgeo> oerjan, ais523 if you logread, anyone else? Feel free to play with it
04:38:16 <coppro> I'm far too lazy to even figure out what trustfuck is
04:39:47 <monqy> sgeo's brainfuck derivative
04:46:34 <Sgeo> coppro, shall I attempt to explain it?
04:55:02 <oerjan> "\35\52\56\63\48"
04:55:06 <oerjan> > "\35\52\56\63\48"
04:55:08 <lambdabot> "#48?0"
04:58:03 <Sgeo> I could (should?) be storing the unparsed versions rather than the parsed versions, I think
04:58:10 <Sgeo> Take up less space in the compiled program
04:58:25 <Sgeo> Might be important for trying to compile that large game
05:07:29 <Sgeo> Hmm.
05:07:43 <Sgeo> A Trustfuck compiler targetting x86 might not require writing x86 code directly
05:13:12 <Sgeo> Just need to write C code that alters its memory then retrieves all of its ...
05:21:46 -!- dessos has quit (Ping timeout: 240 seconds).
05:34:16 -!- WeThePeople has quit (Quit: Leaving).
05:35:51 <oerjan> > '\59'
05:35:53 <lambdabot> ';'
05:45:53 <Sgeo> > '\10'
05:45:55 <lambdabot> '\n'
05:46:11 <Sgeo> > '\64'
05:46:13 <lambdabot> '@'
05:46:15 <Sgeo> > '\65'
05:46:17 <lambdabot> 'A'
05:46:19 <Sgeo> Ok
05:46:23 * Sgeo is derptastic today
05:47:53 <oerjan> okay
06:03:51 -!- hogeyui has quit (Ping timeout: 276 seconds).
06:20:41 -!- DHeadshot has quit (Read error: Connection reset by peer).
06:20:47 -!- DH____ has joined.
06:21:20 -!- noam has quit (Read error: Connection reset by peer).
06:21:45 -!- noam has joined.
06:36:27 -!- hogeyui has joined.
06:54:10 <oerjan> > popCount (65::Int)
06:54:11 <lambdabot> 2
06:55:16 <shachaf> @ty popCount
06:55:18 <lambdabot> Bits a => a -> Int
06:55:37 <shachaf> I guess it's in Bits?
06:55:40 <shachaf> Everything is in Bits.
06:55:41 <oerjan> yeah
06:55:56 <shachaf> @ty popSixSquishUhuhCiceroLipschitz
06:55:58 <lambdabot> Not in scope: `popSixSquishUhuhCiceroLipschitz'
06:56:02 <oerjan> the ridiculous thing is, they have this function but none to find the highest set bit...
06:56:37 <shachaf> There isn't one for lowest set bit either, right?
06:56:52 <oerjan> not afaict
06:56:54 * shachaf would like to take this moment to mention that de Bruijn indices are the future.
06:57:01 <oerjan> OKAY
06:57:24 <shachaf> > toListOf bits 123
06:57:27 <lambdabot> [True,True,False,True,True,True,True,False,False,False,False,False,False,Fa...
06:57:35 <shachaf> good function
06:57:46 <oerjan> :t bits
06:57:47 <lambdabot> (Applicative f, Bits b, Indexable Int p) => p Bool (f Bool) -> b -> f b
06:58:27 <pikhq> Hmm. gzip in Haskell is probably fairly easy. Funny.
07:07:31 -!- Halite has joined.
07:08:42 <Halite> hai
07:08:52 <shachaf> `welcome Halite, pikhq
07:08:58 <HackEgo> Halite,: pikhq: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page. (For the other kind of esoterica, try #esoteric on irc.dal.net.)
07:09:11 <Halite> `welcome ChanServ
07:09:13 <HackEgo> ChanServ: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page. (For the other kind of esoterica, try #esoteric on irc.dal.net.)
07:09:16 <Halite> lol
07:11:41 <monqy> hello
07:12:19 <shachaf> monqy:
07:12:40 <shachaf> (btw that was 0006 ACKNOWLEDGE)
07:14:19 <monqy> ok
07:16:10 -!- Halite has quit (Changing host).
07:16:10 -!- Halite has joined.
07:17:01 <Halite> I'm trying to crash HackEgo in the other channel by sending a WHILE loop.
07:18:57 <Halite> HackEgo, die
07:19:32 <monqy> hackego's feelings????
07:20:51 <shachaf> monqy: good point in the other channel
07:21:30 <monqy> thachaf
07:21:31 <Sgeo> HackEgo is set up with version control. Anything happens, it can be revertred
07:21:37 <Sgeo> `ls
07:21:39 <HackEgo> ​= 0 \ bin \ brainfuck.fu \ canary \ dbg.out \ egobot.tar.xz \ etc \ factor \ factor-linux-x86-64-0.95.tar.gz \ foo \ foo.err \ foo.out \ fueue.c \ ibin \ interps \ karma \ lib \ paste \ quines \ quotes \ quotese \ run~ \ share \ sudo \ %sudo \ test \ wisdom \ zalgo.hs
07:21:41 <shachaf> you're wonqy
07:21:46 <Sgeo> `run rm canary
07:21:49 <HackEgo> No output.
07:21:57 <Sgeo> `ls
07:22:01 <HackEgo> ​= 0 \ bin \ brainfuck.fu \ canary \ dbg.out \ egobot.tar.xz \ etc \ factor \ factor-linux-x86-64-0.95.tar.gz \ foo \ foo.err \ foo.out \ fueue.c \ ibin \ interps \ karma \ lib \ paste \ quines \ quotes \ quotese \ run~ \ share \ sudo \ %sudo \ test \ wisdom \ zalgo.hs
07:22:12 <Sgeo> Wait, what's = 0 ?
07:22:22 <oerjan> `file = 0
07:22:25 <HackEgo> ​= 0: ERROR: cannot open `= 0' (No such file or directory)
07:22:27 <shachaf> `cat = 0
07:22:29 <HackEgo> No output.
07:22:32 <oerjan> `file = 0
07:22:34 <HackEgo> ​= 0 : empty
07:22:43 <oerjan> `rm = 0
07:22:46 <HackEgo> No output.
07:23:00 <Sgeo> `file canary
07:23:02 -!- HackEgo has quit (Remote host closed the connection).
07:23:05 <Sgeo> uh
07:23:22 <oerjan> someone apparently succeeded!
07:23:45 <Sgeo> file canary shouldn't kill it, right?
07:23:46 <Sgeo> >.>
07:24:07 <oerjan> oh hm
07:24:19 <oerjan> i think maybe i did
07:24:54 <oerjan> iirc HackEgo isn't supposed to keep empty files, so maybe deleting one breaks things
07:26:54 <oerjan> weird it claims it was added by coppro's `addquote http://codu.org/projects/hackbot/fshg/index.cgi/file/36a0f4a7116c/%3D%200%20
07:28:00 -!- epicmonkey has joined.
07:29:52 <oerjan> oh no it existed before
07:31:31 <oerjan> been there a while it seems
07:32:52 <Halite> can HackEgo rejoin
07:33:25 <oerjan> only Gregor can make it
07:33:40 <oerjan> he seems idle at the moment
07:34:48 <oerjan> he might be sleeping at this time
07:34:50 <Halite> NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
07:34:53 <Halite> Gregor,
07:35:03 <Halite> @time Gregor
07:35:05 <lambdabot> Local time for Gregor is Thu Feb 14 02:35:04
07:35:05 <Sgeo> Halite, play with Trustfuck for a while if you're bored
07:35:18 <Halite> Sgeo, please give a TF Interpreter
07:35:26 <Sgeo> There's no interpreter, just a compiler
07:35:43 <Sgeo> http://esolangs.org/wiki/Trustfuck
07:36:27 <Sgeo> https://gist.github.com/Sgeo/fe54715fc61d1d98f4cc is a Haskell file. Compile it with GHC. Then feed it Trustfuck as input, it will output some Haskell code
07:36:47 <Sgeo> Compile that Haskell code, and run the result, and that's the Trustfuck program
07:37:11 <Sgeo> So, let's say I have somecode.tf
07:37:13 <Sgeo> I might do
07:37:32 <Sgeo> ./primitive < somecode.tf > somecode.hs
07:37:41 <Sgeo> ghc --make somecode.hs -o somecode
07:37:43 <Sgeo> ./somecode
07:38:34 -!- epicmonkey has quit (Read error: Operation timed out).
07:38:35 -!- DH____ has quit (Ping timeout: 260 seconds).
07:40:09 <Sgeo> Incidentally, here's the Trustfuck compiler written in Trustfuck
07:40:09 <Sgeo> ,+[-:,+]!
07:40:36 <Sgeo> The Haskell code can be viewed as being basically that, hand-compiled
08:01:25 <oerjan> :t _head
08:01:27 <lambdabot> Cons (->) f s s a a => LensLike' f s a
08:06:53 -!- carado has joined.
08:10:16 <oerjan> > ([], [1,2,3]) ^? (_1 . _head <|> _2 . _head)
08:10:18 <lambdabot> No instance for (Control.Applicative.Alternative
08:10:19 <lambdabot> ((->)
08:10:19 <lambdabot> ...
08:10:26 <oerjan> > ([], [1,2,3]) ^? (_1 . _head)
08:10:30 <lambdabot> Nothing
08:24:48 <oerjan> > ([], [1,2,3]) ^? (both . _head)
08:24:51 <lambdabot> Just 1
08:38:36 -!- sebbu2 has joined.
08:38:36 -!- sebbu2 has quit (Changing host).
08:38:36 -!- sebbu2 has joined.
08:39:46 -!- sebbu has quit (Ping timeout: 272 seconds).
08:42:31 -!- azaq23 has joined.
08:42:41 -!- azaq23 has quit (Max SendQ exceeded).
08:43:05 -!- azaq23 has joined.
08:52:12 <oerjan> :t zoom
08:52:13 <lambdabot> Zoom m n s t => LensLike' (Control.Lens.Internal.Zoom.Zoomed m c) t s -> m c -> n c
08:56:10 <oerjan> :t (^~)
08:56:13 <lambdabot> (Integral e, Num a) => ASetter s t a a -> e -> s -> t
08:56:24 <oerjan> oops
08:56:29 -!- epicmonkey has joined.
08:56:56 <oerjan> :T over
08:57:00 <oerjan> :t over
08:57:02 <lambdabot> Profunctor p => Setting p s t a b -> p a b -> s -> t
09:02:12 -!- oerjan has quit (Quit: leaving).
09:03:27 -!- Taneb has joined.
09:10:07 -!- sebbu2 has changed nick to sebbu.
09:17:14 -!- nooodl_ has joined.
09:37:34 <Taneb> "Bueue"!?
09:56:10 -!- md_5 has quit (Remote host closed the connection).
09:56:40 -!- md_5- has joined.
09:58:14 -!- Taneb has quit (Ping timeout: 256 seconds).
09:58:56 -!- Taneb has joined.
10:16:07 -!- monqy has quit (Quit: hello).
10:16:55 -!- mroman has joined.
10:24:02 -!- DHeadshot has joined.
10:47:35 -!- sebbu has quit (Ping timeout: 260 seconds).
10:48:29 -!- Halite has quit (Remote host closed the connection).
10:51:19 -!- sebbu has joined.
10:51:19 -!- sebbu has quit (Changing host).
10:51:19 -!- sebbu has joined.
10:53:30 -!- copumpkin has quit (Ping timeout: 264 seconds).
10:54:07 -!- copumpkin has joined.
11:01:07 -!- sebbu2 has joined.
11:01:07 -!- sebbu2 has quit (Changing host).
11:01:07 -!- sebbu2 has joined.
11:02:45 -!- sebbu has quit (Ping timeout: 260 seconds).
11:07:42 -!- HackEgo has joined.
11:20:11 -!- md_5- has changed nick to md_5.
11:20:14 -!- aloril has quit (Ping timeout: 276 seconds).
11:24:54 -!- ncultures has joined.
11:24:55 -!- ncultures has left.
11:25:45 <FreeFull> :t _head
11:25:47 <lambdabot> Cons (->) f s s a a => LensLike' f s a
11:27:02 <FreeFull> Is (.).(.) infix or prefix?
11:28:40 -!- ncultures has joined.
11:28:40 -!- ncultures has left.
11:29:13 <Taneb> Prefix
11:29:24 <Taneb> :t (.).(.)
11:29:26 <lambdabot> (Functor f1, Functor f) => (a -> b) -> f (f1 a) -> f (f1 b)
11:29:45 <Taneb> Actually, it's nigh-unusable unless you put brackets around it
11:30:06 <Taneb> > ((.).(.)$(+1)) (1, [1,2,3])
11:30:09 <lambdabot> (1,[2,3,4])
11:33:08 -!- sebbu2 has changed nick to sebbu.
11:34:02 -!- aloril has joined.
11:56:42 -!- oonbotti has quit (Remote host closed the connection).
11:56:57 -!- oonbotti has joined.
11:57:56 -!- DHeadshot has quit (Ping timeout: 245 seconds).
11:58:13 -!- Lumpio- has quit (Ping timeout: 246 seconds).
12:10:51 -!- nooga has joined.
12:13:30 -!- carado has quit (Read error: Connection timed out).
12:16:49 -!- sebbu2 has joined.
12:17:05 -!- sebbu2 has quit (Changing host).
12:17:05 -!- sebbu2 has joined.
12:18:03 -!- sebbu has quit (Ping timeout: 245 seconds).
12:22:17 <nortti> http://mobile.osnews.com/story.php/26784/Opera-to-switch-desktop-mobile-browsers-to-WebKit/
12:22:54 <mroman> what?
12:23:59 <mroman> I'm a little bit disappointed right now, but I get their point.
12:26:12 <nortti> I really hope they open source presto
12:26:18 <nortti> but probably not
12:34:07 <nooga> uh
12:34:14 <nooga> what?
12:35:51 <Taneb> Help I now have two libraries on Hackage
12:35:56 -!- Lumpio- has joined.
12:36:32 <shachaf> Taneb: base 4.5.*?
12:36:39 <shachaf> Thanks for hating GHC 7.6 users.
12:36:46 <shachaf> Also I can't look at the actual code.
12:36:47 <Taneb> shachaf, that's me being sleepy when checking the depends
12:38:01 <Taneb> It would actually work in base 3.0.3.1
12:38:28 <shachaf> Taneb: Does your package have free groups?
12:38:42 <Taneb> Alas, no
12:38:47 <shachaf> :-(
12:38:50 <shachaf> I want free groups!
12:41:38 <Taneb> shachaf, the dependency is less stupid now
12:42:13 <Taneb> Although free groups are still missing
12:42:52 <shachaf> And I still can't see the code.
12:43:06 <Taneb> (is that my fault, or Hackage's?)
12:43:23 <Taneb> Anyway, it's just a class Monoid m => Group m where invert :: m -> m
12:43:26 <shachaf> Taneb: "<5"?
12:43:28 <Taneb> Plus a few instances
12:43:30 <shachaf> Are you sure about that?
12:43:34 <Taneb> REASONABLY
12:43:55 <shachaf> Hmm, I guess it works.
12:45:29 <Taneb> It's got instance Num a => Group (Sum a); instance Fractional a => Group (Product a); instance Group a => Group (Dual a)
12:45:37 <Taneb> And all the tuple ones that Data.Monoid has
12:47:02 <Taneb> There's nothing that special
12:47:07 <Taneb> Free groups'd be harder
12:47:32 <shachaf> Is newtype Foo a = Foo { runFoo :: forall g. (a -> g) -> g } equivalent to a free group?
12:48:15 <Taneb> ...I don't think so
12:48:28 <Taneb> It's equivalent to a
12:49:15 <shachaf> Er.
12:49:18 <shachaf> Group g =>
12:50:47 <Taneb> Let me think about that for a bit
12:54:19 <Taneb> It is a group
13:05:09 <nooodl_> > (Product <> Product) 7
13:05:11 <lambdabot> Product {getProduct = 49}
13:05:14 <nooodl_> neat
13:06:26 <Taneb> Huh
13:06:39 <Taneb> :t getProduct . Product <> Product
13:06:41 <lambdabot> Occurs check: cannot construct the infinite type: b0 = Product b0
13:06:41 <lambdabot> Expected type: b0 -> b0
13:06:41 <lambdabot> Actual type: b0 -> Product b0
13:06:46 <Taneb> :t getProduct . (Product <> Product)
13:06:48 <lambdabot> Num b => b -> b
13:07:41 <nooodl_> instance Monoid b => Monoid (a -> b) where
13:07:41 <nooodl_> mempty _ = mempty
13:07:41 <nooodl_> mappend f g x = f x `mappend` g x
13:08:37 <nooodl_> > getSum $ (Sum <> Sum) 10
13:08:39 <lambdabot> 20
13:08:42 <shachaf> nooodl_: Can you come up with a free group type for me, please?
13:09:39 <nooodl_> i just had to up what a free group is so probably i won't be of much help
13:10:48 <nooodl_> hmmmm
13:12:18 <nooodl_> this sounds like it'd be impossible to define as a type
13:12:37 <shachaf> Haskell is bad at things like commutativity and invertibility. :-(
13:14:46 <nooodl_> a free group can have multiple free generating sets, right
13:15:05 <shachaf> ?
13:15:07 <nooodl_> like for (Z,+) you have could have S = {1} or S = {-1}
13:15:27 <nooodl_> (i'm reading http://en.wikipedia.org/wiki/Free_group because i'm bad)
13:15:33 <nooodl_> (at group theory)
13:16:24 <shachaf> Hmm. I'm not sure what you mean.
13:16:40 <shachaf> Ah, you're going in the other way.
13:17:00 <shachaf> I mean: Given some generating set S, give me a free group over that set.
13:17:12 <nooodl_> ohh i see
13:17:28 <shachaf> [] is a free monoid in a similar way.
13:17:30 <nooodl_> (also: given an operator?)
13:17:35 <shachaf> No, you make the operator.
13:17:49 <Taneb> What shachaf wrote earlier is a group
13:18:17 <shachaf> Given the set S = {A,B,C}, you can give me the free monoid: (MS,(++),[]), where MS = {[], [A], [B], [C], [A,A], ,[C,A,B,A], ...}
13:18:32 <shachaf> Note that you pick your own operation here. What the elements actually are doesn't really matter.
13:18:43 <Taneb> But it needs Ranks2Types
13:18:53 <shachaf> Taneb: Just PolymorphicComponents!!!!!!!!!!
13:19:04 <Taneb> It needs some extension
13:19:10 <shachaf> Sure.
13:19:10 <nooodl_> so that type would be... FreeGroup S
13:19:16 <shachaf> nooodl_: You can look at Nat as a free monoid over some singleton generating set.
13:19:22 <shachaf> That's the same as saying that [()] ~ Nat
13:19:38 <shachaf> Where [] = 0, [()] = 1, and so on.
13:19:41 <shachaf> (++) becomes addition.
13:19:50 <nooodl_> right
13:20:07 <shachaf> Now, if you define data Unit = Unit and data Younit = Younit, [Unit] and [Younit] are equivalent.
13:21:42 <shachaf> nooodl_: Anyway, a free group would be similar, except you also have inverses.
13:22:09 <shachaf> So if your generating set is {A, B, C}, then you'd make up new elements A^-1, B^-1, C^-1
13:22:25 <shachaf> It doesn't matter what A,B,C actually were originally. You're making up inverses for them.
13:23:23 <shachaf> Then you can take "" (the empty word) as an element of Freegroup S, and also A, AB, AAA, ABA^-1, etc.
13:23:35 <shachaf> But ABB^-1A isn't an element.
13:23:40 <shachaf> Or rather it's equivalent to AA.
13:23:50 <shachaf> (Note: That means [A, B, B^-1, A])
13:24:17 <nooodl_> let me guess, ABB⁻¹A⁻¹ is equal to ""?
13:24:33 <shachaf> Right.
13:25:09 <shachaf> So you've made up a group structure from any set at all.
13:25:18 <shachaf> And in a sense this is the "minimal" group structure you can make.
13:25:41 <shachaf> (For example, this is also a monoid -- just forget about the invertibility -- but it's not a "minimal" monoid, because it has all these extra elements.)
13:31:10 <Taneb> For groups I took a leaf from edwardk's book and inlined things so that the core is shorter
13:31:33 <Taneb> However, I did not experiment with eta-expansion
13:51:24 <Taneb> shachaf, your Group seems to be rather useless
13:51:30 <Taneb> No, wait
13:51:31 <Taneb> Nevermind
13:52:50 <FreeFull> shachaf: A^-1 would be {B, C} right?
13:53:05 <FreeFull> Or not?
13:53:34 <FreeFull> Oh wait, it wouldn't be, you're talking about something else
13:55:08 <FreeFull> Groups
13:58:09 -!- sebbu2 has changed nick to sebbu.
14:00:56 <FreeFull> Haskell and GHC don't seem to come with stuff for groups, just for monoids
14:01:44 <Taneb> That's why I wrote a small library in 5 minutes and uploaded it to Hackage
14:01:49 <Taneb> http://hackage.haskell.org/package/groups-0.1.0.1
14:02:28 <FreeFull> class (Monoid a) => Group a where { invert :: a -> a }
14:02:33 <FreeFull> Right?
14:02:59 <Taneb> Yeah
14:03:07 <Taneb> That's pretty much exactly my definition
14:03:39 <Taneb> The main difference is formatting and I used the letter 'm' rather than 'a'
14:05:43 <Taneb> And I still haven't decided whether to go to the UV party or not
14:11:13 -!- Arc_Koen has joined.
14:15:33 <FreeFull> Taneb: You could make Group instances for Ordering and Maybe a
14:15:49 <Taneb> ...no you can't
14:16:22 <Taneb> > mempty :: Maybe String
14:16:24 <lambdabot> Nothing
14:16:38 <Taneb> Give me a value x such that x <> Just "hello" is Nothing
14:17:04 <FreeFull> Oh, you're right
14:17:29 <Taneb> Believe me, I actually double-checked those
14:17:36 <Taneb> You can't make an instance for Any or All either
14:17:56 <FreeFull> You could make an instance for Xor possibly?
14:18:13 <FreeFull> If there was a Xor
14:18:34 <Taneb> Possibly
14:19:20 <Taneb> invert = id
14:19:58 -!- boily has joined.
14:20:09 <FreeFull> Would have to define the Xor monoid first though
14:20:09 -!- carado has joined.
14:20:39 <Taneb> Yeah
14:21:05 <Taneb> I don't want that to be on my head, though
14:22:02 <FreeFull> newtype Xor = Xor { getXor :: Bool } instance Monoid Xor where { mempty = False; mconcat = (/=) } instance Group Xor where { invert = id }
14:22:29 <FreeFull> Looks good?
14:23:56 <Taneb> ...almost
14:24:05 <Slereah_> Xor always makes me thing of some alien overlord
14:24:21 <Slereah_> THE ALMIGHTY XOR, MASTER OF THE LOGIC GATE
14:24:33 <Taneb> newtype Xor = Xor {getXor :: Bool} deriving (Eq); instance Monoid Xor where {mempty = Xor False; mconcat = (/=) } instance Group Xor where {invert = id}
14:24:42 <FreeFull> Xor is weaker than Nand and Nor though
14:24:57 <FreeFull> Taneb: Oh right
14:25:01 <FreeFull> Good catch
14:25:12 <Slereah_> That's why Xor needs his henchman, Not
14:25:45 <mroman> Don't be true or i'll invert you.
14:27:10 <Taneb> I don't think Xor + Not is universal
14:27:13 <Taneb> But I am not sure
14:27:22 <Slereah_> I dunno either
14:27:49 <Slereah_> But I needed to act quickly!
14:27:51 <Slereah_> For humor timing
14:28:14 <FreeFull> You can make Not using Xor though
14:28:23 <Taneb> Hmm, yes
14:28:24 <FreeFull> not = xor 1
14:28:25 <Slereah_> Then Xor and ->
14:28:36 <Taneb> And as Xor isn't universal, neither is Xor + Not
14:28:36 <FreeFull> Well, you need both xor and 1
14:28:40 <Slereah_> How do you pronounce -> in programming?
14:28:42 <Taneb> 1 is free
14:28:44 <Taneb> "to"
14:28:47 <FreeFull> And you can't make a 1 using xor
14:29:42 <FreeFull> Well, by 1 I mean True
14:30:00 <FreeFull> Too used to thinking bitwise
14:30:02 <Taneb> I understood that
14:30:22 <Taneb> Hmm
14:30:46 <Taneb> I think XNOR is as universal as XOR
14:30:53 <Taneb> Because with XNOR you can't get 0
14:34:17 <mroman> afaik NAND,NOR,XOR,XNOR can each cover all logical operations.
14:34:17 -!- Taneb has quit (Quit: Leaving).
14:35:03 -!- Taneb has joined.
14:35:04 -!- Nisstyre has quit (Ping timeout: 272 seconds).
14:36:04 <Slereah_> I think it's only nand and nor?
14:47:45 <mroman> *XOR&XNOR
14:49:13 -!- Nisstyre has joined.
14:49:56 <Taneb> Yeah, wikipedia says XOR isn't universal
14:50:18 <Slereah_> FNORD
14:50:20 <Taneb> XOR + implication is
14:50:27 <Taneb> FNORD is universal, of course
14:50:36 <Slereah_> Implication + NOT is so it's not too surprising
14:50:58 -!- mekeor has joined.
14:54:25 -!- azaq23 has quit (Ping timeout: 248 seconds).
15:02:01 -!- dessos has joined.
15:03:27 -!- upgrayeddd has joined.
15:04:43 <upgrayeddd> more than a decade of logs, wow
15:04:54 <Taneb> `welcome upgrayeddd
15:04:58 <HackEgo> upgrayeddd: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page. (For the other kind of esoterica, try #esoteric on irc.dal.net.)
15:05:26 <upgrayeddd> thank you Taneb
15:05:29 <fizzie> To be honest, the pre-2005 days are pretty quiet.
15:05:58 <Slereah_> Not even people coming in to get magic advice
15:05:59 <Slereah_> ?
15:07:16 <fizzie> Slereah_: Well, I mean, http://codu.org/logs/log/_esoteric/2003-01-19 looks like a pretty typical day to me.
15:07:30 -!- Phantom_Hoover has joined.
15:07:51 <Taneb> upgrayeddd, so, what brings you to the channel
15:08:19 <Slereah_> heh
15:08:24 <Slereah_> I forget when I came in
15:08:26 <Slereah_> 2007 maybe?
15:08:36 <upgrayeddd> Taneb: jconn said there was an open session here and I was curious
15:12:22 <Gregor> "Open session"?
15:12:42 <Sgeo> jconn apparently stores a sandbox for each person
15:12:44 <Sgeo> jconn, ls
15:12:45 <Sgeo> jconn, ls:
15:12:46 <jconn> Sgeo, open sessions are: Sgeo,#jsoftware Taneb,#esoteric Okasu,#jsoftware Sgeo,#esoteric crassus,#e3b solemn,#jsoftware fftw,#jsoftware b_jonas,#jsoftware Elision,#jsoftware
15:12:46 <jconn> Sgeo, done list
15:14:32 <Sgeo> Let's trick shachaf into using the bot!
15:23:36 -!- oerjan has joined.
15:25:08 -!- impomatic has joined.
15:26:58 <Taneb> What bot
15:27:29 -!- cuttlefish has joined.
15:28:14 <Sgeo> Taneb, jconn
15:28:32 <Sgeo> Because if shachaf uses it, he'll be on the ls: list
15:28:34 <Taneb> Whose bot is that?
15:28:38 <Taneb> And when did I use it
15:28:47 <Sgeo> afk
15:29:26 -!- azaq23 has joined.
15:35:47 <oerjan> <Taneb> "Bueue"!? <-- wat
15:36:02 <Taneb> The name is too darn similar to Fueue
15:36:23 <Taneb> ...says the guy who deleted the first Numberwang to replace it with a completely different language
15:36:34 <oerjan> OKAY
15:40:49 <boily> oerjan: WHY SO CAPITALIST?
15:41:03 <oerjan> wat
15:41:15 <Phantom_Hoover> wats are the tool of the bourgeousie
15:41:38 <Phantom_Hoover> oh shit there's only one u in bourgeoisie
15:41:43 <Phantom_Hoover> it seemed frencher that way
15:41:54 <Taneb> buourgueuousuiue
15:42:05 <boily> ow.
15:43:17 <Phantom_Hoover> baeiourgaeoiusaeiou
15:43:22 <boily> AAAARGH!
15:43:26 <boily> stop!
15:45:17 <oerjan> have some beaaaujoileaise
15:46:26 <boily> that's wanton cruelty to the common French vowel.
15:58:17 <oerjan> darn i've accidentally stopped my watch
15:58:23 <oerjan> no wonder i'm getting hungry
15:58:51 <Taneb> Is this the watch that pipes glucose directly into your arteries?
15:59:28 <oerjan> no, but i was planning to wait until half past 3 to eat and just started wondering why it wasn't already the time
15:59:38 <oerjan> (it's 5)
15:59:50 <Taneb> :(
16:00:11 <oerjan> oh wait, just half past 4
16:00:46 <Taneb> It's just turned 4 here
16:00:48 <Taneb> @time oerjan
16:00:50 <lambdabot> Local time for oerjan is Thu Feb 14 17:00:48 2013
16:00:56 <oerjan> i mean the plan
16:00:58 <Taneb> Oh
16:03:45 -!- sebbu has quit (Ping timeout: 260 seconds).
16:08:03 <Sgeo> wtf
16:08:12 <Sgeo> My Nook says that A Clockwork Rocket only has 316 pages
16:08:17 <Sgeo> Is it really a short book?
16:08:24 <Sgeo> Was planning on wasting a few hours reading it today
16:08:56 <Sgeo> A 30 minute read isn't going to cut it :(
16:09:49 <Gregor> If 316 pages takes 30 minutes, that's a page every 6 seconds.
16:11:34 <elliott> Gregor: that doesn't sound so unreasonable
16:11:50 <elliott> Sgeo: (how can you plan to waste a few hours on something but only have 30 minutes)
16:11:59 <Gregor> It does if you're actually reading. And it's not The Cat in the Hat.
16:13:19 <Taneb> I preferred the sequel
16:13:36 <elliott> how fast can you read cat in that hat
16:13:39 <elliott> that is the real question here
16:14:22 <Sgeo> Ok, so I don't actually know how fast I read
16:14:49 <Sgeo> The point is I'm going to need to spend a few hours, and if a book takes too short to read, I'm going to need to find something else to do afterwards
16:15:27 <Taneb> 316 pages isn't a quick read
16:17:12 <Taneb> I've just ordered a plain grey t-shirt
16:17:34 <Taneb> These two facts are fundamentally interrelated
16:17:44 -!- Halite has joined.
16:18:10 <Halite> someone make a valentines day esolagn
16:18:17 <Taneb> Nah
16:18:27 <Halite> OH YAH
16:18:57 <quintopia> sup salty
16:19:30 <Halite> quintopia, hey square utopia
16:19:45 <Halite> wait, soup salty
16:19:48 <Halite> mmm soup
16:19:52 <Halite> Halite Soup
16:20:09 <Sgeo> Halite, feel free to make one yourself
16:20:16 <Halite> BrainSoup
16:20:26 <Halite> Norfsoup
16:20:28 <Sgeo> Preferably not based on brainfuck
16:20:32 <Halite> Sorfsoup
16:20:47 <Halite> how can I make a programming language not based on BF
16:21:01 <Taneb> Look at unlambda
16:21:10 <Halite> link
16:21:11 <quintopia> i cant think of a good v-day idea. it doesnt seem like a commercial holiday for candy, cards, and flowers has much in common with esolangery
16:21:51 <Sgeo> Trustlambda?
16:21:57 <Halite> quintopia, buy flower of colour "Hello world!"
16:22:09 <mroman> it's valentines day?
16:22:12 * Sgeo wonders if Unlambda might be a good base for a new Trust family language
16:22:37 <Sgeo> Except I don't know if I want to write an Unlambda interpreter
16:22:39 <quintopia> languages that are basically procedural with weird themed syntax are not very fun imo
16:22:50 <oerjan> `wiki Unlambda
16:22:52 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: wiki: not found
16:23:00 <oerjan> ...we don't have that?
16:23:06 <oerjan> !wiki Unlambda
16:23:11 <oerjan> ^wiki Unlambda
16:23:11 <fungot> http://esoteric.voxelperfect.net/wiki/Unlambda
16:23:22 <oerjan> oh that ... is outdated.
16:23:24 <Sgeo> Ah, ye old classic wiki
16:23:34 <elliott> Sgeo: are you having nostalgia for the old wiki url
16:23:40 <quintopia> i am
16:23:55 <Sgeo> surprisingly, no
16:24:00 <Phantom_Hoover> the way none of us knew what voxelperfect.net actually
16:24:01 <oerjan> oh well, the link does work
16:24:01 <Phantom_Hoover> was
16:24:04 <Phantom_Hoover> good times, good times
16:24:07 <elliott> Phantom_Hoover: it was graue's domain
16:24:19 <oerjan> a domain of perfect voxels
16:24:21 <elliott> I don't think it hosted anything except the esolangs stuff
16:24:33 <Sgeo> There was another thing for esolang files on that domain
16:24:35 <elliott> http://voxelperfect.net/ is a pretty good placeholder page, that looks new
16:24:39 <elliott> Sgeo: yes that's still hosted there
16:25:39 <oerjan> * Sgeo wonders if Unlambda might be a good base for a new Trust family language <-- my self-interpreter is almost meta-circular already!
16:25:50 <elliott> self-circular is almost meta-interpreter
16:26:30 -!- Halite has left ("Halting execution").
16:26:44 -!- Halite has joined.
16:26:53 <Halite> wrong channel to part on lolol
16:26:54 <oerjan> that's how it managed to have an eigenratio of 1
16:26:58 <Halite> trying to part #irp
16:29:41 <elliott> oerjan: thought: perhaps the best way to define "non-cheating self-interpreter" is "self-interpreter with eigenratio > 1"
16:30:06 <elliott> of course then someone will define a very silly joke language with a "slow self-interpreter" command...
16:30:27 <Sgeo> eigenration?
16:30:31 <Halite> how can an interpreter self-interpretate
16:30:48 <Gregor> eigenration: How much of your own body you're allowed to eat per day if stranded.
16:30:57 <Phantom_Hoover> you write an interpreter for <language> in <language>
16:31:16 <Halite> like writing an interpreter for BF in BF
16:31:25 <Phantom_Hoover> yes
16:31:30 <Halite> how would you interpretate the interpreter
16:31:38 <Phantom_Hoover> what
16:31:52 <Halite> how would you interpretate the self-interpreter
16:31:55 <Sgeo> I wrote a compiler for Trustfuck in Trustfuck
16:32:12 <Sgeo> Is the compiler cheating?
16:32:26 <Phantom_Hoover> Halite, it works exactly the same as running the self-interpreter with any other interpreter
16:32:28 <Halite> Sgeo, possible if there is a TF interpreter
16:32:28 <Phantom_Hoover> that's the point
16:32:37 <oerjan> <Taneb> I don't think Xor + Not is universal <-- indeed not, and i shall have to point you to the Post Lattice again
16:32:56 <Sgeo> Halite, there are currently no TF interpreters, only TF compilers
16:32:57 <Halite> NOR and NAND are functionally complete
16:33:15 <Halite> Sgeo, laise
16:33:34 <Sgeo> I have to think about whether interpreted TF misses the point...
16:33:45 <oerjan> Halite: the post lattice gives you a way to see exactly which sets of boolean functions are functionally complete, and if not, what they _do_ generate
16:34:01 <Sgeo> Although the infrastructure is there
16:34:23 <Sgeo> oerjan, go look at TF go look at TF go look at TF?
16:34:27 <Halite> oerjan, NOR and NAND are functionally complete, and so are its neighbours OR+NOT and AND+NOT
16:34:55 <Phantom_Hoover> yes Halite
16:34:56 <oerjan> Halite: i am trying to tell you that i already know quite a lot more than this
16:34:58 <Phantom_Hoover> i think oerjan knows this
16:35:21 <Phantom_Hoover> http://en.wikipedia.org/wiki/File:Post-lattice-centre.svg]
16:35:39 <Phantom_Hoover> i like the descriptive labels
16:36:23 <nooodl_> http://upload.wikimedia.org/wikipedia/commons/1/19/Post-lattice.svg wow
16:36:37 <elliott> Phantom_Hoover: I like how it looks like a cube with some crap sticking out of it.
16:36:40 <elliott> Um, not cube. What's the word again?
16:37:13 <elliott> Phantom_Hoover: WHAT IS THE NAME FOR A 3D RECTANGLE HELP
16:37:17 <nooodl_> cuboid
16:37:18 <Phantom_Hoover> parallelipiped?
16:37:27 <nooodl_> cuboid elliott !!!!!
16:37:30 <Taneb> tetrahedron
16:37:31 <ion> The 4-day time cube.
16:37:31 <elliott> thanks you nooodl_
16:37:38 <nooodl_> `THANK nooodl_
16:37:38 <Phantom_Hoover> tesseract
16:37:40 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: THANK: not found
16:38:34 <oerjan> elliott: btw some of the discussion i had with that eigenratio guy was how the known brainfuck self-interpreters don't seem to have a finite eigenratio at all (they use quadratic time as the tape grows), although i thought i had a way to fix it. alas he didn't seem to have much time for the discussion, i didn't hear from him any more after a while
16:39:20 <quintopia> parallelopiped is 3d parallelogram Phantom_Hoover
16:39:48 <Phantom_Hoover> i think you'll find it's parallelapiped, quintopia
16:40:18 <quintopia> i might...IF I LOOKED
16:40:28 <quintopia> but that would be cheating
16:40:37 <Phantom_Hoover> oerjan, how does he define eigenratio
16:41:04 <Taneb> what is an eigenratio
16:41:16 <Taneb> It sounds interesting and vaguely familiar
16:41:30 <Phantom_Hoover> a rough measure of the efficiency of a self-interpreter
16:41:36 <Taneb> Okay
16:42:26 <FreeFull> Hey, Haskell has data construction syntax that looks like [something| insert stuf here] right?
16:42:36 <Taneb> Yes...?
16:43:10 <Phantom_Hoover> he seems to define it as the limit as n -> infinity of the ratio of time taken to simulate an n interpreter stack to the time taken to simulate an n-1 interpreter stack
16:43:18 <FreeFull> Can't find a haskell wiki page about it
16:43:20 <elliott> oerjan: hm
16:43:30 <elliott> oerjan: you can generalise that to an eigenfunction, right?
16:43:34 <elliott> (what's abuse of terminology)
16:44:01 <oerjan> um that sounds like an eigenvector in a function space
16:44:01 <Phantom_Hoover> 'eigenfunction' is already taken by those dastardly linear algebraists
16:44:10 <oerjan> right
16:44:22 <elliott> oerjan: hence abuse of terminology :P
16:44:34 <elliott> I mean s.t. an eigenratio of k would become f(x) = kx
16:45:11 <oerjan> elliott: in fact i _did_ conclude that there should be something like r^(n^2) for the brainfuck self-interpreters, so i've had similar idea
16:45:12 <Phantom_Hoover> i was about to suggest o notation but that would be stupid
16:45:41 <Phantom_Hoover> elliott, er, wouldn't an eigenratio be f(x) = k^x
16:46:09 <elliott> er sure
16:46:43 <Phantom_Hoover> i guess metacircular interpreters would have linear eigenfunctions
16:46:49 <oerjan> Phantom_Hoover: that is, i _think_ that if you take the logarithm of f(x), its limit will be a polynomial instead of linear for brainfuck, so you can look at the degree and the coefficient of the largest exponent
16:47:29 <elliott> also it would be nice if they were defined more abstractly than realtime
16:47:34 <elliott> but I guess you can just reuse big-O notation's "step"
16:47:48 <Phantom_Hoover> it's all a bit dodgy to me
16:48:01 <Phantom_Hoover> because obviously you need to have some dummy program to cap off the stack
16:48:13 <oerjan> FreeFull: are you thinking about list comprehensions or quasiquotations? (the latter are [something| insert stuff here |])
16:48:28 <Phantom_Hoover> and you can easily set things up so all the numbers vary wildly depending on what program you use
16:48:48 <elliott> oerjan: btw what do you think about his golden ratio speculation? (http://eigenratios.blogspot.co.uk/2007/11/search-for-phi-holy-golden-ratio.html) it appeals to me but I don't know if it seems like coincidence to someone more competent
16:49:10 <FreeFull> oerjan: Quasiquotations, thanks
16:50:11 <FreeFull> Seems those aren't for data like I thought
16:50:12 <Phantom_Hoover> elliott, er, so wait
16:50:19 <oerjan> Phantom_Hoover: the thing that makes brainfucks nonlinear isn't that they aren't metacircular, it's that they frequently need to move through the tape for a long while
16:50:32 <Phantom_Hoover> oerjan, er
16:50:40 <Phantom_Hoover> that's not what i meant
16:51:09 <Phantom_Hoover> i mean if you define the eigenfunction as just being the limit of the time taken
16:51:19 <Phantom_Hoover> then metacircular interpreters are rougly linear
16:51:57 <Phantom_Hoover> 'proper' self-interpreters are exponential or more, presumably
16:54:06 <oerjan> Phantom_Hoover: anyway the thing about the linear case is that with a nice interpreter you get a linear matrix describing how operations are implemented in terms of many operations at the previous stage, and if the operations are sufficiently cross-implemented, you get that perron-frobenius theory applying so that everything converges to the eigenspace of a universal eigenvector
16:55:08 <oerjan> and so the eigenratio then exists completely stringently
16:55:16 <Phantom_Hoover> sorry oerjan i'm not doing that much maths today
16:55:47 <oerjan> Phantom_Hoover: it's the same principle behind the proposed new scoring for bfjoust, btw
16:55:55 -!- copumpkin has quit (Ping timeout: 252 seconds).
16:56:35 -!- copumpkin has joined.
16:56:52 <elliott> oerjan: thanks a lot :(
16:57:58 <oerjan> <Phantom_Hoover> then metacircular interpreters are rougly linear <-- oh right, yeah that's what happened with the unlambda
16:58:26 <oerjan> elliott: what?
16:58:49 <FreeFull> There doesn't seem to be documentation for GHC.Arr at http://www.haskell.org/ghc/docs/latest/html/libraries/index.html
16:59:17 <FreeFull> I wanted to look at the source ):
17:00:37 <oerjan> elliott: well the golden ratio clearly isn't a lower bound
17:01:23 <oerjan> FreeFull: hm i think i've managed to guess urls for such stuff before...
17:02:23 <oerjan> http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.6.0.1/src/GHC-Arr.html#Array
17:03:00 <elliott> oerjan: well if you exclude "cheating" self-interpreters somehow
17:03:02 <oerjan> FreeFull: this was simple, the source link from Array in the Data.Array module pointed directly there :P
17:04:40 <oerjan> elliott: it seems like a matter of deciding how many operations you minimally can implement an operation with before you call it cheating. even the golden ratio seems a little low when you put it that way.
17:05:25 -!- varnie has joined.
17:05:36 <elliott> oerjan: right
17:05:37 <oerjan> because you cannot get the golden ratio without _some_ operations being implemented with just one underlying operation
17:05:56 <oerjan> and once you admit that, it doesn't seem that implausible to go even lower
17:06:11 <elliott> hm so I wonder if there is any limit to how small an eigenratio can be if it is > 1
17:06:14 <elliott> I guess not really
17:06:18 <elliott> if you just have enough operations
17:06:33 <elliott> oerjan: btw what about eigenratios > 0 < 1 :P
17:06:35 <FreeFull> oerjan: Aww, seems to be a primitive =P
17:06:43 <Vorpal> what about a TC OISC, how would that count here?
17:06:57 <elliott> FreeFull: you can implement the immutable array interface (inefficiently) in pure haskell
17:07:09 <elliott> well, even efficiently, if you use a tree
17:07:16 <elliott> no guarantees of contiguousness in memory though
17:07:32 <oerjan> yeah if you have a cycle of operations where everyone is implemented in terms of one other except _one_ which is implemented in terms of two others, then you can get arbitrarily close to n by making the number of them large enough. i think.
17:07:48 <oerjan> *close to 1
17:08:17 <elliott> oerjan: I guess an eigenratio < 1 is where you have an instruction that somehow saves time by doing the work of two others...
17:08:30 <elliott> ...and for that instruction itself to take less time to interpret than it saves
17:10:26 <FreeFull> elliott: Well, the only purpose of Data.Array seems to be convienience and speed
17:10:52 <elliott> Data.Array is not as convenient nor perhaps as fast as you might hope for. take a look at the vector packgae
17:15:26 -!- azaq23 has quit (Max SendQ exceeded).
17:19:00 -!- epicmonkey has quit (Ping timeout: 260 seconds).
17:22:27 <Halite> esoteric
17:22:38 <Halite> esolang
17:23:19 -!- Zuu has joined.
17:24:49 -!- Zuu has left.
17:25:49 -!- sebbu has joined.
17:25:49 -!- sebbu has quit (Changing host).
17:25:49 -!- sebbu has joined.
17:26:03 <FreeFull> elliott: How well does Data.Vector do multidimensional stuff though?
17:26:27 <elliott> FreeFull: you can nest vectors manually, or see the "repa" package, which does multidimensional arrays on top of vector with automatic parallelisation
17:26:34 <elliott> though I think the API is in flux maybe?
17:26:50 <elliott> there is a nice http://www.haskell.org/haskellwiki/Numeric_Haskell:_A_Repa_Tutorial. I don't know if it is up to date
17:46:45 <elliott> http://en.wikipedia.org/wiki/Worshipful_Company_of_Hackney_Carriage_Drivers
17:55:05 <Halite> I have an idea for an esolang
17:55:43 <olsner> the worshipful company of etc sounds like something out of a terry pratchett book
17:56:26 <Taneb> He had to get inspiration from somewhere
17:57:00 <elliott> Halite: what is it
17:58:50 <Halite> elliott, that the esolang's only boolean operation will be - not NAND - not NOR - but f(three bit integer a, boolean b, boolean c)
17:59:47 <Halite> elliott, ahem, f(four bit integer a, boolean b, boolean c)
18:01:10 <Halite> it's basically a multiplexer where b is the most significant bit of the selector and c is the least significant bit of the selector. Also, a is the integer whose bx2 + c bit is selected
18:01:30 <Halite> b*2
18:01:36 <Halite> b*2 + c bit
18:08:08 <FreeFull> Halite: What is the output type? boolean?
18:08:17 <FreeFull> Can you construct the integer out of four booleans?
18:08:29 <Halite> FreeFull, the output is boolean
18:08:44 <Halite> FreeFull, you can construct a out of four booleans
18:08:51 -!- oerjan has quit (Quit: leaving).
18:09:43 <Halite> if you know how to merge two bits together, then it's a multiplexer with b and c merged (assuming booleans are single-bit integers)
18:11:26 <oklopol> a "repa" tutorial? is that a typo or a euphemism?
18:11:45 <FreeFull> and(b,c) would be something like f(1000,b,c) right?
18:12:04 -!- azaq23 has joined.
18:12:10 <FreeFull> So the a is basically the logic table for whatever boolean operation
18:12:28 <Halite> yes
18:12:35 <Halite> a is the logic table
18:13:43 <Halite> f(1000,1,1) will be 1, as ab is 11 and the (binary) 11th (fourth including 00) bit of a is 1
18:14:02 <Halite> so you can make NAND
18:14:06 <Halite> and NOR
18:14:21 <FreeFull> 0111 and 0001
18:14:32 <Halite> with f(0111,b,c) and f(0001,b,c)
18:14:54 <Halite> you've got it exactly right
18:15:07 <FreeFull> You could do this as a DSL
18:15:40 <Halite> what is a DSL
18:16:00 <kmc> domain-specific language
18:16:25 <Halite> what is a domain-specific language
18:16:37 <fizzie> Digital subscriber line.
18:16:38 <kmc> a language specialized to one problem domain
18:16:45 <kmc> as opposed to a general purpose programming language
18:16:54 <elliott> what is a google
18:17:04 <kmc> people also talk about "embedded DSLs" which are libraries for a general purpose language that support rich syntax that makes them feel like a mini-langauge of their own
18:17:07 <FreeFull> Well, I meant EDSL
18:17:09 <kmc> but also yes google it
18:19:04 <fizzie> http://zem.fi/ttd_logic/gate.png that's like the very same thing, it's been configured to be a NAND gate.
18:19:43 <oklopol> dood you that?
18:20:04 <oklopol> *doed
18:20:19 <fizzie> I doed it quite a long time aggo.
18:20:27 <FreeFull> fizzie: o.o
18:20:39 <FreeFull> I didn't know that game was turing-complete
18:21:00 <Phantom_Hoover> well
18:21:01 <Phantom_Hoover> it's not
18:21:08 <Phantom_Hoover> bounded storage and all that
18:21:22 <FreeFull> True
18:21:45 <FreeFull> http://zem.fi/ttd_logic/ttd_4adder.png This looks surprisingly like an electronic circuit when zoomed out (large image warning)
18:22:03 <fizzie> The AI scripting language ("Squirrel") in it (nowadays) probably is.
18:22:06 <Phantom_Hoover> why do people still do that in the broadband age
18:22:47 <FreeFull> Phantom_Hoover: Because having a fast connection doesn't mean the page has a fast upstream
18:23:00 <FreeFull> And some people might still have small amounts of RAM or something
18:23:10 <fizzie> I've always thought it's more about the memory thing.
18:23:17 <Phantom_Hoover> i think nortti has nobody to blame but himself
18:23:21 -!- epicmonkey has joined.
18:23:30 <fizzie> Loading up a 10k x 10k image on my phone makes everything all sucky, for example.
18:23:35 <Halite> I got back from the toilet
18:23:44 <Phantom_Hoover> Halite..
18:23:46 <Phantom_Hoover> ...
18:23:47 <Phantom_Hoover> ........
18:23:51 <Halite> what could I call my logic table function
18:24:05 <Halite> Phantom_Hoover, whatt
18:24:10 <Halite> whattt
18:24:13 <FreeFull> Halite: You should borrow a term from intercal
18:24:15 <elliott> Phantom_Hoover: Have you never seen Firefox try to load a gigantic image.
18:24:17 <Halite> whatttttttt
18:24:23 * boily lends his personal ellipses supply to Phantom_Hoover
18:24:28 <Phantom_Hoover> elliott, i did... once
18:24:29 <Halite> FreeFull, can you give me a link to intercal
18:24:34 <Phantom_Hoover> i think i repressed the memory
18:24:42 <Halite> FreeFull, I don't know what intercal even is
18:24:47 <Phantom_Hoover> iirc alt-sysrq stopped working
18:24:52 <boily> (careful, they're canadian dots, aligned to SI. they may not fit with US customary dots.)
18:25:14 <fizzie> FreeFull: Random fact: there was a single farm there in the middle (due to the terrain generator); it got mostly overwritten by the hacked-in copy-paste, but the fields still remain and get tilled.
18:25:33 <FreeFull> fizzie: Cool
18:25:53 <FreeFull> Halite: Do you at least know befunge and brainfuck?
18:25:58 <elliott> boily: what about scottish dots
18:26:05 <elliott> also I believe they are US customary "periods"
18:26:08 <Halite> FreeFull, I know BrainFuck a little bit and I've only heard of Befunge
18:26:25 <FreeFull> Halite: Ok, go on and read about INTERCAL now
18:26:27 <Phantom_Hoover> how can you know brainfuck 'a little bit'
18:26:28 <fizzie> I showed fungot's source to some people today, and they thought it was in brainfuck. Honestly, people these days!
18:26:28 <fungot> fizzie: you know as
18:26:43 <boily> elliott: those are fine. 20% better!
18:27:00 <Phantom_Hoover> do you only understand +-.<]?
18:27:13 <FreeFull> fizzie: What, they can't tell befunge apart from brainfuck?
18:27:45 <FreeFull> You know, is there a 2D brainfuck?
18:27:49 <fizzie> FreeFull: I suppose "the non-initiated" just know both look funny, and I suppose the sources mention the word "brainfuck" in comments.
18:27:58 <fizzie> I'm pretty sure there is.
18:28:15 <FreeFull> Hmm, minifuck-2d
18:28:37 <FreeFull> Which isn't brainfuck but is brainfucky enough
18:29:18 <fizzie> Dimensifuck is reasonably close too.
18:29:33 <nooodl_> 2D brainfuck wouldn't be much different from regular brainfuck
18:29:38 <Halite> Phantom_Hoover, I only understand that BF uses +-.,[] (and sometimes #! ) symbols
18:30:35 <fizzie> I'm reasonably certain there's the "obvious" "2D brainfuck" that's bf +-.,<> and then the directional commands and some conditional direction-changer.
18:32:02 -!- azaq23 has quit (Max SendQ exceeded).
18:32:13 <fizzie> Brainloller is pretty much that except the source format is an image.
18:32:17 <nooodl_> reasonably interesting idea: only implement directional commands for x-axis movement. ( and ) or something
18:32:21 -!- Phantom_Hoover has quit (Ping timeout: 276 seconds).
18:32:31 <fizzie> It even has the same [] loops (along the "current direction").
18:32:32 <nooodl_> and have | be a conditional up-down thingy
18:33:41 <Halite> I want to call my function LCOP (Logic Custom OPeration)
18:33:43 <nooodl_> actually, screw ( and ), you could work with conditional directional commands only
18:33:47 <FreeFull> If | will be conditional, you can get rid of []
18:34:02 <nooodl_> +-.,<>_| stealing _| from befunge
18:34:28 -!- azaq23 has joined.
18:34:41 <Halite> for example, LCOP(1000,x,y) = x AND y
18:35:03 -!- hagb4rd has joined.
18:35:15 <Halite> in decimal, LCOP(8,x,y)
18:36:08 <nooodl_> oh, and @ to stop running, of course
18:36:10 <FreeFull> Halite: Your language would allow recursion, right?
18:36:38 <Halite> FreeFull, why not
18:36:51 <Halite> FreeFull, if JS supports recursion
18:37:11 <FreeFull> I think recursion + LCOP would be enough to make it turing-complete, not sure though
18:37:19 <FreeFull> Why are you implementing it in JS? D:
18:37:26 -!- ogrom has joined.
18:38:55 <fizzie> I think that thing was called "B" *somewhere*, but I can't recall at all where, or why. (Might have been B for "boolean" or "binary" or both.)
18:40:15 <Halite> FreeFull, because then it'd be easier to not make it Brainfucking. Simply set var lang = {big object with commands being properties} and then lang.command will execute a command
18:40:55 <nooodl_> i hate myself for inventing this...
18:40:57 <Halite> FreeFull, basically a custom set of custom JS commands
18:41:22 <Halite> nooodl_, be happy :D
18:41:30 <FreeFull> Javascript does recursion but doesn't do tail-call optimisation or anything
18:41:40 <FreeFull> So it'll eat up memory if you put it into an infinite loop that way
18:41:45 <Halite> FreeFull, :c
18:42:25 <Halite> FreeFull, I could make tail-call optimisation myself, just put a few yields at the end of a while (true) loop
18:42:26 <fizzie> Gnah, once every couple of months I keep accidentally opening a PDF file in Emacs.
18:42:30 <fizzie> The worst thing is that it works.
18:45:06 <FreeFull> Your fault for using emacs
18:45:18 <FreeFull> When you try to open a pdf in vim, all you get is gibberish
18:45:20 <fizzie> FreeFull: It's so close to "evince".
18:45:35 <fizzie> FreeFull: I think ECMAScript 4 (which kind of retroactively never happened) required tail call optimization.
18:45:37 <FreeFull> v isn't even that close to m
18:45:52 <fizzie> I don't know if they have any plans for it for Harmony.
18:46:45 <fizzie> http://wiki.ecmascript.org/doku.php?id=harmony:proper_tail_calls has at least some kind of a proposal.
18:48:44 <nooodl_> hmmm
18:48:53 <nooodl_> here's a thing that reverses stdin
18:48:53 <nooodl_> http://bpaste.net/show/DHOattKOtoIOCHu8CWid/
18:49:04 <nooodl_> i think it looks pretty cool
18:50:35 <Halite> I'm calling my language SaltScript
18:51:24 <FreeFull> That doesn't tell you anything about the language itself
18:51:35 <FreeFull> Why not bitswitch
18:52:09 <FreeFull> Or maybe Nybswitch
18:52:21 <FreeFull> nybswytch
18:52:22 <FreeFull> Perfect
18:52:57 <nooodl_> what should i write an interpreter in
18:52:57 <FreeFull> https://github.com/dzamkov/SaltScript There is this saltscript already
18:53:08 <FreeFull> nooodl_: itself
18:53:10 <FreeFull> Then bootstrap
18:53:12 <nooodl_> :(
18:53:13 <elliott> nooodl_: haskell
18:53:36 <FreeFull> Haskell is too easy
18:53:38 <nooodl_> that could be interesting
18:53:56 <nooodl_> i'm afraid it's going to look really bad
18:54:05 <nooodl_> i've never done anything... state-y... in haskell
18:54:32 <elliott> what is the language
18:54:45 <elliott> ugh is it a brainfuck derivative
18:54:57 <nooodl_> no... its a good brainfuck derivative
18:55:33 <Taneb> Can someone tell me what C++ templates are in language I understand?
18:55:46 <Halite> SaltScript
18:55:51 <nooodl_> http://bpaste.net/show/QvVFMDSNVcPbuBVUEOX3/ that's my conversion of ,[>,]<[.<]
18:56:06 <nooodl_> (i hope)
18:56:33 <FreeFull> Taneb: C++ templates are intentionally confusing
18:56:37 <fizzie> Minimal-2D is I think what I was thinking of when mentioning that "obvious" "2D-brainfuck".
18:57:07 <FreeFull> Taneb: They're basically generic functions
18:57:24 <elliott> anyway you can do bf nicely in haskell with a zipper for the tape
18:57:51 <kmc> Taneb: they are a weird hybrid between a glorified macro system and a system of generic / polymorphic types
18:58:01 <nooodl_> how do you handle loops
18:58:13 <nooodl_> hmm. wait
18:58:14 <FreeFull> elliott: So U [a] a [a]
18:58:17 <FreeFull> For the tape
18:58:25 <Halite> I need help in implementing f(four-bit a,boolean b,boolean c)
18:58:34 <kmc> Taneb: you can think of it as polymorphism implemented by a glorified macro system, but many details of that "implementation" leak into the semantics
18:58:42 <Taneb> :(
18:58:43 <elliott> FreeFull: or even data Tape a = Tape (Tape a) a (Tape a)
18:58:45 <Halite> Basically, it's a logic table definer
18:58:49 <elliott> that gives you a two-ways-infinite tape
18:59:26 <nooodl_> Halite: return a & (1 << (b * 2 + c)) != 0;
18:59:36 <kmc> and they're totally duck-typed. there's no in-language concept of "what sort of classes can i put in this template parameter and have it work"
18:59:38 <FreeFull> Halite: It's basically (a >> ((b<<1)|c)) & 1 I think
18:59:45 <kmc> you can't know until you've pasted that type into all the code and try to type check it
18:59:56 <FreeFull> Or what nooodl_ said
18:59:59 <Halite> FreeFull, I'll ask on ##javascript
19:00:21 <FreeFull> Both should work I think
19:00:25 <FreeFull> nooodl_'s might be faster
19:00:51 <nooodl_> it's probably even faster if you combine them into
19:01:02 <Halite> (a >> ((b<<1)|c)) & 1
19:01:03 <nooodl_> a & (1 << ((b << 1) | c))
19:01:45 <nooodl_> meh, they're probably equally fast
19:02:40 <Halite> what formats do a, b, and c have to be in the script
19:03:00 <FreeFull> Halite: I'm assuming they're just numbers here
19:03:18 <FreeFull> And that b and c are only 0 or 1
19:03:25 <Halite> FreeFull, what about a
19:03:33 <FreeFull> Also a number
19:03:35 <Halite> FreeFull, is a something like 1000 or is it 8
19:03:36 <FreeFull> from 0 to 15
19:03:45 <nooodl_> 8
19:03:51 <Halite> it doesn't work
19:03:59 <Halite> returns nothing
19:04:07 <Halite> wait
19:04:12 <Halite> problem with my code I think
19:04:17 <FreeFull> f(8,1,1) should return 1
19:04:21 <Halite> forgot to add ;
19:04:43 <Halite> still does not work
19:04:48 <FreeFull> You probably want to make more custom so that you can write 1000 instead of 8
19:04:50 <nooodl_> what's your function like
19:04:59 <Halite> (a >> ((b<<1)|c)) & 1
19:05:17 <FreeFull> Halite: I just typed that from the brain, not guaranteed to work
19:05:20 <fizzie> http://sprunge.us/GEAi it seems fine for that single test case.
19:05:21 <nooodl_> try "return"...
19:05:23 <Halite> wait
19:05:29 <Halite> nooodl_, I did put return
19:05:35 <nooodl_> what fizzie did
19:05:39 <Halite> the arguments aren't a, b and c in the code
19:05:47 <nooodl_> oh
19:05:59 <Halite> they're table,x,y
19:06:25 <Halite> so (table >> ((x<<1)|y)) & 1 should work
19:06:42 <Halite> yes!
19:06:54 <FreeFull> Well, what did you think a, b and c were?
19:07:05 <Halite> a = table, b = x, and c = y
19:07:08 <FreeFull> Yeah
19:07:12 <FreeFull> What did you have them as before?
19:07:18 <Halite> before
19:07:29 <Halite> it was always table,x,y for the args
19:07:42 <Halite> wait
19:07:45 <Halite> I do not understand
19:07:49 <Halite> Ww
19:08:29 <fizzie> How rude, they've removed octal literals from ECMA-262. :/
19:08:51 <Halite> lolwhat
19:09:20 <Halite> table is not 3 bits, it's 4 bits
19:09:22 <fizzie> It's just decimal and hex ever since version 3 of it.
19:09:31 <Halite> oh
19:09:48 <Halite> they should have a custom bits() function, so you can choose the number of bits
19:10:10 <Halite> base*
19:10:13 <Halite> wrong
19:10:16 <Halite> wrong word
19:10:39 <Halite> they should have a base() function, so you can choose the base, where decimal = 10, hex = 16, etc.
19:10:51 <Halite> octal would be 8
19:10:55 <Halite> binary 1
19:11:05 <fizzie> Not 2, then?
19:11:25 <FreeFull> Halite: You could use strings and then convert to numbers
19:11:36 <FreeFull> Then you could have binary in the string
19:11:56 <FreeFull> Javascript's to number function does take a base parameter
19:12:03 <fizzie> Anyway, nobody but some Erlang hippies &c. seem to bother with arbitrary-base number literals.
19:12:54 <Halite> FreeFull, I'm talking to someone else about their rant about octal's removal from ECMA-262
19:13:35 <FreeFull> fizzie: I think they should add base 7
19:13:45 <FreeFull> Hex should be good enough to replace octal, right?
19:13:46 <Gregor> loloctal
19:13:49 <Gregor> Welcome to the future.
19:14:03 <fizzie> FreeFull: And use a leading 0 to denote that.
19:15:26 <nooodl_> wow everyone who's ever written a single line of haskell is going to hate me after i show them this
19:16:56 <FreeFull> nooodl_: Show us, see it as an opportunity to improve
19:17:08 <nooodl_> yeah, when it's finished
19:17:26 <FreeFull> Write ugly code -> refactor isn't a bad approach when you don't know how to write pretty code on the first go
19:18:37 <FreeFull> And sometimes you can't go the pretty code straight away path at all
19:19:57 <Halite> you can make ugly code pretty by adding indentation and whitespace
19:19:59 <boily> nowadays, I never write pretty code first. my workflow looks like: write ugly stupid obvious code -> see what happens -> rinse off bad parts -> repeat.
19:21:01 <Halite> my workflow looks like: write whitespaced pretty code -> see what happens -> repeat
19:21:21 <Halite> one step less
19:21:33 <Halite> no water needed
19:21:56 <Halite> sometimes it's write ugly code -> see what happens -> repeat
19:22:03 <Halite> but that's my early time
19:22:12 <mroman> https://github.com/FMNSSun/Burlesque/blob/master/Burlesque/Eval.hs#L695 <- improve :)
19:23:00 <Halite> SaltScript is getting on quite nicely
19:24:16 <FreeFull> Halite: "you can make ugly code pretty by adding indentation and whitespace" You clearly haven't seen truly ugly code, or don't know what truly pretty code looks like
19:24:39 <mroman> https://github.com/FMNSSun/Burlesque/blob/master/Burlesque/Eval.hs#L339 <- all that case stuff looks really chaotic.
19:24:46 <mroman> but I don't know any other way to do it.
19:27:02 -!- sirdancealot has joined.
19:27:47 <nooodl_> runState (DFState code tape@(Tape _ curr _) pos@(x,y) dir@(dx,dy) input) = ...
19:27:52 <nooodl_> i already want to kill myself because of this line
19:32:42 -!- Halite has quit (Remote host closed the connection).
19:36:50 <FreeFull> nooodl_: What language are you interpreting again?
19:37:05 <nooodl_> the brainfuck interpreter i invented a while ago
19:37:18 <nooodl_> uhh
19:37:20 <nooodl_> brainfuck derivative
19:37:36 -!- mekeor has quit (Quit: novus ordo seclorum).
19:37:37 <fizzie> Briiiiick.
19:37:52 <nooodl_> like http://esolangs.org/wiki/Minimal-2D but instead of /UDLR there's only conditional up/down and left/right commands
19:40:14 <Vorpal> What sort of person goes around thumbing down a quite popular and well produced video on youtube. It is a well produced lets play, so there is not really that people could hate what the guy said. In fact I never seen a video on youtube with more than a few hundred views that didn't at least have a couple of thumbs down.
19:40:19 <Vorpal> It boggles my mind.
19:41:05 <nooodl_> i've wondered the same thing
19:41:46 <elliott> maybe they: disliked the video
19:42:05 <elliott> nooodl_: you do not need to be writing like that
19:42:20 <nooodl_> uh oh
19:43:14 <nooodl_> what's the alternative
19:44:00 <Gregor> Sooo, HackEgo can do sockets again, but the Google Translate API is now a paid service.
19:44:02 <Gregor> Suggestions?
19:44:19 <elliott> Gregor: BABELFISH
19:44:24 <elliott> Or just screen-scrape.
19:44:26 <elliott> Can't be that hard.
19:44:33 <nooodl_> ooh, i just remembered
19:44:47 <Gregor> elliott: Google Translate is crazy HTML5 stuff...
19:44:48 <nooodl_> the update syntax thingy
19:44:59 <elliott> Gregor: Sure, but under the hood it's going to do an HTTP request.
19:45:02 <elliott> Unless it's websockets or something.
19:45:07 <elliott> By "screenscrape" I just mean hack something up with curl.
19:45:09 <Gregor> Fair nuff.
19:45:10 <elliott> And sed.
19:45:25 <elliott> Or I guess Python and BeautifulSoup if you want to be FANCY
19:45:28 <Vorpal> <Gregor> Sooo, HackEgo can do sockets again, but the Google Translate API is now a paid service. <-- how did you fix sockets on umlbox?
19:45:35 <Gregor> Vorpal: I gave it a handshake.
19:45:45 <elliott> nooodl_: that syntax is awful too
19:45:49 <Gregor> Oh, the other issue was Python being stupid.
19:45:54 <Vorpal> Gregor, and that fixed the kernel panic?
19:46:02 <Gregor> No, that was Python stupidity.
19:46:06 <Vorpal> okay
19:46:09 <Vorpal> wtf still
19:46:12 <Gregor> Vorpal: In some version of Python, they changed it so that pipes from child processes were cloexec by default.
19:46:21 <Gregor> That caused nonsense when I told the guest to use said pipes by fd.
19:46:47 <Vorpal> ah
19:47:03 <Gregor> `wl es en Hola
19:47:05 <HackEgo> Hola
19:47:08 <Gregor> Fail
19:47:13 <nooodl_> well, "state { tape = succ <$> tape, pos = nextPos }" is probably better than "DFState code (succ <$> tape) nextPos dir input"
19:47:20 <nooodl_> actually. now that i write it out
19:47:27 <Gregor> `wl en es narcissism
19:47:30 <HackEgo> Narcisismo
19:47:33 <Gregor> Weeeh
19:47:34 <Vorpal> - 2013-02-14 19:47:19 INFO Connecting to "127.0.0.1:6697"...
19:47:34 <Vorpal> Cannot connect to 127.0.0.1:6697: Connection refused
19:47:34 <Vorpal> ^C- 2013-02-14 19:47:22 ERROR Connection failed
19:47:37 <Vorpal> Gregor, hm
19:47:42 <Vorpal> it doesn't crash
19:47:47 <Vorpal> but it does appear to be working either
19:47:49 <Vorpal> I wonder why
19:47:59 <Gregor> Vorpal: What's your command line?
19:48:00 <nooodl_> god how do i write haskell code
19:48:05 <Gregor> (I assume you upgraded and rebuilt)
19:48:28 <Vorpal> Gregor, I did git pull -u && make nokernel && make install PREFIX=same-as-before
19:48:43 <Vorpal> Gregor, also I used -R6697:irc.someserverIreplacedforthisline.net:6697
19:49:08 <Vorpal> let me try it with netcat on the 6667 port instead of the ssl one
19:49:12 <Gregor> To test, running bash in the guest and then running the command you care about from that bash.
19:49:30 <elliott> Gregor: `wl is purposely crap
19:49:34 <elliott> if you are expecting useful results
19:49:58 <Vorpal> $ $HOME/local/umlbox/bin/umlbox -B -R6667:irc.sporksmoo.net:6667 netcat 127.0.0.1 6667
19:49:58 <Vorpal> sh: 1: /home/arvid/local/umlbox/bin/umlbox-mudem: not found
19:49:58 <Vorpal> /bin/sh could not be executed
19:49:58 <Vorpal> (UNKNOWN) [127.0.0.1] 6667 (?) : Connection refused
19:50:00 <Gregor> elliott: Yes, I know.
19:50:00 <Vorpal> wait, what?
19:50:17 <Gregor> Vorpal: -B doesn't include $HOME/local/umlbox/bin ;)
19:50:17 <Vorpal> Gregor,
19:50:18 <Vorpal> $ ls /home/arvid/local/umlbox/bin/umlbox-mudem
19:50:19 <Vorpal> /home/arvid/local/umlbox/bin/umlbox-mudem
19:50:21 <Vorpal> hm
19:50:25 <Vorpal> Gregor, oh, okay
19:50:32 <elliott> `which umlbox-mudem
19:50:33 <HackEgo> ​/usr/bin/umlbox-mudem
19:50:34 -!- ais523 has joined.
19:50:35 <Vorpal> so mudem needs to run inside
19:50:44 <elliott> `run cat `which umlbox-mudem`
19:50:45 <ais523> @messages?
19:50:45 <HackEgo> ​ELF............>.....@.....@........7..........@.8..@.........@.......@.@.....@.@........................................@......@............................................@.......@.....L/......L/........ .............0.......0`......0`................... ...........(0......(0`.....(0`............................
19:50:45 <lambdabot> Sorry, no messages today.
19:50:48 <Vorpal> rigth
19:50:48 <Gregor> I maybe should add .../bin to the default -B path, but I don't like -B being dynamic...
19:50:50 <Vorpal> right*
19:51:04 <elliott> `run umlbox-mudem abc
19:51:06 <HackEgo> Use: umlbox-mudem {0|1} [sockets...]
19:51:07 <Vorpal> Gregor, eh, I'm not running it so that ../bin would help me anyway
19:51:07 <elliott> nice blink btw
19:51:28 <Gregor> Vorpal: I mean the bin path in which umlbox-mudem resides.
19:51:39 <Vorpal> Gregor, oh right, makes sense
19:51:52 <Gregor> Needs to run on bot host and guest.
19:51:59 <Gregor> elliott: umlbox-mudem is a socket multiplexer/demultiplexer.
19:52:18 <Gregor> elliott: It multiplexes a number of tcp or unix domain sockets over stdin/stdout.
19:52:32 <Vorpal> there we go
19:53:11 <Vorpal> Gregor, why is ctrl-c being broken? :/
19:53:13 <elliott> Gregor: yes I was just trying to mess it up
19:53:31 <Vorpal> hm
19:53:39 <Gregor> elliott: You're not going to mess it up by manually running the mudem ^^
19:53:58 <Gregor> Vorpal: The guest interprets ctrl+C, and doesn't really have job control support due to nonsense.
19:54:12 <elliott> Gregor: I CAN TRY
20:00:40 <FreeFull> The net for a dodecahedron looks like two flowers
20:05:12 <Vorpal> Gregor, hm
20:05:35 <Vorpal> Gregor, yeah I'm running that old irc bot I wrote in bash years ago inside. It might be that which is messing around with ctrl-c
20:05:38 <Vorpal> I don't remember
20:06:03 -!- varnie has quit (Quit: Leaving).
20:06:09 <elliott> what are you doing with it
20:08:18 <Gregor> By the way, umlbox is also a great fakeroot :)
20:08:21 <Vorpal> elliott, laughing at it
20:08:30 <Vorpal> Gregor, hah
20:08:30 <Taneb> Organising things is hard
20:08:41 <Vorpal> and yeah it messes with trap
20:08:46 <Vorpal> so yep, messing with ctrl-c
20:08:54 <Vorpal> though it doesn't appear it should be ignoring it
20:09:00 <Vorpal> I'm confused as to why it does
20:09:09 <Vorpal> Gregor, it might be the lack of job control I guess
20:17:43 <Vorpal> I... don't think I properly understood Makefiles back then
20:17:45 <Vorpal> this is a mess XD
20:18:09 <Vorpal> some targets lacked proper dependency info and were always built
20:26:42 <elliott> i remember it being very enterprisey for a bash bot
20:27:11 <boily> how can a bot be enterprisey?
20:27:49 <Gregor> If you try to use !welcome, it offers a welcome for a one-time fee of $49.95, or discounted if you have a coupon code.
20:27:58 <elliott> boily: you should have seen
20:30:19 * boily checks his wallet...
20:30:24 <boily> !welcome
20:42:17 <boily> yep. feels enterprisey enough.
20:49:46 <kmc> if you try to use !welcome it sends 3 "sales engineers" to your company to figure out the maximum amount it could charge you
20:51:54 <boily> !please-dont-send-me-any-sales-engineers-here
21:01:36 <boily> ~metar CYUL
21:01:36 <cuttlefish> CYUL 142000Z 22009KT 15SM BKN050 01/M06 A2989 RMK SC7 SLP124
21:02:04 <Taneb> ~metar EGNT
21:02:05 <cuttlefish> EGNT 142050Z 26009KT 9999 FEW030 05/03 Q1009
21:02:10 <Taneb> What does that mean
21:02:17 <Taneb> I think it's the weather near here
21:02:21 <Taneb> But I don't know how
21:03:58 <olsner> they have space people in satellites with binoculars watching the weather
21:05:11 <boily> Taneb: you report means it's kinda chilly, with a few clouds. otherwise, nothing particularly interesting or notable.
21:05:21 <Taneb> Sounds about right
21:10:46 <fizzie> It also means it was 20:50 (UTC) on the 14th day of the month.
21:11:58 -!- augur_ has quit (Remote host closed the connection).
21:12:50 <fizzie> 09KT of wind I guess counts as some sort of a low-moderate breeze?
21:13:47 <Taneb> So, basically what you'd expect for the north of England on a February night
21:14:51 <boily> you're lucky to have sane units in your metars. I'm stuck with a weird mixture of just about everything, even inches of mercury.
21:15:05 <Taneb> !
21:15:17 * Sgeo is back
21:15:19 -!- sivoais has quit (Ping timeout: 260 seconds).
21:15:37 <ais523> boily: inches of mercury is a measure of pressure, right?
21:15:53 <coppro> yes
21:16:02 <boily> 29.97 inHg is 101.325 kPa.
21:16:03 <Sgeo> millimeters of mercury is more conventional, I think
21:16:44 <nooodl_> ugh numbers in haskell are weird
21:16:53 <Taneb> So, they haven't just got a ruler next to a thermometre
21:16:54 <nooodl_> Int and Integer and Integral
21:16:57 <Taneb> nooodl_, how so?
21:17:40 <nooodl_> i somewhat understand the differences, but i don't know which one to use where
21:17:47 <Taneb> Int is machine-word sized, Integer is unbounded, Integral isn't a type
21:17:58 <Taneb> It's a class that generalizes over integral types
21:18:03 <Taneb> Such as Int and Integer
21:18:28 <boily> ais523: but you have to be careful with canadian metars, A2989 is QFE (29.89 inHG with elevation calibrated at airfield level) and SLP124 is QNH (1012.4 hPa sea level pressure).
21:19:01 <fizzie> The Finnish Meteorological Institute's weather page uses units of hPa (aka mbar but they write hPa) for atmospheric pressure.
21:19:17 <boily> as any sane national weather office.
21:20:22 <fizzie> ~metar EFHK
21:20:23 <cuttlefish> EFHK 142050Z 11005KT 9999 -SG BKN009 BKN030 M02/M03 Q1030 TEMPO SCT008 BKN030
21:20:51 <Taneb> ~metar EGNC
21:20:52 <cuttlefish> EGNC 141750Z 23009KT 9999 FEW020 05/04 Q1009
21:22:22 <boily> ~metar EGED
21:22:22 <cuttlefish> --- Station not found!
21:22:29 <FreeFull> I wonder if you can implement factorial more efficiently than product [1..n]
21:22:44 <Taneb> product [2..n]
21:22:50 <Taneb> hth
21:23:17 <Taneb> (doesn't work with n == 1)
21:23:22 <Taneb> (i think)
21:23:25 <FreeFull> Taneb: It actually does work with n == 1
21:23:33 <Taneb> Oh, sweet!
21:23:33 <FreeFull> > product [2..1]
21:23:35 <lambdabot> 1
21:23:46 <boily> ~eval [2..1]
21:23:47 <cuttlefish> []
21:23:49 <Taneb> It's ever so slightly more efficient
21:23:54 <Taneb> Possibly
21:24:10 <coppro> > product [2..0]
21:24:11 <lambdabot> 1
21:25:12 <fizzie> ~metar UOOO
21:25:12 <cuttlefish> UOOO 142100Z 04012MPS 0250 R01/0800U DRSN HZ NSC M38/M42 Q1013 NOSIG RMK QFE746 0139//41
21:25:19 <fizzie> Well, that's kind of on the cold side.
21:26:45 <fizzie> ~metar UESO
21:26:45 <cuttlefish> UESO 142100Z 21003MPS 2000 BR NSC M46/M49 Q1024 NOSIG RMK QFE766
21:26:48 <fizzie> As is that.
21:26:49 <boily> ~eval gamma 5
21:26:49 <cuttlefish> Error (1): No instance for (Math.Gamma.Gamma a0) arising from a use of `e_15'
21:26:50 <cuttlefish> The type variable `a0' is ambiguous
21:26:50 <cuttlefish> Possible fix: add a type signature that fixes these type variable(s)
21:26:50 <cuttlefish> Note: there are several potential instances:
21:26:50 <cuttlefish> instance Math.Gamma.Gamma (Data.Complex.Complex GHC.Types.Double)
21:26:50 <cuttlefish> -- Defined in `gamma-0.9.0.2:Math.Gamma'
21:26:50 <cuttlefish> instance Math.Gamma.Gamma (Data.Complex.Complex GHC.Types.Float)
21:26:51 <cuttlefish> -- Defined in `gamma-0.9.0.2:Math.Gamma'
21:26:51 <cuttlefish> instance Math.Gamma.Gamma GHC.Types.Double
21:26:52 <cuttlefish> -- Defined in `gamma-0.9.0.2:Math.Gamma'
21:26:52 <cuttlefish> ...plus one otherNo instance for (GHC.Show.Show a0)
21:26:53 <cuttlefish> arising from a use of `M6213143843420178839.show_M6213143843420178839'
21:26:53 <cuttlefish> The type variable `a0' is ambiguous
21:26:54 <cuttlefish> Possible fix: add a type signature that fixes these type variable(s)
21:26:56 <FreeFull> Lol
21:27:03 <boily> woops ¬_¬'...
21:27:12 <FreeFull> :t gamma
21:27:14 <lambdabot> Not in scope: `gamma'
21:27:26 <boily> ~eval gamma 5 :: Double
21:27:27 <cuttlefish> 24.0
21:27:51 <FreeFull> cuttlefish's output should be restricted
21:28:28 <boily> the thing is, I can't recompile cuttlefish. the libs I use won't compile with GHC 7.6.
21:30:27 -!- ogrom has quit (Quit: Left).
21:36:57 <FreeFull> boily: Fix the libs
21:37:09 <FreeFull> Might be fixable with just some pragmas
21:41:53 -!- hagb4rd has quit (Ping timeout: 252 seconds).
21:42:22 -!- augur has joined.
21:44:35 <elliott> ion: don't remind me of my lost $1,000,000,000,000.
21:45:08 <ion> elliott: How did you lose $1,000,000,000,000?
21:45:39 <kmc> which nigerian prince owes you a cool amount of money?
21:45:51 <Gregor> kmc: I was JUST ABOUT to say that same joke.
21:45:52 <elliott> ion: something about a certain cable offering me $1,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 for my nick
21:45:53 <Gregor> You JOKE THIEF
21:46:24 <Gregor> elliott: Wow, that's like all the money in the world TIMES all the money in the world!
21:46:40 <ion> Dollars squared?
21:49:43 <nooodl_> elliott: here's my code for the thing http://hpaste.org/82379
21:50:17 <elliott> nooodl_: for a start, using Tape Word8 gets you overflow behaviour for free. no mods needed
21:50:34 <nooodl_> apparently my tac implementation was broken... but the program in there seems to find the last byte in stdin so that's cool
21:50:49 <nooodl_> oh. cool
21:51:04 <nooodl_> oh god there's some stupid leftover debug things
21:51:21 <nooodl_> import Debug.Trace (trace), and the Show instance for Tape/DFState
21:51:43 <boily> FreeFull: hm. looks like the exception model changed between 2011 and now.
21:52:39 <elliott> boily: rather, the long-deprecated one finally got removed
21:52:57 <FreeFull> That would be a bigger change then
21:53:21 <nooodl_> man, the anything-but-haskell programmer in me really feels like adding some spaces to ((0,0),(torusWidth-1,torusHeight-1))
21:53:35 <elliott> you can add spaces.
21:53:40 <elliott> nooodl_: I would recommend not storing the input in the state like that
21:53:56 <kmc> multi-letter variable names?!?!?!?! go back to the java mines you corporate drone slave
21:54:01 <elliott> instead you can make run :: DFState -> String -> String
21:54:13 <elliott> and then you can also write runIO :: DFState -> IO (), which can do interactive IO
21:54:25 <nooodl_> i see
21:54:45 <FreeFull> kmc: Ideal haskell has no variables at all, right?
21:54:48 <FreeFull> Everything is pointless!
21:54:55 <kmc> riiiight
21:55:35 <boily> FreeFull: so, yeah. I fear the complete rewrite. besides, simpleirc can't do SSL, which our company's server uses.
21:55:47 <FreeFull> :t (,) ((,) 0 0) ((,))
21:55:49 <lambdabot> (Num b, Num a) => ((a, b), a1 -> b1 -> (a1, b1))
21:55:59 <nooodl_> also interesting: i tried to run it on codepad.org but this happened http://codepad.org/748jN02r
21:56:06 -!- Phantom_Hoover has joined.
21:56:09 <elliott> nooodl_: if I wrote that I would probably then iterate it to a free monad based version.
21:56:30 <FreeFull> I never get how to extract the internal function outside to make application easy
21:56:51 <FreeFull> While staying pointfree
21:58:02 <nooodl_> what was (,) ((,) 0 0) ((,)) supposed to be?
22:00:30 <FreeFull> A way to make a tuple of tuples
22:00:51 <FreeFull> I guess I didn't have to write (0,0) as ((,) 0 0)
22:01:18 <FreeFull> @pl \x y -> ((0,0),(x,y))
22:01:18 <lambdabot> ((,) (0, 0) .) . (,)
22:01:24 <FreeFull> I guess that's what I wanted
22:01:29 <elliott> nooodl_: I would probably also not use Array but that's just me
22:01:51 <nooodl_> elliott: i'd considered Tape (Tape Char) for the code...
22:01:59 <FreeFull> I still don't get the way . works when partially applied like that
22:02:14 <FreeFull> :t ((,) (0,0) .)
22:02:16 <lambdabot> (Functor f, Num t1, Num t) => f a -> f ((t, t1), a)
22:02:17 <elliott> nooodl_: that would be a bad idea
22:02:20 <elliott> FreeFull: ignore that :t
22:02:22 <elliott> stupid Caleskell
22:02:35 -!- boily has quit (Quit: Poulet!).
22:02:39 -!- cuttlefish has quit (Remote host closed the connection).
22:02:41 <FreeFull> ((,) (0,0) .) :: (Num t, Num t1) => (a -> b) -> a -> ((t, t1), b)
22:04:05 <nooodl_> elliott: what would you have used instead? [[Char]]?
22:04:47 <elliott> nooodl_: possibly (Int,Int) -> Char. since you never modify the playfield, and you can construct (Int,Int) -> Char from Array (Int,Int) Char which, if inlined, should be just as performant
22:07:01 <FreeFull> So value :: (Int,Int) -> Char; value = (playfield !)
22:07:41 <nooodl_> well then you're still using Array
22:08:04 <Sgeo> I like this book, although so far it seems to still be world building
22:08:12 <Sgeo> Does The Clockwork Rocket have an actual plot?
22:09:13 <nooodl_> oh, is it good practice to *always* write explicit type signatures for functions
22:10:29 <Sgeo> I think in vanilla Haskell there are some cases where you can't
22:10:45 <Sgeo> (for functions in where and let, I think?)
22:11:12 <nooodl_> oh, yeah, i've never done that
22:11:38 <Sgeo> I mean, there is syntax for it, but some circumstances where it's inadequate, iirc
22:11:45 <elliott> nooodl_: s/functions/top-level definitions/
22:11:53 <elliott> not the same thing
22:12:01 <elliott> (there are non-function top-level definitions, and non-top-level definition functions)
22:12:13 <nooodl_> in my example lines 13-26 seem really ugly and verbose
22:12:24 <elliott> all of the lines are ugly and verbose
22:12:42 <nooodl_> elliott: so, i should've also written "torusWidth :: Int", for example?
22:13:17 <elliott> generally, yes, though it doesn't really matter for a small program :P
22:13:37 <elliott> note that in the absence of you using them as Int they would be defaulted to Integer
22:13:53 <nooodl_> also, nah, some of them are ugly and terse. also some of them are blank!!
22:14:05 <elliott> nooodl_: really I would just use Word32 or something for the Array
22:14:08 <elliott> and not have any explicit mods
22:14:16 <elliott> or what I'd have actually done is write Integer and have no wrapping
22:14:17 <Sgeo> elliott, have you seen my code?
22:14:20 <Sgeo> :/
22:14:21 <elliott> right now this implementation is sub-TC!
22:14:29 <elliott> is of a sub-TC language, rather
22:14:31 <elliott> Sgeo: no
22:14:51 <Sgeo> https://gist.github.com/Sgeo/fe54715fc61d1d98f4cc
22:15:20 <nooodl_> wouldn't Word32 mean a 2^32 by 2^32 array
22:15:43 <elliott> oh, I guess. you can use Map or HashMap for sparse storage
22:16:09 <elliott> this is what I did in my Befunge-98 implementation and it worked well enough, though I planned to switch to something much more complex for optimisation purposes
22:16:45 <elliott> Sgeo: not the nicest code ever yes
22:17:29 <Sgeo> Not the worst I hope?
22:18:56 <elliott> that would be esme
22:19:49 <Sgeo> So, I'm somewhere between perfection and actual blithering lack of meaning
22:19:57 <nooodl_> hmm how horrible is my code
22:37:23 -!- hagb4rd has joined.
22:37:40 -!- nooga has quit (Ping timeout: 256 seconds).
22:42:51 -!- Waffa has joined.
22:44:06 -!- Waffa has quit (Quit: Waffa).
22:46:52 -!- epicmonkey has quit (Ping timeout: 252 seconds).
22:47:01 -!- Taneb has quit (Quit: Leaving).
22:48:26 -!- carado has quit (Ping timeout: 256 seconds).
22:49:22 -!- sirdancealot has quit (Remote host closed the connection).
22:52:55 -!- sirdancealot7 has joined.
23:03:48 -!- fungot has quit (Ping timeout: 248 seconds).
23:03:50 -!- augur has quit (Remote host closed the connection).
23:05:02 -!- myndzi has quit (Ping timeout: 245 seconds).
23:08:18 -!- myndzi has joined.
23:12:07 -!- fizzie has quit (Ping timeout: 245 seconds).
23:18:46 <kmc> http://i.imgur.com/r396dsr.jpg
23:22:18 <Phantom_Hoover> reposting from the front page of /r/math?
23:23:56 -!- fizzie has joined.
23:24:16 <elliott> Phantom_Hoover: how dare he
23:24:35 <Phantom_Hoover> he's turning into ion!
23:24:45 <elliott> turnion
23:40:38 <kmc> oh noes
23:40:55 <kmc> onion / scallion
23:41:03 <kmc> onion / scallion union
23:41:05 <shachaf> @arrrr /math
23:41:06 <lambdabot> Drink up, me 'earties
23:41:31 <kmc> ℝ math
23:43:27 <shachaf> kmc doesn't appreciate the comonad hiding in every monad.
23:44:11 <kmc> where does it hide
23:44:35 -!- sivoais has joined.
23:45:36 <shachaf> in the other category
23:47:10 <elliott> shachaf: extract :: Monad m => Kleisli m (m a) a; duplicate :: Monad m => Kleisli m (m a) (m (m a))
23:47:50 <shachaf> elliott: Right.
23:48:17 <shachaf> I like how extract is id.
23:48:33 <elliott> return :: Comonad w => Cokleisli w a (w a); join :: Comonad w => Cokleisli w (w (w a)) (w a) -- whoa, man
23:48:46 <elliott> I like how duplicate = return, join = extract
23:48:57 <shachaf> duplicate = return?
23:49:04 <shachaf> But duplicate :: m a -> m (m (m a))
23:49:05 <elliott> Well, return . return and extract . extract
23:49:10 <elliott> For Kleisli/Cokleisli respectively.
23:49:13 <shachaf> Are those the correct implementations?
23:49:22 <shachaf> I mean, are you sure how of those returns isn't fmapped or something?
23:49:29 <elliott> Dunno. Ask adj.hs
23:49:31 <shachaf> s/how //
23:49:37 <elliott> Are you sure of those returns?
23:50:00 <shachaf> s#.$#one /#
23:51:53 <shachaf> elliott: Anyway Kleisli comonads are boring.
23:52:10 <shachaf> The Haskop comonad is kind of silly.
23:52:27 <shachaf> Because extract literally = return
23:53:57 <shachaf> contReturn x f = f x
23:54:05 <shachaf> contJoin = (. contReturn)
23:54:11 <shachaf> contFmap f = (. (. f))
23:58:45 <FreeFull> @pl \f -> (. (. f))
23:58:45 <lambdabot> flip (.) . flip (.)
23:59:06 <FreeFull> :t (flip (.) . flip (.))
23:59:08 <lambdabot> Functor f => f a -> (f b1 -> b) -> (a -> b1) -> b
←2013-02-13 2013-02-14 2013-02-15→ ↑2013 ↑all