00:04:46 i haven't had strawberries with balsamic though 00:04:48 but i hear it's good 00:05:21 kmc: Well, now you have a mission in life! 00:10:43 when i was little i tried balsamic vinegar with balsamic vinegar 00:10:51 Delicious. 00:10:51 it began a lifelong love of balsamic vinegar 00:11:00 also extremely painful lips 00:11:58 * Sgeo is watching The Myth of the Genius Programmer 00:12:23 you need an entire video to tell you that genius is bullshit? 00:14:27 -!- Arc_Koen has joined. 00:17:37 -!- Phantom_Hoover has quit (Remote host closed the connection). 00:18:27 -!- Frooxius has quit (Ping timeout: 276 seconds). 01:01:36 shachaf: help ^ 01:02:03 elliott: with what ☝ 01:02:27 test :: ((forall a. (Show a) => a -> String) ~ (Int -> String)) => () 01:02:27 why is this not ok 01:02:27 is there a ~ that means 01:02:27 "can unify with" 01:02:27 so i can do 01:02:28 (a ~ String -> String, a ~ Int -> String) 01:02:30 and a = forall a. (Show a) => a -> String 01:02:32 works 01:02:46 Oh. 01:02:57 I don't know if there's such a thing. It seems kind of weird. 01:07:16 It'd be useful for me. 01:08:08 elliott: Ask in #haskell! 01:08:18 Good one. 01:13:17 elliott: Oh no, race condition! 01:13:30 What if someone sent you a good message right before the @clear-messages? 01:15:27 @clear-messages? 01:15:27 Messages cleared. 01:15:32 thank you 01:15:42 @clear-messages! 01:15:42 Messages cleared. 01:15:49 @ask monqy hi monqy :') 01:15:50 Consider it noted. 01:15:57 @clear-messages. 01:15:57 Messages cleared. 01:16:06 @tell monqy what have you done?! 01:16:07 Consider it noted. 01:16:31 @clear-messages‽ 01:16:31 Unknown command, try @list 01:16:41 help 01:16:41 monqy: You have 1 new message. '/msg lambdabot @messages' to read it. 01:16:44 heeelp 01:17:07 uh, oh, can you put comments in urls? 01:17:20 @clear-messages⸘ 01:17:21 like, using '.' inside of the url and everything after it is ignored 01:17:21 Unknown command, try @list 01:17:24 @clear-messagesá 01:17:24 Messages cleared. 01:17:28 zomg 01:17:37 I bet lambdabot is doing edit distance in UTF-8 bytes. :-( 01:28:42 -!- Arc_Koen has quit (Quit: Arc_Koen). 01:43:50 I also think "can unify with" might sometimes be useful and the automatic classes I suggested could be used to make it, I think. 01:47:32 Automatic classes if used in Ibtlfmm (instead of only Haskell) could do other things too, including, check if it is not a specific type, trex records, whatever, but in any case they could only be used with the class is specified in the constraint that your function is using it 02:11:12 kmc: I was reading a book that denoted the empty set by □. 02:23:22 shachaf: It's because you forgot to quantify the "a". 02:23:32 elliott: I know. 02:24:14 elliott: For some reason I thought it would be "scoped" from the "data" but that's a bit silly. 02:24:31 yeah, GADT headers are weird 02:24:35 you can just put a kind signature there instead 02:24:40 Coq actually "scopes" it like that 02:24:46 Agda does too, right? 02:25:20 I remembered that there was a difference between "data Foo (n:Nat) : * -> *" and "data Foo : Nat -> * -> *" or "data Foo (n:Nat) a : *" or something. 02:25:25 But i guess that was in Agda. 02:28:45 elliott: So did you know 18:49 Either x y = exists b. if b then x else y; (x,y) = forall b. if b then x else y 02:29:27 shachaf: Sure, that makes perfect sense. 02:29:44 I didn't say it doesn't make sense. 02:30:21 Well, I mean... what is there to know? 02:30:45 Nothing. 02:31:39 shachaf: 02:31:44 data To' p f = To' (forall a. (p a) => a -> f a) 02:31:44 mapH :: (All p ts) => To' p f -> HList ts -> HList (Map f ts) 02:31:54 shachaf: What can I do here if I want to set p = Show, and map show over the list? 02:31:59 I need to specify an "f". 02:32:05 But what I want is (Const String), but you can't do that. 02:32:13 Since type Const a b = a can't be partially applied. 02:32:22 shachaf: Can you think of a decent way to generalise the type of mapH so this works? 02:32:34 I've considered 02:32:38 data To'' p = To'' (forall a r. (p a r) => a -> r) 02:32:45 mapH' :: ??? => To'' p -> HList ts -> HList ??? 02:32:47 using 02:32:54 class (Show a, r ~ String) => Shoe a r 02:33:03 class Shoe a r 02:33:03 instance (Show a, r ~ String) => Shoe a r 02:33:04 or something 02:33:11 but I don't see how that would work. 02:33:15 Yes, I'd say that it's certainly the most thoughtful and intelligent traffic signal I've ever met. 02:33:17 As in I don't know what the ???s would be. 02:33:20 And anyway it feels wrong. 02:33:23 So do you have any ideas? 02:34:23 Not off-hand. 02:34:36 OK. 02:34:43 Well, if you think of any, let me know. 02:35:00 (I know I can just do newtype Const a b = Const { getConst :: a } and do To' (Const . show) instead, but that leads to problems later.) 02:35:08 (Since then I want to use toListH :: (All ((~) a) ts) => HList ts -> [a].) 02:35:12 (But Const a b and Const a c don't unify.) 02:36:21 HLists are the devil. 02:36:35 19:36 I just don't see the point 02:36:39 (Referring to HLists, I'm sure.) 02:37:56 shachaf: This isn't about HLists, though. 02:38:14 It's about figuring out how this kind of stuff can be used at the type-level. 02:40:28 nooodl: 1, 1, …? Everyone knows the Fibonacci sequence begins with 89, -55. 02:40:30 ion: What's this about? 02:41:00 shachaf: Hmm. 02:41:16 shachaf: If I could somehow specify that I want p to have the fundep a b | a -> b, then I think 02:41:17 data To'' p = To'' (forall a r. (p a r) => a -> r) 02:41:17 mapH' :: ??? => To'' p -> HList ts -> HList ??? 02:41:18 would work. 02:41:28 shachaf: But you can't do that. But that's what type families are. 02:41:28 > fix ((89:) . (-55:) . zipWith (+) <*> tail) 02:41:29 Couldn't match expected type `a1 -> a' against inferred type `[t]' 02:41:34 err 02:41:42 > fix ((89:) . (-55:) . (zipWith (+) <*> tail)) 02:41:44 [89,-55,34,-21,13,-8,5,-3,2,-1,1,0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,6... 02:41:44 shachaf: But an associated type family doesn't work, because then you have to pass the associated type family as a type argument to To''. 02:41:53 shachaf: And then you're trying to partially-apply it. 02:41:59 So you run into the same problem. 02:42:23 elliott: Just a joke inspired by the debate about whether the sequence begins with 1 1 or 0 1. 02:42:37 Ah. 02:43:39 fix ((-1:) . (-1:) . (zipWith (+) <*> tail)) 02:43:50 > fix ((-1:) . (-1:) . (zipWith (+) <*> tail)) 02:43:52 [-1,-1,-2,-3,-5,-8,-13,-21,-34,-55,-89,-144,-233,-377,-610,-987,-1597,-2584... 02:43:55 > fix ((0:) . (0:) . (zipWith (+) <*> tail)) -- maximally correct 02:43:57 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,... 02:44:37 > fix ((1:) . (0:) . (zipWith (+) <*> tail)) 02:44:39 [1,0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,109... 02:45:27 > fix ((1:) . (((sqrt 5 + 1)/2):) . (zipWith (+) <*> tail)) -- this is actually the right one 02:45:29 [1.0,1.618033988749895,2.618033988749895,4.23606797749979,6.854101966249685... 02:45:43 yes 02:46:05 @let phi = (sqrt 5 + 1)/2 02:46:07 Defined. 02:46:34 > (phi + 1 :: CReal) / phi == phi / 1 02:46:37 True 02:47:05 > (phi + phi + 1 :: CReal) / (phi + 1) == (phi + 1) / phi 02:47:07 True 02:47:09 See? 02:48:22 "It was a dotfile virus (communicated via infecting workstations) to advertise a fraternity party" 02:49:09 shachaf: You gonna stand up and take that from Nereid??? 02:50:03 elliott: I sure showed that Nereid, eh? 02:50:12 yes 02:50:28 shachaf is fibbing. 02:53:26 Ooh, I know. 02:53:31 I can make a type family indexed by constraints. 02:53:44 Correspond is one of my useful spells it can be used for various things including to determine your longitude. 02:53:54 Let's see if you understand how I might beat the assassin with the Correspond spell and the phase of the moon. 02:54:13 elliott: What is that useful for, though? 02:57:06 *Main> toListH (mapH' showTo'' (HCons 1 (HCons 2 HNil))) 02:57:06 ["1","2"] 02:57:10 zzo38: Well, uh... 02:57:17 *Main> toListH (mapH' showTo'' (HCons 1 (HCons "abc" HNil))) 02:57:17 ["1","\"abc\""] 02:57:19 It's pretty cool! 02:58:10 > [show 1, show "abc"] 02:58:11 ["1","\"abc\""] 02:58:22 > ["1","\"abc\""] 02:58:23 ["1","\"abc\""] 02:58:28 Do I win the "oversimplify the example" game? 02:58:29 > "hi monqy" 02:58:31 "hi monqy" 02:59:17 > let fibs = (go (-) 1 (-1), 0, go (+) 1 1) where { go f a b = fix ((a:).(b:).(zipWith f<*>tail)) }; right (ls,x,r:rs) = (x:ls,r,rs); left (l:ls,x,rs) = (ls,l,x:rs); iterateN n = appEndo . Data.Foldable.foldMap Endo . replicate n in ((\(_,_,rs) -> rs) . iterateN 10 right . iterateN 20 left) fibs 02:59:18 can't find file: L.hs 02:59:20 > let fibs = (go (-) 1 (-1), 0, go (+) 1 1) where { go f a b = fix ((a:).(b:).(zipWith f<*>tail)) }; right (ls,x,r:rs) = (x:ls,r,rs); left (l:ls,x,rs) = (ls,l,x:rs); iterateN n = appEndo . Data.Foldable.foldMap Endo . replicate n in ((\(_,_,rs) -> rs) . iterateN 10 right . iterateN 20 left) fibs 02:59:22 [34,-21,13,-8,5,-3,2,-1,1,0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,... 02:59:30 *Main> :t \to -> toListH . mapH' to 02:59:30 \to -> toListH . mapH' to 02:59:30 :: (Foldr 02:59:30 Constraint 02:59:30 Constraint 02:59:31 Pair 02:59:33 () 02:59:35 (Map Constraint * (* ~ a) (MapResult p ts)), 02:59:37 Foldr Constraint Constraint Pair () (Map Constraint * p ts)) => 02:59:39 To'' p -> HList ts -> [a] 02:59:41 monqy: im wizard 02:59:57 type Constrain't = Constraint -> Void 03:00:26 OK now for foldrH. 03:00:37 I think this type is going to make something like no sense at all. 03:00:44 what are you doing................. 03:00:49 monqy: magic 03:00:56 monqy: toListH :: (All ((~) a) ts) => HList ts -> [a] 03:01:00 monqy: something "pretty cool" 03:01:09 monqy: HList '[String, String, String] is an ok input to toListH. 03:01:13 monqy: but HList '[String, Int] isnt'. 03:01:15 *isn't 03:01:24 elliott: whoa, dude 03:01:29 class (a, b) => Pair a b 03:01:29 instance (a, b) => Pair a b 03:01:29 type family Unit :: Constraint 03:01:29 type instance Unit = () 03:01:29 type All p xs = Foldr Pair Unit (Map p xs) 03:01:32 monqy: "that's the definition of All" 03:01:36 Longcat is long. https://sphotos-a.xx.fbcdn.net/hphotos-ash3/557771_483841354969839_129064845_n.jpg 03:01:42 hion 03:01:44 Pair is just (,) on constraints and Unit is just () on constraints but 03:01:50 it doesn't work if you do that 03:01:53 so I have to redefine them 03:02:07 elliott: It doesn't? 03:02:18 shachaf: nope 03:02:24 shachaf: (() :: Constraint) works but just () doesn't 03:02:25 What if you use type instead to define it? 03:02:26 It thinks it's the wrong kind? 03:02:32 and ((,) :: Constraint -> Constraint -> Constraint) doesn't work at all 03:02:37 apparently only (a, b) is overloaded, not (,) itslef 03:02:40 *itself 03:02:46 type family Unit :: Constraint 03:02:46 type instance Unit = () 03:02:48 this is because you can't do 03:02:52 type Unit :: Constraint = () 03:02:58 it's the only way to give a type synonym a kind signature 03:02:59 type Unit = (() :: Constraint) 03:03:02 doesn't work 03:03:02 try it 03:03:06 Works for me. 03:03:12 You need the parentheses on the right side, though. 03:03:17 oh wtf 03:03:18 you need the parens 03:03:20 that's dumb as hell 03:03:27 "i kno dude" 03:03:29 Why did they make like that? It ought to work. 03:03:35 :t foldr 03:03:36 forall a b. (a -> b -> b) -> b -> [a] -> b 03:04:05 foldrH :: (All p ts) => (forall a. (p a) => a -> b -> b) -> b -> HList ts -> b 03:04:08 ok so this works but it's obviously not ideal 03:04:13 we want a fold on the type-level ts 03:04:33 so foldrH :: ??? -> HList ts -> Foldr f z ts 03:04:35 for some f, z 03:05:21 I guess (forall a. (p a) => a -> b -> f a b) 03:05:32 er 03:05:34 I guess (forall a b. (p a) => a -> b -> f a b) 03:05:37 though that fails to express that the "b" comes from the fold :/; 03:05:39 *:/ 03:09:23 shachaf: Hey, isn't this just induction? 03:09:29 monqy: You use Coq a lot, right? 03:09:31 elliott: What is? 03:09:36 * shachaf wasn't paying many attentions. 03:09:39 monqy: What type does Coq infer for induction on the standard cons list type? 03:09:48 (Or the general recursion scheme, I guess; practically the same for my purposes.) 03:09:50 I have an All typeclass 03:09:58 mine is way bettar 03:10:06 copumpkin: How's yours definde? 03:10:07 *defined 03:10:10 can't remember 03:10:12 I tried a few ways 03:10:13 copumpkin: Mine doesn't involve any typeclasses! 03:10:22 copumpkin: Just type families with results that are used as constraints. 03:10:24 I did one of those at some point 03:10:29 It's worked out just great so far. 03:10:31 but it didn't work very well 03:10:41 but I was using 7.4.1 at the time 03:10:45 maybe shit has improved 03:10:49 http://sprunge.us/HVji 03:10:54 (7.6-only code.) 03:11:03 elliott: list_rect 03:11:03 : forall (A : Type) (P : list A -> Type), 03:11:03 P nil -> 03:11:03 (forall (a : A) (l : list A), P l -> P (a :: l)) -> 03:11:04 forall l : list A, P l 03:11:28 is that what you wanted? 03:11:31 monqy: yep, thanks 03:11:38 monqy: time to write that in haskell.......... 03:11:46 lol 03:12:05 copumpkin: if i close my eyes and pretend hard enough it will be agda 03:12:08 but faster 03:12:11 totally 03:13:50 monqy: foldrH :: (All p ts) => (forall a us. (p a) => a -> f us -> f (a ': us)) -> f '[] -> HList ts -> f ts 03:14:01 monqy: : ) 03:14:03 monqy: : ) 03:14:08 : / 03:14:51 it would be nice to represent the ordering somehow rather than having it be as vague as (All p ts) 03:14:52 but oh well 03:15:05 would need more indexy types for that I guess 03:17:34 i wish i were cool enough to use ZFS 03:18:06 are you cool enough to use btrfs 03:18:15 is btrfs fully baked yet? 03:18:22 I know someone who lost three filesystems to btrfs. 03:18:49 Problems ranging from data corruption to kernel deadlock, or something like that. 03:18:53 kmc: I use JFS. Is that cool? 03:18:55 i'm trying to figure out the best way to stack encryption, LVM, and RAID on my new server 03:18:55 I mean, OS/2 is cool. 03:19:14 and my understanding is that ZFS handles this all together in an integrated sexy way 03:19:35 kmc: I think by "integrated" that means "in its own separate universe to everything else, with its own version of everything". 03:19:45 (I don't think it does LVM; I think it has its own implementation of what LVM does. No?) 03:19:49 that's what i mean 03:20:21 like, i wouldn't need LVM because i could just have a single RAID-Z partition which spans multiple drives of different sizes 03:20:48 Are you using FreeBSD? 03:20:49 no 03:21:18 Uh oh. 03:21:22 I think I need unsafeCoerce to do this one. 03:21:40 are you a bad enough dude to use unsafeCoerce 03:21:49 unsafeCoerce enables quite a lot of type hackery 03:22:02 Has anyone told Oleg about it? 03:22:24 shachaf: You can't spell unsafeCoerce without fun and saeCoerce. 03:22:49 20:21:22 I think I need unsafeCoerce to do this one. 03:22:52 ........................................ 03:23:10 monqy: hey, usually I bring out unsafeCoerce much before this!!! 03:23:20 ........................................ 03:23:37 > ((==) `on` (sort . map toLower . filter isAlpha)) "unsafeCoerce" "cancerous fee" 03:23:40 True 03:23:46 I know there are some things that can be done with unsafeCoerce I think my extensible product types library use unsafe 03:23:58 shachaf: i 03:24:00 shachaf: how 03:24:09 monqy: 03:24:09 data Foldy p = Foldy (forall a us. (p a) => a -> FoldR p us -> FoldR p (a ': us)) 03:24:09 type family FoldR (p :: * -> Constraint) (xs :: [*]) :: * 03:24:09 foldrH :: (All p ts) => Foldy p -> FoldR p '[] -> HList ts -> FoldR p ts 03:24:09 foldrH _ z HNil = z 03:24:09 foldrH foldy@(Foldy f) z (HCons x xs) = unsafeCoerce (f x (unsafeCoerce (foldrH foldy z xs))) 03:24:18 O, it is a anagram? 03:24:25 monqy: foldy named in honour of 4.1 loopy 03:25:21 im very upset about this unsafecoerce 03:25:41 monqy: which one 03:25:58 monqy: feel free to write a patch removing it 03:26:08 monqy: Remember that time I got unsafeCoerce into an edwardk library? 03:26:11 good times 03:26:27 im upset about that too 03:26:33 im upset about both unsafecoerces 03:26:36 elliott: Did you know 1.8% of Hackage is edwardk libraries? 03:26:39 basically i don't want to have to think about stacking all these different kinds of virtual block device 03:26:51 i just wanna say "here are some drives, make sure my shit is redundant and also encrypted, thx" 03:26:52 monqy: one day you'll grow up to be as old as me and then you'll appreciate unsafeCorece 03:26:53 kmc: That's why you buy a sysadmin! 03:27:02 kmc: well I think LVM is bad and people shouldn't use it 03:27:16 why specifically 03:27:18 I guess that also means I think people shouldn't encrypt their drives 03:27:20 or align their blocks on SSDs 03:27:24 kmc: well have you seen it 03:27:28 you don't need LVM to do either of those things 03:27:28 it's the messiest piece of crap I've ever seen 03:27:33 numbers blocks and stuff differently from the kernel 03:27:48 if I wanted to avoid LVM i suppose I could do a RAID0 of my two RAID5 devices 03:27:57 except no i can't 03:27:59 > (0 + 5) / 2 03:28:00 2.5 03:28:04 because they will be different sizes 03:28:06 kmc: btw how do you do the alignment thing without lvm on linux 03:28:14 iirc it was required ages ago 03:28:42 Alignment? 03:28:45 elliott: it seems like LVM would *hurt* there 03:28:51 it's another layer of metadata to mess up the alignment 03:29:16 you would just make sure your partition is aligned 03:29:21 and then tell your mkfs to align shit 03:29:29 (they support this originally for RAID performance) 03:29:30 monqy: ~eaxample use~ 03:29:31 type instance FoldR ((~) a) xs = [a] 03:29:31 toListH' :: (All ((~) a) ts) => HList ts -> [a] 03:29:31 toListH' = foldrH toot [] 03:29:31 toot :: Foldy ((~) a) 03:29:31 toot = Foldy (:) 03:29:48 i can't believe this shit works 03:30:01 shachaf: SSDs erase data in big blocks; for performance you want these to be aligned with filesystem blocks 03:30:14 by "erase" I mean "write" 03:30:15 kmc: Right, but what does that have to do with LVM? 03:30:26 yeah that's what i'm wondering too ;) 03:30:32 I think RethinkDB had a post on their weblog about doing this once. 03:30:34 if you want to use LVM, it's another layer on which you have to get the alignment right 03:30:42 But it looks like they replaced their site with a "launching soon" page. 03:30:45 heh 03:30:47 sucks 03:31:05 (On the other hand maybe they'll be launching soon!) 03:31:20 shachaf: paul graham joke 03:31:21 they weren't already launched 03:31:27 Sort of. 03:31:29 elliott: i can't believe that shit works either 03:31:38 shachaf: did rethinkdb "pivot" 03:31:38 If you can pull of launching a second time, why not? 03:31:45 pie-vot 03:31:49 they make pies now 03:31:51 pivot, n. making a new business except it has the same name and people 03:31:55 artisinal local gluten-free pies 03:31:59 because you didn't have a business model for the previous one 03:32:03 (business model for the new one not required either) 03:32:05 pies that celebrate craftsmanship 03:33:00 kmc: They added a word! https://addons.heroku.com/ 03:33:08 Now it's "Fast, elegant full-text search that celebrates your craftsmanship." 03:33:39 but is it awesome?!?!?!?!? 03:33:55 i must know if this software is awesome, minimalist, suckless, and "done right" 03:34:05 kmc: Does $KMCCOMPANY have fulltext search? 03:34:11 Your customers expect fast and accurate keyword search, autocompletion menus and inputs, faceted browsing, spatial search and so much more. 03:34:13 that's classified 03:34:31 class Company a 03:34:38 data Kmc = Kmc; instance Company Kmc 03:35:04 -!- augur has quit (Read error: Connection reset by peer). 03:35:24 -!- augur has joined. 03:35:59 shachaf: Is there a Void :: Constraint? 03:36:08 elliott: What would that be? 03:36:17 shachaf: A constraint that is never satisfied. 03:36:22 (Int ~ String) works but ew. 03:36:52 I don't know. 03:37:18 At least do (False ~ True) or something. 03:37:36 Or data Blah = A | B; (A ~ B) 03:38:59 I have a Foldr and FoldR that are two different things. 03:39:07 That's good, right? 03:45:43 elliott: do you have a foldR 03:47:01 http://okmij.org/ftp/cpp-digest/toy_OS.txt 03:50:00 monqy: http://hpaste.org/76553 03:53:58 something tells me haskell wasn't made to do this!!!!! 03:54:38 monqy: they should have thought of that before they invented GHC extensions!! 04:27:34 how do i get a specific element out of a tuple in haskell? lets say x out of (x,y,z) 04:28:16 0) Tuples may be the wrong thing to use if you need that; 1) f (x,y,z) = x 04:28:42 or: f (x,_,_) = x 04:29:51 (But probably you want to pattern-match directly in your function, rather than defining f and using it.) 04:29:54 (But see #0.) 04:30:14 yourFunction (x,_,_) = doSomethingWith x 04:31:10 just want to know how to address a value of a tuple.. lets have an example (and please i'm not out to reinvent the whell, just try to get an idea of it) 04:31:13 let v2len va vb = sqrt(((vb!!0) - (va!!0))^2 + ((vb!!1)-(va!!1))^2) 04:31:40 how to make it happen with tuples 04:31:54 !! works only for lists 04:32:42 know what i mean? 04:32:42 you probably shouldn't use (!!) either btw 04:32:47 yep 04:32:56 thats exactly what im asking 04:33:12 v2len (ax,ay,az) (bx,by,bz) = sqrt ((bx-ax)^2 + (by-ay)^2 + (bz-az)^2) 04:33:24 -- was typing what ion was writing, yeah. 04:33:28 ah 04:33:28 ion: Wait, why do you have three values there? 04:33:29 okay 04:33:34 The lists are two elements long in hagb4rd's example. 04:33:45 i see 04:33:46 He was talking about a 3-tuple at first. 04:33:54 yep, thank you 04:33:57 it's clear now 04:35:47 @let matrix = ((1, 0, 0), (2, 4, 4), (0, 0, 0)) 04:35:48 Defined. 04:35:54 :t matrix 04:35:55 forall t t1 t2 t3 t4 t5 t6 t7 t8. (Num t, Num t1, Num t2, Num t3, Num t4, Num t5, Num t6, Num t7, Num t8) => ((t, t1, t2), (t3, t4, t5), (t6, t7, t8)) 04:36:16 nice inferred type 04:36:32 hagb4rd: FWIW if you have a tuple of more than two elements you usually want to define your own data type. 04:36:53 data Row a = Row a a a; data Matrix a = Matrix (Row a) (Row a) (Row a) and then use Matrix Integer, or whatever. 04:37:05 kool 04:38:38 Don’t do this, you don’t want to use lists as geometrical vectors, but here’s a toy example of computing the length between two lists of arbitrary length (assuming both have the same length). I just thought it might be educational wrt. avoiding (!!). f as bs = (sqrt . sum . map (^2)) ds where ds = zipWith (-) as bs 04:40:23 Another thing that is wrong with it is the unchecked assumption that the lists have the same length. 04:41:06 ion: I don't understand why you use where where there instead of just inlining it, possibly using ($). 04:41:56 I thought giving a (somewhat descriptive) name to the intermediate list would make it clearer for a newbie. 04:42:03 okay, i guess there are already some functions for playing arond r2, r3..how would you implement transformation matrices (lets say sth like a rotation in R2 :) 04:42:10 ion: Fair enough. 04:44:28 i would like implement a R3->R2 transformation (display 3D on 2D screen) for some very basic geomatrical figures (vertices, lines).. that would be nice :) 04:45:54 i guess the z-values need to be moved towards the vanishing point in some way 04:47:55 (so the further away you get, the more they get moved towards viewcenter) 04:48:11 gd 04:48:14 whoops 04:48:17 wrong window 04:48:29 is this #haskell now 04:48:45 kmc: yes 04:48:57 kmc: join #haskell and talk about esolangs 04:49:09 420 join #haskell every day 04:49:37 sleep, 'night 04:49:41 Let’s think of a simple case where you only implement the multiplication of a 3×3 matrix with a 3-vector. Using elliott’s Row and Matrix types and also defining 04:49:50 data Vector a = Vector a a a 04:50:01 how would you multiply a single Row with a Vector? 04:50:03 i guess haskell would be a very efficient way to implement such calculations in a few lines of code :) 04:51:14 http://www.youtube.com/watch?v=vSTJL1ikxXY 04:54:25 i wonder if that was rethinkdb's thinking 04:55:00 To prevent people from downloading the newest games, Black and White, a "no experience" security patch was added. This *encourages* downloading the newest games, if you want to use this, isn't it????? 04:58:51 I don't know. 05:01:33 hagb4rd: Feel free to ask if you’re not sure. 05:03:01 yea, i will readmy self on through some docs first.. but cool thank you 05:03:10 consider it noted 05:03:28 I mean, we can go through the implementation right now. 05:03:50 if you want 05:10:43 guess i better try to catch up some of the basic ideas of haskell-typing first.. 05:11:03 don't want to waste your time with this 05:11:33 but we can speak lateron if you like. i would be glad too :) 05:12:04 ok 05:19:51 but we could discuss the algorithm on how to solve the (z-transformation/that thing with the vanishing point).. pseudo code/math/whatever 05:25:03 is z-transformation an esolang 05:25:19 an implementation of it might be 05:25:25 hagb4rd: You might find this useful. http://www.scratchapixel.com/lessons/3d-advanced-lessons/perspective-and-orthographic-projection-matrix/perspective-projection-matrix/ 05:25:49 perfect 05:25:52 -!- nys has quit (Quit: quit). 05:26:04 thank you 05:30:23 kmc: exciting ipwn update: it's just "on hiatus". 05:31:08 barts: also i admit trying to creep some scope from you handsome people ;) 05:33:05 "TWO-THIRDS of Scots would back independence if they believed it would make them £500 better off, according to a poll." 05:33:17 in other news, a third of Scotland would knowingly vote against their own interests 05:33:44 loaded questions, the finest art 05:34:29 -!- ogrom has joined. 05:47:09 elliott: haha 05:51:49 -!- TodPunk has quit (Read error: No route to host). 05:52:44 -!- TodPunk has joined. 06:02:13 -!- ogrom has quit (Quit: Left). 06:10:03 shachaf: Did you know if you d othis 06:10:06 *do this 06:10:07 data Foldy p = Foldy {friend::forall a us. (p a) => a -> FoldR p us -> FoldR p (a ': us)} 06:10:10 you get a type error? 06:10:14 The accessor doesn't type. 06:10:25 WRONG 06:10:32 I get a "FoldR not in scope" error 06:10:44 Has anyone win at Iter Vehems ad Necem with zero contrast? Has anyone win with maximum contrast? 06:11:28 I've never won :( 06:11:38 don't worry monqy 06:11:39 but I've gotten "pretty dang far" and then died and then gotten bored 06:11:45 you win at life 06:11:51 "it's true" 06:12:15 : o 06:17:56 Expected type: a -> FoldR p us -> FoldR p ((':) * a us) 06:17:56 Actual type: a -> FoldR p us0 -> FoldR p ((':) * a us0) 06:17:59 ghc 06:19:02 i heard ghc was the worst compiler ever 06:19:17 me too 06:19:45 this must be penance for your unsafecoerce shenans 06:20:05 barts: i heard barts smells 06:20:14 who knows the real trutrths in the world........................... 06:20:18 eat my shorts 06:20:25 good one 06:20:38 monqy: ps this is me trying to undo said `shenans' 06:21:52 it's still upset 06:25:19 sacrifice a virgin compiler 06:27:09 barts: btw who are you 06:27:30 `pastelog barts 06:27:50 hlep 06:27:55 `pastelogs barts 06:27:59 h t h 06:28:10 No output. 06:28:16 `pastelog pastelog 06:28:20 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.18045 06:28:26 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.6290 06:29:05 Why did that work? 06:29:23 `run ls -lh $(which pastelog) 06:29:27 ​-rwxr-xr-x 1 5000 0 602 Oct 21 06:29 /hackenv/bin/pastelog 06:31:28 data Foldy p = Foldy (forall a us. (p a) => a -> FoldR p us -> FoldR p (a ': us)) 06:31:28 data Foldy' p = Foldy' (forall a us. (p a) => HList us -> a -> FoldR p us -> FoldR p (a ': us)) 06:31:38 shachaf: Can you write a function to convert between these two types without using unsafeCoerce at all? 06:31:45 Declare type family FoldR (p :: * -> Constraint) (xs :: [*]) :: * 06:31:51 and data HList :: [*] -> * 06:32:11 Foldy p -> Foldy' p is what's desired. 06:33:05 elliott: @paste or something, I can't read IRC lines like this. 06:33:08 * shachaf is barely awake. 06:34:42 shachaf: http://sprunge.us/iPBU 06:34:52 shachaf: The only change between the two types is the inclusion of a dummy parameter at the front. 06:34:55 Your conversion can ignore it entirely. 06:35:04 It's only there to unify the type argument of the HList with the us elsewhere. 06:35:15 i.e., in spirit, you want convert (Foldy p) = Foldy' (\_ -> p). 06:35:18 (But you'll find that won't work.) 06:36:07 That doesn't even compile. 06:36:13 Your paste. 06:36:30 I guess you need to import GHC.Prim or something. 06:36:35 Oh, right. 06:36:39 Yes, you need to import that for Constraint. 06:36:46 GHC.Exts, rather. 06:38:31 elliott: whoa, dude, convert (Foldy p) = Foldy' (\_ -> p) doesn't work. 06:39:00 Yep. 06:39:05 It's because type family. 06:39:11 I think. 06:39:14 Can you think of a way to fix it? 06:39:37 Note that Foldy' (\_ -> unsafeCoerce p) does work, I think. It just refuses to unify for some reason. 06:40:32 Can you simplify this a bit? 06:40:41 I bet the whole HList thing isn't necessary. 06:40:44 shachaf: Sure. 06:40:46 (It isn't.) 06:41:22 And even foo (Foldy p) = Foldy p doesn't type-check. 06:41:56 Right. 06:41:58 shachaf: http://sprunge.us/EFQX 06:42:04 (Plus the relevant extensions.) 06:42:07 Then write Foo a -> Foo' a. 06:42:14 (Note: I haven't tested that this has the same problem, but I'm virtually certain it does.) 06:42:31 shachaf: Er. 06:42:38 shachaf: data Foo a = ... should just be data Foo = ... 06:42:41 Same for Foo' a = ... 06:42:43 You want Foo -> Foo'. 06:43:18 can you recommend a haskell gui? 06:43:22 ide 06:43:35 i use vim and emacs 06:43:39 there's leksah if you really want an ide 06:43:44 but i don't, personally 06:45:31 yea i installed leksha but i already _hate_ it 06:45:47 okay 06:45:52 notepad will do 06:45:59 elliott: type family Hi a; data Foo = Foo (forall a. Hi a); conv (Foo x) = Foo x 06:47:54 shachaf: I take it that doesn't work? 06:47:57 shachaf: That doesn't really bother me though. 06:48:01 I know you can't just write it as identity. 06:48:06 shachaf: (And BTW I think that is intentional behaviour.) 06:48:25 elliott: If that doesn't work, why do you expect your more complicated case to? 06:48:34 shachaf: Because you have to do it differently. 06:48:35 I don't know how. 06:48:39 But I bet you can use the forall somehow. 06:54:30 foo :: (forall a. Hi a) -> (forall b. Hi b) 06:54:35 Can you write that? 06:54:49 shachaf: Can you? 06:55:01 Maybe. 07:01:57 elliott: "NB: `Hi' is a type function, and may not be injective" 07:02:01 What if you just use a data family instead? 07:02:30 shachaf: That would defeat the whole point. 07:02:38 The only reason I have a type family is so that it can be a type synonym family. 07:04:00 hate the synonym not the syn 07:08:23 GNU is my IDE 07:11:03 hi 07:11:13 hi monqy :') 07:11:33 what s'up!! 07:12:30 monqy: EVERYTHING 07:25:13 elliott: What if you just write some instances? 07:28:30 shachaf: Like what? 07:28:46 Any. 07:29:55 shachaf: What kind of instance? 07:30:08 type instance FoldR blah 07:30:13 Presumably this family has instances? 07:30:59 shachaf: Sure. 07:31:03 Adding an instance doesn't change anything. 07:31:08 Since I have them. 07:37:09 -!- epicmonkey has joined. 07:53:10 how would i just have these few lines of code executed everytime i start ghci?: 07:53:11 data Vector4 a = Vector4 a a a a; let p1 = 0.0 0.0 0.0 0.0; 07:53:20 sry 07:55:44 fuck this can't be so complicated.. modules imports omg.. do i need all this shit? just want to exec this 2 lines.. nothing more. please help 07:56:31 data Vector4 a = Vector4 a a a a; let p1 = Ve0.0 0.0 0.0 0.0; 07:56:41 data Vector4 a = Vector4 a a a a; let p1 = Vector4 0.0 0.0 0.0 0.0; 07:57:04 damnit sry.. the last version works. 07:57:48 but howto run as a scipt/batch? 08:00:45 @data Vector4 a = Vector4 a a a a; 08:00:45 Unknown command, try @list 08:00:56 >data Vector4 a = Vector4 a a a a; 08:16:38 #!/usr/bin/env runhaskell 08:23:02 thx barts 08:42:35 -!- Phantom_Hoover has joined. 08:49:25 -!- Nisstyre-laptop has quit (Ping timeout: 246 seconds). 08:49:54 yw 08:57:33 -!- MoALTz has joined. 09:13:59 -!- monqy has quit (Quit: hello). 09:16:54 Confucius say too much. -- Recent Chinese Proverb 09:17:15 i like that zzo38 09:17:23 `addquote Confucius say too much. -- Recent Chinese Proverb 09:17:33 871) Confucius say too much. -- Recent Chinese Proverb 09:28:52 shachaf: Does Rust support dynamic loading? 09:32:23 -!- zzo38 has quit (Remote host closed the connection). 09:32:37 why does #esoteric only talk about mainstream computer languages today 09:32:56 next up: agda 09:34:34 -!- Phantom_Hoover has quit (Ping timeout: 246 seconds). 09:44:32 -!- Phantom_Hoover has joined. 09:47:06 barts: you are welcome to supply discussion of esolangs 09:47:19 failing that the channel is more people who like esolangs talking about random crap than actually a channel about esolangs 09:47:57 sometimes the people don't even really like esolangs 09:48:13 Except in clear help channels usually there are just people having the same interestst 09:48:30 but that does not mean they talk about what the name of the channel would suggest :) 09:51:17 but to change the topic into a random direction 09:51:34 what about an esolang only accepting a bunch of differential equations as programs? 09:52:55 what about an esolang only accepting equations which are wrong . 09:53:36 what about an esolang 09:53:47 what about an esolang where you are only allowed to work on monids 09:53:51 *monoids 09:54:11 essentially that means you only have one 'instruction' 09:54:19 you ruined the pattern mroman 09:54:21 now you must die 09:54:31 what about an esolang where you must die? 09:54:46 hellang :) 10:00:00 what about an esolang which is so esoteric it can't possibly exist. 10:04:06 what about 10:11:31 -!- barts_ has joined. 10:12:24 -!- nooga has joined. 10:12:28 https://github.com/smtlaissezfaire/bcompiler whaaa 10:15:09 -!- barts has quit (Ping timeout: 276 seconds). 10:42:53 -!- carado has joined. 10:49:43 -!- Jafet has quit (Quit: Leaving.). 10:51:55 -!- epicmonkey has quit (Remote host closed the connection). 10:52:17 -!- epicmonkey has joined. 10:52:29 -!- Jafet has joined. 11:02:19 -!- Jafet has quit (Quit: Leaving.). 11:14:46 -!- ogrom has joined. 11:15:01 -!- ogrom has quit (Client Quit). 11:17:55 -!- nooga has quit (Ping timeout: 260 seconds). 11:32:40 -!- Phantom_Hoover has quit (Remote host closed the connection). 11:50:35 -!- nooga has joined. 12:20:27 -!- nooga has quit (Ping timeout: 260 seconds). 12:57:54 @tell ion [hagb4rd.geometry.transformation.haskell] i've got some (very basic) work done now.. guess this would be a good point to start from: http://pastie.org/5093143 12:57:55 Consider it noted. 12:59:35 > p = "np" 12:59:37 : parse error on input `=' 12:59:42 > let p = "np" in p 12:59:44 "np" 13:00:01 -!- carado has quit (Ping timeout: 246 seconds). 13:00:22 -!- Jafet has joined. 13:12:19 -!- nooga has joined. 13:12:32 -!- carado has joined. 13:18:45 -!- nooga_ has joined. 13:21:35 -!- nooga has quit (Ping timeout: 246 seconds). 13:29:10 -!- nooga has joined. 13:31:54 -!- nooga_ has quit (Ping timeout: 240 seconds). 13:38:17 -!- Frooxius has joined. 13:42:38 -!- nooga_ has joined. 13:45:47 -!- nooga has quit (Ping timeout: 252 seconds). 13:58:27 -!- hagb4rd has quit (Read error: Connection reset by peer). 14:13:20 -!- Vorpal has joined. 14:26:20 -!- hagb4rd has joined. 14:42:30 -!- nooga has joined. 14:45:14 -!- nooga_ has quit (Ping timeout: 240 seconds). 14:47:36 -!- ogrom has joined. 14:50:04 -!- nooga has quit (Ping timeout: 246 seconds). 14:50:36 -!- nooga has joined. 15:02:08 -!- nooga has quit (Ping timeout: 255 seconds). 15:15:48 -!- ogrom has quit (Quit: Left). 15:17:15 -!- AnotherTest has joined. 15:17:24 hello 15:18:30 hello 15:18:44 -!- Arc_Koen has joined. 15:18:57 hello 15:19:07 hello 15:23:32 hello 15:24:23 hello 15:24:51 hello 15:25:09 I feel so welcome 15:25:15 that's overwarming 15:25:46 hey 15:25:47 sorry we actually hate you 15:25:55 just having a chorus of hellos and you happened to drop by 15:26:02 now we will kill you 15:28:36 oh, now I understand why that tinkerbell guy felt rejected 15:28:54 he must have dropped by in the middle of a go out chorus, or something 15:29:43 no that's just because we're all completer asses 15:30:54 Well maybe the go out chorus was a consequence of that 15:38:20 mroman: #include is working 15:45:15 #include 15:48:56 You don't need < > or " " though :p 15:51:46 you're not using the normal C preprocessor? 15:54:06 no, he's using a parallel version 15:57:25 -!- atriq has joined. 15:58:33 kmc: This is for HELP 15:58:58 that's an esolang? 15:59:01 I think I might stop using Ubuntu 15:59:10 BUT I DON'T KNOW WHAT TO SWITCH TO 15:59:14 it's pretty easy to invoke the regular C preprocessor 15:59:24 though it will make some assumptions, like removing C comments 15:59:30 that might be unsuitable for some languages 15:59:48 GHC Haskell uses CPP in some circumstances and it's kinda gross 16:01:25 -!- copumpkin has quit (Ping timeout: 248 seconds). 16:01:59 -!- copumpkin has joined. 16:02:13 kmc: No just a preprocessor for esolangs 16:02:38 -!- atriq has quit (Quit: Leaving). 16:02:54 atriq: I switched to Debian some time ago. I find it better than ubuntu was when I stopped using it 16:03:00 oh 16:03:10 @tell atriq I switched to Debian some time ago. I find it better than ubuntu was when I stopped using it 16:03:10 Consider it noted. 16:04:45 i've been happy with Debian since forever 16:06:18 -!- atriq has joined. 16:08:46 :t () 16:08:46 atriq: You have 1 new message. '/msg lambdabot @messages' to read it. 16:08:47 () 16:09:08 AnotherTest, okay, I'll keep Debian in mind 16:11:11 Debian is maintained by competent, careful people 16:12:04 Does WINE work on Debian? (I'm guessing yes) 16:12:13 they don't change everything every six months in order to chase some half-baked imitation of Apple products 16:12:16 yes 16:12:25 there's very little open-source Linux software that is distro-specific 16:12:32 and yes Debian has packages for WINE 16:12:36 In the Future will Steam work on Debian (I'm still guessing yes) 16:12:43 beats me 16:13:01 i mean, someone will almost certainly figure out a way 16:13:04 debian and ubuntu are pretty close 16:13:10 they use the same package manager 16:13:16 sometimes you can install ubuntu packages on debian as-is 16:13:47 Yes 16:14:24 I'd rather say debian packes on ubuntu as-is 16:14:37 Not sure if ubuntu has their own package managing system 16:14:56 I think they still use debian packages 16:15:04 that's not relevant to the question of whether steam will work on debian 16:15:11 Valve said that Steam on Linux is being released as a closed external beta some point in October, which is Valve time for around about Christmas 16:15:25 yes, ubuntu uses .deb packages, installed with dpkg and apt and such 16:15:34 ubuntu releases are distributed as apt repositories 16:15:45 it is much the same infrastructure as debian 16:16:00 but e.g. an ubuntu package might depend on a version of libc which doesn't exist in debian's repositories 16:16:10 which is why it doesn't always work 16:16:41 commercial linux software is often statically linked or bundled with its own libraries in order to avoid such problems 16:17:06 even if not, you could set up an ubuntu chroot to run steam, it's not too hard 16:18:08 Or manually unpack the .deb 16:18:25 that won't get you the libc version you need 16:18:33 or do you mean, unpack the ubuntu libc .deb 16:18:36 and all the other dependencies 16:18:46 and then wire them all up in a subdirectory 16:19:16 you could do that, but setting up a proper ubuntu chroot is probably easier 16:19:24 debian/ubuntu have good tools for creating and managing chroots 16:20:13 kmc: In theory, the libc version should be ABI compatible, apt just doesn't know that. 16:21:12 That is, if you just *unpack* Ubuntu packages on Debian, and manually make sure the dependencies are installed, it'll mostly work. 16:21:20 yeah, perhaps 16:21:33 glibc does break ABI compatibility from time to time though 16:21:39 Some of the other libraries might have ABI issues though. 16:21:43 but still, this probably works for current debian vs. current ubuntu 16:21:44 yeah 16:27:06 How easy is it to install Debian over Ubuntu? 16:27:16 by "over" you mean "instead of"? 16:27:27 Yes-ish 16:27:30 Yes 16:27:42 not much harder 16:28:14 I mean, "over" as in "I've got Ubuntu now, and I want to go to Debian" 16:28:31 can you back up the files you care about and do a clean reinstall? 16:28:58 That is feasible 16:32:30 -!- augur has quit (Remote host closed the connection). 16:44:05 hello 16:44:11 Hey 16:44:21 morning 16:44:31 @time barts_ 16:44:32 Local time for barts_ is Sun Oct 21 18:44:18 2012 16:44:44 It's not morning for either of us 16:46:36 there is a script which you can run as root on any linux and it makes it into a debian 16:46:55 @time atriq 16:46:56 Local time for atriq is Sun Oct 21 17:46:56 16:47:10 you're british! 16:47:15 Yes 16:47:17 Yes I am 16:47:24 I thought this was already established 16:47:29 `? hexham 16:47:34 Hexham is a European town. There are nine people in Hexham, and at least two of them are in this channel. Taneb looks after the ham. 16:47:37 hmm, maybe 16:47:55 But yes, I'm one of the thousands of people living in Hexham 16:48:31 I'll come to your kingdom for new year's eve 16:49:00 why would you do that 16:49:26 To see the queen's speech? 16:49:27 I dunno 16:49:42 I think you can watch the queen's speech from outside the UK 16:49:54 And I think it's on at Christmas, not New Years 16:50:58 barts_ weeeeeeell 16:51:08 because my last few new year's eves in france sucked 16:51:20 because last yeat in london was greate 16:51:27 http://www.reddit.com/r/ProgrammerHumor/comments/11u0rx/you_all_have_probably_already_seen_these_but/ 16:51:31 oh and also because of a girl 16:51:33 I might be slightly easily amused 16:51:47 Arc_Koen, is this the girl mentioned on your user page? 16:52:01 a candidate 16:52:04 -!- carado has quit (Ping timeout: 246 seconds). 16:52:21 Don't you think restricting by gender is close-minded? 16:53:06 well I'm guessing if that restriction turns out to be wrong my mind will blow out open 16:53:55 I just deleted a gigabyte's worth of recording of the Queen's Diamond Jubilee Concert of 2012. 16:54:14 They sent it out in Finnish tellyvision. 16:54:23 I don't know about any yearly speeches, though. 16:56:05 -!- MoALTz has quit (Quit: Leaving). 17:03:37 -!- augur has joined. 17:04:42 -!- carado has joined. 17:26:04 Wait. There's a patent on John Titor's time travel machine? 17:26:19 Hmm, just the theory 17:27:29 That's still... erm 17:28:26 Can I patent a process for making a turing machine that solves the halting problem? 17:28:35 Maybe I could get a patent on a way to make 1+1=3 17:29:23 -!- atriq has quit (Ping timeout: 246 seconds). 17:32:34 there are many patents on impossible things 17:32:41 there are patents on algorithms to compress any file by at least one byte 17:34:16 o.O 17:35:13 I have to know what those claim about compressing the 0-byte file 17:35:22 Actually, I'm curious to see one in general 17:35:46 (And yes, I know compressing the 0-byte file isn't the biggest problem. Although I don't know if it might be connected) 17:36:07 Removing a byte from a 0-byte file *is* not exactly easy. 17:36:08 pigeonhole principle 17:36:25 But it's not like patents need to make sense. 17:37:13 yeah, i'm not sure it's actually a problem that people can patent impossible things 17:37:19 http://gailly.net/05533051.html 17:37:51 Oh, it's just one bit. 17:37:57 (If that's the same.) 17:38:20 There was a Finnish nonsense compression thing around few years back. 17:38:26 Something to do with repeated compression. 17:38:38 There were lots of arguments on the tubes, as usual. 17:38:54 "Of course, this does not take into account any overhead registers or other "house-keeping" type information which must be tracked. However such overhead tends to be negligible when processing the large quantities of data typically encountered in data compression applications." 17:38:54 I think they also claimed something about compressing every file. 17:38:55 :D 17:39:13 kmc: Presumably it's a special case of something that is a problem, though. 17:39:33 also i like the old DOS "compression" utilities where "compress" is actually just delete, and "decompress" recovers your file from the free blocks on the hard drive 17:39:57 shachaf: the patent system? 17:40:14 Well, that people can patent things that patent examiners don't know whether are possible or not. 17:40:29 is that actually their job, though? 17:41:25 i might prefer a system where the government's role in the patent system is minimized and instead you incentivize private companies to take down bad patents 17:42:13 Bleh, I can't recall the name of the company involved. As I recall, they were doing something completely different, and then their resident genius programmer just figured out the ultimate compression algorithm. 17:42:18 Well, it's easy to make a compression algorithm that in the worse case expands the data by 1 bit. 17:42:58 Sgeo: That's nothing. I can make a compression algorithm that in the *best* case expands the data by 1 bit. 17:43:21 * kmc invests in shachaf's company 17:43:40 What do you call an algorithm that takes an algorithm as input? 17:43:52 an algorithm 17:44:11 unless you are guido van rossum then you call it "oh god what is that get it away from me" 17:44:15 Yes, stop being so racist, Sgeo. 17:44:28 Maybe it was a setup for a joke, though? 17:44:33 nope 17:45:40 Aw, the company's website has disappeared. 17:46:49 -!- elliott has quit (Ping timeout: 272 seconds). 17:48:16 Anyway, the idea was that you can just rerun it over and over again to compress everything to the "theoretical limits". 17:48:58 And the company was an ad agency "for reals", they just happened across the ultimate secret. 18:02:41 http://uncyclopedia.wikia.com/wiki/Haskell <- the f*? 18:04:59 kmc: Compress is delete? Now that's lossy compression 18:09:04 -!- carado has quit (Ping timeout: 246 seconds). 18:11:28 -!- AnotherTest has quit (Quit: Leaving.). 18:33:09 -!- hagb4rd has changed nick to hagb4rd|afk. 18:33:11 >retro music tip .. beautiful deep black female voice.. https://docs.google.com/file/d/0BzorK_eWYM0-bXJ1b3hWcmJxOTA/edit 18:36:17 "Scala has a lot of upside because it is extensible and Clojure has a lot of upside because it is an easy language to learn." 18:36:18 what. 18:36:44 Well, I mean, I imagine Clojure being easier to learn than Scala, but um, how is Scala more extensible? 18:49:44 -!- MoALTz has joined. 18:54:56 Sgeo: the smaller it is, the more you can extend it! 18:57:16 What does extensible even mean for a language? 18:57:20 defmacro stuff? 18:58:44 it means whatever you need it to mean in order to prove the point you're making 18:58:51 like every other adjective applied to programming languages 18:59:50 can "programming" be considered an adjective? 19:00:56 Well, there are programming books, so I suppose so 19:01:23 Also programming languages 19:01:30 The programming language known as English 19:02:21 I'm sure it was linked recently, http://www.osmosian.com/ 19:04:43 -!- Arc_Koen has quit (Ping timeout: 246 seconds). 19:05:30 Sgeo: The problem is that there is no compiler for English 19:05:57 Isn't there an implementation? Not sure what it is though 19:06:43 But it's not a proper one. Won't work for all imputs 19:07:42 natural language would be a *terrible* programming language 19:07:56 English is terrible for specifying precise instructions 19:07:58 Agreed 19:08:01 * Sgeo meant of Osmosian Order's language 19:08:12 Maybe you could use Lojban 19:08:16 But not English 19:12:22 -!- Arc_Koen has joined. 19:15:15 honestly did any of you learn lojban? 19:16:15 it sounded very interesting, but at the same time learning a language that no one actually speaks seems kind of a waste when there are so many useful languages 19:17:37 I've looked at it before 19:17:55 There are lojban IRC channels 19:38:35 so I've made this emmental program 19:38:37 almost 19:39:53 it's very "destructive" as it redefines all of char 3-255 to mean "subtract 3 and try again" and char 0 to mean "output '0'", char 1 to mean "outout '1'", char 2 to mean "output '2'" 19:40:17 -!- augur_ has joined. 19:40:22 problem is, once you've defined everything like that, you cannot actually begin the last "loop" of -3 decrements 19:40:42 because you have no char left to be the triggering instruction! 19:41:37 so I only redefined chars 3-254, and before doing so, I defined char 255 to mean "redefine yourself to mean the same as the others, then take a char from input, then execute the char taken from input" 19:41:56 -!- augur has quit (Ping timeout: 252 seconds). 19:42:16 so once I've redefined everything else, I can still use char 255 to begin 19:42:22 except 19:42:30 I DON'T HAVE A CHAR 255 ON MY KEYBOARD 19:43:11 * Sgeo thinks its neat that Clojure will yell at you for at least one sort of attempted unhygienic macro 19:43:15 http://ideone.com/PgiIQd 19:44:16 hmm, the compilers I use most often have the habit of halting when there are too many inconsistencies 19:45:08 but this is ridiculous: I have to substitute a printable char for char 255 19:45:49 and printable char are in the middle of all that, so I can't make a pseudo-for loop "push chars 4 to 254 on the stack" 19:49:55 `chr 70 19:49:55 oh wait that's EgoBot 19:49:58 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: chr: not found 19:51:49 Arc_Koen: I've studied Lojban some, but I stopped... over a year ago, I think. 19:51:51 oh wait I could be clever 19:52:53 tswett: Lojban does sound very attractive but seriously didn't you think learning a language that might connect you with your neighbours would be better? 19:53:15 Yes. 19:53:27 Above all, Lojban is an experiment. 19:53:44 (though I realize that's a pretty odd consideration to have in the channel for esoteric programming languages) 20:02:36 it would be interesting to see what lojban becomes if it had some actual native speakers from birth 20:02:44 i bet a lot of the logical purity goes right out the window 20:09:41 this is one of the reason I'd like to be immortal 20:11:34 maybe after so many hundreds of years, and raising many many children, it eventually becomes enough of a routine thing that you start spicing it up with experiments of this kind 20:12:33 -!- zzo38 has joined. 20:13:58 ok, so, the program works properly when input is congruent with either 0 ro 2 modulo 3 20:14:17 but when it's congruent with 1 it complains the stack is empty 20:17:20 a logical conclusion would be that there's a difference between the definition of 1 and the definitions of 0 and 2 20:17:40 ; #35#52#56#46 #! 20:17:40 ; #35#52#57#46 #1! 20:17:41 ; #35#53#48#46 #2! 20:17:57 they seem close enough to me 20:18:20 ohhhhhh or there is a problem with the definition of 4 20:18:25 of course 20:33:36 -!- hagb4rd|afk has quit (Quit: hagb4rd|afk). 20:36:43 -!- monqy has joined. 21:00:17 @tell hagb4rd Some suggestions wrt. the code: 0) The semicolons are redundant, i’d remove them. 1) Run hlint against the code, it will give some good suggestions. 2) After seeing how that implementation will be nicer to read with hlint’s suggestions, switch from record accessors to pattern matching. That will make it even nicer. 21:00:17 Consider it noted. 21:04:02 @tell hagb4rd You can use “data Vector4 … = … deriving (Eq, Read, Show)” to get default Show etc. instances. 21:04:02 Consider it noted. 21:06:31 -!- augur_ has quit (Remote host closed the connection). 21:13:31 @tell hagb4rd Also, when you feel you’ve learned everything you can from writing your own vector and matrix math implementation, i’d suggest switching to HMatrix or REPA. They are mature, optimized libraries. 21:13:32 Consider it noted. 21:18:22 -!- Nisstyre-laptop has joined. 21:27:11 -!- augur has joined. 21:32:18 -!- nortti has quit (Ping timeout: 252 seconds). 21:32:59 -!- aloril_ has quit (Ping timeout: 260 seconds). 21:34:10 -!- nortti has joined. 21:41:50 -!- aloril_ has joined. 22:00:30 it's kind of terrifying when your javascript code grows from 10 lines in a