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).