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: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: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:28 <elliott> <elliott> (a ~ String -> String, a ~ Int -> String)
01:02:30 <elliott> <elliott> and a = forall a. (Show a) => a -> String
01:02:57 <shachaf> I don't know if there's such a thing. It seems kind of weird.
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:16:06 <shachaf> @tell monqy what have you done?!
01:16:41 <lambdabot> monqy: You have 1 new message. '/msg lambdabot @messages' to read it.
01:17:07 <Arc_Koen> uh, oh, can you put comments in urls?
01:17:21 <Arc_Koen> like, using '.' inside of the url and everything after it is ignored
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: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: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: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: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: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:54 <elliott> class (Show a, r ~ String) => Shoe a r
02:33:03 <elliott> instance (Show a, r ~ String) => Shoe a r
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: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: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: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: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: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: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:46:34 <shachaf> > (phi + 1 :: CReal) / phi == phi / 1
02:47:05 <shachaf> > (phi + phi + 1 :: CReal) / (phi + 1) == (phi + 1) / phi
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:28 <Jafet> shachaf is fibbing.
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:17 <elliott> *Main> toListH (mapH' showTo'' (HCons 1 (HCons "abc" HNil)))
02:58:28 <elliott> Do I win the "oversimplify the example" game?
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: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:35 <elliott> (Map Constraint * (* ~ a) (MapResult p ts)),
02:59:37 <elliott> Foldr Constraint Constraint Pair () (Map Constraint * p ts)) =>
02:59:57 <shachaf> type Constrain't = Constraint -> Void
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: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:29 <elliott> instance (a, b) => Pair a b
03:01:29 <elliott> type family Unit :: Constraint
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: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: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: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:12 <shachaf> You need the parentheses on the right side, though.
03:03:29 <zzo38> Why did they make like that? It ought to work.
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:05:21 <elliott> I guess (forall a. (p a) => a -> b -> f a b)
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:09:23 <elliott> shachaf: Hey, isn't this just induction?
03:09:29 <elliott> monqy: You use Coq a lot, right?
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:10:06 <elliott> copumpkin: How's yours definde?
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:29 <elliott> It's worked out just great so far.
03:11:03 <monqy> elliott: list_rect
03:11:03 <monqy> : forall (A : Type) (P : list A -> Type),
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:38 <elliott> monqy: time to write that in haskell..........
03:12:05 <elliott> copumpkin: if i close my eyes and pretend hard enough it will be agda
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:51 <elliott> it would be nice to represent the ordering somehow rather than having it be as vague as (All p ts)
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: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: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:46 <zzo38> I know there are some things that can be done with unsafeCoerce I think my extensible product types library use unsafe
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 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: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: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: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: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:31 <elliott> type instance FoldR ((~) a) xs = [a]
03:29:31 <elliott> toListH' :: (All ((~) a) ts) => HList ts -> [a]
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:31:05 <shachaf> (On the other hand maybe they'll be launching soon!)
03:31:21 <kmc> they weren't already launched
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: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: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: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: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: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 <elliott> you probably shouldn't use (!!) either btw
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 <elliott> ion: Wait, why do you have three values there?
04:33:34 <elliott> The lists are two elements long in hagb4rd's example.
04:33:46 <ion> He was talking about a 3-tuple at first.
04:35:47 <hagb4rd> @let matrix = ((1, 0, 0), (2, 4, 4), (0, 0, 0))
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: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: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: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:17 <kmc> wrong window
04:48:29 <kmc> is this #haskell now
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?????
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: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: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:52 -!- nys has quit (Quit: quit).
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: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:07 <elliott> data Foldy p = Foldy {friend::forall a us. (p a) => a -> FoldR p us -> FoldR p (a ': us)}
06:10:14 <elliott> The accessor doesn't type.
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:39 <monqy> but I've gotten "pretty dang far" and then died and then gotten bored
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:19:02 <barts> i heard ghc was the worst compiler ever
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:38 <elliott> monqy: ps this is me trying to undo said `shenans'
06:25:19 <barts> sacrifice a virgin compiler
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: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: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:30 <shachaf> I guess you need to import GHC.Prim or something.
06:36:39 <elliott> Yes, you need to import that for Constraint.
06:38:31 <shachaf> elliott: whoa, dude, convert (Foldy p) = Foldy' (\_ -> p) doesn't work.
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:41:22 <shachaf> And even foo (Foldy p) = Foldy p doesn't type-check.
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:38 <elliott> shachaf: data Foo a = ... should just be data Foo = ...
06:43:18 <hagb4rd> can you recommend a haskell gui?
06:43:39 <elliott> there's leksah if you really want an ide
06:45:31 <hagb4rd> yea i installed leksha but i already _hate_ it
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:39 <elliott> But I bet you can use the forall somehow.
06:54:30 <shachaf> foo :: (forall a. Hi a) -> (forall b. Hi b)
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:25:13 <shachaf> elliott: What if you just write some instances?
07:29:55 <elliott> shachaf: What kind of instance?
07:30:13 <shachaf> Presumably this family has instances?
07:31:03 <elliott> Adding an instance doesn't change anything.
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: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:56 <hagb4rd> >data Vector4 a = Vector4 a a a a;
08:16:38 <barts> #!/usr/bin/env runhaskell
08:42:35 -!- Phantom_Hoover has joined.
08:49:25 -!- Nisstyre-laptop has quit (Ping timeout: 246 seconds).
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: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: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: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:47 <mroman> what about an esolang where you are only allowed to work on monids
09:54:11 <mroman> essentially that means you only have one 'instruction'
09:54:19 <elliott> you ruined the pattern mroman
09:54:31 <mroman> what about an esolang where you must die?
10:00:00 <mroman> what about an esolang which is so esoteric it can't possibly exist.
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:59:37 <lambdabot> <no location info>: parse error on input `='
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:18:44 -!- Arc_Koen has joined.
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: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:45:15 <kmc> #include <completer_asses.h>
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:58 <kmc> that's an esolang?
15:59:01 <atriq> I think I might stop using Ubuntu
15:59:10 <atriq> BUT I DON'T KNOW WHAT TO SWITCH TO
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: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:10 <AnotherTest> @tell atriq I switched to Debian some time ago. I find it better than ubuntu was when I stopped using it
16:04:45 <kmc> i've been happy with Debian since forever
16:06:18 -!- atriq has joined.
16:08:46 <lambdabot> atriq: You have 1 new message. '/msg lambdabot @messages' to read it.
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: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: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: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: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:27:06 <atriq> How easy is it to install Debian over Ubuntu?
16:27:16 <kmc> by "over" you mean "instead of"?
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:32:30 -!- augur has quit (Remote host closed the connection).
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:56 <lambdabot> Local time for atriq is Sun Oct 21 17:46:56
16:47:24 <atriq> I thought this was already established
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: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:26 <atriq> To see the queen's speech?
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: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: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: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: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: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: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: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: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: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: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: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:08:01 * Sgeo meant of Osmosian Order's language
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: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: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: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: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: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:18:20 <Arc_Koen> ohhhhhh or there is a problem with the definition of 4
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:04:02 <ion> @tell hagb4rd You can use “data Vector4 … = … deriving (Eq, Read, Show)” to get default Show etc. instances.
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: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:19 <shachaf> I'd rather be programming in JavaScript than in bash, though.
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: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: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: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: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.