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: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:53 <boily> what's brown cheese?
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: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: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: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: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:26 <Sgeo> StateT s m a -> StateT s m a
00:15:39 <monqy> are you looking for something like `local`
00:15:50 <oerjan> local works on StateT?
00:16:33 <Sgeo> withStateT I think I saw which the name makes me think along those lines
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:18:02 <Sgeo> Possibly get >>= runStateT /
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:19:14 <oerjan> i'm not sure you can do it with only applicative notation
00:19:31 <monqy> instead of just part of it
00:19:49 <Sgeo> I also don't need the result
00:19:54 <Sgeo> I'm doing it for the side effects
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: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: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: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:49 <Sgeo> Because it wasn't irritating me until just then
00:42:59 <Sgeo> I can live with sometimes faulty code hilighting
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: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: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: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:41:15 <lambdabot> Plugin `quote' failed with: getRandItem: empty list
01:42:19 <Sgeo> What might an interpreted Trustfuck look like/!
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: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: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:56 <Sgeo> > let a=1; b=2 in a+b
02:38:28 * Sgeo sets indentation to none
02:38:32 <Sgeo> Fuck you, fuck you, and fuck you Kat
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:30 <oerjan> then in either case, exactly one of ] and eof are permitted to occur.
03:02:07 <oerjan> mind you, in haskell it should still be simpler to use parsec.
03:02:46 <Sgeo> Right now I'm so close to getting this working
03:06:24 <Sgeo> A 4,886 character line
03:06:32 <Sgeo> Maybe this is not the best idea for readability
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: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:16:18 <shachaf> mr.hird and i did a few "adjunctions" to get "free functors´
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: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:27 <shachaf> mtl-1.1.0.2_Control.Monad.Trans_$fMonadIOIO_closure
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:49 <Sgeo> That big was a typo for bug
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: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: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: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:45 <shachaf> I guess elliott is in both channels.
03:32:14 <oerjan> he's been idle for quite a while.
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: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: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> In the expression: guard :: Maybe ()
03:46:02 <oerjan> :t \x -> guard x :: Maybe ()
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: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:11:03 <coppro> http://www.youtube.com/watch?v=KmK0bZl4ILM
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:16:05 <Sgeo> Easiest thing to do, character below it
04:16:37 <lambdabot> No instance for (GHC.Show.Show (a0 -> a0))
04:18:04 <Sgeo> > map pred ",+[-.,+]"
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: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: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: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:46:23 * Sgeo is derptastic today
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: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:54 * shachaf would like to take this moment to mention that de Bruijn indices are the future.
06:57:27 <lambdabot> [True,True,False,True,True,True,True,False,False,False,False,False,False,Fa...
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: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: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:12:40 <shachaf> (btw that was 0006 ACKNOWLEDGE)
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:19:32 <monqy> hackego's feelings????
07:20:51 <shachaf> monqy: good point in the other channel
07:21:31 <Sgeo> HackEgo is set up with version control. Anything happens, it can be revertred
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:46 <Sgeo> `run rm canary
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:25 <HackEgo> = 0: ERROR: cannot open `= 0' (No such file or directory)
07:23:02 -!- HackEgo has quit (Remote host closed the connection).
07:23:22 <oerjan> someone apparently succeeded!
07:23:45 <Sgeo> file canary shouldn't kill it, right?
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: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: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:32 <Sgeo> ./primitive < somecode.tf > somecode.hs
07:37:41 <Sgeo> ghc --make somecode.hs -o 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:36 <Sgeo> The Haskell code can be viewed as being basically that, hand-compiled
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:26 <oerjan> > ([], [1,2,3]) ^? (_1 . _head)
08:24:48 <oerjan> > ([], [1,2,3]) ^? (both . _head)
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:13 <lambdabot> Zoom m n s t => LensLike' (Control.Lens.Internal.Zoom.Zoomed m c) t s -> m c -> n c
08:56:13 <lambdabot> (Integral e, Num a) => ASetter s t a a -> e -> s -> t
08:56:29 -!- epicmonkey has joined.
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: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:47 <lambdabot> Cons (->) f s s a a => LensLike' f s a
11:28:40 -!- ncultures has joined.
11:28:40 -!- ncultures has left.
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: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: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:35:51 <Taneb> Help I now have two libraries on Hackage
12:35:56 -!- Lumpio- has joined.
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: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:28 <Taneb> Plus a few instances
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:50:47 <Taneb> Let me think about that for a bit
13:06:39 <Taneb> :t getProduct . Product <> Product
13:06:41 <lambdabot> Occurs check: cannot construct the infinite type: b0 = Product b0
13:06:46 <Taneb> :t getProduct . (Product <> Product)
13:07:41 <nooodl_> instance Monoid b => Monoid (a -> b) where
13:07:41 <nooodl_> mappend f g x = f x `mappend` g x
13:08:37 <nooodl_> > getSum $ (Sum <> Sum) 10
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: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: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: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: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 <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: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: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:52:50 <FreeFull> shachaf: A^-1 would be {B, C} right?
13:53:34 <FreeFull> Oh wait, it wouldn't be, you're talking about something else
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: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:16:22 <Taneb> > mempty :: Maybe String
14:16:38 <Taneb> Give me a value x such that x <> Just "hello" is Nothing
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: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: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: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: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:28:14 <FreeFull> You can make Not using Xor though
14:28:36 <Taneb> And as Xor isn't universal, neither is Xor + Not
14:28:40 <Slereah_> How do you pronounce -> in programming?
14:28:47 <FreeFull> And you can't make a 1 using xor
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:49:13 -!- Nisstyre has joined.
14:49:56 <Taneb> Yeah, wikipedia says XOR isn't universal
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: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: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: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:36 <upgrayeddd> Taneb: jconn said there was an open session here and I was curious
15:12:42 <Sgeo> jconn apparently stores a sandbox for each person
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:14:32 <Sgeo> Let's trick shachaf into using the bot!
15:23:36 -!- oerjan has joined.
15:25:08 -!- impomatic has joined.
15:27:29 -!- cuttlefish has joined.
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: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:40:49 <boily> oerjan: WHY SO CAPITALIST?
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
16:00:11 <oerjan> oh wait, just half past 4
16:00:46 <Taneb> It's just turned 4 here
16:00:50 <lambdabot> Local time for oerjan is Thu Feb 14 17:00:48 2013
16:03:45 -!- sebbu has quit (Ping timeout: 260 seconds).
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:19:30 <Halite> quintopia, hey square utopia
16:20:09 <Sgeo> Halite, feel free to make one yourself
16:20:28 <Sgeo> Preferably not based on brainfuck
16:20:47 <Halite> how can I make a programming language not based on BF
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:57 <Halite> quintopia, buy flower of colour "Hello world!"
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: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: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: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: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: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: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:31:16 <Halite> like writing an interpreter for BF in BF
16:31:30 <Halite> how would you interpretate the interpreter
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: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: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:56 <oerjan> Halite: i am trying to tell you that i already know quite a lot more than this
16:35:21 <Phantom_Hoover> http://en.wikipedia.org/wiki/File:Post-lattice-centre.svg]
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:31 <ion> The 4-day time cube.
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: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:42:26 <FreeFull> Hey, Haskell has data construction syntax that looks like [something| insert stuf here] right?
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: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: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: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: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: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:51:09 <Phantom_Hoover> i mean if you define the eigenfunction as just being the limit of the time taken
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: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:57:58 <oerjan> <Phantom_Hoover> then metacircular interpreters are rougly linear <-- oh right, yeah that's what happened with the unlambda
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: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: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: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: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: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: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: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:32 <Halite> with f(0111,b,c) and f(0001,b,c)
18:14:54 <Halite> you've got it exactly right
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: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: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:20:19 <fizzie> I doed it quite a long time aggo.
18:20:39 <FreeFull> I didn't know that game was turing-complete
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: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: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:51 <Halite> what could I call my logic table function
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:23 * boily lends his personal ellipses supply to Phantom_Hoover
18:24:29 <Halite> FreeFull, can you give me a link to intercal
18:24:42 <Halite> FreeFull, I don't know what intercal even is
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: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:28 <fizzie> I showed fungot's source to some people today, and they thought it was in brainfuck. Honestly, people these days!
18:26:43 <boily> elliott: those are fine. 20% better!
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: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: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: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: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: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: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: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: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: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: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:51 <nooodl_> http://bpaste.net/show/QvVFMDSNVcPbuBVUEOX3/ that's my conversion of ,[>,]<[.<]
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: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: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:59 <Halite> FreeFull, I'll ask on ##javascript
19:00:51 <nooodl_> it's probably even faster if you combine them into
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:35 <Halite> FreeFull, is a something like 1000 or is it 8
19:04:12 <Halite> problem with my code I think
19:04:48 <FreeFull> You probably want to make more custom so that you can write 1000 instead of 8
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:29 <Halite> nooodl_, I did put return
19:05:39 <Halite> the arguments aren't a, b and c in the code
19:06:25 <Halite> so (table >> ((x<<1)|y)) & 1 should work
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:12 <FreeFull> What did you have them as before?
19:07:29 <Halite> it was always table,x,y for the args
19:08:29 <fizzie> How rude, they've removed octal literals from ECMA-262. :/
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:48 <Halite> they should have a custom bits() function, so you can choose the number of bits
19:10:39 <Halite> they should have a base() function, so you can choose the base, where decimal = 10, hex = 16, etc.
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: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: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: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:36 -!- mekeor has quit (Quit: novus ordo seclorum).
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: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:44:00 <Gregor> Sooo, HackEgo can do sockets again, but the Google Translate API is now a paid service.
19:44:47 <Gregor> elliott: Google Translate is crazy HTML5 stuff...
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: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: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: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: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:47 <Vorpal> but it does appear to be working either
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:17 <Gregor> Vorpal: -B doesn't include $HOME/local/umlbox/bin ;)
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: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 <HackEgo> ELF............>.....@.....@........7..........@.8..@.........@.......@.@.....@.@........................................@......@............................................@.......@.....L/......L/........ .............0.......0`......0`................... ...........(0......(0`.....(0`............................
19:50:48 <Gregor> I maybe should add .../bin to the default -B path, but I don't like -B being dynamic...
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: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: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: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.
20:00:40 <FreeFull> The net for a dodecahedron looks like two flowers
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: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 <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: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: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 <cuttlefish> CYUL 142000Z 22009KT 15SM BKN050 01/M06 A2989 RMK SC7 SLP124
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:19 -!- sivoais has quit (Ping timeout: 260 seconds).
21:15:37 <ais523> boily: inches of mercury is a measure of pressure, right?
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: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:23 <cuttlefish> EFHK 142050Z 11005KT 9999 -SG BKN009 BKN030 M02/M03 Q1030 TEMPO SCT008 BKN030
21:20:52 <cuttlefish> EGNC 141750Z 23009KT 9999 FEW020 05/04 Q1009
21:22:29 <FreeFull> I wonder if you can implement factorial more efficiently than product [1..n]
21:23:17 <Taneb> (doesn't work with n == 1)
21:23:25 <FreeFull> Taneb: It actually does work with n == 1
21:23:49 <Taneb> It's ever so slightly more efficient
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 <cuttlefish> UESO 142100Z 21003MPS 2000 BR NSC M46/M49 Q1024 NOSIG RMK QFE766
21:26:49 <cuttlefish> Error (1): No instance for (Math.Gamma.Gamma a0) arising from a use of `e_15'
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:54 <cuttlefish> Possible fix: add a type signature that fixes these type variable(s)
21:27:26 <boily> ~eval gamma 5 :: Double
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: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: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: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: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:45 <FreeFull> kmc: Ideal haskell has no variables at all, right?
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: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: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: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: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: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: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:21 <elliott> right now this implementation is sub-TC!
22:14:29 <elliott> is of a sub-TC language, rather
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: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:23:56 -!- fizzie has joined.
23:24:16 <elliott> Phantom_Hoover: how dare he
23:40:55 <kmc> onion / scallion
23:41:03 <kmc> onion / scallion union
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:47:10 <elliott> shachaf: extract :: Monad m => Kleisli m (m a) a; duplicate :: Monad m => Kleisli m (m a) (m (m a))
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: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:37 <elliott> Are you sure of those returns?
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:59:08 <lambdabot> Functor f => f a -> (f b1 -> b) -> (a -> b1) -> b