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:51 <oerjan> i guess it really is random 
00:07:30 <elliott> <stdin>:17: trailing whitespace. 
00:07:30 <elliott> warning: 1 line adds whitespace errors. 
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: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: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: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: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: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: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: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:59 <lambdabot>  It could refer to either `L.a', defined at <local... 
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:38 <oerjan> elliott_: erm it's lame that the [] monad isn't the ZipList monad? 
02:23:47 <oerjan> ?check zipWith === liftM2 
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: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: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> 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> 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:59 <lambdabot> forall (m :: * -> *) s. (MonadState s m) => m s 
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:59 <oerjan> and even less about types 
02:34:55 <lambdabot> forall a1 a2 r (m :: * -> *). (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r 
02:35:01 <lambdabot> forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] 
02:35:06 <lambdabot> Source not found. This mission is too important for me to allow you to jeopardize it. 
02:35:09 <lambdabot> liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) } 
02:36:00 <lambdabot> zipWith f (a:as) (b:bs) = f a b : zipWith f as bs 
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: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>      cannot mix `>>+' [infixl 9] and `L..' [infixr... 
02:38:10 <lambdabot>   The operator `GHC.Base.>>=' [infixl 1] of a section 
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 <lambdabot> zipWith f (a:as) (b:bs) = f a b : zipWith f as bs 
02:39:51 <CakeProphet> @@ @pl @undo liftM2 f m1 m2 = do { x1 <- m1; x2 <- m2; return (f x1 x2) } 
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:31 <lambdabot>   No instance for (GHC.Show.Show (Control.Applicative.ZipList t)) 
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: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: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: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: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:51 <oerjan> well, for any monad, x >>= f = join (fmap f x) 
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:43 <oerjan> _almost_, but it uses it to truncate the _length_ 
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: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: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: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:52:01 -!- calamari- has joined. 
02:52:22 -!- calamari- has quit (Client Quit). 
02:52:46 <oerjan> it works to define the Applicative from it.  even without the scanl1 part. 
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: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:56:46 <oerjan> and that again = join (fmap ((`fmap` m2) . f) m1) 
02:57:27 <oerjan> you may check that the argument of join is a rectangular list 
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:32 <monqy> which zipper is this 
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: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:39 <oerjan> CakeProphet: you are talking about actual zippers, not ziplists? 
03:07:05 <CakeProphet> well left identity and right identity work. 
03:07:24 <oerjan> CakeProphet: wouldn't you need multiple holes? 
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:40 <CakeProphet> it literally just gets passed the current hole 
03:09:07 <oerjan> um the current hole with a value, then. 
03:09:23 <CakeProphet> don't zippers always have a current value? 
03:09:42 <monqy> that's a zipper on lists 
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 <CakeProphet> which would allow to possibility of empty. 
03:11:39 <monqy> zippers aren't just for lists 
03:12:20 <monqy> what's your functor instance 
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:38 -!- Jafet has quit (Client Quit). 
03:13:02 -!- calamari has quit (Quit: Leaving). 
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: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: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: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:19:11 <oerjan> CakeProphet: (f x) doesn't have the right type 
03:19:52 <CakeProphet> which I think satisfies left/right identity... somehow. 
03:23:22 <CakeProphet> my original definitioin for bind that only applied f to the current value would work if you had 
03:25:10 <elliott_> there is a genrric zipper monas 
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: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: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: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 <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 <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: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:25 -!- MDude has changed nick to MSleep. 
03:29:55 <monqy> anyway i need to actually learn category theory 
03:30:20 <elliott_> oerjan: it tries to `show` couterexamples 
03:30:45 <lambdabot>   <no location info>: 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: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: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:35:21 <CakeProphet> I like how do notation usually makes thing more annoying looking. 
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:10 -!- azaq23 has joined. 
03:39:16 <CakeProphet> under the section "practical meaning of the monad laws" 
03:39:22 <CakeProphet> as if it makes it more practical or something. 
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: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:31 <monqy> what did you expect 
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:55 <monqy> the haiku form is good 
03:48:10 <monqy> no it's good shut up 
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:11 <CakeProphet> monqy: know I think he wants to know for realism 
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: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:19:56 -!- MDude has joined. 
04:23:46 -!- MSleep has quit (Ping timeout: 252 seconds). 
04:25:43 -!- Guest99864 has quit (Quit: Page closed). 
04:26:19 -!- michaelh has joined. 
04:26:28 -!- michaelh has quit (Client Quit). 
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: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: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: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:27 <pikhq> It was once, ergo it is forevermore. 
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:45:18 <hagb4rd> with your britwa sharpened mind 
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: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: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: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:51:09 <elliott_> pikhq: i think he wants you to talk about jesus 
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: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: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: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: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: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: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: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: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: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:54 <itidus21> (define (tidus x) (* x x x))    (tidus 5) == 125  ... proof i have been reading some SICP ^_^; 
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: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: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:30:05 <monqy> one of these guys made a spam talkpage for someone without a userpage 
07:30:25 <monqy> is 123 even a user 
07:30:38 <elliott_> http://esolangs.org/wiki/Special:Contributions/123 
07:30:40 <monqy> 123 has never made changes at least... 
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:09 <monqy> http://esoteric.voxelperfect.net/wiki/User:Zhanzhan 
07:37:31 <monqy> hedid toh..e..himself 
07:37:49 <monqy> poor zahnzhan ;__; 
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: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 <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:53 <zzo38> But do you know if my code for deriving Lift could be made shorter? 
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:55 <elliott_> unfortunately its name escapes me- 
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: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. 
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: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: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: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: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: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: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: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:16:40 <fizzie> If you want to have shell injection problems, sure. 
11:16:45 -!- ais523 has joined. 
11:17:19 <fizzie> By inputting the string "haha | rm -rf ~/* | echo hehe", for example? 
11:18:32 <CakeProphet> I don't really see an issue with using shell as there's no IRC-side exploits... 
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:34:02 -!- nooga has joined. 
11:38:06 <nooga> http://www.urbandictionary.com/define.php?term=Purn 
11:39:10 <fizzie> Trokdor the purninator. 
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: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. 
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:07 <CakeProphet> > runST (do { x <- newSTRef "hi"; writeSTRef x "hello"; readSTRef x}) 
12:02:39 <CakeProphet> I'd have to hack the source to allow it to do such. 
12:04:41 <CakeProphet> is ST inherently magical or is it implemently with pure code? 
12:04:49 <CakeProphet> I see it uses State# but I don't really know how that works. 
12:05:45 <lambdabot> Not in scope: data constructor `ST' 
12:14:25 <elliott> CakeProphet: ST can be implemented with unsafeCoerce. 
12:14:45 <elliott> and unsafePerformIO for runST 
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:27 <CakeProphet> that kind of defeats the purpose of ST though. 
12:15:35 <elliott> it's just as pure from the outside 
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: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:21:05 <Jafet> But GHC implements IO using ST! 
12:21:16 <Jafet> Where is your GoD now. 
12:22:36 <elliott> hmm, why isn't (IO a -> ST RealWorld a) in Control.Monad.ST 
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: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: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:26:04 <CakeProphet> couldn't this be used to create side-effects in ST? 
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:27:16 <CakeProphet> unsafeIOToST (IO io) = ST $ \ s -> (unsafeCoerce# io) s 
12:27:21 <elliott> ioToST cannot be used to create usable side-effects in ST 
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:52 <Jafet> unsafeIOToST :: IO a -> forall s. ST s a 
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: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: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:34:07 <CakeProphet> and can't be implemented without the ST constructor. 
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:54 <elliott> CakeProphet: https://github.com/ehird/vault/blob/master/src/Data/Vault/ST.hs#L43 
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:13 <elliott> Which involved introducing the newUnique primitive into ST. 
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:28 <elliott> Note the "forked from HeinrichApfelmus/vault" 
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: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: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: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:52 <CakeProphet> well no see I think it would be interesting to have a well-type scripting language of that nature... 
12:50:42 <elliott> i am saying that it would not work to implement that in haskell. 
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: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: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 <elliott> You asked me to set my own hours; I set my own hours. 
13:06:59 <elliott> There are worse languages to write an OS in than Perl. 
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:40 <CakeProphet> to one of the slowest languages in common use. 
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: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:53 <elliott> That's an alphabetical list. 
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: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: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: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:36 <Jafet> Well, it's C submitted as haskell 
13:13:41 <elliott> Oh, I was expecting something very different. 
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:16 <Jafet> Admit it, you'd root her. 
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:52 <elliott> CakeProphet: Insert stupid alot joke. 
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:55 <lambdabot> Prelude read :: Read a => String -> a 
13:18:55 <lambdabot> Text.Read read :: Read a => String -> a 
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:21 <lambdabot> forall a. (Integral a) => a -> (Int -> Char) -> a -> String -> String 
13:21:21 <lambdabot> forall a. (Eq a) => a -> [a] -> Maybe Int 
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:56 <fizzie> I see they like the generic. 
13:24:55 <fizzie> > showIntAtBase 42 chr 12345678 "" 
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:30:40 <fizzie> Take all prime bits of SHA-512. 
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:37:52 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .). 
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:32:08 -!- variable has changed nick to invariable. 
14:36:44 -!- DH____ has joined. 
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: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: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:13 <lambdabot> Unsafe.Coerce unsafeCoerce :: a -> b 
15:21:19 <lambdabot> Control.Applicative pure :: Applicative f => a -> f a 
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: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: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:08 <Deewiant> We do have (fst p, snd p) == p, no? :-P 
15:30:05 <Deewiant> That might not be such a relevant "law of tuples" :-P 
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:37:07 <elliott> It would apply even without seq 
15:37:28 <elliott> You are asking for a strict language, basically 
15:41:02 <CakeProphet> http://blog.ezyang.com/2010/12/hussling-haskell-types-into-hasse-diagrams/ 
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: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: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: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: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: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:34:17 <elliott> <ais> I know, I see every change via RSS 
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: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 <lambdabot> Local time for elliott is Tue Sep 20 17:38:03 
16:38:11 <Ngevd> Yep, my laptop is drifting 
16:38:17 <Ngevd> It's two hours fast 
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 <fizzie> There's a Hexham everywhere. 
16:40:58 <fizzie> Hexham is where the heart is. <- An old Chinese proverb. 
16:42:10 <elliott> Hey fizzie, fix my library issue. 
16:45:18 <fizzie> Okay. *zap*. Should be fixed now. 
16:45:29 <lambdabot> Data.Maybe listToMaybe :: [a] -> Maybe a 
16:45:29 <lambdabot> Data.List find :: (a -> Bool) -> [a] -> Maybe a 
16:45:43 <elliott> fizzie: It's not fixed. Pls fix better. 
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:48:36 -!- augur has joined. 
16:59:32 <itidus21> time to look into itidus21's ebook folder of doom 
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 <fungot> Phantom_Hoover: what the hell was that? my, that just made you disappear" and stuff? 
17:08:59 <fungot> Phantom_Hoover: and in time, though prone to do this 
17:09:10 <fungot> Phantom_Hoover: like a very clear mirror 
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: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: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:59 <elliott> That riot was Phantom_Hoover predicts i 
17:16:00 <elliott> That riot was Phantom_Hoover predicts I. 
17:16:36 <elliott> fizzie: https://github.com/phonohawk/HsOpenSSL/issues/3 Make this be fixed quickly, thanks 
17:16:45 <elliott> Let's pool our resources together here to fix it with power 
17:19:54 <elliott> Phantom_Hoover: Rename what. 
17:19:55 -!- Ngevd has quit (Ping timeout: 260 seconds). 
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: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: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:26:00 <elliott> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.31406 ???????? 
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: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: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:40:41 <elliott> ais523: hmm, it's interesting that modifying history is a part of the darcs workflow 
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: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: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:53 <ais523> not arbitrary, that's how I defined "anything bad" just now 
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:23 <elliott> ais523: changes are defined recursively 
17:52:30 <elliott> there's a start of file and end of file change 
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: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:21 <elliott> in git I'm constantly rebasing and amending and writing commit messages 
17:56:39 <elliott> someone really needs to rewrite "darcs record" using git as a backend 
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: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> 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: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:10 <elliott> I had "I never said I /succeeded/" all lined up and all, too 
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:29 <elliott> Perl regexps are a shame :( 
18:08:43 <ais523> pcregrep I like because at least it's honest 
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: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:11:01 <elliott> sounds wrong, backrefs are not very context-free after all 
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: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: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:11 <ais523> hmm, I don't think our learndb is all that sensible 
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:15:22 -!- nooga has quit (Ping timeout: 240 seconds). 
18:16:28 <elliott> what about the other +x bits? 
18:17:43 <ais523> not those either, but that's less bad 
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: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:25:26 <ais523> elliott: hmm, it depends on whether sg's meant to be used for one user, or across systems 
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: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:22 <elliott> the user will have to configure sg to do as they wish 
18:29:22 <ais523> Linux has SElinux permissions 
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: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 <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: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: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: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:12 <ais523> it was written in figures, too, as 25.5 000 000 
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:07 -!- ive has joined. 
18:39:19 <elliott> ais523: maybe they're offering 25 + 5000000i dollars 
18:40:00 <CakeProphet> I could buy like, maybe 20 packs of sour punch straws 
18:40:53 <CakeProphet> cents are easily represented by a decimal number though 
18:41:12 <CakeProphet> I think imaginary dollars are just dollars that are offered but don't exist. 
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: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: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:47:13 <Ngevd> Replacement-for-B? 
18:47:17 <ais523> hopefully it'll sort itself out in a while, though 
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: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: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:37 <ais523> elliott: input is a church list of church numerals 
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: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: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: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:17 <elliott> anyway you're basically asking for a 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: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: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: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: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: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: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: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. 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:21 <elliott> ais523: succ = \n f x k. n f x (\x'. f x' k) 
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: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:55 <ais523> elliott: CPS Church numerals? ingenious 
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: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: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:11 <ais523> elliott: this is Feather-related, btw 
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: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: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:39 <elliott> ais523: Feather is strictly-evaluated, right? 
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: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: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: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: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:37 <elliott> ais523: I'm just saying use Hird naturals, not Church naturals, for the Var field 
19:09:46 <elliott> because it's more consistent 
19:09:51 <ais523> now, 6 # would be the Hird numeral for 6 
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: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: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: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: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:14 <elliott> only works on functions, though 
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:22:00 -!- SgeoN1 has quit (Ping timeout: 258 seconds). 
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:23 <elliott> ?djinn (forall b.(a -> b -> b) -> b -> b) -> a 
19:23:29 <elliott> I know that can't be right because that's just head... 
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:30:05 <ais523> ?pl . djinn (a -> b -> c) -> (b -> a -> c) 
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:13 <ais523> how do I stack commands? 
19:30:21 <ais523> ?pl$djinn (a -> b -> c) -> (b -> a -> c) 
19:30:51 <elliott> ais523: http://sprunge.us/LPMW 
19:30:56 <elliott> ?. pl djinn (a -> b -> c) -> (b -> a -> c) 
19:31:03 <elliott> ais523: note: does not yet include evaluator :P 
19:31:11 <elliott> also, includes a _lot_ of rambling. 
19:32:05 <elliott> ais523: http://sprunge.us/aEhU 
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: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: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:25 <ais523> but many lines worth, anyway 
19:59:20 <ais523> <nano> [ XOFF ignored, mumble mumble ] 
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:09:55 -!- nooga has joined. 
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: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:48 <elliott> i'm in the great fridge we call "hexham 
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:44 <elliott> Phantom_Hoover: Newcastle. 
20:22:03 <ais523> Phantom_Hoover: I thought you'd have a better grasp of geography than that... 
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: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: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: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 <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:54 <elliott> oerjan: so that norway, so icy 
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: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:57 <oerjan> Phantom_Hoover: rarely.  i'm a neurotical nose wiper. 
20:30:03 -!- ive has quit (Ping timeout: 260 seconds). 
20:30:18 <oerjan> well, obsessive, at least. 
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: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: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:35:44 <elliott> (I need a go-to phrase for "wow you just made that excessively formal to sound smart".) 
20:36:28 <Phantom_Hoover> <elliott> (I need a go-to phrase for "wow you just made that excessively formal to sound smart".) 
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 <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: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: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: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:40:15 <elliott> Phantom_Hoover: The Irish Madness? 
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:34 <ais523> wait, that's `log not `quote? 
20:40:52 <HackEgo> 2009-10-26.txt:04:56:30: <ehird> `addquote <fax> im the worst person in the world 
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: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:43 <HackEgo> 2009-07-10.txt:23:24:37: <ehird> `addquote באופן חלופי ביקום זה כרוך כולם מדברים עברית מסיבה כלשהי: <ehird> אז אני יכול רק להסיק כי הוא פגום, או את העולם, הוא מטורף לגמרי 
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: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: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: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:51 <Ngevd> I don't really know 
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: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: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:32 <Ngevd> And MAKE AN ARTICLE 
20:59:40 <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98 
20:59:45 <elliott> Start by learning from the masters. 
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:13 <Phantom_Hoover> elliott, drows are a kind of elf STEP CAREFULLY MY FRIEND 
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: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:18:10 <oerjan> capable of computing anything a turing machine can compute, but possibly more 
21:18:57 -!- elliott has quit (Ping timeout: 260 seconds). 
21:18:58 <oerjan> it can't compute _everything_ a TM can. 
21:19:29 <oerjan> but it may still be able to compute something a TM cannot. 
21:20:31 <oerjan> Phantom_Hoover: yes, but it contradicts Ngevd's claim that uncomputable == super TC 
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: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:56 <oerjan> well, by the forecast. 
21:33:20 <oerjan> and it hasn't started freezing yet. 
21:40:55 -!- GreaseMonkey has joined. 
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:03:20 -!- Jafet has quit (Ping timeout: 260 seconds). 
22:07:48 -!- kmc has quit (Quit: Leaving). 
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:48 <lambdabot> Not in scope: data constructor `Rational' 
22:20:57 <lambdabot> forall a. (Integral a) => a -> a -> Ratio a 
22:21:25 <oerjan> type Rational = Ratio Integer 
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:25:38 <oerjan> now lambdabot is just being lazy 
22:25:41 <lambdabot> forall a b. (Num a, Integral b) => a -> b -> a 
22:26:09 <oerjan> Lymee: that's far too large anyhow 
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:14 <lambdabot>   231584178474632390847141970017375815706539969331281128078915168015826259279... 
22:27:31 <oerjan> perhaps the new version has stricter time bounds 
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:46 <oerjan> it's a pointwise Num instance for functions 
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).