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