←2011-09-19 2011-09-20 2011-09-21→ ↑2011 ↑all
00:02:57 -!- pikhq has quit (Ping timeout: 240 seconds).
00:03:11 -!- pikhq has joined.
00:04:46 -!- DH____ has quit (Read error: Connection reset by peer).
00:06:03 <oerjan> wat wikipedia loaded
00:06:51 <oerjan> i guess it really is random
00:07:30 <elliott> <stdin>:17: trailing whitespace.
00:07:30 <elliott>
00:07:30 <elliott> warning: 1 line adds whitespace errors.
00:07:32 <elliott> Deewiant: help
00:08:00 <elliott> oh I see
00:11:09 <oerjan> now i can read about cheerful things like rhabdomyolysis
00:34:41 -!- DH____ has joined.
00:39:35 -!- augur has joined.
00:44:19 -!- DH____ has quit (Ping timeout: 260 seconds).
00:48:56 -!- DH____ has joined.
00:52:33 -!- Wamanuz2 has quit (Remote host closed the connection).
00:53:12 -!- Wamanuz2 has joined.
00:56:42 -!- Jafet has quit (Quit: Leaving.).
01:01:06 -!- Jafet has joined.
01:13:09 -!- elliott has quit (Read error: Connection reset by peer).
01:13:43 -!- elliott has joined.
01:14:34 -!- elliott has quit (Remote host closed the connection).
01:14:35 -!- elliott_ has joined.
01:16:23 -!- ive has joined.
01:31:43 -!- DH____ has quit (Read error: Connection reset by peer).
01:31:55 -!- DH____ has joined.
01:43:42 <Gregor> Haha, the hack to make the Zune give up its Zune UI and expose the underlying Windows CE UI works.
01:43:50 <elliott_> lol
01:44:24 <Gregor> But whereas the Zune UI makes one think "I want to kill myself", the Windows CE UI makes one think "I want to kill myself, but first kill my parents as punishment for bringing into this world someone who would one day own a Windows CE device."
01:44:39 <elliott_> `addquote <Gregor> But whereas the Zune UI makes one think "I want to kill myself", the Windows CE UI makes one think "I want to kill myself, but first kill my parents as punishment for bringing into this world someone who would one day own a Windows CE device."
01:44:41 <HackEgo> 673) <Gregor> But whereas the Zune UI makes one think "I want to kill myself", the Windows CE UI makes one think "I want to kill myself, but first kill my parents as punishment for bringing into this world someone who would one day own a Windows CE device."
01:45:13 <pikhq> Which CE UI?
01:45:25 <Gregor> pikhq: 6.0
01:45:54 <Gregor> (Whatever that means, I have no idea what the giant compendium of names for CE all mean)
01:46:01 <Gregor> It claims to be "Windows CE 6.0"
01:47:21 <Gregor> I mean, it basically looks like Windows 95, except then somebody decided to move all the buttons into the stupidest possible position.
01:47:36 <pikhq> So, something like http://upload.wikimedia.org/wikipedia/en/7/72/Wince50.PNG
01:48:14 <Gregor> It looks a bit more ... Idonno, something than that, but not much.
01:48:25 <pikhq> That's CE 5.
01:48:26 <Gregor> Like the systray is embossed, and the start menu actually says "start"
01:49:51 <Gregor> pikhq: Upon further investigation, it seems that they never bothered to make any changes to the "explorer" UI for Windows CE 6, since all of their CE 6 devices don't use it.
01:50:06 <Gregor> So although it's slightly different from that screenshot, it's not much.
01:50:27 <pikhq> There's also Pocket PC, Windows Mobile, and Windows Phone UIs for the damned OS.
01:50:40 <pikhq> Microsoft seems to love fucking with the UI.
01:50:54 <tiffany> and.. all of these are based on the same "micro"kernel?
01:50:57 <Gregor> Apparently Windows Mobile 6 is based on Windows CE 5 (logic)
01:51:07 <pikhq> tiffany: Yes, it's all CE.
01:51:12 <Gregor> Windows Phone 7 is based on Windows CE 6 (more logic)
01:51:32 <tiffany> (100mb of overhead isn't really too micro... :/)
01:51:50 <pikhq> Also, CE doesn't even claim to be a microkernel.
01:51:57 <tiffany> o.o
01:52:07 <Gregor> Still, what this gives me the ability to do is program for the Zune with GCC.
01:52:14 <Gregor> Bootloader, here I (don't) come!
01:52:19 <pikhq> And the overhead of CE is ~1 meg. Everything else on it, not so much.
01:57:00 <CakeProphet> so I think I've discovered a link between hammerspace and hammertime.
01:57:07 <CakeProphet> a 4-dimensional hammerspace-time continuum.
01:57:32 -!- Jafet has quit (Quit: Leaving.).
02:02:46 <Patashu> wooah
02:11:46 -!- variable has quit (Ping timeout: 252 seconds).
02:11:49 -!- invariable has joined.
02:17:55 -!- augur has quit (Remote host closed the connection).
02:19:52 <oerjan> > zip (1:2:undefined) [3,4]
02:19:53 <lambdabot> [(1,3),(2,4)*Exception: Prelude.undefined
02:20:01 <oerjan> > zip [3,4] (1:2:undefined)
02:20:02 <lambdabot> [(3,1),(4,2)]
02:21:34 <elliott_> ?check \f xs ys -> zipWith f xs ys == liftM2 f xs ys
02:21:34 <lambdabot> Overlapping instances for GHC.Show.Show (a -> b -> c)
02:21:34 <lambdabot> arising from a use...
02:21:47 <elliott_> ?check \xs ys -> zipWith (/) xs ys == liftM2 (/) xs ys
02:21:48 <lambdabot> "Falsifiable, after 2 tests:\n[2.25]\n[-1.2,-1.0]\n"
02:21:50 <elliott_> lame
02:21:58 <elliott_> > liftM2 f [a,b,c] [x,y,z]
02:21:59 <lambdabot> Ambiguous occurrence `a'
02:21:59 <lambdabot> It could refer to either `L.a', defined at <local...
02:22:02 <elliott_> >_<
02:22:06 <elliott_> > liftM2 f [L.a,b,c] [x,y,z] :: [Expr]
02:22:07 <lambdabot> Couldn't match expected type `b -> ()'
02:22:07 <lambdabot> against inferred type `Simpl...
02:22:13 <elliott_> gah
02:22:20 <CakeProphet> @undefine
02:22:38 <oerjan> elliott_: erm it's lame that the [] monad isn't the ZipList monad?
02:23:02 <elliott_> YES.
02:23:18 <oerjan> shocking.
02:23:47 <oerjan> ?check zipWith === liftM2
02:23:48 <lambdabot> Not in scope: `==='
02:23:49 <elliott_> btw you're still sure that ZipList is a monad? :P
02:24:04 <oerjan> i've never seen a proof that it isn't :P
02:26:19 <oerjan> > scanl1 (zipWith (const id)) ["abc", "defg", "hij", "klmno", "pqrs"]
02:26:20 <lambdabot> ["abc","def","hij","klm","pqr"]
02:26:42 <CakeProphet> uh... why would the zip
02:26:48 <CakeProphet> list have a different bind than a regular list?
02:27:05 <oerjan> CakeProphet: because it has a different Applicative
02:27:08 <CakeProphet> they're basically the same type, with the same functor.
02:27:18 <CakeProphet> oh... I didn't realize that would change the monad.
02:27:30 <oerjan> @src ap
02:27:31 <lambdabot> ap = liftM2 id
02:27:57 <oerjan> the Applicative is given by the Monad, conceptually
02:30:04 -!- invariable has changed nick to variable.
02:31:16 <CakeProphet> @pl ZipList fs <*> ZipList xs = ZipList (zipWith id fs xs)
02:31:16 <lambdabot> (line 1, column 27):
02:31:16 <lambdabot> unexpected "="
02:31:16 <lambdabot> expecting variable, "(", "`", "!!", ".", operator or end of input
02:32:17 <CakeProphet> @pl (\fs xs -> ZipList (zipWith id (getZipList fs) (get ZipList xs))
02:32:17 <lambdabot> (line 1, column 65):
02:32:17 <lambdabot> unexpected end of input
02:32:17 <lambdabot> expecting variable, "(", operator or ")"
02:32:21 <CakeProphet> @pl (\fs xs -> ZipList (zipWith id (getZipList fs) (get ZipList xs)))
02:32:22 <lambdabot> (ZipList .) . (. get ZipList) . zipWith id . getZipList
02:32:30 <CakeProphet> = liftM2 id
02:32:57 <CakeProphet> er...
02:32:58 <CakeProphet> :t get
02:32:59 <lambdabot> forall (m :: * -> *) s. (MonadState s m) => m s
02:33:01 <CakeProphet> wat
02:33:11 <CakeProphet> getZipList /= get ZipList
02:33:11 <oerjan> CakeProphet: on would be useful there
02:33:23 <oerjan> i don't think @pl uses that
02:33:51 <oerjan> also, @pl has no idea about most functions
02:33:58 <CakeProphet> right I mistyped.
02:33:59 <oerjan> and even less about types
02:34:39 <CakeProphet> so uh.... liftM2 = zipWith here?
02:34:44 <CakeProphet> the rest is just wrapper stuff.
02:34:54 <CakeProphet> :t liftM2
02:34:55 <lambdabot> forall a1 a2 r (m :: * -> *). (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
02:34:57 <oerjan> yes
02:35:01 <CakeProphet> :t zipWith
02:35:01 <lambdabot> forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
02:35:06 <CakeProphet> @src lifeM2
02:35:06 <lambdabot> Source not found. This mission is too important for me to allow you to jeopardize it.
02:35:09 <CakeProphet> @src liftM2
02:35:09 <lambdabot> liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
02:35:47 <CakeProphet> uuuuh.
02:36:00 <CakeProphet> @src zipWith
02:36:00 <lambdabot> zipWith f (a:as) (b:bs) = f a b : zipWith f as bs
02:36:00 <lambdabot> zipWith _ _ _ = []
02:36:59 <CakeProphet> perhaps if I stare long enough.
02:37:01 <CakeProphet> it will come to me.
02:37:07 <oerjan> > let ZipList l >>_ f = ZipList . diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in ZipList [1,2,3] >>_ flip replicateM "abcd"
02:37:07 <lambdabot> <no location info>: Parse error in pattern
02:37:11 <oerjan> oops
02:37:20 <oerjan> oh
02:37:45 <oerjan> > let ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in ZipList [1,2,3] >>+ ZipList . flip replicateM "abcd"
02:37:46 <lambdabot> Precedence parsing error
02:37:46 <lambdabot> cannot mix `>>+' [infixl 9] and `L..' [infixr...
02:38:09 <oerjan> > (0$0 >>=)
02:38:10 <lambdabot> The operator `GHC.Base.>>=' [infixl 1] of a section
02:38:10 <lambdabot> must have lower pr...
02:38:20 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in ZipList [1,2,3] >>+ ZipList . flip replicateM "abcd"
02:38:21 <lambdabot> Couldn't match expected type `[a]'
02:38:21 <lambdabot> against inferred type `Control.A...
02:38:25 <CakeProphet> @undo liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
02:38:25 <lambdabot> liftM2 f m1 m2 = m1 >>= \ x1 -> m2 >>= \ x2 -> return (f x1 x2)
02:38:30 <CakeProphet> @src zipWith
02:38:30 <oerjan> gah
02:38:30 <lambdabot> zipWith f (a:as) (b:bs) = f a b : zipWith f as bs
02:38:30 <lambdabot> zipWith _ _ _ = []
02:38:38 <CakeProphet> uuuuuuh.
02:39:51 <CakeProphet> @@ @pl @undo liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
02:39:51 <lambdabot> liftM2 = liftM2
02:39:53 <CakeProphet> ...
02:40:08 <CakeProphet> THANKS
02:40:11 <oerjan> CakeProphet: (<*>) = zipWith ($), for that applicative
02:40:56 -!- augur has joined.
02:41:15 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in ZipList [1,2,3] >>+ ZipList . flip replicateM "abcd"
02:41:16 <lambdabot> No instance for (GHC.Show.Show
02:41:16 <lambdabot> (Control.Applicative.Zip...
02:41:24 <oerjan> yay it types
02:41:31 <oerjan> > ZipList [1,2]
02:41:31 <lambdabot> No instance for (GHC.Show.Show (Control.Applicative.ZipList t))
02:41:32 <lambdabot> arising ...
02:41:45 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in getZipList $ ZipList [1,2,3] >>+ ZipList . flip replicateM "abcd"
02:41:47 <lambdabot> ["a","ab","aac"]
02:42:04 <CakeProphet> um
02:42:09 <oerjan> hm
02:42:10 <CakeProphet> what is that even doing.
02:42:21 <oerjan> indeed, i did a monad too much
02:42:26 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in getZipList $ ZipList [1,2,3] >>+ ZipList . flip replicate "abcd"
02:42:27 <lambdabot> ["abcd"]
02:42:42 <oerjan> wat
02:43:52 <oerjan> oh right
02:44:08 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in getZipList $ ZipList [1,2,3] >>+ ZipList . flip take "abcd"
02:44:09 <lambdabot> "a"
02:44:22 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in getZipList $ ZipList [3,2,1] >>+ ZipList . flip take "abcd"
02:44:23 <lambdabot> "ab"
02:44:37 <CakeProphet> surely that's breaking a law. :P
02:45:05 <oerjan> the scanl1 part is intended to fix some breakage that _does_ arise otherwise
02:45:31 <CakeProphet> so uh, can you explain that function to me?
02:45:37 <CakeProphet> it's rather cryptic
02:45:51 <oerjan> well, for any monad, x >>= f = join (fmap f x)
02:45:59 <CakeProphet> ah
02:46:05 <oerjan> so most of that is to define join
02:46:24 <CakeProphet> zipWith (const id) just ignores the second list yes?
02:46:29 <CakeProphet> er, first one?
02:46:43 <oerjan> _almost_, but it uses it to truncate the _length_
02:47:29 <CakeProphet> ah right.
02:47:32 <monqy> const id is the same as flip const
02:47:32 <lambdabot> monqy: You have 1 new message. '/msg lambdabot @messages' to read it.
02:47:39 <oerjan> intuitively, the join for this monad is taking the diagonal of a list of lists
02:47:41 <CakeProphet> monqy: yes I know.
02:47:42 <monqy> oh my
02:47:52 <CakeProphet> oerjan: neat.
02:48:08 * CakeProphet would not have come to that conclusion for... well ever.
02:48:37 <monqy> lambdabot doesn't send that in notice? shameful
02:48:44 <monqy> the message, I mean
02:49:08 <Gregor> Discovery: A giant tub of chicken livers = $1.19
02:49:31 <Gregor> I am going to make a /stupid/ amount of liver paste.
02:49:34 <CakeProphet> oerjan: so uh... is that it? Monad for ZipList?
02:49:35 <monqy> anyway yeah I forgot transformers wasn't included with ghc or something like that
02:49:36 <CakeProphet> or is something wrong?
02:49:51 <monqy> or a dependency of template-haskell or whatever the th package is
02:49:55 <oerjan> CakeProphet: i hope nothing's wrong with that scanl adjustment
02:49:58 <monqy> whichever
02:50:30 <oerjan> if you take the diagonal naively, there is sometimes something wrong with the third monad law
02:50:53 <monqy> which is that, and is the problem nontermination
02:51:19 <oerjan> monqy: do you see anything that could not terminate in that definition :P
02:51:40 <monqy> I don't know which it is!
02:51:42 <monqy> I also haven't been paying attention
02:51:56 <oerjan> > let infixl 1 >>+; ZipList l >>+ f = ZipList . diag . scanl1 (zipWith (const id)) $ map (getZipList . f) l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in getZipList $ ZipList [3,2,1] >>+ ZipList . flip take "abcd"
02:51:58 <lambdabot> "ab"
02:52:01 -!- calamari- has joined.
02:52:04 <oerjan> that one
02:52:15 <monqy> oh >>+ is bind?
02:52:18 <oerjan> yes
02:52:22 -!- calamari- has quit (Client Quit).
02:52:29 <oerjan> well, i hope so
02:52:46 <oerjan> it works to define the Applicative from it. even without the scanl1 part.
02:53:39 <CakeProphet> gotta check the laws
02:53:46 <oerjan> this is because the list of lists which arises from applicative use is always rectangular, so the scanl1 part has no effect
02:54:40 <oerjan> @do liftM2 id x y
02:54:41 <lambdabot> liftM2 id x y
02:54:43 <oerjan> bah
02:54:56 <oerjan> @src liftM2
02:54:56 <lambdabot> liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) }
02:55:06 <oerjan> @undo do { x1 <- m1; x2 <- m2; return (f x1 x2) }
02:55:06 <lambdabot> m1 >>= \ x1 -> m2 >>= \ x2 -> return (f x1 x2)
02:55:38 <CakeProphet> is liftM2 = zipWith (with wrapping ignored)
02:55:48 <oerjan> @pl m1 >>= \ x1 -> m2 >>= \ x2 -> return (f x1 x2)
02:55:48 <lambdabot> (`fmap` m2) . f =<< m1
02:56:02 <oerjan> CakeProphet: yes
02:56:46 <oerjan> and that again = join (fmap ((`fmap` m2) . f) m1)
02:57:13 <CakeProphet> publish a paper now. :P
02:57:27 <oerjan> you may check that the argument of join is a rectangular list
02:57:32 <oerjan> no.
02:57:53 <oerjan> anyway this is surely known by everyone who has tried to define the monad before.
02:58:25 <CakeProphet> perhaps it's not very obvious and not a lot of people have figured it out
02:58:35 <oerjan> from that, if you put in f = (,), it will be obvious that join _has_ to take the diagonal elements to give the usual applicative.
02:58:54 <oerjan> because those are the only spots where the right values for the result arise
03:01:04 <oerjan> oh. another way to see it is that since the part inside is only functors, it is in fact the same expression you join as for the _usual_ [] monad
03:01:50 <oerjan> which is the list comprehension [[f x y | y <- m2]| x <- m1]
03:02:10 <CakeProphet> hmmm, I believe zipper is a monad. has anyone ever written this?
03:02:18 <CakeProphet> I mean it's pretty obvious...
03:02:25 <monqy> zipper, a monad?
03:02:30 <oerjan> *ZipList
03:02:32 <monqy> which zipper is this
03:02:36 <monqy> oh ziplist
03:02:42 <CakeProphet> no I'm talking about zippers.
03:02:46 <monqy> oh zippers
03:02:50 <oerjan> oh.
03:03:09 <oerjan> if you say so.
03:03:12 <CakeProphet> you could have multiple monad definitions I believe. >_>
03:03:15 <monqy> I've only heard about them being comonads? or something like that?
03:04:05 <monqy> I forget the definition of a zipper :(
03:04:06 <oerjan> it follows from all this that the join of a monad is determined from the applicative on "rectangular" m (m x) values.
03:04:42 <CakeProphet> an yes "rectangular"
03:05:13 <oerjan> which is a value of the form [[f x y | y <- m2]| x <- m1], where you use monad comprehensions instead of just lists, i think.
03:05:36 <CakeProphet> well if bind simply passed the current value of the zipper to the monadic function, would that break laws?
03:05:54 <CakeProphet> and then returned whatever the function returned.
03:05:57 <oerjan> except that these values only need Functor to construct them.
03:06:34 <CakeProphet> oh, yes it would...
03:06:39 <oerjan> CakeProphet: you are talking about actual zippers, not ziplists?
03:06:48 <CakeProphet> yes
03:07:05 <CakeProphet> well left identity and right identity work.
03:07:24 <oerjan> CakeProphet: wouldn't you need multiple holes?
03:07:33 <CakeProphet> why?
03:08:05 <oerjan> because x >>= f , where f is a function which produces zippers with their one hole in different places...
03:08:21 <oerjan> how do you combine that into just one hole.
03:08:24 -!- Jafet has joined.
03:08:35 <CakeProphet> f would only get called once
03:08:40 <CakeProphet> it literally just gets passed the current hole
03:08:44 <CakeProphet> and returns the return of bind.
03:08:53 <oerjan> ...oh.
03:09:07 <oerjan> um the current hole with a value, then.
03:09:10 <CakeProphet> yes.
03:09:23 <CakeProphet> don't zippers always have a current value?
03:09:33 <CakeProphet> data Zipper t = Zipper [t] t [t]
03:09:35 <CakeProphet> like so?
03:09:40 <oerjan> not necessarily...
03:09:42 <monqy> that's a zipper on lists
03:09:46 <CakeProphet> oh.
03:10:04 <CakeProphet> that's the only zipper I'm familiar with.
03:10:27 <monqy> well it's not the only zipper
03:11:25 <CakeProphet> ah right you could have data Zipper t = Zipper [t] [t]
03:11:29 <monqy> what
03:11:29 <CakeProphet> which would allow to possibility of empty.
03:11:34 <monqy> that's
03:11:35 <monqy> not what I meant
03:11:39 <monqy> zippers aren't just for lists
03:11:39 <CakeProphet> yes I know
03:11:45 <CakeProphet> I get what you said
03:11:48 <CakeProphet> this is a separate thought
03:12:14 <monqy> also for zippers
03:12:16 <monqy> on lists
03:12:17 <monqy> first
03:12:20 <monqy> what's your functor instance
03:12:21 <monqy> then
03:12:24 <monqy> what's your monad instance
03:12:25 <oerjan> anyway a zipper with a value, then you could splice >>= result in, i guess
03:12:34 <oerjan> oh _wait_
03:12:38 -!- Jafet has quit (Client Quit).
03:13:02 -!- calamari has quit (Quit: Leaving).
03:13:04 <CakeProphet> data Zipper t = Zipper [t] t [t]
03:13:10 <CakeProphet> current (Zipper _ x _ ) = x
03:13:23 <oerjan> CakeProphet: problem, (>>=) :: Zipper t -> (t -> Zipper u), what if t is not ~ u
03:13:39 <oerjan> *CakeProphet: problem, (>>=) :: Zipper t -> (t -> Zipper u) -> Zipper u, what if t is not ~ u
03:13:41 <CakeProphet> ~ u?
03:13:45 <monqy> the same as u
03:13:58 <CakeProphet> oh, yes that is a problem. :P
03:14:01 <monqy> I forgot about dealing with types that way. I was going to illustrate the same problem but a different way
03:14:18 <monqy> by taking the functor instance and then showing how doing it his way with a good functor instance would break monad laws
03:14:29 <monqy> of course it's much easier to notice the types problem
03:14:30 <CakeProphet> so yeah that bind doesn't work
03:14:51 <CakeProphet> and doing a map over all of the values in the zipper doesn't work because each returned zipper can have different holes and such.
03:15:28 <CakeProphet> unless you just ignore that and concatenate their current values together while keeping the same location in the original zipper
03:15:31 <CakeProphet> if that makes sense.
03:16:49 <oerjan> you need to preserve the holes for the return x >>= f case
03:16:49 <CakeProphet> (Zipper l x r) >>= f = Zipper (map (current.f) l) (f x) (map (current.f) r)
03:17:57 <CakeProphet> I think that would work??
03:18:30 <oerjan> what's current
03:18:40 <CakeProphet> current (Zipper _ x _ ) = x
03:18:49 <CakeProphet> return a = Zipper [] a []
03:19:09 <CakeProphet> er
03:19:11 <oerjan> CakeProphet: (f x) doesn't have the right type
03:19:11 <CakeProphet> (f x)
03:19:13 <CakeProphet> isn't possible
03:19:13 <CakeProphet> yeah
03:19:26 <CakeProphet> (current.f) then
03:19:52 <CakeProphet> which I think satisfies left/right identity... somehow.
03:20:27 <CakeProphet> ...no
03:20:54 <CakeProphet> f (z) = [1,2,3] (current z) [1,2,3]
03:20:59 <CakeProphet> then the identities don't work.
03:22:14 <CakeProphet> return a >>= f = Zipper [] a []
03:22:27 <CakeProphet> f a = Zipper [1,2,3] a [1,2,3]
03:23:22 <CakeProphet> my original definitioin for bind that only applied f to the current value would work if you had
03:23:34 <CakeProphet> data Zipper t a = Zipper [t] a [t]
03:23:40 <CakeProphet> but that's... probably not very useful.
03:23:58 <CakeProphet> also it has the wrong kind.
03:25:10 <elliott_> there is a genrric zipper monas
03:25:11 <elliott_> d
03:25:17 <oerjan> @let infixl 1 >>+; l >>+ f = diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = []
03:25:18 <lambdabot> Defined.
03:25:26 <monqy> elliott_: a relievf
03:25:33 <monqy> whats the formal defintion of a ziepr
03:25:41 <elliott_> see http://conway.rutgers.edu/~ccshan/wiki/blog/posts/WalkZip3/ and previous posts
03:25:42 <monqy> im not know :(
03:26:24 <elliott_> http://okmij.org/ftp/continuations/zipper.html#traversable has simpler and more restricted generic zipper but i don't think it's a monad
03:26:37 <elliott_> blog posts i linked are sequel to that
03:26:44 <oerjan> @check (x >>+ f >>+ g) == ((x :: [Int]) >>+ \t -> (f t :: [Int]) >>+ g :: [Int])
03:26:44 <lambdabot> Not in scope: `>>+'Not in scope: `>>+'Not in scope: `>>+'Not in scope: `>>+'
03:26:52 <oerjan> ffff
03:27:05 <CakeProphet> is there a name for monads that can't change type in their bind...... as in m a -> (a -> m a) -> m a
03:27:11 <oerjan> :t (>>+)
03:27:11 <lambdabot> forall a1 a. [a1] -> (a1 -> [a]) -> [a]
03:27:54 <oerjan> @check let infixl 1 >>+; l >>+ f = diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in (x >>+ f >>+ g) == ((x :: [Int]) >>+ \t -> (f t :: [Int]) >>+ g :: [Int])
03:27:54 <monqy> CakeProphet: what
03:27:54 <lambdabot> Couldn't match expected type `[a]'
03:28:33 <monqy> CakeProphet: if you're going mathy you're dealing with the functor stuff with unit and join
03:28:40 <oerjan> :t let infixl 1 >>+; l >>+ f = diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in (x >>+ f >>+ g) == ((x :: [Int]) >>+ \t -> (f t :: [Int]) >>+ g :: [Int])
03:28:41 <lambdabot> Couldn't match expected type `[a]' against inferred type `Expr'
03:28:41 <lambdabot> In the first argument of `(>>+)', namely `x'
03:28:41 <lambdabot> In the first argument of `(>>+)', namely `x >>+ f'
03:28:48 <oerjan> argh
03:28:58 <CakeProphet> monqy: as in a monad with the restriction that monadic functions applied to bind preserve the type of the monad.
03:29:01 <monqy> CakeProphet: and a functor from a category to itself is called an endofunctor i think??
03:29:10 <oerjan> @check let infixl 1 >>+; l >>+ f = diag . scanl1 (zipWith (const id)) $ map f l where diag ((x:xs):xss) = x:diag (map (drop 1) xss); diag _ = [] in \x f g -> (x >>+ f >>+ g) == ((x :: [Int]) >>+ \t -> (f t :: [Int]) >>+ g :: [Int])
03:29:11 <lambdabot> Overlapping instances for GHC.Show.Show
03:29:11 <lambdabot> (GHC.T...
03:29:25 -!- MDude has changed nick to MSleep.
03:29:41 <oerjan> BURN
03:29:55 <monqy> anyway i need to actually learn category theory
03:29:55 <monqy> but how
03:29:58 <monqy> :(
03:30:15 <CakeProphet> math Ph.D
03:30:20 <elliott_> oerjan: it tries to `show` couterexamples
03:30:23 <elliott_> counter
03:30:38 <elliott_> so inputs must have Show
03:30:44 <CakeProphet> > :t (`show`)
03:30:45 <lambdabot> <no location info>: parse error on input `:'
03:30:50 <CakeProphet> :t (`show`)
03:30:51 <lambdabot> parse error on input `)'
03:31:00 <pikhq> God, Windows must be a pain to develop.
03:31:06 <pikhq> They're up to 5 fucking APIs now.
03:31:27 <pikhq> DOS, Win16, Win32, CLR, and WinRT.
03:31:34 <oerjan> elliott_: some _idiot_ decided to overlap the function Shows :(
03:32:16 <CakeProphet> oerjan's conquest of monadic ziplist glory is met with fierce and imposing obsctacles. How will he proceed?
03:32:36 <SgeoN1> WinRT?
03:32:37 <oerjan> probably by banning everyone in the channel and going down in flames.
03:32:44 <monqy> how does function show even suposesd to work
03:32:44 <elliott_> oerjan: you can use quickcheck locally, but i am sceptical functions have a useful Arbitrary instance anyhow
03:33:02 <oerjan> elliott_: that's what CoArbitrary _is_ for
03:33:26 <CakeProphet> Arbitrary a where whatever :: a -> a -> Maybe a -> ???!?!?!!?!?
03:33:38 <elliott_> oerjan: oh
03:33:44 <SgeoN1> Argh I think I just may try to get Puppy Linux working, or something
03:34:04 <SgeoN1> This is painful. I can't get Lubuntu to boot into X
03:34:09 -!- hagb4rd has quit (Ping timeout: 240 seconds).
03:34:16 <SgeoN1> Oh, here we go
03:35:21 <CakeProphet> I like how do notation usually makes thing more annoying looking.
03:35:39 <CakeProphet> well... not usually
03:35:44 <CakeProphet> it makes the monad laws looks cumbersome.
03:35:57 <oerjan> food ->
03:35:57 <monqy> why are you donotationing the monad laws
03:36:11 <SgeoN1> How do I double check that casper is in use without rebooting?
03:36:33 -!- azaq23 has quit (Ping timeout: 240 seconds).
03:39:09 <CakeProphet> monqy: I'm not but haskellwiki does.
03:39:10 -!- azaq23 has joined.
03:39:16 <CakeProphet> under the section "practical meaning of the monad laws"
03:39:19 <monqy> :(
03:39:22 <CakeProphet> as if it makes it more practical or something.
03:39:25 <monqy> :(
03:39:41 <CakeProphet> "In this notation the laws appear as plain common sense."
03:40:18 <monqy> they only appear as plain common sense to me when they're pointfree :|
03:40:33 <CakeProphet> how do you write them pointfree...
03:40:37 <SgeoN1> Well, /proc/cmdline mentions persistent. That's a good sign right?
03:40:56 <monqy> CakeProphet: how do you write them in do-notation
03:41:10 <CakeProphet> http://www.haskell.org/haskellwiki/Monad_Laws
03:43:56 <monqy> return x >>= f ≡ f x; m >>= return ≡ m; (m >>= f) >>= g ≡ m >>= (f >>= g)
03:44:01 <monqy> happey??
03:44:24 <CakeProphet> that's "point-free"?
03:44:31 <monqy> what did you expect
03:44:36 <CakeProphet> no points.
03:45:01 <monqy> oops!!!
03:45:10 <CakeProphet> @pl (\f x -> x >>= f)
03:45:10 <lambdabot> (=<<)
03:45:16 <coppro> haha
03:45:34 <CakeProphet> (=<<) = ($)
03:45:36 <CakeProphet> obviously
03:45:50 <CakeProphet> er wait
03:45:56 <CakeProphet> @pl (\f x -> return x >>= f)
03:45:56 <lambdabot> id
03:45:57 <CakeProphet> oops
03:46:00 <CakeProphet> id = ($)
03:46:03 <CakeProphet> there we go
03:46:42 <CakeProphet> @pl (\m -> m >>= return)
03:46:43 <lambdabot> id
03:46:51 <CakeProphet> id = id
03:46:55 <CakeProphet> is the second one
03:46:58 <CakeProphet> :P
03:47:08 <monqy> CakeProphet: if you'd like your "point-free" definitions, try section "But it doesn't look exactly like an "associative law"..."
03:47:26 <CakeProphet> yeah >=> make more sense for point freedom.
03:47:48 <CakeProphet> (return >=>) = id
03:47:55 <monqy> the haiku form is good
03:48:04 <CakeProphet> worst haiku ever.
03:48:10 <monqy> no it's good shut up
03:48:30 <CakeProphet> you have no taste in poetry
03:49:02 <CakeProphet> poeterry
03:49:06 <CakeProphet> pottery
03:50:48 -!- zzo38 has joined.
03:51:31 <zzo38> How much do you know about high-quality medieval clothing? (This question is for the D&D game, actually)
03:52:14 <monqy> extreme roleplaying?
03:52:32 <monqy> I'll never understand
03:53:05 <CakeProphet> zzo38: I am teh expert
03:53:11 <CakeProphet> monqy: know I think he wants to know for realism
03:53:15 <CakeProphet> not for LARPing or anything.
03:53:31 <zzo38> Yes, correct; it is not LARPing.
04:06:22 <monqy> curious, a spambot made a spam userpage, and then another spambot made a spam talk page for it, which looks like the original but with the links or something like that shuffled around a bit
04:07:21 <oerjan> the spambot mating dance
04:07:39 <oerjan> call david attenborough
04:10:17 -!- hagb4rd has joined.
04:10:51 -!- hagb4rd has quit (Client Quit).
04:11:52 -!- hagb4rd has joined.
04:12:53 -!- mike has joined.
04:13:19 -!- mike has changed nick to Guest99864.
04:13:50 <Guest99864> Hi all
04:15:48 <Gregor> `? welcome
04:15:49 <HackEgo> 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
04:17:41 <elliott_> hi
04:19:56 -!- MDude has joined.
04:21:17 <monqy> hi guest
04:23:46 -!- MSleep has quit (Ping timeout: 252 seconds).
04:25:43 -!- Guest99864 has quit (Quit: Page closed).
04:25:50 <elliott_> rip guest
04:26:19 -!- michaelh has joined.
04:26:28 -!- michaelh has quit (Client Quit).
04:26:41 <elliott_> rip same guy prolly
04:27:19 -!- oerjan has quit (Quit: rip to shreds).
04:30:19 -!- kmc has joined.
04:32:27 -!- michael1411 has joined.
04:37:42 -!- zzo38 has quit (Ping timeout: 252 seconds).
04:38:08 -!- zzo38_ has joined.
04:38:13 -!- zzo38_ has changed nick to zzo38.
04:39:54 <pikhq> What. If all Catholic bishops agree on a matter of faith and morals at any given time, it becomes the irrevocable, infallible, canonical belief of the Catholic Church forevermore.
04:40:12 <coppro> whee
04:40:39 <pikhq> I do believe this implies that it is official Catholic doctrine that the world is flat, and that disease is caused by miasma.
04:41:58 <elliott_> hard to prove that
04:42:01 -!- michael1411 has quit (Quit: Page closed).
04:42:08 <elliott_> also miasma isn't really a matter of faith and morals is it
04:42:11 <elliott_> maybe worldflatness
04:42:26 <pikhq> Okay, world flatness was treated as such, miasma not so much.
04:43:11 <elliott_> you just need to define faith and morals according to modern-day conception
04:43:17 <elliott_> in which the flatness of the world is not considered a matter of faith
04:43:18 <elliott_> tada
04:43:27 <pikhq> It was once, ergo it is forevermore.
04:43:43 <elliott_> it wasn't
04:43:56 <elliott_> it wasn't a matter of [modernday]faith and [modernday]morals
04:43:58 <hagb4rd> whats about the flatness of this insight, anyone found out yet?
04:44:03 <elliott_> where [modernday] indicates using today's definition
04:44:09 <elliott_> hagb4rd: so what was that ansi c dump stuff about
04:44:25 <hagb4rd> woa, you're scary elliott
04:44:28 <elliott_> wat
04:44:46 <hagb4rd> you are frightening me
04:44:54 <elliott_> how
04:45:18 <hagb4rd> with your britwa sharpened mind
04:45:25 <elliott_> wat
04:45:26 <hagb4rd> no
04:45:32 <hagb4rd> its out of topic now
04:45:58 <pikhq> It might also be infallible doctrine that Jesus did not walk the Earth, which produces some major headaches.
04:46:07 <elliott_> hagb4rd: you said you'd explain it later
04:46:12 <elliott_> it is now later, i'm askin'
04:46:21 <pikhq> (this is hard to tell, because it depends on heavily ambiguous records)
04:46:28 <elliott_> since I don't actually know what the context was it would be hard for me to steer the topic to that
04:46:40 <elliott_> but if you let me know what the context was I will make it on topic
04:47:00 <hagb4rd> i know..you can do that..that's right, but i want to discuss religion now
04:47:04 <hagb4rd> no
04:47:28 <elliott_> i don't see why your conversations in other channels would affect what you talk about in here
04:47:47 <pikhq> For instance, since it is claimed that the Church's authority comes from Jesus *as a person* bestowing it upon St. Peter, the first Pope, if it is also the case that it is claimed Jesus never existed then the Church goes up in a puff of logical smoke.
04:48:08 <hagb4rd> thery're all like, yes looking to say sth wise
04:48:17 <hagb4rd> but im out for sth true
04:48:22 <hagb4rd> can udig it?
04:48:34 <elliott_> hagb4rd: what?
04:48:42 <hagb4rd> so
04:48:44 <hagb4rd> ansic
04:49:02 <hagb4rd> i hate k&r style
04:49:50 <elliott_> what's the dump you were talking about
04:50:05 <hagb4rd> i've drunken to much to care bout now..i want to know more about jesus walking the earth now
04:50:29 <elliott_> you've drunken too much to make any sense, too
04:50:34 <hagb4rd> please focus on the mwean things
04:50:40 <elliott_> mwean?
04:50:44 <hagb4rd> and let me just shut up
04:51:09 <elliott_> pikhq: i think he wants you to talk about jesus
04:51:16 <hagb4rd> lol..
04:51:26 <pikhq> hagb4rd: Well, it's kinda interesting; the writings of Paul (the first Christian records we have *at all*) do not seem to claim that Jesus was anything but a supernatural spirit. The concept of Jesus as a human being seems to have only come about decades later.
04:51:33 <hagb4rd> thx elliott, please dont get mad bout this
04:51:52 <elliott_> why would i get mad
04:53:04 <hagb4rd> jesus, yes.. he was human
04:53:11 <hagb4rd> and that is fantastic
04:53:32 <hagb4rd> more than beeing able to speak with fish.. like seaman does
04:53:42 <elliott_> `addquote <hagb4rd> jesus, yes.. he was human <hagb4rd> and that is fantastic <hagb4rd> more than beeing able to speak with fish.. like seaman does
04:53:43 <HackEgo> 674) <hagb4rd> jesus, yes.. he was human <hagb4rd> and that is fantastic <hagb4rd> more than beeing able to speak with fish.. like seaman does
04:54:04 <monqy> reminded me of itidus there
04:54:29 <monqy> is that what drunken does
04:57:28 -!- DH____ has quit (Read error: Connection reset by peer).
04:57:39 -!- DH____ has joined.
04:58:41 <zzo38> I think () is final objects in Hask but are there initial objects? But I don't really know for sure, I don't really know a lot of things about category theory
05:00:43 <zzo38> Is newtype an isomorphism?
05:09:04 <zzo38> It says it isn't inital or terminal because of undefined.
05:09:11 <elliott_> who's it
05:10:05 <zzo38> But, is it, if you ignore undefined, and work only with fully defined programs?
05:27:14 <Gregor> Now, in spite of Windows CE's abysmal UI, the combination of that and an FTP server is making the Zune approach being a sufferable device.
05:27:23 <Gregor> At least I can get media to it without booting Windows.
05:27:27 <Gregor> (Except on it :P )
05:41:23 <pikhq> Now get Rockbox on it.
05:43:05 <Gregor> If there was Rockbox for Windows CE, that would be great.
05:43:13 <Gregor> But I don't think they have Rockbox-as-an-app.
05:43:26 <Gregor> And I'm sure as hell not figuring out how to chainload this thing :P
05:44:22 -!- Zuu has quit (Read error: Connection reset by peer).
05:49:22 -!- Zuu has joined.
05:49:31 -!- Zuu has quit (Changing host).
05:49:31 -!- Zuu has joined.
05:52:57 <elliott_> ?hoogle Bool -> Maybe a -> Maybe a
05:52:58 <lambdabot> Data.Generics.Aliases orElse :: Maybe a -> Maybe a -> Maybe a
05:52:58 <lambdabot> Data.Maybe fromMaybe :: a -> Maybe a -> a
05:52:58 <lambdabot> Control.Monad unless :: Monad m => Bool -> m () -> m ()
06:03:32 -!- azaq23 has quit (Quit: Leaving.).
06:05:12 -!- CakeProphet has quit (Ping timeout: 252 seconds).
06:22:17 <zzo38> I think I managed to make it derive instances of Language.Haskell.Syntax.TH.Lift
06:39:23 <zzo38> I think this is wrong: z' = foldl AppE x'' $ map (AppE (VarE 'lift) . VarE) z;
06:39:50 <zzo38> Because I need to apply AppE in the generated code, too.
06:43:43 -!- cheater has quit (Ping timeout: 252 seconds).
06:44:40 <monqy> why would you want to derive Lift? dataToExpQ/dataToQa are good enough for converting simple data things, and for anything else, I imagine a manual instance would be necessary
06:45:36 <monqy> like if you want antiquotation you'd either need a manual instance or I guess you might be able to make an automated derivation that handled antiquotation cases maybe???
06:47:50 <monqy> where by hnadled antiquotation cases I mean you give it a constructor and it treats the contents in a special way (if it handles Exp, leave as-is; for String, use haskell-src-exts or something)
06:48:20 <monqy> or you could one where the user provides such cases and you could prepackage an antiquotation one
06:48:22 <zzo38> Actuallyy I fixed the deriving Lift, now it works.
06:48:26 <monqy> ok
06:48:42 <monqy> then again you'd rpobably just be able to do what i described with dataToQa but I forget how it works
06:48:49 <zzo38> For example, if you declare deriveLift ''Ordering; then you can have $(lift LT) = LT
06:49:00 <monqy> since it's syb and syb is all about the sort of things I described
06:49:14 <zzo38> It works with constructors having parameters, too.
06:49:32 <monqy> zzo38: have you ever used dataToExpQ or dataToQa?
06:49:35 <monqy> zzo38: or syb?
06:49:39 <monqy> zzo38: you may find syb interesting
06:50:14 <zzo38> I also managed to make extractQ :: Q a -> a; it does work in many cases (in the cases that it doesn't work, you either get the error "No value in Quasi" or "Cannot perform I/O")
06:50:33 <zzo38> extractQ works with lift and with [| ... |]
06:50:48 <monqy> ooh
06:51:08 <zzo38> It also works with report although the result will always be ()
06:52:38 <zzo38> monqy: No, I have never heard of dataToExpQ, dataToQa, or syb.
06:53:19 <monqy> dataToExpQ takes any instance of Data and converts it to Q Exp
06:53:45 <zzo38> O, OK.
06:53:46 <monqy> dataToQa requires a bit more work but you can do more with it
06:54:00 <monqy> they're implemented with syb, a generic programming library thing
06:54:30 <zzo38> Well, mine just derives instances, and it does not have to already be an instance of anything else. However, its parameters must be instances of Lift.
06:56:29 <monqy> does reify tell anything about the instances of types? what I'm getting at: if there are parameters not instances of Lift, could you derive instances for them?
06:57:39 -!- cheater has joined.
06:57:41 <zzo38> monqy: The parameters might be variable types, though.
06:57:56 <monqy> ah, right
06:59:20 <zzo38> This is the program I used, and maybe it is too long; is there shorter way to derive Lift? http://hpaste.org/51559
07:01:44 <zzo38> The extractQ uses the Maybe monad, in which most things it cannot implement are Nothing, except runIO which is an error.
07:01:52 <zzo38> extractQ = maybe (error "No value in Quasi") id . runQ;
07:04:12 -!- GreaseMonkey has joined.
07:12:51 -!- itidus21 has joined.
07:13:23 <zzo38> I have the module "ExtraTH" with various things related to Template Haskell, these are exports: newVar, newVarMany, newCon, foreign_export, genCurry, genUncurry, extractQ, QuasiState(..), quasiState, recUpd, deriveLift. (Later I might add more) These are instances: instance Quasi Maybe; instance Quasi (State QuasiState); Instance MonadIO Q;
07:15:53 <elliott_> oh monqy did
07:15:54 <elliott_> an talkify
07:16:07 <itidus21> monqy c
07:16:20 <elliott_> "monqy c" --itidus21
07:17:50 <zzo38> Is there some way to add fields to QuasiState to allow reify and recover and classInstances to be usable in the state monad?
07:18:07 <monqy> hi
07:18:54 <itidus21> (define (tidus x) (* x x x)) (tidus 5) == 125 ... proof i have been reading some SICP ^_^;
07:19:32 <elliott_> yay
07:21:56 <itidus21> i didnt intend to make that second pun of "monqy did, monqy c" "tidus x"
07:22:48 <itidus21> and i do feel kind of guilty for that unprovoked comment
07:23:58 <elliott_> Has anyone used HsOpenSSL?
07:24:09 <elliott_> itidus21: It is totally disallowed to make comments without provoking.
07:24:15 <elliott_> This is why IRC is constantly silent forever.
07:24:59 <itidus21> where do people go to screw around on irc?
07:25:43 <itidus21> dumb question as i don't really want an answer
07:26:12 <itidus21> best if we don't know where we screw around.. seinfeld world colliding theory
07:28:32 <elliott_> the answer is here.
07:28:40 <itidus21> heh
07:28:49 <elliott_> http://esolangs.org/wiki/Special:Recentchanges uh oh
07:29:37 <monqy> oh no it's more of that userpage then usertalk page nonsense
07:29:45 <elliott_> is this a spambotloop...
07:30:05 <monqy> one of these guys made a spam talkpage for someone without a userpage
07:30:10 <elliott_> :')
07:30:13 <elliott_> so thoughtful
07:30:24 <elliott_> i'm sure it says like
07:30:25 <elliott_> hello
07:30:25 <monqy> is 123 even a user
07:30:26 <elliott_> in spambot
07:30:38 <elliott_> http://esolangs.org/wiki/Special:Contributions/123
07:30:40 <monqy> 123 has never made changes at least...
07:30:41 <elliott_> apparently>???
07:30:41 <monqy> yeah
07:36:49 <monqy> at least one of them got put inside one of those special boxes that is monospace and doesn't linewrap...
07:36:58 <monqy> now my horizontal scrollbar....
07:37:02 <elliott_> lnike...
07:37:03 <elliott_> i want to
07:37:04 <elliott_> see....
07:37:06 <elliott_> the bxoxoe
07:37:09 <monqy> http://esoteric.voxelperfect.net/wiki/User:Zhanzhan
07:37:18 <monqy> its bauteful
07:37:20 <elliott_> poor zhanzhan
07:37:31 <monqy> hedid toh..e..himself
07:37:49 <monqy> poor zahnzhan ;__;
07:37:55 <elliott_> ;__;
07:42:39 <zzo38> I want to know about the highest quality of medieval clothing for the purpose of D&D game. I already know the color, it is yellow and orange. What I don't know is materials (the DM doesn't know either).
07:42:53 <elliott_> im the best
07:42:56 <elliott_> mediveal ;__;
07:46:00 <zzo38> He just made up the color, and said it is otherwise like highest quality fashion medieval clothing.
07:48:44 <zzo38> Do you know about that kind of things?
07:51:37 <zzo38> The situation is, the navy probably thinks we were nobility but doesn't actually know where we came from (we were actually caught and enslaved, and escaped, and eventually found by the navy).
07:54:08 <zzo38> Is this good class improvement file? http://zzo38computer.cjb.net/dnd/options/Metamind.c
07:56:24 <zzo38> The other class improvement file is this one: http://zzo38computer.cjb.net/dnd/options/Illithid_Savant.c (Note: I plan to add a few more things under "Extras"; such as the "Impostor" ability) (Note: the "Extras" must be selected and learned individually and are limited per day)
08:01:34 <elliott_> ?hoogle lift
08:01:34 <lambdabot> Control.Monad.Trans lift :: (MonadTrans t, Monad m) => m a -> t m a
08:01:34 <lambdabot> Text.ParserCombinators.ReadPrec lift :: ReadP a -> ReadPrec a
08:01:34 <lambdabot> Language.Haskell.TH.Syntax lift :: Lift t => t -> Q Exp
08:01:58 <zzo38> elliott_: The one I used is Language.Haskell.TH.Syntax
08:02:13 <elliott_> zzo38: I actually did that in response to unrelated #haskell chat :P
08:02:15 <elliott_> as in, unrelated to your code
08:02:25 <zzo38> OK.
08:02:53 <zzo38> But do you know if my code for deriving Lift could be made shorter?
08:03:22 <elliott_> dunno
08:03:49 <zzo38> It seem to be too long, but I don't know if it is really too long
08:05:59 <zzo38> It does work how it is now, so that deriveLift ''Ordering; allows you to do $(lift EQ) and it work.
08:07:10 <zzo38> And do you know any information related to my question about the clothing?
08:11:53 -!- ive has quit (Quit: leaving).
08:15:46 -!- copumpkin has quit (Ping timeout: 260 seconds).
08:16:11 -!- copumpkin has joined.
08:19:35 -!- zzo38 has quit (Remote host closed the connection).
08:46:34 -!- CakeProphet has joined.
08:55:21 -!- aloril has quit (Ping timeout: 240 seconds).
09:08:13 -!- cheater_ has joined.
09:08:44 -!- aloril has joined.
09:21:03 -!- cheater_ has quit (Remote host closed the connection).
09:21:20 -!- cheater_ has joined.
09:23:15 -!- monqy has quit (Quit: hello).
09:29:56 -!- cheater_ has quit (Remote host closed the connection).
09:30:33 -!- cheater_ has joined.
09:34:38 -!- cheater_ has quit (Client Quit).
09:41:45 -!- cheater_ has joined.
09:42:53 -!- cheater_ has quit (Client Quit).
09:43:21 -!- cheater_ has joined.
09:45:15 -!- cheater has changed nick to cheater2.
09:45:30 -!- cheater_ has changed nick to cheater.
09:56:08 -!- cheater has quit (Quit: Ex-Chat).
09:56:38 -!- cheater has joined.
10:51:56 <CakeProphet> is there a convenient bash command to wrap an input at a certain line length?
10:52:44 -!- GreaseMonkey has quit (Quit: The Other Game).
10:55:49 <elliott_> yes. in fact HackEgo uses it.
10:55:55 <elliott_> unfortunately its name escapes me-
10:55:56 <elliott_> oh
10:55:56 <elliott_> fmt
10:55:57 -!- Jafet has joined.
10:56:03 <elliott_> CakeProphet: ps. it's not "bash command"
10:56:33 <CakeProphet> what is the palatable terminology around these parts?
10:56:38 <elliott_> unix command?
10:56:38 <CakeProphet> shell utility?
10:56:41 <elliott_> program?
10:56:49 <elliott_> it's hardly specific to bash.
10:57:31 <CakeProphet> I decided to just do a byte cutoff with head
10:57:41 <CakeProphet> instead of wrapping lines and cutting by line.
10:57:52 <elliott_> fmt -w width
10:57:54 <elliott_> job done
11:00:04 <CakeProphet> also I keep forgetting...
11:00:13 <CakeProphet> how to redirect stderr to stdout
11:00:20 <CakeProphet> 1>&2 or something?
11:00:24 <CakeProphet> er
11:00:28 <CakeProphet> swap the 2 and 1 I think
11:00:51 <elliott_> yes.
11:00:54 <elliott_> (swap)
11:01:03 <CakeProphet> and that can be done before a pipe?
11:01:08 <CakeProphet> 1>&2 | ...
11:01:24 <elliott_> you forgot the swap.
11:01:25 <elliott_> and yes.
11:01:52 <CakeProphet> ghci -v0 < inp 2>&1
11:01:54 <CakeProphet> that looks strange to me.
11:02:00 <CakeProphet> is that valid?
11:02:20 <elliott_> of course it is.
11:02:27 <elliott_> what are you doing?
11:02:33 <CakeProphet> working on my IRC bot.
11:03:35 <CakeProphet> specifically giving :t and > proper cutoffs.
11:03:49 <elliott_> that ghci command is ridiculously unsafe.
11:04:25 <CakeProphet> is it? I guess if someone were to, say, edit inp in the split second opportunity they have to do so.
11:05:11 <elliott_> why are you even doing it via a file
11:05:17 <elliott_> why are you even involving the shell
11:05:30 <elliott_> your language has perfectly good process spawning/pipe utilities, use them
11:06:23 <CakeProphet> well I guess I could use :m instead of :l
11:06:33 <CakeProphet> open my $f, '>inp'; print $f ":l botload.hs\n:t $1"; close $f; my $msg = qx/ghci -v0 < inp 2>&1 | head -n 3/;
11:06:55 <CakeProphet> :l contains a bunch of imports. I basically borrowed it from mueval.
11:06:58 <CakeProphet> er
11:07:00 <CakeProphet> botload.hs I mean
11:07:21 <CakeProphet> yes I realize the security issue with that.
11:07:28 <fizzie> There's a bash shorthand of "blah |& bleh" to do "blah 2>&1 | bleh".
11:07:59 <fizzie> Not sure if I'd use it, but it exists.
11:08:02 <elliott_> CakeProphet: how much unix programming do you actualy know
11:08:06 <CakeProphet> elliott_: can you recommend a better way?
11:08:10 <CakeProphet> elliott_: a little.
11:08:16 <elliott_> you're using a temporary file and the shell there for absolutely no reason, just exposing yourself to holes and wasting time
11:08:35 <elliott_> i don't know perl, look up how it does processes and pipes, they are not difficult concepts\
11:08:40 <elliott_> s/\\//
11:09:44 <fizzie> The "simple" pipe-open won't cut it if you also want to capture the output of ghci.
11:10:09 <fizzie> (Otherwise it would be open my $f, '|-', "ghci -whatver -it -needs -to -read -stdin -if -anything"; print $f whatever; or some-such.)
11:10:57 -!- coppro has quit (Ping timeout: 258 seconds).
11:11:02 <fizzie> The IPC::Open2 provides a two-pipe 'open2' solution, though it can easily deadlock if it's used with unfriendly processes.
11:11:09 <elliott_> Nice.
11:11:14 -!- coppro has joined.
11:11:33 <CakeProphet> capturing the output would just be read $f right?
11:11:43 <elliott_> <fizzie> The "simple" pipe-open won't cut it if you also want to capture the output of ghci.
11:11:44 <fizzie> Pipes only go one way.
11:11:58 <CakeProphet> erm...?
11:12:05 <fizzie> Well, except Solaris pipes, those are bidirectional.
11:12:39 <fizzie> open my $f, '|-', "ghci ..." attaches the $f handle to the write end of a pipe that is connected to the stdin of ghci.
11:12:43 <fizzie> You can't read from it.
11:12:49 <CakeProphet> I'm almost positive I've written code in which I piped stdin of something to my programs' stdout, and then read from the process..
11:12:55 <CakeProphet> aaah
11:15:17 <fizzie> While $foo = qx/.../; does what's basically equivalent to open my $h, '-|', "..."; $foo = join('', <$h>); close $h; (Note '-|' as opposed to '|-' -- there is no '|-|' because open can't return more than one handle.)
11:15:26 <fizzie> I guess it might capture stderr too.
11:15:40 <CakeProphet> only if I redirect it.
11:16:23 <CakeProphet> so could I echo inp | ghci ... then?
11:16:32 <CakeProphet> inp being a string not a file
11:16:40 <fizzie> If you want to have shell injection problems, sure.
11:16:41 <CakeProphet> and then read that?
11:16:45 -!- ais523 has joined.
11:16:54 <CakeProphet> how would something be injected?
11:17:19 <fizzie> By inputting the string "haha | rm -rf ~/* | echo hehe", for example?
11:18:01 <CakeProphet> oh... right./
11:18:32 <CakeProphet> I don't really see an issue with using shell as there's no IRC-side exploits...
11:18:58 <elliott_> hi ais523
11:19:05 <ais523> hi elliott, hi underscore
11:19:19 <fizzie> If you're shell-command-line-executing untrusted input without quoting it, that's certainly a problem. I haven't really been following the context here.
11:20:05 <CakeProphet> I'm writing to files and then using those files as input to shell commands
11:20:23 <CakeProphet> the exploit would be that someone can modify the files on my side, but not from IRC.
11:21:37 <fizzie> If you don't mind the temporary file, that's certainly doable. You can get by without, though.
11:22:31 <CakeProphet> elliott_ minds but I don't.
11:34:02 -!- nooga has joined.
11:34:10 <nooga> PURN
11:34:35 <elliott_> Purn yourself.
11:38:06 <nooga> http://www.urbandictionary.com/define.php?term=Purn
11:38:15 <elliott_> No.
11:39:07 <nooga> Why?
11:39:10 <fizzie> Trokdor the purninator.
11:39:47 <CakeProphet> mueval doesn't read stdin...
11:39:48 <nooga> lamża
11:42:58 <elliott_> CakeProphet: of course not, mueval uses the ghc api.
11:43:42 <CakeProphet> my $msg = qx/mueval -Ee "`cat inp`" | head -c 100/;
11:43:49 <CakeProphet> so this code doesn't disgust you in any way?
11:43:50 <CakeProphet> I mean
11:43:55 <CakeProphet> besides being perl.
11:44:10 <elliott_> It needlessly invokes the shell.
11:44:46 <CakeProphet> ....that's kind of like, a thing perl is good at though. OPEN REQUIRES MORE TYPING.
11:46:39 <CakeProphet> when is it not needless to invoke the shell?
11:47:06 -!- elliott_ has quit (Remote host closed the connection).
11:47:10 -!- elliott has joined.
11:53:01 <elliott> hi
11:53:07 <CakeProphet> hi
11:53:11 <elliott> hi
11:53:32 <nooga> hi hi hi\
11:53:49 <elliott> hi
12:01:54 <CakeProphet> > runST (do { x <- newSTRef; writeSTRef x "hello"; read STRef x})
12:01:55 <lambdabot> Not in scope: data constructor `STRef'
12:01:59 <CakeProphet> > runST (do { x <- newSTRef; writeSTRef x "hello"; readSTRef x})
12:02:00 <lambdabot> Couldn't match expected type `GHC.ST.ST s a'
12:02:00 <lambdabot> against inferred type ...
12:02:07 <CakeProphet> > runST (do { x <- newSTRef "hi"; writeSTRef x "hello"; readSTRef x})
12:02:07 <lambdabot> "hello"
12:02:33 <CakeProphet> mueval doesn't import ST.
12:02:39 <CakeProphet> I'd have to hack the source to allow it to do such.
12:04:08 <nooga> heh
12:04:41 <CakeProphet> is ST inherently magical or is it implemently with pure code?
12:04:43 <nooga> mueval;O
12:04:49 <CakeProphet> I see it uses State# but I don't really know how that works.
12:05:45 <CakeProphet> :t ST
12:05:45 <lambdabot> Not in scope: data constructor `ST'
12:05:52 <CakeProphet> ah it doesn't export that.
12:11:35 <nooga> :->
12:14:25 <elliott> CakeProphet: ST can be implemented with unsafeCoerce.
12:14:37 <elliott> or ... IORefs :P
12:14:45 <elliott> and unsafePerformIO for runST
12:14:57 <CakeProphet> erm, how would IORefs work outside of IO?
12:14:59 <elliott> but ofc unsafePerformIO + IORefs gives you unsafeCoerce
12:15:02 <elliott> CakeProphet: they wouldn't
12:15:08 <elliott> newtype ST s a = ST (IO a)
12:15:14 <elliott> runST :: (forall s. ST s a) -> a
12:15:18 <elliott> runST (ST a) = unsafePerformIO a
12:15:20 <CakeProphet> oh uh...
12:15:27 <CakeProphet> that kind of defeats the purpose of ST though.
12:15:30 <elliott> no it doesn't
12:15:35 <elliott> it's just as pure from the outside
12:16:17 <CakeProphet> runST $ ST (readFile "/etc/passwd")
12:16:19 <CakeProphet> um?
12:16:41 <elliott> yeah because you naturally export the ST constructor, as we're operating under the assumption that the implementer is a fucking moron apparently
12:16:56 <elliott> this coming minutes after you realise that the GHC implementation doesn't export the constructor either
12:17:32 <CakeProphet> extra vitriolic today are we?
12:18:24 <elliott> i'm not ruling out the possibility that the implementer is a fucking moron, it's true that I didn't consider it
12:18:33 <elliott> that definitely _would_ break referential transparency.
12:20:42 <CakeProphet> I simply didn't consider that ST would be hidden and so it wouldn't matter. >_>
12:20:55 <CakeProphet> plz don't rip my head off.
12:21:05 <Jafet> But GHC implements IO using ST!
12:21:16 <Jafet> Where is your GoD now.
12:21:24 <CakeProphet> no I believe it uses State# right?
12:21:35 <CakeProphet> >_> or?
12:22:16 <Jafet> >_> <_<
12:22:36 <elliott> hmm, why isn't (IO a -> ST RealWorld a) in Control.Monad.ST
12:22:49 <CakeProphet> unsafeSTToIO :: ST s a -> IO a
12:22:49 <CakeProphet> unsafeSTToIO (ST m) = IO (unsafeCoerce# m)
12:22:50 <elliott> you couldn't exploit it without something else unsafe, so it's perfectly fine
12:22:53 <CakeProphet> apparently.
12:23:10 <elliott> CakeProphet: IO is implemented identically to ST, but neither in terms of the other.
12:23:18 <elliott> IO just fixes s = RealWorld.
12:23:19 <CakeProphet> right that's what I thought.
12:23:51 <CakeProphet> stToIO :: ST RealWorld a -> IO a
12:23:52 <CakeProphet> stToIO (ST m) = IO m
12:23:57 <CakeProphet> fun stuff.
12:24:21 <elliott> stToIO and unsafeIOToST are rather useful.
12:25:15 <elliott> Jafet: You should solve my Template Haskell library linking issue, it'd be great
12:25:31 <Jafet> I should? If I could, I would!
12:25:53 <CakeProphet> stToIO :: ST RealWorld a -> IO a
12:25:54 <CakeProphet> stToIO (ST m) = IO m
12:26:04 <CakeProphet> couldn't this be used to create side-effects in ST?
12:26:22 <elliott> CakeProphet: How?
12:26:30 <CakeProphet> er I mean ioToST
12:26:34 <elliott> Jafet: Maybe you can, you don't even know what it is yet
12:26:47 <elliott> CakeProphet: there is no ioToST
12:26:54 <CakeProphet> ioToST :: IO a -> ST RealWorld a
12:26:55 <CakeProphet> ioToST (IO m) = (ST m)
12:26:58 <CakeProphet> must not be exported
12:27:06 <elliott> unsafeIOToST is
12:27:15 <CakeProphet> unsafeIOToST :: IO a -> ST s a
12:27:16 <CakeProphet> unsafeIOToST (IO io) = ST $ \ s -> (unsafeCoerce# io) s
12:27:18 <CakeProphet> :)
12:27:20 <itidus21> `log what is love
12:27:21 <elliott> ioToST cannot be used to create usable side-effects in ST
12:27:24 <elliott> look at runST's type
12:27:31 <elliott> "s" must be universally quantified
12:27:36 <elliott> ioToST fixes it at RealWorld
12:27:40 <HackEgo> 2008-02-28.txt:21:21:36: <slereah_> What is love?
12:27:44 <CakeProphet> ah
12:27:52 <Jafet> unsafeIOToST :: IO a -> forall s. ST s a
12:27:55 <Jafet> Good luck
12:27:56 <CakeProphet> so you have to use stToIO
12:28:11 <CakeProphet> to get sideeffects
12:28:32 <elliott> I guess ioToST introduces unsafety, actually
12:28:53 <elliott> because (stToIO st) is a pure computation without the unsafe functions
12:28:56 <elliott> ioToST breaks that
12:29:22 -!- cheater has quit (Ping timeout: 240 seconds).
12:29:42 <CakeProphet> yes that's what I was originally thinking.
12:29:48 <Jafet> You need unsafeIOToST to add new primitives to ST
12:29:55 -!- cheater2 has quit (Ping timeout: 258 seconds).
12:30:33 <CakeProphet> ioToST (readFile "/etc/passwd")
12:30:36 <CakeProphet> no need to add new primitives.
12:30:36 <elliott> Jafet: indeed
12:31:24 <Jafet> /etc/passwd should be read into oleg's existentially quantified configuration typeclass, you oaf
12:31:30 <CakeProphet> still you have to convert back to IO at some point to actually get the side-effects.
12:31:41 <CakeProphet> I think.
12:32:50 <CakeProphet> in any case ioToST isn't exported.
12:34:07 <CakeProphet> and can't be implemented without the ST constructor.
12:34:55 <elliott> Sure it can.
12:35:01 <CakeProphet> not safely I mean...
12:35:02 <elliott> unsafeIOToST is trivially specialised to ioToST.
12:36:17 <elliott> Jafet: I'm disappointed in you
12:37:04 <CakeProphet> hmmm what new ST primitives would be nice.
12:37:22 <CakeProphet> STMtoST?
12:37:34 <CakeProphet> forkST :P
12:37:54 <elliott> CakeProphet: https://github.com/ehird/vault/blob/master/src/Data/Vault/ST.hs#L43
12:38:33 <CakeProphet> why do you use unsafe things so much.
12:38:55 <elliott> See https://github.com/ehird/vault/blob/master/src/Data/Vault/ST.hs#L6
12:39:02 <elliott> It already used unsafeCoerce, I just made it usable from ST
12:39:07 -!- cheater has joined.
12:39:12 <CakeProphet> why do you use unsafe things so much.
12:39:13 <elliott> Which involved introducing the newUnique primitive into ST.
12:39:16 <elliott> CakeProphet:
12:39:18 <elliott> <elliott> See https://github.com/ehird/vault/blob/master/src/Data/Vault/ST.hs#L6
12:39:18 <elliott> <elliott> It already used unsafeCoerce, I just made it usable from ST
12:39:20 <elliott> <elliott> Which involved introducing the newUnique primitive into ST.
12:39:23 <CakeProphet> "oh because I already used unsafe things" is not an acceptable answer :P
12:40:20 <elliott> CakeProphet: I didn't
12:40:28 <elliott> Note the "forked from HeinrichApfelmus/vault"
12:40:38 <CakeProphet> ah
12:40:48 <elliott> CakeProphet: And using {ST,IO}Refs would result in a vastly slower implementation.
12:40:56 <CakeProphet> still it doesn't explain why you use unsafe things so much.
12:41:05 <CakeProphet> efficiency?
12:42:16 -!- sllide has joined.
12:42:19 -!- Phantom_Hoover has joined.
12:42:59 <elliott> CakeProphet: Because I do interesting things
12:44:24 <CakeProphet> ah the Keys are typed and that's why the vault doesn't have to contain values of one type.
12:44:27 <CakeProphet> INTRIGUING
12:44:46 <CakeProphet> well I mean
12:44:47 <CakeProphet> that's not why
12:45:06 <elliott> See https://github.com/HeinrichApfelmus/reactive-banana/issues/12 for more along those lines. :p
12:45:08 <CakeProphet> I mean to say, that's why it's not annoying to work with, because the Key provides the type information for everything else.
12:45:18 -!- cheater2 has joined.
12:46:12 <CakeProphet> I could see using something like Vault for a MUD server.
12:46:36 <CakeProphet> to store object attributes.
12:47:36 <elliott> CakeProphet: you could also just use a record.
12:47:52 <CakeProphet> right but the idea is for to be like a MOO where the game is modifiable from within the game.
12:48:16 <elliott> You wouldn't be able to use vaults nicely for that; that's verging on dependent typing.
12:48:28 <elliott> Just model the (probably bad) language's (probably bad) object model directly.
12:48:28 <CakeProphet> dependent or dynamic I suppos. :P
12:48:34 <elliott> no.
12:48:52 <CakeProphet> well no see I think it would be interesting to have a well-type scripting language of that nature...
12:48:58 <CakeProphet> *well-typed
12:49:35 <CakeProphet> but I see what you're saying.
12:50:42 <elliott> i am saying that it would not work to implement that in haskell.
12:54:44 <CakeProphet> maybe not with vaults
12:54:49 <CakeProphet> but I'm pretty sure it would be possible.
13:04:21 <CakeProphet> elliott: if someone offered you 1 million per year for the rest of your life to work on a massive piece of software written entirely in perl
13:04:24 <CakeProphet> would you accept the offer?
13:04:38 <CakeProphet> 1 million being US dollars
13:04:52 <elliott> What are the hours like?
13:04:59 <CakeProphet> dude I don't I just made up this example.
13:05:07 <CakeProphet> THIS ISN'T REAL.
13:05:21 <CakeProphet> :> uh, 36 hours a week?
13:05:25 <CakeProphet> dunno
13:05:29 <CakeProphet> FREELANCE
13:05:33 <CakeProphet> set your own hours/
13:05:38 <elliott> I N S U F F I C I E N T D A T A F O R M E A N I N G F U L A N S W E R
13:05:44 <elliott> I set my hours at 0/wk
13:05:45 <elliott> .
13:06:00 <CakeProphet> see... it doesn't work that way
13:06:32 <CakeProphet> technically speaking in a freelance situatons you wouldn't be paid by year it would by hour or piecework.
13:06:42 <CakeProphet> also it's a perl OS
13:06:42 <elliott> You asked me to set my own hours; I set my own hours.
13:06:48 <CakeProphet> with an emphasis on efficiency.
13:06:59 <elliott> There are worse languages to write an OS in than Perl.
13:07:02 <elliott> C, for instance.
13:07:15 <Jafet> Actually, perl is written in C.
13:07:17 <CakeProphet> but is it worse if you're emphasizing efficiency? I think not.
13:07:31 <CakeProphet> perl being
13:07:34 <CakeProphet> probably CLOSE
13:07:40 <CakeProphet> to one of the slowest languages in common use.
13:08:19 <elliott> Jafet: So?
13:08:30 <elliott> That doesn't mean the Perl OS would use a Perl implementation written in C.
13:08:34 <CakeProphet> elliott: "dude man everything is machine code. now what?"
13:08:44 <elliott> CakeProphet: I don't think Perl is slower than Ruby.
13:08:50 <Jafet> Oh yeah, you're being paid a million dollars, so you can re-implement perl.
13:08:57 <Jafet> Bug-for-bug, I guess
13:08:57 <elliott> Jafet: It's not _that_ hard a task.
13:08:57 <Phantom_Hoover> elliott, I was about to object and then I remembered that C is like useless for low-level programming anyway.
13:09:11 <elliott> Jafet: Anyway, at least the C would be confined to the Perl implementation.
13:09:15 <elliott> Even if it was there.
13:09:27 <CakeProphet> there's no such thing as a bug in the perl interpreter
13:09:32 <CakeProphet> as the perl interpreter is the language spec.
13:09:36 <elliott> Huh, Perl really is slower than Ruby. And PHP. Ouch.
13:09:43 <CakeProphet> yep
13:09:49 <elliott> Wait, no.
13:09:53 <elliott> That's an alphabetical list.
13:09:54 <elliott> Wait, no it isn't.
13:09:59 <CakeProphet> lol
13:10:00 <elliott> It just looked vaguely like one.
13:10:40 <CakeProphet> also PHP on the language shootout has fewer bytes of code on average.
13:10:53 <CakeProphet> probably due to standard libraries
13:10:59 <CakeProphet> Python is the smallest in that measure.
13:11:31 <CakeProphet> followed by Ruby, then I don't remember what...
13:11:33 <fizzie> But it's faster than C. (Assuming you're using CINT.)
13:11:56 <Phantom_Hoover> CINT?
13:12:12 <fizzie> It's that C interpreter.
13:12:13 -!- elliott has quit (Remote host closed the connection).
13:12:24 <fizzie> http://root.cern.ch/drupal/content/cint
13:12:27 <fizzie> Blame the physicists.
13:12:39 -!- elliott has joined.
13:12:43 <CakeProphet> Haskell is on the lower end of byte counts for the category of "languages that are fast"
13:12:54 <elliott> Remain disappointed in Jafet.
13:13:03 <elliott> CakeProphet: The benchmarks game Haskell code is terribly over-large.
13:13:07 <elliott> It's ridiculously microoptimised.
13:13:08 <Phantom_Hoover> fizzie, WTF is with the naked tentacle woman in the corner.
13:13:14 <elliott> What.
13:13:36 <Jafet> Well, it's C submitted as haskell
13:13:41 <elliott> Oh, I was expecting something very different.
13:13:43 <elliott> Are those even tentacles.
13:13:47 <Jafet> I live to disappoint.
13:13:47 <elliott> They look like... is she part tree.
13:14:00 <fizzie> Phantom_Hoover: You mean the ROOT logo?
13:14:08 <fizzie> They are probably ROOTs.
13:14:14 <elliott> Hur hur hur
13:14:14 <CakeProphet> elliott: ah okay.
13:14:16 <elliott> At least I was right.
13:14:16 <Jafet> Admit it, you'd root her.
13:14:44 <Phantom_Hoover> Jafet, how, she's all roots from the waist down.
13:14:56 <CakeProphet> elliott: also Python submitions apparently cheat alot as the top percentile on the performance data for Python is very close to C.
13:15:08 <elliott> Phantom_Hoover: That's why they call it rooting.
13:15:17 <elliott> (Am I really participating in this? Shame on you, elliott.)
13:15:31 <Phantom_Hoover> Jafet, rooting for you anyway.
13:15:52 <elliott> CakeProphet: Insert stupid alot joke.
13:16:23 <CakeProphet> wat
13:16:25 <Jafet> I'm more amused by the star wars scrolling code.
13:16:38 <elliott> Jafet: no but seriously, fix my library problem.
13:18:15 <fizzie> CakeProphet: It seems to be mostly due to the pidigits benchmark, which is basically "from gmpy import mpz" and then a reasonably simple loop.
13:18:35 <Jafet> I'm as proficient at programming as Enron had been at underhanded trading.
13:18:48 <elliott> :t readIntAtBase
13:18:48 <lambdabot> Not in scope: `readIntAtBase'
13:18:52 <elliott> ?hoogle readBase
13:18:52 <lambdabot> No results found
13:18:54 <elliott> ?hoogle read base
13:18:54 <lambdabot> No results found
13:18:54 <elliott> ?hoogle read
13:18:55 <lambdabot> Prelude read :: Read a => String -> a
13:18:55 <lambdabot> Text.Read read :: Read a => String -> a
13:18:55 <lambdabot> module Text.Read
13:18:55 <elliott> ?hoogle readInt
13:18:56 <lambdabot> Numeric readInt :: Num a => a -> (Char -> Bool) -> (Char -> Int) -> ReadS a
13:18:56 <lambdabot> Data.ByteString.Char8 readInt :: ByteString -> Maybe (Int, ByteString)
13:18:58 <lambdabot> Data.ByteString.Lazy.Char8 readInt :: ByteString -> Maybe (Int, ByteString)
13:20:20 <elliott> :t showIntAtBase
13:20:21 <lambdabot> forall a. (Integral a) => a -> (Int -> Char) -> a -> String -> String
13:21:20 <elliott> :t elemIndex
13:21:21 <lambdabot> forall a. (Eq a) => a -> [a] -> Maybe Int
13:22:45 <elliott> :t reads
13:22:46 <lambdabot> forall a. (Read a) => String -> [(a, String)]
13:23:44 <fizzie> > fst . head . readInt 42 ((<42) . ord) ord $ showIntAtBase 42 chr 12345678 ""
13:23:46 <lambdabot> 12345678
13:23:56 <fizzie> I see they like the generic.
13:24:47 <elliott> Quite.
13:24:55 <fizzie> > showIntAtBase 42 chr 12345678 ""
13:24:56 <lambdabot> "\ETX(\SUB\FS\RS"
13:24:59 <fizzie> Best encoding.
13:25:26 <fizzie> I shall petition we move from base-10 with decimal digits to base-42 in start-of-ascii in all primary schools.
13:25:44 <elliott> fizzie: Hey, what's a good bit prefix of SHA-256
13:26:04 <elliott> 160 bits is a bit overly long for my tastes, but I'd like to avoid collisions
13:26:08 <elliott> ("Gimme a perfect hash algo")
13:27:17 <Jafet> id
13:30:08 <elliott> Psht, you're all useless
13:30:40 <fizzie> Take all prime bits of SHA-512.
13:30:46 <fizzie> (That's 97 bits.)
13:30:58 <fizzie> It's more secure because they're prime.
13:31:09 <elliott> fizzie: I'm do not like you.
13:31:34 <Jafet> If you don't want collisions, use a block cipher that's larger than the range of the input
13:31:37 <Jafet> Block ciphers are bijective
13:31:50 <elliott> I want to AVOID collisions :P
13:31:52 <elliott> i.e. not CRC.
13:37:52 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
13:39:38 <nooga> ukuk
13:43:05 <elliott> gbgb
13:52:31 <CakeProphet> !wacro
13:52:34 <EgoBot> CFC
14:02:50 -!- DH____ has quit (Read error: Connection reset by peer).
14:10:03 -!- augur has quit (Remote host closed the connection).
14:12:00 -!- FireFly has joined.
14:13:19 -!- augur has joined.
14:19:27 -!- invariable has joined.
14:20:21 -!- variable has quit (Ping timeout: 252 seconds).
14:21:16 -!- SgeoN1 has quit (Quit: Bye).
14:24:54 -!- invariable has changed nick to variable.
14:25:57 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:29:54 <itidus21> why base 42?
14:31:23 <elliott> HHGTTG, one presumes.
14:32:08 -!- variable has changed nick to invariable.
14:36:44 -!- DH____ has joined.
14:39:25 <itidus21> yup
14:39:44 <itidus21> for all one, one presumes HHGTTG
14:40:42 <itidus21> what kind of nutter would talk about the number 42 without reference to HHGTTG.. lets (sic) check on wikipedia and wolframalpha to find out
14:44:20 <itidus21> The Gutenberg Bible is also known as the "42-line Bible", as the book contained 42 lines per page.
14:45:18 <itidus21> In Win32 API, ShellExecute always return 42 as its result.
14:47:31 <itidus21> Popular gadget magazine 'Stuff' did not produce an issue numbered 42, in honor of The Hitchhiker's Guide to the Galaxy, instead, the 41st issue was followed by the 43rd.
14:47:32 <fizzie> Also glibc memfrob.
14:48:13 <itidus21> fizzie: you're extremely geeky for knowing that unless you saw the wiki
14:48:14 -!- copumpkin has joined.
14:48:35 <ais523> I remembered about memfrob when it was mentioned
14:48:35 <elliott> says the guy in #esoteric
14:48:40 <ais523> but probably wouldn't have remembered unprompted
14:48:52 <ais523> there was that row over strfry, I remember
14:49:03 <fizzie> I've run across memfrob earlier, though not quite sure in which context. I did check the man page that it was 42 first, though.
14:49:23 <ais523> fizzie: its intended purpose is to prevent strings being visible to strings, isn't it?
14:53:39 <ais523> and 42 was picked because out of the numbers that do that well, it was the best reference
14:58:50 -!- nooga has quit (Ping timeout: 276 seconds).
15:02:40 -!- DH____ has quit (Read error: Connection reset by peer).
15:02:48 -!- DH____ has joined.
15:14:18 -!- nooga has joined.
15:18:39 -!- hagb4rd has quit (Ping timeout: 260 seconds).
15:20:46 -!- azaq23 has joined.
15:20:52 -!- DH____ has quit (Read error: Connection reset by peer).
15:21:08 -!- DH____ has joined.
15:21:12 <CakeProphet> @hoogle a -> Maybe b
15:21:13 <lambdabot> Prelude Just :: a -> Maybe a
15:21:13 <lambdabot> Data.Maybe Just :: a -> Maybe a
15:21:13 <lambdabot> Unsafe.Coerce unsafeCoerce :: a -> b
15:21:18 <CakeProphet> @hoogle a -> Maybe a
15:21:18 <lambdabot> Prelude Just :: a -> Maybe a
15:21:19 <lambdabot> Data.Maybe Just :: a -> Maybe a
15:21:19 <lambdabot> Control.Applicative pure :: Applicative f => a -> f a
15:21:21 <CakeProphet> erm
15:23:37 <Deewiant> Something wrong with those options? :-P
15:25:14 <elliott> Deewiant: So I was thinking
15:25:22 <elliott> We have functors, bifunctors, trifunctors
15:25:25 <elliott> What we need now is nilfunctors
15:25:30 <Deewiant> elliott: Oh also
15:25:33 <elliott> class Nilfunctor f where nilfmap :: f -> f
15:25:34 <Deewiant> If you're doing that tuple shiznit
15:25:44 <elliott> class (Nilfunctor f) => Nilpointed f where nilpure :: f
15:25:53 <elliott> class (Nilfunctor f) => Nilapply f where nilap :: f -> f -> f
15:26:19 <Deewiant> I'd like to note that evidently I don't want *ifunctors https://github.com/ekmett/bifunctors/issues/1
15:26:54 <elliott> Deewiant: I find ekmett's argument unconvincing since tuples don't even follow the laws of tuples in Haskell
15:27:14 <Deewiant> Howso
15:28:00 <elliott> (fst p, snd p) = p
15:28:24 <elliott> http://james-iry.blogspot.com/2011/05/why-eager-languages-dont-have-products.html#comment-201436254 plus surrounding post and original post and blah blah blah
15:29:07 <Phantom_Hoover> <elliott> (fst p, snd p) = p
15:29:08 <Deewiant> We do have (fst p, snd p) == p, no? :-P
15:29:14 <Phantom_Hoover> Is this something Haskell doesn't do?
15:29:21 <Deewiant> Oh, _|_ /= (_|_, _|_) duh
15:29:27 <Phantom_Hoover> Ah, yeah.
15:29:46 <Deewiant> But, um
15:30:05 <Deewiant> That might not be such a relevant "law of tuples" :-P
15:30:24 <elliott> It is
15:30:39 <elliott> Without that, it's not a proper product type
15:30:58 <elliott> My point is that we generally settle for the more useful over the more correct when _|_ is involved since we're fucked from the start anyway :P
15:33:24 <Phantom_Hoover> elliott, wait, what *should* that do, then?
15:33:57 <elliott> What should what do
15:35:23 <Phantom_Hoover> Well, um
15:35:48 <CakeProphet> Phantom_Hoover: Yeah well fuck you. _|_
15:35:51 <Phantom_Hoover> Under what circumstances does (_|_,_|_) /= _|_
15:36:05 <elliott> Under Haskell semantics?
15:36:10 <elliott> (_|_,_|_) `seq` x = x
15:36:13 <elliott> _|_ `seq` x = _|_
15:36:40 <Phantom_Hoover> Dammit seq.
15:37:07 <elliott> It would apply even without seq
15:37:11 <elliott> f (x,y) = True
15:37:14 <elliott> f (_|_,_|_) = True
15:37:17 <elliott> f _|_ = _|_
15:37:28 <elliott> You are asking for a strict language, basically
15:39:50 <CakeProphet> weeee partial orders
15:40:03 <CakeProphet> speaking of which
15:40:15 <CakeProphet> I wonder if I can find that article.
15:41:02 <CakeProphet> http://blog.ezyang.com/2010/12/hussling-haskell-types-into-hasse-diagrams/
15:41:15 <CakeProphet> was quite enlightening.
15:54:15 <CakeProphet> would have been better if it were written by Andrew Hussie
15:54:26 <elliott> Deewiant: edwardk is in #haskell now; I think you have to fight him to the death
15:54:27 <CakeProphet> then it would be "Hussie Hussling Haskell types into Hasse diagrams"
15:58:19 <nooga> (_|_) fat ass
15:59:21 <elliott> Deewiant: So 'bout them nilfunctors
16:03:48 -!- augur has quit (Remote host closed the connection).
16:05:51 <elliott> Deewiant: I guess if bifunctors aren't suitable, I could just implement my own in the package, thus at least trying to live up to the ridiculously overgeneric "combinators" name :P
16:06:40 <CakeProphet> combinator monad for combinator combinators.
16:07:24 <CakeProphet> :t (.) . (.) . (.)
16:07:25 <lambdabot> forall (f :: * -> *) (f1 :: * -> *) a b (f2 :: * -> *). (Functor f, Functor f1, Functor f2) => (a -> b) -> f (f1 (f2 a)) -> f (f1 (f2 b))
16:07:39 <CakeProphet> :t (.) . (.) . (.) . ($)
16:07:40 <lambdabot> forall (f :: * -> *) (f1 :: * -> *) a b (f2 :: * -> *). (Functor f, Functor f1, Functor f2) => (a -> b) -> f (f1 (f2 a)) -> f (f1 (f2 b))
16:07:48 <CakeProphet> :t ($) . (.) . (.) . (.)
16:07:49 <lambdabot> forall (f :: * -> *) (f1 :: * -> *) a b (f2 :: * -> *). (Functor f, Functor f1, Functor f2) => (a -> b) -> f (f1 (f2 a)) -> f (f1 (f2 b))
16:07:59 <CakeProphet> oh well
16:29:34 <elliott> Deewiant: You wouldn't happen to know what to do if an FFI library fails to load one of its .o because of an unknown symbol in the bytecode interpreter (i.e. GHCi, Template Haskell) but works just fine with the compiler?
16:29:44 <elliott> I think it might be related to building a shared version, and I know you do that, so :-P
16:30:55 -!- Ngevd has joined.
16:31:14 <Ngevd> Hello!
16:33:59 <Ngevd> ais523, spam
16:34:17 <elliott> <ais> I know, I see every change via RSS
16:34:37 <elliott> beat him to it, ha ha ha
16:34:46 <ais523> elliott: it doesn't matter, my userpage suggests reporting spam on IRC
16:34:49 <ais523> because it's faster than the RSS
16:34:50 <Ngevd> Wait, it's one I can fix
16:34:56 <elliott> Ngevd: too late
16:35:02 <elliott> ais523: darn :D
16:35:04 <ais523> however, I think elliott already reverted it
16:36:06 <Ngevd> My laptop's clock is drifting west
16:36:32 <Ngevd> Also, I now have a google plus account
16:37:28 <Ngevd> elliott, what time is it?
16:37:36 <elliott> @time
16:37:36 <lambdabot> Local time for elliott is Tue Sep 20 17:38:03
16:37:49 <elliott> Deewiant: Thanks
16:38:11 <Ngevd> Yep, my laptop is drifting
16:38:17 <Ngevd> It's two hours fast
16:38:37 <elliott> ntp
16:38:58 <Ngevd> It thinks Hexham's in... Israel? So I have to say I'm in the middle of the Atlantic to compensate
16:39:53 <elliott> Uh
16:39:53 <fizzie> There's a Hexham everywhere.
16:39:58 <elliott> What thinks that exactly
16:40:58 <fizzie> Hexham is where the heart is. <- An old Chinese proverb.
16:42:06 <elliott> Verily.
16:42:10 <elliott> Hey fizzie, fix my library issue.
16:45:18 <fizzie> Okay. *zap*. Should be fixed now.
16:45:29 <CakeProphet> @hoogle [a] -> Maybe a
16:45:29 <lambdabot> Data.Maybe listToMaybe :: [a] -> Maybe a
16:45:29 <lambdabot> Data.List find :: (a -> Bool) -> [a] -> Maybe a
16:45:29 <lambdabot> Prelude head :: [a] -> a
16:45:43 <elliott> fizzie: It's not fixed. Pls fix better.
16:46:12 <fizzie> *Doublezap*.
16:46:51 <elliott> fizzie: Pls fix with analytical logical skills not zapping
16:47:04 <fizzie> I don't know anything about your library issue.
16:47:07 <fizzie> But recompile it anyhow.
16:47:14 <fizzie> Forall it.
16:47:15 <elliott> fizzie: I did that.
16:48:36 -!- augur has joined.
16:58:36 <CakeProphet> elliott: ghost ride the whip.
16:59:17 <itidus21> chinese eh..
16:59:32 <itidus21> time to look into itidus21's ebook folder of doom
16:59:50 <CakeProphet> autoerotic fiction
16:59:56 <CakeProphet> about cars in love.
17:00:06 <itidus21> that was a movie
17:00:13 <itidus21> starring owen wilson
17:00:57 <Phantom_Hoover> Made by Pixar, noted autopornographers.
17:04:07 <itidus21> random ebook.. random passage
17:04:57 <itidus21> A man of the State of Cheng was one day gathering fuel, when he came across a startled deer, which he pursued and killed.
17:05:41 <itidus21> Fearing lest anyone should see him, he hastily concealed the carcass in a ditch and covered it with plaintain-leaves, rejoicing excessively at his good fortune.
17:06:19 <itidus21> By-and-by, he forgot the place where he had put it; and, thinking he must have been dreaming, he set off towards his home, humming over the affair on his way.
17:06:42 <itidus21> (agh.. this story is longer on the next page than i anticipiated)
17:07:11 -!- calamari has joined.
17:08:20 <Phantom_Hoover> fungot, comment.
17:08:20 <fungot> Phantom_Hoover: what the hell was that? my, that just made you disappear" and stuff?
17:08:59 <Phantom_Hoover> fungot, don't make me disappear!
17:08:59 <fungot> Phantom_Hoover: and in time, though prone to do this
17:09:10 <Phantom_Hoover> fungot, do *what*?
17:09:10 <fungot> Phantom_Hoover: like a very clear mirror
17:09:17 <Phantom_Hoover> fungot, yes?
17:09:17 <fungot> Phantom_Hoover: this is it, like an apple or a brain that is more useful card combinations. but ever since john started punching cards, you've been contemplating what could this birthday get any better in that quadrant.
17:09:58 <Phantom_Hoover> fungot, yes. Yes it could.
17:15:13 <elliott> fungot: q
17:15:14 <fungot> elliott: document modified: jervas. in that second all that had occurred, and wrapped with care to prevent further damage. they were
17:15:22 <elliott> ^style
17:15:23 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc jargon lovecraft* nethack pa sms speeches ss wp youtube
17:15:32 <elliott> I predict that was Phantom_Hoover.
17:15:43 <Phantom_Hoover> I predict a riot.
17:15:59 <elliott> That riot was Phantom_Hoover predicts i
17:16:00 <elliott> That riot was Phantom_Hoover predicts I.
17:16:02 <fizzie> I predict an edict.
17:16:36 <elliott> fizzie: https://github.com/phonohawk/HsOpenSSL/issues/3 Make this be fixed quickly, thanks
17:16:38 <elliott> Also Deewiant
17:16:39 <elliott> And Phantom_Hoover
17:16:45 <elliott> Let's pool our resources together here to fix it with power
17:16:45 <Phantom_Hoover> I predict a tciderpi.
17:18:39 <Phantom_Hoover> elliott, rename it to McHost.
17:19:54 <elliott> Phantom_Hoover: Rename what.
17:19:55 -!- Ngevd has quit (Ping timeout: 260 seconds).
17:20:09 <Phantom_Hoover> elliott, mchost.
17:20:13 <elliott> Why.
17:20:24 <Phantom_Hoover> To show respect to the Scottish community.
17:20:30 <elliott> Oh.
17:20:31 <elliott> No.
17:20:35 <Phantom_Hoover> RACIST
17:21:25 <elliott> Yes. I hate Scots.
17:21:38 <nooga> You do?
17:21:39 <Phantom_Hoover> yes
17:22:37 <Phantom_Hoover> I will call the Scottish Defence League, who are apparently an offshoot of the English Defence League and therefore fail at being Scottish.
17:23:25 <elliott> ahahahaha
17:23:58 <Phantom_Hoover> I mean, any organisation called the Scottish Defence League should be beating up English people, what other point would there be?
17:25:06 <elliott> `addquote <Phantom_Hoover> I mean, any organisation called the Scottish Defence League should be beating up English people, what other point would there be?
17:25:07 <HackEgo> 675) <Phantom_Hoover> I mean, any organisation called the Scottish Defence League should be beating up English people, what other point would there be?
17:25:09 <elliott> `quote
17:25:09 <elliott> `quote
17:25:10 <elliott> `quote
17:25:10 <elliott> `quote
17:25:10 <elliott> `quote
17:25:12 <HackEgo> 483) <oklopol> btw i saw my first prostitute about a week ago
17:25:12 <HackEgo> 59) <Warrigal> I think hamsters cannot be inert.
17:25:13 <HackEgo> 345) <catseye> wow, thinkgeek really makes me hate being alive
17:25:13 <HackEgo> 98) <Warrigal> Ah, vulva. <Warrigal> What is that, anyway?
17:25:14 <HackEgo> 32) <ais523> after all, what are DVD players for?
17:25:27 <elliott> huh, we have not got 345 for a while...
17:25:29 <elliott> or at least i do not recall it
17:25:32 <elliott> `pastelogs really makes me hate being alive
17:25:40 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.31406
17:25:47 <ais523> why do people thing 32 is so funny?
17:25:48 <Phantom_Hoover> `addquote <elliott> `pastelogs really makes me hate being alive
17:25:50 <HackEgo> 676) <elliott> `pastelogs really makes me hate being alive
17:25:57 <elliott> wat, it was never added?
17:26:00 <elliott> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.31406 ????????
17:26:02 <elliott> ais523: they do?
17:26:06 <ais523> I don't remember 345
17:26:10 <ais523> elliott: hmm, fair enough
17:26:13 <elliott> ais523: neither does clog/glogbot
17:26:16 <ais523> someone thought it was funny enough to add
17:26:17 <elliott> it seems to have never been added
17:26:23 <elliott> ais523: I think that was me :)
17:26:28 <ais523> perhaps Gregor edited the file directly in hg
17:26:30 <Phantom_Hoover> elliott, I distinctly recall him saying it, so `pastelogs or glogbot is broken.
17:26:42 <elliott> Oi Gregor
17:26:47 <elliott> Phantom_Hoover: That was from the time of clog I think
17:26:51 <elliott> So maybe clog was just down
17:28:09 -!- DH____ has quit (Read error: Connection reset by peer).
17:28:24 -!- DH____ has joined.
17:31:12 <Gregor> elliott: I periodically reboot the environment (whenever people start stuffing a bunch of garbage in there and .hg gets to be 100s of megs ... )
17:31:33 <elliott> Gregor: Um, I'm talking about `pastelogs missing log entries
17:31:38 <elliott> But it's probably just from a time when clog was down
17:31:38 <Gregor> Oh
17:31:45 <Gregor> Probably :P
17:31:46 <elliott> And then we were really lucky to never get it random-quoted until now
17:32:04 <Gregor> I spose I could look through my own logs, but I'm not going to :P
17:32:35 <elliott> So lame.
17:40:41 <elliott> ais523: hmm, it's interesting that modifying history is a part of the darcs workflow
17:40:58 <ais523> which history?
17:41:01 <ais523> when patches were added?
17:41:05 <ais523> I don't think that's modified, so much as not tracked
17:41:06 <elliott> amend-record
17:41:12 <ais523> ah, right
17:41:33 <ais523> I suppose that's a case of copyediting a history book before it's published
17:41:59 <elliott> indeed; I'm having changed opinions about modifying history recently
17:42:06 <elliott> eliminating merge commits and the like is ridiculous
17:42:40 <elliott> but turning five terrible unatomic out-of-order commits with later commits bugfixing earlier ones into a sequence of reasonable ones before pushing sounds perfectly reasonable
17:43:06 <elliott> I mean, it's not really modifying history, because you could have just not committed them in the first place
17:43:12 <elliott> and reordered before committing
17:45:08 <elliott> ais523: what I think might be interesting, is removing the arbitrary restriction there of "before you push"
17:45:19 -!- augur has quit (Remote host closed the connection).
17:45:31 <elliott> the restriction is there essentially because it's OK for you to change your own idea of history, since it's basically a scrap working space, but you can't change what other people see after the fact
17:45:48 <ais523> indeed
17:45:52 <elliott> why shouldn't you be able to merge a trivial typofix into the original commit after an intervening pushed commit?
17:45:55 <elliott> I think what you need is patch-patches
17:45:56 <ais523> in sg, the modification would be by adding a correction patch
17:45:58 <elliott> patches that modify patches
17:46:10 <ais523> and I thought of that already, it'd just be a patchset {original patch, other changes}
17:46:13 <elliott> so you can still destructively edit history locally, because it's scrap space
17:46:14 <ais523> which contained the new metadata
17:46:18 <elliott> and after the fact, you can nondestructively edit it
17:46:28 <elliott> ais523: you need to be able to remove changes too
17:46:38 <elliott> ais523: I think it's more elegant if you define a proper change type for each change type
17:46:38 <ais523> that's just the same as darcs rollback
17:46:46 <elliott> rather than hacking it in as a special case
17:47:00 <elliott> there's changetypes for files (lists of lines), directories (sets of directory entries), why not for changes (a recursive ADT)?
17:47:40 <elliott> hmm, that's kind of like a zipper
17:47:49 <elliott> in that you can turn an arbitrarily-nested change into a list of sequential changes (actions) that create it
17:48:03 <elliott> just like you can do the same with a directory tree
17:49:04 <elliott> ais523: oh dear, this provides all the tools to retroactively modify a change from the beginning of time
17:49:14 * elliott throws the idea into the Feather pile
17:49:22 <ais523> it'd conflict if that did anything bad
17:49:32 <elliott> So arbitrary :P
17:49:53 <ais523> not arbitrary, that's how I defined "anything bad" just now
17:50:05 <elliott> PAH
17:52:01 <elliott> ais523: incidentally, what's the result of applying the change EOF to a file?
17:52:17 <ais523> what do you mean by "the change EOF"
17:52:17 <elliott> (trick question)
17:52:23 <elliott> ais523: changes are defined recursively
17:52:30 <elliott> there's a start of file and end of file change
17:52:31 <elliott> for each file
17:52:34 <elliott> and you can insert between them, etc.
17:52:45 <coppro> everything should be defined recursively
17:53:00 <ais523> elliott: oh right, but the SOF/EOF "changes" only exist for their names
17:53:04 <ais523> so they can't be applied to anything
17:54:02 <elliott> ais523: I suggest that instead, "insert LINE between A and B" doesn't have A and B be changerefs
17:54:08 <elliott> but SOF | changeref and EOF | changeref
17:54:14 <elliott> there's no reason for them to be actual changes
17:54:29 <elliott> they're just special values for ranges
17:54:30 <ais523> but then, insert LINE between SOF and EOF doesn't identify the file at all
17:54:42 <elliott> but SOF dirchangeref | changeref and EOF dirchangeref | changeref
17:54:43 <ais523> I'm OK with changeref | SOF of changeref-representing-file
17:54:49 <elliott> you knew what I meant, I was using the simplified one-file model
17:54:49 <ais523> yep, agreed
17:54:52 <elliott> :P
17:55:09 <elliott> that's also nice because you can't "delete EOF" or "insert X between EOF and SOF" or anything ridiculous like that
17:55:51 <elliott> incidentally, git is a rather high-maintenance VCS...
17:56:03 <elliott> compared to darcs where you generally just record, record, record, and then cry if you get a conflict
17:56:15 <CakeProphet> perl is the best VCS, also compiler, and minecraft proxy.
17:56:17 <CakeProphet> thing
17:56:21 <elliott> in git I'm constantly rebasing and amending and writing commit messages
17:56:23 <elliott> :P
17:56:33 <CakeProphet> those blasted commit messages.
17:56:39 <elliott> someone really needs to rewrite "darcs record" using git as a backend
17:56:40 <CakeProphet> -m "AAAAAAH DON'T CARE"
17:56:42 <elliott> git add -p is not very nice
17:57:49 <elliott> ais523: incidentally, do you have any ideas wrt binary files in sg?
17:57:59 <elliott> I'm not sure the recursive change model really works for binary files
17:58:10 <elliott> you can't automatically merge any two changes to a binary file at all
17:59:12 <ais523> well, sg should ideally understand the format of the file, but for application/octet-stream (i.e. when it doesn't), it should be "replace entire file contents HASH with VALUE", I think
17:59:48 <elliott> ais523: ideally, but in practice "list of lines" and "binary blob" seem to be the most useful solution
17:59:55 <elliott> until someone writes a wonderful language-aware thing
18:00:08 <ais523> yep, I'd love it to be diffing on ASTs eventually
18:00:09 <elliott> ais523: I think it should probably use an existing binary diff algorithm
18:00:15 -!- augur has joined.
18:00:16 <elliott> with a named change to base it off of
18:00:20 <elliott> that's just an optimisation, naturally
18:00:22 <ais523> elliott: just for optimisation?
18:00:23 <elliott> the semantics are exactly the same
18:00:24 <ais523> I'm fine with that
18:00:52 <elliott> ais523: one question is how to distinguish them; the VCS has to know which files are binary and which are text, and it would be nice if it didn't just guess based on what the file looks like right now
18:01:28 <elliott> I suggest that as well as "create directory named X in Y" and "create file named X in Y", there's "create binary file named X in Y"
18:01:45 <elliott> and sg guesses for a new file based on its contents
18:01:47 <elliott> but you can override that decision
18:02:04 <elliott> and if you want a binary file to suddenly be a text file for some reason, you just delete it and recreate it with the same contents, no overlap
18:02:04 <ais523> yep, sounds about right
18:02:08 <elliott> since the changes are incompatible
18:02:14 <ais523> what about svn:eol-type?
18:02:20 <ais523> (as in, will sg have anything corresponding to that?)
18:02:44 <elliott> ais523: hmm, what does that do, again?
18:02:53 <elliott> obviously for text files, sg should convert from/to platform newlines
18:02:59 <elliott> it'll have to do that anyway, to make sense of anything
18:03:39 <ais523> I don't know what it does
18:03:49 <elliott> then how will my answer help you? :-P
18:04:11 <elliott> "svn:eol-style
18:04:11 <elliott> Makes the client convert end-of-line characters in text files. Used when the working copy is needed with a specific EOL style. "native" is commonly used, so that EOLs match the user's OS EOL style. Repositories may require this property on all files to prevent inconsistent line endings, which can cause a problem in itself."
18:04:20 <elliott> yeah, doesn't apply to sg
18:04:27 <elliott> I think it's used to hack up binary mode files in svn
18:04:31 <ais523> yep, seems about right
18:06:17 <elliott> ais523: speaking of sg, I ran into the Debian renaming ack to ack-grep thing you mentioned today
18:06:23 <elliott> (I was trying to install a nicer diff tool)
18:06:42 <ais523> I just have an alias in my .bashrc
18:06:55 <elliott> disappointed in your lack of reaction to second line
18:07:02 <ais523> oh, diff?
18:07:07 <ais523> hmm
18:07:10 <elliott> I had "I never said I /succeeded/" all lined up and all, too
18:07:18 <ais523> haha
18:07:26 <elliott> I simply forgot that ack was a super-duper highlighting auto-excluding grepper, rather than a super-duper highlighting auto-excluding differ
18:07:34 <ais523> I was just trying to work out how to diff using a grep-alike
18:07:44 <ais523> also, ack really isn't a grepper, it's a Perl regex matcher
18:07:59 <ais523> it doesn't do any of the stuff I expect greps to do internally, like optimising fixed-string matches
18:08:12 <elliott> pcregrep ends with grep
18:08:25 <elliott> but that's a shame
18:08:29 <elliott> Perl regexps are a shame :(
18:08:43 <ais523> pcregrep I like because at least it's honest
18:08:50 <elliott> howso
18:08:56 <ais523> it's a grep-alike made using PCRE
18:09:06 <ais523> you can't get much more descriptive than that
18:09:08 <elliott> heh
18:09:12 <ais523> whereas ack is a grep-alike made using Perl
18:09:43 <elliott> hmm, I wonder how efficient it would be to do regexp matching by converting the regexp to a CFG, then applying derivative-based parsing
18:10:08 <elliott> still worst-case exponential as with backtracking regexps, but it does far better than that in basically all practice, unlike backtracking regexps
18:10:31 <elliott> actually, you can't convert backrefs to CFGs can you in general?
18:10:33 <elliott> maybe I'm wrong
18:10:42 <ais523> I'm not sure
18:11:01 <elliott> sounds wrong, backrefs are not very context-free after all
18:11:15 <ais523> ah, right
18:11:18 <ais523> I thought you said CSGs
18:11:24 <ais523> and couldn't work it out mentally
18:11:32 <ais523> CFGs = "normal" regexps, right?
18:11:45 <elliott> CFG = yacc input, but without all the restrictions that yacc rejects
18:11:48 <ais523> and they can be done in linear time by compiling them into nondeterministic FSMs
18:11:53 <elliott> no
18:11:56 <ais523> ah, right, I see
18:12:17 <elliott> AFAIK derivative-based parsing only works for (any) CFG, not CSGs... well, maybe it can be generalised, but I don't know that it has been done
18:12:27 -!- Vorpal has joined.
18:13:17 <Vorpal> I now have my driving license :D
18:13:34 <elliott> you and ten billion other people in the world
18:13:36 <elliott> `? finlan
18:13:37 <elliott> `? finland
18:13:37 <HackEgo> finlan? ¯\(°_o)/¯
18:13:38 <HackEgo> Finland is a European country. There are two people in Finland, and at least five of them are in this channel. Corun drives the bus.
18:14:05 <elliott> ais523: haha, darcs' suggested solution for managing symlinks is amazing
18:14:08 <elliott> create a script
18:14:10 <elliott> ln -s foo/quux bar
18:14:10 <elliott> ln -s foo/wibble wibble2
18:14:11 <ais523> hmm, I don't think our learndb is all that sensible
18:14:12 <elliott> then add it as a posthook
18:14:19 <ais523> elliott: that's beautifully ridiculous
18:14:31 <elliott> ais523: now if only they took it to its conclusion, and used it to generate the entire tree
18:14:32 <ais523> darcs' treatment of the u+x bit is ridiculous enough
18:14:39 <elliott> s/conclusion/(il)logical conclusion/
18:14:43 <elliott> also, our learndb isn't meant to be sensible
18:14:44 <elliott> and how does it treat it?
18:15:22 -!- nooga has quit (Ping timeout: 240 seconds).
18:16:15 <ais523> elliott: it doesn't
18:16:18 <ais523> at all
18:16:24 <elliott> heh
18:16:28 <elliott> what about the other +x bits?
18:17:43 <ais523> not those either, but that's less bad
18:18:00 <elliott> what's u again?
18:18:06 <ais523> owner
18:18:10 <elliott> thought so
18:18:17 <elliott> you should really use octal permissions :)
18:21:02 <ais523> nah, we should clearly use ACLs
18:21:20 <ais523> although, I think semantically, we should only track executable/readable/writable
18:21:39 <ais523> I'm not sure whether to track to-world separately from to-user; we shouldn't track to-group
18:22:47 <CakeProphet> I am the best at the world.
18:22:54 <CakeProphet> I win the game.
18:22:58 <CakeProphet> I fight snakes
18:24:09 <elliott> ais523: I was just going to go with tracking the three-digit octal for sg
18:24:47 <elliott> ais523: I guess tracking group permissions is a bit silly, but what if you want to version /etc?
18:24:51 <elliott> or your dotfiles?
18:25:26 <ais523> elliott: hmm, it depends on whether sg's meant to be used for one user, or across systems
18:25:34 <elliott> why not both?
18:25:45 <ais523> arguably, it should track all the permissions, together with user and group authorship, but only restore them if on the same system
18:25:50 <ais523> or same user on same system
18:25:57 <elliott> gross :P
18:26:29 <elliott> ais523: I'm tempted to say that if we don't track group permissions, we shouldn't track permissions at all
18:26:43 <elliott> but +x/-x is really necessary to track, so that's a bad solution
18:26:49 <elliott> so we should track group permissions ;-)
18:27:19 <ais523> but group permissions aren't even meaningful on, say, Windows (which uses ACLs instead), or @ (which uses capabilities), or FeatherOS (which doesn't implement them because you really expect me to write that too?)
18:27:51 <elliott> there's no way anything we do will work on @ well at all
18:27:55 <elliott> so there's no point considering it
18:28:07 <elliott> with Windows, I think we should just emulate POSIX semantics as much as we can
18:28:10 <elliott> we want symlinks, after all
18:28:26 <elliott> so I think we should be modelling some sideset of a POSIX filesystem
18:28:47 -!- boily has quit (Ping timeout: 276 seconds).
18:28:49 <elliott> not all the stupid ACLs and xattrs and blah blah blah, so a subset, but maybe a slightly different structure will emerge on a technicality, so superset, so sideset :P
18:29:06 <ais523> Windows has symlinks-to-executables (.lnk), and hardlinks (junctions)
18:29:15 <elliott> yep
18:29:22 <elliott> the user will have to configure sg to do as they wish
18:29:22 <ais523> Linux has SElinux permissions
18:29:31 <elliott> what is your point here?
18:30:00 <ais523> that going on the UNIX model just because it's the UNIX model seems a surprising thing to do
18:30:21 <elliott> we agreed to use POSIX semantics ages ago, you know
18:30:25 <ais523> fair enough
18:30:29 <ais523> I'm just trying to remember why
18:30:36 <elliott> are we trying to implement sg in a way that's useful to us and others, or The Perfect Scapegoat?
18:30:49 -!- nooga has joined.
18:30:51 <pikhq> Windows post-Vista also has straight symlinks.
18:30:59 <CakeProphet> practical = good
18:30:59 <elliott> I want to version symlinks, I want to version executable scripts, and I'm likely to want to version /etc and dotfiles too
18:31:26 <elliott> why should I have to miss out on that just because Windows doesn't commonly do it?
18:31:29 <elliott> there's tons of solutions to that
18:32:07 <CakeProphet> argument against portability: some operating systems suck.
18:32:16 <elliott> (I don't think we should track setuid/setgid or the like because those are attributes of system executables, not user-edited files)
18:32:42 <elliott> (I suppose you could make an argument for tracking the weird setgid directory behaviour, but (a) it's awful and (b) it's more of a system setting than an attribute of the directory anyway)
18:34:13 <elliott> ais523: FWIW, I'm willing to compromise down to just tracking rwx on user/group
18:34:15 <elliott> erm
18:34:16 <elliott> ais523: FWIW, I'm willing to compromise down to just tracking rwx on user/world
18:34:20 <CakeProphet> you should track those weird metadata attribute things Window has.
18:34:22 <elliott> But I'm not sure it's the best choice
18:34:31 <ais523> what about sticky bit on directories?
18:34:37 <CakeProphet> actually I don't think there's anyway to expose them besides knowing the key name.
18:34:40 <elliott> CakeProphet: ais523: let's track Mac OS Classic resource forks
18:34:43 <elliott> ais523: <elliott> (I suppose you could make an argument for tracking the weird setgid directory behaviour, but (a) it's awful and (b) it's more of a system setting than an attribute of the directory anyway)
18:34:49 <elliott> let's just pretend it doesn't exist
18:34:51 <elliott> isn't it Linux-specific, too?
18:34:52 <ais523> setgid on directories != sticky on directories
18:34:58 <ais523> they're two entirely different behaviours
18:35:04 <pikhq> elliott: Resource forks aren't Mac OS Classic-specific.
18:35:08 <elliott> ais523: er, hmm
18:35:09 <pikhq> NTFS also has resource forks.
18:35:09 <ais523> and both exist on more than UNIX, although one's standard and one's a subset of Unices
18:35:13 <elliott> I think I meant sticky
18:35:29 <elliott> pikhq: yes, but I don't want to track /those/ lame things
18:35:40 <CakeProphet> man why does Lifehacker keep talking about Windows 8
18:35:49 <elliott> man why do you keep reading Lifehacker
18:35:53 <elliott> or anything gawker puts out at all
18:35:59 <ais523> +dt: files in the directory cannot be renamed/deleted by non-owners; +d,g+s: files in the directory are created with the same group as the directory, not the same group as their owner
18:36:11 <elliott> ais523: yeah, my opinion is: gross
18:36:30 <elliott> ais523: let's model an /idealised/ POSIX filesystem :P
18:37:00 * ais523 vaguely wonders how much TWENTY FIVE, FIVE MILLION is
18:37:06 <elliott> wat
18:37:12 <ais523> it was written in figures, too, as 25.5 000 000
18:37:16 <ais523> (spam I received)
18:37:27 <elliott> that's a lot of... units
18:37:38 <ais523> I think the 419 spammers are offering a nonexistent number of dollars
18:37:45 <ais523> in the hope that people assume it's a lot
18:37:46 <elliott> that's true for all of them
18:38:44 <ais523> no, I mean, normally it's the dollars that don't exist
18:38:59 <ais523> in this case, it's not just the dollars that don't exist, but the number of dollars that were claimed to exist isn't even a real number
18:39:01 <elliott> heh
18:39:07 -!- ive has joined.
18:39:19 <elliott> ais523: maybe they're offering 25 + 5000000i dollars
18:39:21 <elliott> that's not real, after al
18:39:21 <elliott> l
18:39:38 <CakeProphet> wow that's $25
18:39:40 <CakeProphet> awesome
18:39:43 <CakeProphet> I could use that.
18:39:48 <ais523> maybe $25, 50¢
18:39:56 <elliott> fsvo $25
18:40:00 <CakeProphet> I could buy like, maybe 20 packs of sour punch straws
18:40:03 <ais523> or £25, 5000000¢
18:40:05 <CakeProphet> at absolutely no cost to me.
18:40:53 <CakeProphet> cents are easily represented by a decimal number though
18:40:57 <CakeProphet> $25.50
18:41:12 <CakeProphet> I think imaginary dollars are just dollars that are offered but don't exist.
18:41:17 <CakeProphet> >_>
18:41:17 -!- SgeoN1 has joined.
18:41:19 <ais523> well, 25.5 000 000 (TWENTY FIVE, FIVE MILLION) is not a real number!
18:41:29 <ais523> hmm, if only zzo38 were here
18:41:38 <CakeProphet> sure it is.
18:41:49 <CakeProphet> in someone's number system
18:41:53 <CakeProphet> I'm sure it's meaningful.
18:41:59 <elliott> those aren't reals
18:42:29 <CakeProphet> well yeah I'm looking at pixels.
18:43:02 <CakeProphet> or rather
18:43:10 <CakeProphet> your mom's tits aren't reals.
18:43:13 <CakeProphet> BAM
18:43:34 <CakeProphet> I feel that, perhaps
18:43:39 <CakeProphet> as the day progresses
18:43:51 <CakeProphet> I will just progressively make less sense.
18:43:55 -!- boily has joined.
18:45:08 <elliott> i assure you that is impossible
18:45:22 <SgeoN1> (cherry-pick '(cake-prophet)) (load "cakeprophet.l") (/cherry-pick)
18:45:48 <ais523> SgeoN1: gah, you can't mix Lisp and XML like that, it's a horror
18:45:56 <ais523> quick, someone make an esolang with syntax that works like that
18:46:02 <ais523> I think it'd manage to offend absolutely everyone
18:46:13 <elliott> ais523: SgeoN1 actually implemented that thing
18:46:15 <elliott> it was awful
18:46:19 <elliott> (cherry-pick)
18:46:32 <SgeoN1> >.> I actually wrote functions named that
18:46:43 -!- Ngevd has joined.
18:46:49 <ais523> elliott: what do you think of replacement-for-B, btw? it seems to be gradually starting
18:46:54 <ais523> and I think I've pulled a Wooble already
18:46:59 <elliott> ais523: it looks boring
18:47:06 <elliott> like most of latter-day B
18:47:12 <ais523> yep, indeed
18:47:13 <Ngevd> Replacement-for-B?
18:47:17 <ais523> hopefully it'll sort itself out in a while, though
18:47:17 <elliott> Ngevd: nomic
18:47:20 <ais523> Ngevd: B is a nomic
18:47:22 <CakeProphet> so if I write
18:47:27 <Ngevd> Okay
18:47:32 <CakeProphet> sum ls / length ls
18:47:33 <ais523> which most people seem to think is dead or at least permanently fossilised
18:47:37 <elliott> ais523: I'd probably unsubscribed from the nomic lists by now if I weren't a packrat
18:47:43 <CakeProphet> does the compiler reduce that to one recursive traversal of ls?
18:47:45 <elliott> I still have a Nomicron label right after B
18:47:52 -!- boily has quit (Client Quit).
18:47:53 <elliott> CakeProphet: maybe, if there's a rule for it.
18:47:55 <elliott> not in general though.
18:48:05 <CakeProphet> that would be a nice feature.
18:48:06 <CakeProphet> if possible.
18:48:11 <elliott> that's what rules _are_.
18:48:33 <SgeoN1> elliott: I don't think I saw a better way to set it up. Should make the end-user API more convenient though, and leave these as locally used things
18:48:35 <elliott> try it and peek at the core
18:49:07 <CakeProphet> the rules are... nice features? I'm confused. I was saying that being able to reduce such things in general would be a nice feature.
18:49:19 <CakeProphet> maybe not with any data structures but with lists as a special case perhaps.
18:49:24 <elliott> that is what rules are for.
18:49:24 <CakeProphet> unless it could be done with any structure.
18:49:26 <elliott> that is what rules are for.
18:49:40 <elliott> the only question is whether there's a rule that kicks in for that case
18:49:43 <CakeProphet> the rules are for in general reducing multiple traversals into one? no they're not.
18:49:53 <elliott> do you know what rules are
18:49:55 <CakeProphet> yes.
18:49:58 <elliott> wrong
18:50:03 <ais523> golfing challenge: write the smallest possible lambda calculus self-compile-and-runner (i.e. interpreter with eigenratio 1, cheating is allowed)
18:50:15 <CakeProphet> you're talking about something like {- RULE ... -} right?
18:50:23 <elliott> ais523: \x.x
18:50:37 <ais523> elliott: input is a church list of church numerals
18:50:41 <ais523> not a function
18:50:46 <elliott> CakeProphet: yes. and if you don't think its whole purpose is to allow seemingly inefficient multiple traversals to compile down to low-level loops, you are wrong.
18:50:57 <elliott> ais523: why mix parsing into the equation?
18:50:58 <CakeProphet> elliott: you're completely ignoring what I'm talking about.
18:51:00 <CakeProphet> I am saying
18:51:06 <SgeoN1> What was so horrible about cherry-pick?
18:51:09 <elliott> ais523: use the Church or Scott-Mogensen encoding of the de Bruijn LC syntax
18:51:10 <ais523> elliott: because that's the whole point of the exercise
18:51:11 <CakeProphet> or rather asking, or wondering
18:51:16 <CakeProphet> if it can be done IN GENERAL
18:51:16 <CakeProphet> as in
18:51:19 <elliott> ais523: why?
18:51:19 <CakeProphet> not with specific rules.
18:51:21 <elliott> that's the boring aprt
18:51:22 <elliott> part
18:51:41 <ais523> well, I'm OK with supplying a separate parser into some other Church encoding, I guess
18:51:49 <ais523> as long as it's expressive enough to be able to "unparse" it again
18:51:58 <elliott> ais523: including parens?
18:52:01 <ais523> I don't care about things like variable names
18:52:11 <ais523> it doesn't need to unparse into the same string of characters, just one with the same meaning
18:52:12 <elliott> CakeProphet: stream fusion is meant to do a lot of it automatically. but it's not ready for primetime
18:52:12 <Ngevd> Hang on.
18:52:17 <elliott> anyway you're basically asking for a ssc
18:52:21 <ais523> ssc = ?
18:52:22 <Ngevd> I'm in a game of Nomic
18:52:23 <elliott> ais523: well that's easy then, I mean representation-wise
18:52:26 <elliott> ais523: sufficiently smart compiler
18:52:35 <elliott> let me figure out the church encoding of de bruijn lc
18:52:37 <ais523> elliott: yep, but golfed
18:53:01 <CakeProphet> hmmm, also here's an interesting point I hadn't considered.
18:53:07 <CakeProphet> would there really be much of an efficiency gain?
18:53:36 <CakeProphet> let's say you have two loops: for(ls){blah} for(ls){blah2}
18:53:43 <CakeProphet> and now you've combined them into for(ls) {blah;blah2}
18:53:52 <CakeProphet> ....isn't that pretty much the same in terms of number of instructions?
18:53:55 <elliott> ais523: well, there's already (λ11)(λ(λλλ1(λλ1(λ3(6(λ2(6(λλ3(λ123)))(7(λ7(λ31(21))))))(1(5(λ12))(λ7(λ7(λ2(14)))3)))))(11))(λ1((λ11)(λ11)))
18:53:57 <ais523> elliott: I suppose it doesn't /really/ need to be golfed, but it'll be a pain to write otherwise
18:54:00 <elliott> ais523: http://en.wikipedia.org/wiki/Binary_lambda_calculus#Lambda_encoding
18:54:17 <CakeProphet> I mean, there's a meager difference I think.
18:54:35 <ais523> ah, beautiful, that might be just what I need
18:54:40 <elliott> CakeProphet: half the branches
18:54:43 <ais523> next step: do the same, but in continuation passing style
18:54:47 <elliott> branches are much more expensive than arithmetic or whatever
18:54:49 <ais523> I think I'll probably have to work on that on my own
18:54:59 <CakeProphet> elliott: ah right.
18:55:08 <elliott> ais523: well, it's quite a trivial problem to write an LC self-interpreter; you obviously want to work with de bruijn
18:55:18 <elliott> since it makes the bound variable structure really simple, just a linked list
18:55:26 <elliott> and you basically only have three cases
18:55:27 <ais523> I'd figured out working with that encoding already
18:55:27 <elliott> I mean it's just
18:55:32 <ais523> by myself
18:55:36 <elliott> data LC = Var Nat | Lam LC | App LC LC
18:55:36 <ais523> although I didn't know what it was called
18:55:42 <CakeProphet> elliott: and the savings are even greater for larger numbers of loops.
18:55:43 <ais523> (I'd forgotten, I knew once)
18:55:48 <elliott> ais523: are you sure? de bruijn is probaly inside out to what you think
18:55:52 <elliott> \\zero is const id
18:55:54 <elliott> \\one is const
18:55:59 <elliott> the innermost lambda's variable is 0
18:56:01 <CakeProphet> 3 loops into one would be a third less branches, and so on.
18:56:02 <elliott> second-innermost is one
18:56:02 <elliott> etc.
18:56:07 <ais523> no, that's the way round I meant
18:56:09 <elliott> a lot of people do it the other way around when inventing their own
18:56:10 <elliott> alright then
18:56:12 <ais523> I know that the other way round exists too
18:56:20 <ais523> but then, say, S and K are different depending on how nested they are
18:56:28 <elliott> ais523: btw, if you encode the lambda terms in Church encoding, rather than just simple constructor analysis, I think it simplifies things even more
18:56:31 <elliott> because you get a fold for free
18:56:48 <elliott> hmm... you want to make it a monadic fold, really :)
18:56:50 <elliott> so you can use the continuation monad
18:57:01 <elliott> maybe you need to invent your own encoding
18:57:10 <elliott> the CPS version of Church encoding
18:57:15 <CakeProphet> LC is awesome.
18:57:16 <CakeProphet> best thing.
18:57:22 <elliott> (I bet oerjan will be able to help with that ;D)
18:57:53 <CakeProphet> data? fuck that let's just represent it as code.
18:58:14 <CakeProphet> you know because there's totally a distinction between those two things.
18:58:23 <Phantom_Hoover> You're wrong in a subtle but total way, but I'll leave it to elliott to despair.
18:58:36 <elliott> hi
18:59:19 <CakeProphet> Phantom_Hoover: I sort of assume this most of the time I say things here.
18:59:40 <elliott> ais523: oh, I think I have something
18:59:46 <elliott> ais523: here's the first few naturals in Hird encoding
18:59:46 <elliott> \f x k. k x
18:59:46 <elliott> \f x k. f x k
18:59:46 <elliott> \f x k. f x (\x'. f x' k)
18:59:46 <elliott> \f x k. f x (\x'. f x' (\x''. f x'' k))
18:59:51 <Phantom_Hoover> CakeProphet, this time it's that you approached the LC thinking of it as a programming language.
19:00:01 <CakeProphet> is that uh... what I did?
19:00:17 <elliott> ais523: successor is
19:00:18 <CakeProphet> also is it wrong to do that?
19:00:21 <elliott> ais523: succ = \n f x k. n f x (\x'. f x' k)
19:00:24 <CakeProphet> does it make what I say wrong?
19:00:37 <elliott> ais523: (succ itself returns in usual style, not CPS; but the value it returns is a Hird numeral and therefore CPS in operation)
19:00:41 <Phantom_Hoover> CakeProphet, yes, yes and yes.
19:00:42 <CakeProphet> that LC represents data as code. I can't get away with saying that? it's not in any way accurate?
19:00:52 <CakeProphet> code being interpreted quite loosely.
19:00:55 <ais523> elliott: CPS Church numerals? ingenious
19:01:02 <elliott> true = \a b k. k a
19:01:02 <elliott> false = \a b k. k b
19:01:09 <elliott> this translation seems quite obvious, you just CPS-transform the Church encoding
19:01:15 <elliott> ais523: well, Church-encoding can be applied to any ADT
19:01:39 <elliott> ais523: the reason to use Church-encoding rather than just simple "give me a list of functions, one per constructor, and I'll call the right one with all my fields" is that it gives you a fold over the data type for free
19:01:46 <elliott> because it represents types as their fold functions
19:01:48 <elliott> ais523: but you need CPS
19:01:49 <ais523> I'm not too good at CPS; I understand it, but it's not intuitive for me
19:01:51 <elliott> ais523: so you need a CPS fold
19:01:55 <Phantom_Hoover> CakeProphet, the LC predates the existence of programming, let alone code.
19:01:59 <elliott> → Hird encoding!
19:02:01 <ais523> it takes thought
19:02:01 <CakeProphet> Phantom_Hoover: lambda calculus is a language. You can specify a grammar for it. It computes things. What is a programming language?
19:02:03 <ais523> yep, indeed
19:02:11 <ais523> elliott: this is Feather-related, btw
19:02:14 <elliott> I guessed
19:02:15 <ais523> if you hadn't already guessed
19:02:16 <elliott> ais523: now to try and figure out the Hird-encoding of the de Bruijn LC
19:02:21 <elliott> shouldn't be too hard
19:02:29 <Phantom_Hoover> CakeProphet, in which case, why would you ever expect a distinction between code and data?
19:03:03 <CakeProphet> Phantom_Hoover: well, in the past I would consider them as distinct things because they seem to intuitively be completely different things. Also in most languages there is a conceptual distinction.
19:03:08 <CakeProphet> in lambda calculus there isn't.
19:03:33 <CakeProphet> which is what makes it awesome, as I said.
19:04:25 <Phantom_Hoover> CakeProphet, well, I read it more as mocking the lack of a distinction as if the existence of one was a fundamental thing.
19:04:36 <Phantom_Hoover> I apologise if that was not what you meant.
19:04:39 <elliott> ais523: Feather is strictly-evaluated, right?
19:04:45 <ais523> yes
19:04:46 <CakeProphet> so I do expect a distinction in things that compute other things (I won't say programming language because it is subtley wrong) because it's usually made in some way.
19:04:48 <elliott> ais523: and f is evaluated before x in (f x)?
19:04:54 <ais523> yes
19:04:56 <CakeProphet> Phantom_Hoover: oh... I see how you might have done that.
19:05:01 <ais523> I had to think about that one, but it is
19:05:24 <CakeProphet> Phantom_Hoover: no there isn't a difference. I wasn't saying it was bad.
19:05:59 <CakeProphet> \a.\b.a is probably the best true ever.
19:06:49 <CakeProphet> what better way to encode a boolean than as the computation it's intended to perform.
19:07:59 <elliott> ais523: http://sprunge.us/hiac
19:08:14 <ais523> thanks
19:08:22 * ais523 saves local copy
19:08:25 <elliott> ais523: the "n" used in Var should be a hird numeral too
19:08:31 <elliott> just for consistency, you should encode all data like that :P
19:08:32 -!- pikhq_ has joined.
19:08:33 -!- pikhq has quit (Ping timeout: 252 seconds).
19:08:37 <elliott> save those lines with it, that's SO IMPORTANT
19:08:43 <elliott> (it's not actually so important, but let's pretend?? that it is?)
19:08:53 <elliott> maybe it is so important, I guess you could end up losing your evaluation order if you don't do everything CPS
19:08:56 -!- Nisstyre has quit (Ping timeout: 260 seconds).
19:08:56 <elliott> and besides it's cleaner that way
19:08:59 <ais523> well, data has to become something when unboxed
19:09:08 <elliott> since you can thread complex CPS computations through an arbitrary data type
19:09:09 <elliott> 's fold
19:09:12 <ais523> and for sanity reasons, changing what it unboxes into retroactively is possibly a bad idea
19:09:21 * CakeProphet feels that people on this channel sometimes just assume he doesn't know anything.
19:09:24 <elliott> ais523: how's that relevant to which natural representation you use?
19:09:25 <ais523> and is probably only possible by retroactively replacing the interp
19:09:35 <ais523> elliott: well, the idea is say I have an integer, say 6
19:09:36 <ais523> that's an object
19:09:37 <elliott> ais523: I'm just saying use Hird naturals, not Church naturals, for the Var field
19:09:43 <ais523> oh, I see
19:09:46 <elliott> because it's more consistent
19:09:51 <ais523> now, 6 # would be the Hird numeral for 6
19:09:52 <CakeProphet> s/Hird/Hird(tm)/
19:10:02 <elliott> why can't 6 be the Hird numeral for 6?
19:10:30 -!- SgeoN1 has quit (Ping timeout: 258 seconds).
19:11:00 <CakeProphet> they're second-class citizens. they shouldn't expect special treatment.
19:11:02 <CakeProphet> filthy peasants.
19:11:29 <elliott> ais523: oh, um, there's an inconsistency in the examples I gave
19:11:36 -!- Nisstyre has joined.
19:11:39 <elliott> "k true"/"k false" is wrong, it should be "true k"/"false k"
19:11:42 <elliott> I'm expanding it now though
19:11:47 <elliott> so you can just grab the updated version when I sprunge it :P
19:12:03 <CakeProphet> sprunge is a good verb.
19:12:21 -!- SgeoN1 has joined.
19:12:32 <elliott> ais523: (note that this means that even the "zero" value passed to a fold is CPS-represented)
19:12:37 <elliott> so you have to apply it to get it out
19:12:43 <elliott> but that's perfectly okay; in fact it's more consistent
19:13:13 <ais523> yep
19:15:11 <elliott> ais523: I'm going to try writing a simple eval (that doesn't expose call/cc to the LC program itself) on hird LC terms
19:15:19 <elliott> just out of curiosity
19:15:31 <ais523> fair enoguh
19:15:33 <ais523> *enough
19:15:39 <elliott> well, I think I'll depend on an unwritten fix, because I cba to write out Y :)
19:15:40 <ais523> this is useful esolang progress even if Feather never goes anywhere
19:15:50 <ais523> you can just look up Y, can't you?
19:15:53 <ais523> or do you have to CPS it too?
19:17:11 <elliott> oh, wait, Y probably wouldn't even work
19:17:15 <elliott> because the lambda calculus being used is strict
19:17:22 <elliott> primitive fix is nicer, anyway
19:17:25 <elliott> because it permits sharing
19:17:33 <elliott> ...although I guess that doesn't really apply to strict languages :/
19:18:02 <CakeProphet> haskell mind virus. strict languages don't care, so why would they share?
19:19:37 <ais523> elliott: I'll need to write a strict fix in LC, but it's possible, right (with a Y variant)?
19:20:10 <elliott> ais523: yes
19:20:14 <elliott> only works on functions, though
19:20:20 <Phantom_Hoover> elliott, how does Hird LC work?
19:20:42 <ais523> elliott: all I really need is to be able to do recursion
19:21:29 <CakeProphet> Did you know that solar energy helps power space shuttle missions and provides energy to the Hubbell telescope? Turns out, through the use of solar panels, solar engergy can also provide power to your home.
19:21:34 <CakeProphet> this is a good website.
19:21:38 <elliott> Phantom_Hoover: well
19:22:00 -!- SgeoN1 has quit (Ping timeout: 258 seconds).
19:22:12 <Phantom_Hoover> elliott proceeds to explain it in song.
19:22:20 <elliott> no, that was my answer
19:22:55 <elliott> :t foldr
19:22:55 <lambdabot> forall a b. (a -> b -> b) -> b -> [a] -> b
19:23:06 <elliott> ?djinn ((a -> b -> b) -> b -> b) -> a
19:23:06 <lambdabot> -- f cannot be realized.
19:23:11 <elliott> wat
19:23:23 <elliott> ?djinn (forall b.(a -> b -> b) -> b -> b) -> a
19:23:23 <lambdabot> -- f cannot be realized.
19:23:24 <elliott> darn :P
19:23:25 <elliott> well
19:23:29 <elliott> I know that can't be right because that's just head...
19:23:35 <elliott> stupid djinn
19:23:41 <elliott> i guess it doesn't quite understand recursion :)
19:23:56 <CakeProphet> if only djinn could write my programs for me.
19:29:53 <ais523> ?djinn (a -> b -> c) -> (b -> a -> c)
19:29:53 <lambdabot> f a b c = a c b
19:30:05 <ais523> ?pl . djinn (a -> b -> c) -> (b -> a -> c)
19:30:05 <lambdabot> (line 1, column 1):
19:30:05 <lambdabot> unexpected "."
19:30:05 <lambdabot> expecting white space, "()", natural, identifier, lambda abstraction or expression
19:30:09 <ais523> ?pl.djinn (a -> b -> c) -> (b -> a -> c)
19:30:09 <lambdabot> Unknown command, try @list
19:30:13 <ais523> how do I stack commands?
19:30:21 <ais523> ?pl$djinn (a -> b -> c) -> (b -> a -> c)
19:30:21 <lambdabot> Unknown command, try @list
19:30:51 <elliott> ais523: http://sprunge.us/LPMW
19:30:56 <elliott> ?. pl djinn (a -> b -> c) -> (b -> a -> c)
19:30:56 <lambdabot> f = flip
19:31:03 <elliott> ais523: note: does not yet include evaluator :P
19:31:11 <elliott> also, includes a _lot_ of rambling.
19:31:23 <elliott> oops, it's not right
19:31:38 <elliott> one moment
19:32:05 <elliott> ais523: http://sprunge.us/aEhU
19:32:43 <ais523> ty
19:33:33 <elliott> ais523: oh, I think that LC term structure may be wrong
19:33:37 <elliott> at least, if you want to evaluate simply with it
19:33:40 <elliott> -- Lam = \e var lam app k. e var lam app (\e'. lam e' k)
19:33:45 <elliott> that forces the inside of the lambdas
19:33:47 <elliott> so you want to tweak it slightly
19:38:25 <elliott> ais523: http://sprunge.us/DGBd now with eval!
19:38:28 <Ngevd> Today's D&D beats even the previous one
19:38:29 <elliott> (of a slightly different representation)
19:38:45 <elliott> ais523: this representation can be reified back to syntax fully
19:38:55 <elliott> also, the resulting eval is really simple :)
19:39:05 <elliott> even if it cheats by encoding Lams in a way that breaks the mechanical rules of Hird encoding
19:39:12 <elliott> but it's worth it, because otherwise the CPS wouldn't help at all
19:39:49 <elliott> oops
19:39:51 <elliott> I made another mistake
19:40:05 <elliott> sorry ais523
19:40:06 <elliott> i'll fix it
19:40:45 <elliott> ais523: http://sprunge.us/ENSb
19:41:00 <elliott> note that that eval doesn't expose call/cc to its evaluated expression at all
19:41:02 <elliott> but I think it would be simple
19:41:36 <elliott> either by adding another primitive syntax node CallCC which evaluates to the call/cc function, or by having a top-level eval that passes call/cc to the whole expression which is a function
19:41:42 <elliott> (that latter one sounds more tricky though)
19:41:47 <ais523> yep, just pass call/cc as an arg
19:42:11 <elliott> ais523: oh and both eval and its App case can be trivially eta-reduced there
19:42:57 <elliott> ais523: and no, I think CallCC as a primitive syntax note is simpler
19:43:00 <elliott> than passing call/cc as an argument
19:43:06 <elliott> in fact, I'm not sure the latter even works
19:43:19 <elliott> you don't need to change the concrete syntax used, though
19:43:27 <elliott> because you can just pass the primitive node CallCC in
19:43:36 <elliott> ais523: http://sprunge.us/SYUJ updated version, with super-compact eval at the end
19:43:47 <elliott> eval = \vs t. t (\n. at n vs) (\e k'. k' (Lam e)) (\f x. f error (eval (Cons x vars)) error)
19:43:58 <elliott> argh
19:43:58 <elliott> s/vars/vs/
19:44:11 <elliott> http://sprunge.us/dSKH fixed. again.
19:44:17 <elliott> I think that file is now long enough.
19:45:21 <elliott> and now to brb and try and forget I ever got that confused
19:47:56 <Ngevd> Well, I have revived my MSPAFA
19:48:43 -!- nooga has quit (Ping timeout: 252 seconds).
19:49:04 <ais523> elliott: my bash history is currently full of alternating wget, mv and l commands
19:49:21 <ais523> not completely full
19:49:25 <ais523> but many lines worth, anyway
19:59:20 <ais523> <nano> [ XOFF ignored, mumble mumble ]
19:59:23 <ais523> haha
20:00:06 <olsner> that was the vital clue to eventually figuring out what it was that occasionally locked up my terminals
20:01:05 <olsner> and of course that problem was much worse before nano introduced that feature...
20:08:40 <Phantom_Hoover> Ngevd, oh god
20:09:55 -!- nooga has joined.
20:13:44 <elliott> ais523: back, and heh
20:14:28 -!- nooga has quit (Ping timeout: 260 seconds).
20:15:06 <elliott> ais523: http://sprunge.us/PXPS final revision... hopefully :)
20:15:10 <ais523> <my grandmother> is Norway always icy?
20:15:22 <ais523> any Norwegians here (oerjan, maybe) care to reply?
20:15:37 <elliott> Norway is literally made out of ice.
20:16:49 <Phantom_Hoover> ais523, they have warmer summers than Edinburgh.
20:17:07 -!- oerjan has joined.
20:17:13 -!- Ngevd has quit (Ping timeout: 260 seconds).
20:17:59 <elliott> Phantom_Hoover: so does a fridge.
20:18:19 <Phantom_Hoover> elliott, that is perhaps an exaggeration.
20:18:48 <elliott> i'm in the great fridge we call "hexham
20:18:49 <elliott> "
20:19:14 <elliott> ais523: I take it lazy Feather would make no sense whatsoever?
20:19:40 <ais523> elliott: it'd have the problem of working out when a retroactive change happened
20:19:46 <ais523> (to determine which one happened first)
20:20:15 <elliott> go by evaluation order?
20:20:16 <Phantom_Hoover> elliott, wait, what's the nearest city to Hexham.
20:20:44 <elliott> Phantom_Hoover: Newcastle.
20:21:21 <Phantom_Hoover> But that's in Ireland!
20:21:44 <elliott> Yeeees.
20:22:03 <ais523> Phantom_Hoover: I thought you'd have a better grasp of geography than that...
20:22:04 <Phantom_Hoover> God, it's worse than Leicester.
20:22:09 <elliott> Has nobody told Phantom_Hoover about the wormhole near Hexham?
20:22:21 <ais523> Leicester is pretty close to Birmingham, at least
20:22:28 <elliott> Man, wormholes would really fuck up geology. Maybe.
20:22:33 <elliott> If it extended into the atmosphere.
20:22:36 <Phantom_Hoover> http://en.wikipedia.org/wiki/Newcastle_West
20:22:41 <Phantom_Hoover> Geography, bitches.
20:22:59 <ais523> Phantom_Hoover: that isn't Newcastle
20:23:06 <ais523> elliott: btw, are the rumours about Newcastle true?
20:23:18 <elliott> ais523: Yes, all of them. What rumours?
20:23:31 <olsner> newcastle is a beer
20:23:32 <Phantom_Hoover> ais523, yes it is
20:23:32 <ais523> mostly about people having a total disregard for the weather
20:23:45 <ais523> and never wearing more than one level of clothing, or /maybe/ two, no matter what
20:24:02 <ais523> (rarely wearing less than one, either, they aren't /quite/ that mad)
20:24:14 <elliott> ais523: Wow, I know Birmingham are used to being the butts of the rumours, but are they really that bad at making up ones in retaliation?
20:24:15 <Phantom_Hoover> If you're going to say 'no, it's Newcastle West', then what Newcastle *are* you referring to?
20:24:32 <elliott> (I have no idea whether that is true or not.)
20:24:38 <elliott> (It's the weirdest rumour I've ever heard though.)
20:24:47 <ais523> elliott: they're decent at retaliating, just not against Newcastle
20:25:04 <Phantom_Hoover> ais523, ooh, what rumours do you have about us?
20:25:09 <ais523> it doesn't really seem like an /insulting/ rumour, though
20:25:49 <Phantom_Hoover> (I assume your grasp of Scotland is too granular to distinguish Edinburgh from anywhere else.)
20:26:19 <ais523> Phantom_Hoover: IIRC, it's that Edinburgh and Glasgow both consider themselves superior for the other, for different reasons
20:26:59 <Phantom_Hoover> elliott, anyway Newcastle is fully a degree warmer than Edinburgh in the summer so ha.
20:27:21 <elliott> Phantom_Hoover: /Too/ granular?
20:27:40 <Phantom_Hoover> elliott, I forgot which way granularity went.
20:27:40 <oerjan> <ais523> and never wearing more than one level of clothing, or /maybe/ two, no matter what <-- it's true, in newcastle they walk around in their underwear.
20:27:46 <elliott> Phantom_Hoover: Me too.
20:27:54 <elliott> oerjan: so that norway, so icy
20:28:02 <oerjan> elliott: occasionally
20:28:22 <elliott> ais523: only occasionally
20:28:33 <ais523> oerjan: that is not inconsistent with the rumours
20:28:56 <oerjan> ais523: i am merely deducing consequences of them
20:28:58 -!- monqy has joined.
20:29:01 <Phantom_Hoover> oerjan, let's objectivise this.
20:29:11 <oerjan> Phantom_Hoover: ok. first, A is A.
20:29:18 <Phantom_Hoover> How often have you had icicles hanging from your nose?
20:29:28 <ais523> oerjan: <my grandmother> is Norway always icy?
20:29:38 <Phantom_Hoover> oerjan, second, taxes are bad and charity is evil?
20:29:57 <oerjan> Phantom_Hoover: rarely. i'm a neurotical nose wiper.
20:30:03 -!- ive has quit (Ping timeout: 260 seconds).
20:30:18 <Phantom_Hoover> oerjan, a fellow sufferer!
20:30:18 <oerjan> well, obsessive, at least.
20:30:38 <Phantom_Hoover> I have a cold and my nose is almost rubbed raw.
20:30:45 <oerjan> Phantom_Hoover: know the feeling.
20:30:46 <elliott> objectivism is a great joke, it just needs to be less serious
20:31:24 <monqy> ugh obsessive nose wiping. that's me too.
20:31:38 <Phantom_Hoover> perhaps
20:31:47 <Phantom_Hoover> everyone is an obsessive nose wiper
20:31:57 <elliott> what are these noses you speak of
20:32:25 <Phantom_Hoover> elliott, they're these things you have if you're not a stunted Northern midget.
20:33:25 <elliott> aka dorf
20:33:27 <oerjan> <Phantom_Hoover> oerjan, second, taxes are bad and charity is evil? <-- something tells me norway isn't big on objectivism.
20:34:00 -!- boily has joined.
20:34:01 <Phantom_Hoover> oerjan, ah, you are all fans of floating-point, then.
20:34:17 <oerjan> Phantom_Hoover: wat
20:35:07 <Phantom_Hoover> oerjan, \exists A \in floats : A \neq A
20:35:16 <oerjan> ah.
20:35:28 <elliott> Phantom_Hoover: Tauist.
20:35:43 <oerjan> > tau
20:35:44 <lambdabot> Not in scope: `tau'
20:35:44 <elliott> (I need a go-to phrase for "wow you just made that excessively formal to sound smart".)
20:35:50 <oerjan> @let tau = 2*pi
20:35:50 <lambdabot> Defined.
20:35:53 <elliott> @undefine
20:35:54 <oerjan> > tau
20:35:54 <elliott> PURGE
20:35:55 <lambdabot> Not in scope: `tau'
20:35:56 <elliott> PUUUUUUURGE
20:35:57 <oerjan> ARGH
20:36:07 <elliott> @let pi = tau/2
20:36:07 <lambdabot> <local>:1:5: Not in scope: `tau'
20:36:28 <Phantom_Hoover> <elliott> (I need a go-to phrase for "wow you just made that excessively formal to sound smart".)
20:36:59 <Phantom_Hoover> Well I just kind of ended up doing that by accident.
20:37:15 <elliott> SUUUUUUUUUUUUURE
20:37:28 <Phantom_Hoover> Around the \in I had my doubts, and I had serious regrets by the time I got to \neq, but by then it was too late.
20:37:32 <oerjan> bondage and latex
20:37:32 <elliott> *breaks into Phantom_Hoover's house, finds walls scribbled with proofs of the greater elegance of tau over pi in simple algebraic equations*
20:37:49 <monqy> oh no
20:37:54 <monqy> phantom hoover how could you
20:38:01 <elliott> *sees thick, seemingly-incomplete manuscript in progress, "The Tau Way of Life"*
20:38:02 <Phantom_Hoover> elliott, hey, I hate tau just as much as the next sane man!
20:38:12 <Phantom_Hoover> elliott, the tau of physics.
20:38:23 <Phantom_Hoover> 06:22:56: <Sgeo_> I have this... thing, as a child, and still a little now, where if I didn't put my hand on my chest, I'd be worried about whether or not my heart's still beating
20:38:24 <elliott> *hears sounds from Phantom_Hoover's sleeping mouth, "tauuuu. tauuuuuu. tauuuuuuuuuuuu. full turn. tauuuuuuu."*
20:38:35 <Phantom_Hoover> I don't even know why this is in a file in ~/
20:38:39 <oerjan> elliott: itym "Tau Te Ching"
20:38:47 <elliott> *sees Phantom_Hoover sleepwalk, go over to the wall, write "I LOVE TAU IT IS BETTER THAN PI AND ALSO GREAT" onto the wall, and then sign it. in triplicate.*
20:38:49 <Phantom_Hoover> It also has 22:20:14: <alise> All the evidence and our best-accepted theories point to it being finite...so...
20:39:05 <elliott> Phantom_Hoover: Our best-accepted theories point to that file you have being finite.
20:39:30 <Phantom_Hoover> I assume it is some kind of list of things I meant to respond to for some reason, possibly the Irish Madness.
20:39:44 <Phantom_Hoover> And finally 21:01:26: <Phantom_Hoover_> Vorpal, Dwarf Fortress is pretty boring, to be honest.
20:39:53 <Phantom_Hoover> Past me is such a tool.
20:40:02 <elliott> I agree.
20:40:04 <elliott> Past me, too.
20:40:15 <elliott> Phantom_Hoover: The Irish Madness?
20:40:19 <oerjan> `log ehird
20:40:23 <HackEgo> 2008-01-27.txt:21:39:40: <ehird> i much prefer being molested by a unicorn, that is invisible, and pink
20:40:30 <elliott> wat
20:40:34 <ais523> wait, that's `log not `quote?
20:40:42 <oerjan> ais523: for _now_.
20:40:48 <ais523> `log `addquote
20:40:52 <oerjan> `quote molested
20:40:52 <HackEgo> 2009-10-26.txt:04:56:30: <ehird> `addquote <fax> im the worst person in the world
20:40:53 <HackEgo> No output.
20:40:59 <ais523> `log `addquote
20:41:00 <elliott> i don't think we need to add that :P
20:41:02 <HackEgo> 2011-08-19.txt:09:21:43: <elliott_> `addquote <monqy> mmm these music samples are still so tasteful
20:41:14 <ais523> `log `addquote
20:41:16 <Phantom_Hoover> `addquote <ehird> i much prefer being molested by a unicorn, that is invisible, and pink
20:41:18 <HackEgo> 2010-01-22.txt:16:47:39: <oerjan> `addquote <Sgeo> I'd imagine that it already has, and no one noticed
20:41:18 <HackEgo> 677) <ehird> i much prefer being molested by a unicorn, that is invisible, and pink
20:41:20 <ais523> I like this method, as it gets deleted quotes too
20:41:27 <elliott> `delquote 677
20:41:29 <HackEgo> ​*poof*
20:41:31 <elliott> ERASE THE RECORD
20:41:39 <ais523> `log `addquote
20:41:43 <HackEgo> 2009-07-10.txt:23:24:37: <ehird> `addquote באופן חלופי ביקום זה כרוך כולם מדברים עברית מסיבה כלשהי: <ehird> אז אני יכול רק להסיק כי הוא פגום, או את העולם, הוא מטורף לגמרי
20:41:59 <ais523> `log `addquote
20:42:02 <HackEgo> 2010-07-26.txt:23:46:01: <ais523> `addquote <ivancastillo75> Oh I get it you guys just use this space to do nothing ?
20:42:16 <ais523> hmm, we need `context
20:42:21 <ais523> which is like `log, but shows a few lines before too
20:43:21 <oerjan> ais523: tricky to do while selecting a random quote. maybe make it take that 2010-07-26.txt:23:46:01 thing?
20:43:32 <elliott> how is that tricky
20:43:51 <elliott> it'd have to use pastes though
20:44:20 <ais523> or just space-backslash-space as newline?
20:44:53 -!- BeholdMyGlory has quit (Quit: ZNC - http://znc.in).
20:45:21 <elliott> ais523: it wouldn't fit on an irc line
20:45:34 <monqy> if only hackego could multiple lines....
20:46:02 <elliott> <gragor> BAD,E
20:46:06 <elliott> <gragor> BAD,E JUJU
20:49:08 -!- Ngevd has joined.
20:50:00 -!- BeholdMyGlory has joined.
20:52:11 -!- SgeoN1 has joined.
20:54:12 <Ngevd> Can I request a page on the wiki for Funge 98?
20:54:26 <Ngevd> And an unconnected category "Unimplementable"?
20:54:44 <elliott> I think we have a superturing category. Not quite the same, but.
20:54:59 <elliott> I don't think anyone wants to put in the effort required to make a decent standalone page for Funge-98 itself.
20:55:19 <elliott> There isn't really much of a paragraph's worth of material in terms of broad strokes, and the details themselves are really complicated.
20:55:21 <monqy> we have uncomputable i think it is
20:55:41 <monqy> what does unimplementable mean
20:55:41 <Ngevd> So we do
20:55:51 <Ngevd> I don't really know
20:56:04 <elliott> uncomputable, I suspect
20:56:15 <Phantom_Hoover> What does uncomputable mean?
20:56:29 <Ngevd> Super Turing-complete
20:56:29 <monqy> some uncomputable languages are implementable in some other uncomputable languages
20:56:46 <Ngevd> We could define a computational class for them!
20:56:51 <Phantom_Hoover> Ngevd, we have a category for those.
20:57:07 <Phantom_Hoover> And their computational classes have already been explored.
20:58:15 <Ngevd> I'd like to switch back to my first suggestion, a Funge-98 page
20:58:23 <elliott> <elliott> I don't think anyone wants to put in the effort required to make a decent standalone page for Funge-98 itself.
20:58:23 <elliott> <elliott> There isn't really much of a paragraph's worth of material in terms of broad strokes, and the details themselves are really complicated.
20:58:24 <elliott> :p
20:58:50 <elliott> There's maybe three to five people around here who have the sufficient knowledge to write a decent page on it.
20:58:58 <Ngevd> One of whom is you
20:59:06 <elliott> At least one of them can't be arsed, and I suspect at least three others can't either.
20:59:28 <Ngevd> I will LEARN IT
20:59:32 <Ngevd> And MAKE AN ARTICLE
20:59:40 <monqy> good LUCK
20:59:40 <elliott> ^source
20:59:40 <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
20:59:45 <elliott> Start by learning from the masters.
20:59:48 <elliott> (OK, not that masterful.)
20:59:52 <Phantom_Hoover> Ngevd, I hope you like fastidious specs.
21:00:41 <elliott> Ngevd: Anyway, knowing it well enough to program in it isn't really enough to make a decent article on it, because you'll never run into the corner cases that make up the majority of its infamous ambiguity and strangeness.
21:00:45 <monqy> detroppus is a good drow
21:00:49 <elliott> You really have to implement it to get that kind of knowledge.
21:01:00 <elliott> monqy: yes
21:01:02 <Phantom_Hoover> elliott, what corner cases, out of curiosity?
21:01:13 <Phantom_Hoover> elliott, drows are a kind of elf STEP CAREFULLY MY FRIEND
21:02:25 <Ngevd> GOODNIGHT
21:02:29 -!- Ngevd has quit (Quit: what a big quitter he is, eh?).
21:02:40 <elliott> Phantom_Hoover: See: Basically everything Mycology tests that isn't dirt simple.
21:03:12 -!- SgeoN1 has quit (Ping timeout: 258 seconds).
21:05:04 -!- SgeoN1 has joined.
21:09:43 -!- SgeoN1 has quit (Ping timeout: 258 seconds).
21:12:04 <Deewiant> If you use k at all, you'll probably run into a "corner case".
21:12:19 <elliott> True :P
21:13:05 <fizzie> Drows are a kind of elf; drowsy is kind of an elfy state to be in.
21:14:15 <elliott> And one I'm in. Good night, fuckers.
21:14:25 <monqy> good night elliott
21:16:19 <oerjan> 22:56 Phantom_Hoover> What does uncomputable mean?
21:16:19 <oerjan> 22:56 Ngevd> Super Turing-complete
21:17:13 <oerjan> i believe it is possible for a language to contain uncomputable features without being turing-hard
21:17:32 <oerjan> i vaguely recall possibly seeing some proof
21:17:43 <Phantom_Hoover> Define 'Turing-hard'?
21:18:10 <oerjan> capable of computing anything a turing machine can compute, but possibly more
21:18:38 <Phantom_Hoover> Oh, so it can't compute anything a TM can?
21:18:41 <Phantom_Hoover> That's trivial.
21:18:57 -!- elliott has quit (Ping timeout: 260 seconds).
21:18:58 <oerjan> it can't compute _everything_ a TM can.
21:19:15 <Phantom_Hoover> Yesyesyes, poor choice of words.
21:19:29 <oerjan> but it may still be able to compute something a TM cannot.
21:19:54 <Phantom_Hoover> Again, that seems trivial.
21:20:31 <oerjan> Phantom_Hoover: yes, but it contradicts Ngevd's claim that uncomputable == super TC
21:20:46 <Phantom_Hoover> Yeah, I know.
21:20:48 <oerjan> which is all i wanted to point out.
21:25:54 <oerjan> @tell zzo38 <zzo38> But, is it, if you ignore undefined, and work only with fully defined programs? <-- if you ignore undefined, i think () is final and a Void (empty) type is initial, similarly to the Set category in math
21:25:54 <lambdabot> Consider it noted.
21:27:05 -!- ive has joined.
21:32:24 <oerjan> <ais523> <my grandmother> is Norway always icy?
21:32:37 <oerjan> we supposedly had 28 celsius sometime in august
21:32:47 <oerjan> (in trondheim)
21:32:56 <oerjan> well, by the forecast.
21:33:20 <oerjan> and it hasn't started freezing yet.
21:40:55 -!- GreaseMonkey has joined.
21:42:20 <oerjan> tomorrow is iwc 3160
21:52:54 -!- augur has quit (Ping timeout: 276 seconds).
21:56:22 -!- augur has joined.
21:56:39 <oerjan> > [1,3..20 :: Rational]
21:56:40 <lambdabot> [1 % 1,3 % 1,5 % 1,7 % 1,9 % 1,11 % 1,13 % 1,15 % 1,17 % 1,19 % 1,21 % 1]
22:00:42 <Phantom_Hoover> oerjan, is that the Calvin and Hobbes Point?
22:00:56 <oerjan> yes
22:03:20 -!- Jafet has quit (Ping timeout: 260 seconds).
22:07:48 -!- kmc has quit (Quit: Leaving).
22:09:35 * Phantom_Hoover → sleep
22:09:36 -!- Phantom_Hoover has quit (Quit: Leaving).
22:12:51 -!- itidus20 has joined.
22:14:22 -!- itidus21 has quit (Ping timeout: 260 seconds).
22:17:00 -!- FireFly has quit (Quit: FireFly).
22:18:27 -!- boily has quit (Ping timeout: 260 seconds).
22:20:47 <Lymee> :t Rational
22:20:48 <lambdabot> Not in scope: data constructor `Rational'
22:20:56 <Lymee> :t (%)
22:20:57 <lambdabot> forall a. (Integral a) => a -> a -> Ratio a
22:21:25 <oerjan> type Rational = Ratio Integer
22:22:42 <oerjan> :k Rational
22:22:43 <lambdabot> *
22:24:13 <Lymee> > 10 ** 10 ** 10
22:24:13 <lambdabot> Infinity
22:24:23 <Lymee> > (10 ** 10 ** 10 :: Integral)
22:24:23 <lambdabot> Class `GHC.Real.Integral' used as a type
22:24:33 <Lymee> > (10 ** 10 ** 10 :: Integer)
22:24:34 <lambdabot> No instance for (GHC.Float.Floating GHC.Integer.Type.Integer)
22:24:34 <lambdabot> arising fr...
22:24:42 <oerjan> > 10 ^ 10 ^ 10
22:24:46 <Lymee> derp
22:24:57 <oerjan> oops
22:24:58 <lambdabot> thread killed
22:25:06 <oerjan> > 10 ^ 10 ^ 5
22:25:10 <lambdabot> mueval-core: Time limit exceeded
22:25:13 <oerjan> > 10 ^ 10 ^ 3
22:25:17 <lambdabot> mueval-core: Time limit exceeded
22:25:17 <Lymee> > 2 ^ 33
22:25:21 <oerjan> sheesh
22:25:21 <lambdabot> mueval-core: Time limit exceeded
22:25:26 <oerjan> wat
22:25:36 <Lymee> :t (^)
22:25:36 <Deewiant> > 2^2
22:25:38 <oerjan> now lambdabot is just being lazy
22:25:38 <lambdabot> 4
22:25:41 <lambdabot> forall a b. (Num a, Integral b) => a -> b -> a
22:25:43 <oerjan> > 2^33
22:25:44 <lambdabot> 8589934592
22:25:56 <Lymee> >10^10^10
22:26:09 <oerjan> Lymee: that's far too large anyhow
22:26:09 <Lymee> > 10^10^10
22:26:20 <oerjan> 10 billion digits
22:26:27 <lambdabot> thread killed
22:26:36 <oerjan> > 10^10^3
22:26:45 <lambdabot> mueval: ExitFailure 1
22:26:45 <lambdabot> mueval-core: Time limit exceeded
22:26:50 <oerjan> gah
22:26:51 <monqy> > (succ^5)0
22:26:55 <lambdabot> mueval-core: Time limit exceeded
22:26:56 <Lymee> > 2^65
22:26:58 <lambdabot> 36893488147419103232
22:26:59 <monqy> > (succ^2)0
22:27:01 <lambdabot> 1
22:27:03 <monqy> > (succ^3)0
22:27:04 <lambdabot> 1
22:27:05 <Lymee> > 2^129
22:27:06 <lambdabot> 680564733841876926926749214863536422912
22:27:10 <oerjan> i'm sure lambdabot has managed computations of the size of 10^1000 before
22:27:12 <Lymee> > 2^257
22:27:14 <lambdabot> 231584178474632390847141970017375815706539969331281128078915168015826259279...
22:27:31 <oerjan> perhaps the new version has stricter time bounds
22:27:49 <monqy> > (id^3)0
22:27:50 <lambdabot> 0
22:28:55 <oerjan> monqy: that's not actually iterating the function
22:29:05 <monqy> yeah I figured as much from playing with succ
22:29:11 <monqy> but what does it do then
22:29:31 <oerjan> (f^n) x = (f x)^n
22:29:46 <oerjan> it's a pointwise Num instance for functions
22:29:58 <monqy> ah
22:30:46 <oerjan> > 10^1000
22:30:47 <lambdabot> 100000000000000000000000000000000000000000000000000000000000000000000000000...
22:31:10 <oerjan> i guess it all depends on how much load lambdabot gets
22:31:12 -!- itidus20 has quit (Read error: Connection timed out).
22:31:58 -!- itidus20 has joined.
22:39:16 -!- Patashu has joined.
22:39:18 -!- itidus20 has quit (Read error: Operation timed out).
22:41:10 -!- itidus20 has joined.
22:44:37 -!- nooga has joined.
22:52:13 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
22:59:58 -!- itidus20 has quit (Read error: Connection timed out).
23:00:05 -!- tiffnya has joined.
23:00:10 -!- kmc has joined.
23:01:21 -!- Deewiant_ has joined.
23:02:01 -!- jix_ has joined.
23:06:45 -!- jix has quit (*.net *.split).
23:06:45 -!- Deewiant has quit (*.net *.split).
23:06:45 -!- tiffany has quit (*.net *.split).
23:06:46 -!- Lymee has quit (*.net *.split).
23:08:39 <nooga> i'd play a roguelike
23:14:13 -!- Madoka-Kaname has joined.
23:15:13 -!- ineiros_ has quit (Remote host closed the connection).
23:16:12 -!- sllide has quit (Read error: Connection reset by peer).
23:31:20 -!- copumpkin has joined.
23:54:08 -!- Vorpal has quit (Ping timeout: 260 seconds).
←2011-09-19 2011-09-20 2011-09-21→ ↑2011 ↑all