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