←2013-02-02 2013-02-03 2013-02-04→ ↑2013 ↑all
00:02:10 -!- carado has quit (Ping timeout: 246 seconds).
00:05:22 <oerjan> ^show list
00:05:23 <fungot> (Taneb atriq Ngevd Fiora nortti Sgeo alot)S
00:05:38 <oerjan> ^def list ul (Taneb atriq Ngevd Fiora nortti Sgeo ThatOtherPerson alot)S
00:05:39 <fungot> Defined.
00:05:59 <Sgeo> Who is ThatOtherPerson?
00:06:05 <oerjan> fizzie: needs saving hth
00:06:15 <Sgeo> ^save
00:06:27 <Sgeo> no?
00:06:31 <Sgeo> ok
00:06:35 <oerjan> i do not think that command responds to anyone but fizzie
00:09:58 <kmc> hi fungot
00:09:59 <fungot> kmc: he is so silly!
00:10:14 <kmc> fungot: me or you?
00:10:15 <fungot> kmc: for a while it was frustrating. most of john's dad, who broke a huge wizard is. you don't like is my mother's obsession with clocks. the sooner all these idiots stop being alive the better of you.
00:10:26 <kmc> ^style
00:10:26 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher fungot homestuck* ic irc iwcs jargon lovecraft nethack pa qwantz sms speeches ss wp youtube
00:10:40 <kmc> ^style fungot
00:10:40 <fungot> Selected style: fungot (What I've said myself)
00:10:48 <kmc> fungot: hi
00:10:48 <fungot> kmc: is that something you know and and the cases that required to actually mutate the original ( sorted, perhaps, it may be said that particularly here, parliament will give a single instance,
00:15:32 <oerjan> Mr. President, I think fungot is mixing metaphors again
00:15:33 <fungot> oerjan: ( that is, levinson went to kish, disappeared, had on your behalf of the commission is not allowed to use the crane, enter any two of these letters, a b y. every night, brings a new world of good! i was your problem? maybe you just can't handle is designed" if continuations are not unmodular in the same
00:26:58 -!- Taneb has quit (Quit: Leaving).
00:42:35 <Sgeo> Oh hey someone wrong my mamb for Scala years ago
00:42:42 <Sgeo> https://github.com/urso/embeddedmonads
00:43:05 <Bike> Was that supposed to be "wrote"?
00:43:25 <Sgeo> yes, yes it was
00:45:15 <Bike> Have you considered writing a library called Mambo?
01:18:53 -!- copumpkin has quit (Ping timeout: 245 seconds).
01:19:24 -!- copumpkin has joined.
01:22:19 <fizzie> ^save
01:22:19 <fungot> OK.
01:28:14 <oerjan> yay!
01:28:36 * oerjan didn't really think fizzie was around
01:28:58 <fizzie> I have been playing a game, is why.
01:29:17 <oerjan> you'd also been idle for over a day
01:30:15 <fizzie> Oh, but I've been checking the channel every few hours, all sneaky-stealth-like.
01:30:37 <fizzie> (IRC should have some kind of attention notification protocol, perhaps?)
01:31:21 <fizzie> IM things have that "user is typing" indicator, but even they don't generally (AFAIK) have a "user is looking" indicator.
01:32:37 <kmc> we've been thinking about that a lot for the business communication tool we're building
01:35:40 <kmc> it works as realtime chat, but (unlike say IRC) it strongly encourages you to read every message
01:35:56 <fizzie> Incorporating eye-tracking technology sound like the obvious way to go about it, of course.
01:35:58 <kmc> so that it can also take the place of asynchronous things like email
01:36:35 <kmc> so we kind of want to deliberately avoid a 'user is around right now' notification, because it would discourage people from using it in that second way
01:36:55 <kmc> on the other hand it's something people really really want
01:37:22 <Bike> xmpp's combo of away statuses and typing notifications seems fine to me
01:38:01 <fizzie> Beating the users until they stop wanting things you don't want them to want seems fine to me.
01:40:13 <kmc> but in the limit you end up with something nobody wants
01:40:28 <Vorpal> <kmc> we've been thinking about that a lot for the business communication tool we're building <-- as long as it is better than Samtime in the god awful Lotus Notes...
01:40:40 <Bike> in the limit you work somewhere else, i thought
01:41:26 <kmc> what's Samtime like
01:41:30 <kmc> Bike: well ok
01:41:41 <Vorpal> kmc, well I guess it actually isn't the worst part of notes
01:42:11 <Vorpal> kmc, of course it suffers the general problems with confusing UI of notes that means you have no idea where to find the setting you want.
01:42:49 <Vorpal> kmc, oh and I have no idea how to change spell check language in it. It seems stuck to English, while the rest of Notes is stuck to Swedish
01:43:08 <Vorpal> kmc, anyway it is an IM system integrated into Notes
01:43:12 <Vorpal> use it at work
01:43:23 <Vorpal> does show the away status
01:44:57 -!- Nisstyre-laptop has quit (Quit: Leaving).
01:46:37 -!- Nisstyre-laptop has joined.
01:49:15 -!- DHeadshot has quit (Read error: Connection reset by peer).
01:49:21 -!- DH____ has joined.
02:01:13 <kmc> http://www.reddit.com/r/Python/comments/17rfh7/warning_dont_use_pip_in_an_untrusted_network_a/
02:01:22 <kmc> yay people are finally talking about these problems
02:02:12 <Bike> "It's a bit worse than that." security sure is a fun field
02:04:43 <kmc> yeah, the default python HTTP libraries make it basically impossible to check SSL certs
02:04:47 <kmc> who would ever want to do that right
02:05:02 <kmc> Python: explosive, acid-leaking batteries included
02:05:11 -!- Nisstyre-laptop has quit (Quit: Leaving).
02:17:38 <FreeFull> Would x + y = y + x be a valid last pattern match, so that all cases where x is specific also apply to where y is specific instead?
02:17:50 <kmc> what
02:17:59 <kmc> oh i see what you mean
02:19:11 <kmc> yes, you can do things that way, but I remember concluding that it's not worthwhile
02:19:19 <FreeFull> Say I have (x,True) + (y,False) = something and then don't want to write the case for (x,False) + (y,True) = something
02:19:39 <kmc> one problem is that if you forget a case, there's no compiler warning and you get an infinite loop at runtime
02:20:42 <FreeFull> Yeah, that's what I was thinking
02:21:25 <FreeFull> I'm making silly Num instances =P
02:21:39 <FreeFull> instance Num ([()],Boolean)
02:21:48 <kmc> that is silly
02:22:03 <FreeFull> Boolean is the sign, the list is the magnitude
02:22:04 <kmc> you should introduce a new constructor rather than using (,)
02:22:09 <FreeFull> As in the length
02:22:13 <kmc> otherwise it will overlap with other (,) instances
02:22:35 <FreeFull> I was thinking of making a new constructor, but was lazy =P
02:22:42 <FreeFull> Sure, I will
02:23:39 <kmc> also if you want to be sillier, use Fix Maybe
02:23:47 <FreeFull> data SillyNum = Positive [()] | Negative [()]
02:23:49 <kmc> instead of [()]
02:24:01 <Bike> :t Fix Maybe
02:24:04 <lambdabot> Not in scope: data constructor `Fix'
02:24:04 <lambdabot> Not in scope: data constructor `Maybe'
02:24:12 <kmc> :k Fix
02:24:13 <lambdabot> Not in scope: type constructor or class `Fix'
02:24:15 <kmc> :k Mu
02:24:16 <lambdabot> (* -> *) -> *
02:24:18 <kmc> ok lambdabot calls it Mu
02:24:23 <Bike> why
02:24:25 <kmc> @src Mu
02:24:25 <lambdabot> newtype Mu f = In { out :: f (Mu f) }
02:24:36 <kmc> because μ is used for least fixed points in maths sometimes
02:24:46 <kmc> > In (Just (In Nothing))
02:24:48 <lambdabot> In (Just (In Nothing))
02:24:59 <FreeFull> Is Fix Maybe a chain of justs that possibly ends in Nothing
02:25:08 <kmc> yes
02:25:25 <kmc> Mu Maybe ≈ Maybe (Mu Maybe)
02:25:36 <kmc> where by ≈ i mean "isomorphic to"
02:25:42 <FreeFull> data Fix a = a (Fix a) ???
02:25:55 <kmc> <lambdabot> newtype Mu f = In { out :: f (Mu f) }
02:26:05 <FreeFull> Ah
02:26:09 <kmc> you need a value constructor
02:26:20 <FreeFull> Yeah, I see
02:26:27 <kmc> also you need to use 'newtype' if you want it to be an actual isomorphism
02:26:34 <kmc> otherwise ⊥ ≠ In ⊥
02:26:44 <kmc> so each level of recursion has one more "value"
02:27:03 <kmc> i wrote some stuff about this stuff here http://mainisusuallyafunction.blogspot.com/2010/12/type-level-fix-and-generic-folds.html
02:28:15 <Bike> oh, so it's the same recursive-functions-are-actually-fixedpoints thing as with, uh, functions.
02:28:22 <kmc> yeah
02:28:29 <FreeFull> I think I'll use [()] for now
02:29:06 <oerjan> [()] means you can use list functions for arithmetic...
02:29:16 <Bike> I like how the definition of fix there relies on recursion
02:29:49 <kmc> well in a statically typed language, you can't write fix unless you are already given some kind of recursion construct
02:29:58 <oerjan> > const id <$> [(),(),()] <*> [(),()]
02:30:00 <lambdabot> [(),(),(),(),(),()]
02:30:29 <oerjan> oh wait
02:30:36 <oerjan> > [(),(),()] *> [(),()]
02:30:38 <lambdabot> [(),(),(),(),(),()]
02:30:50 <FreeFull> Need to consider negative values too =P
02:31:09 <FreeFull> > replicate 3 [()] >> replicate 5 [()]
02:31:11 <lambdabot> [[()],[()],[()],[()],[()],[()],[()],[()],[()],[()],[()],[()],[()],[()],[()]]
02:31:15 <kmc> though in Haskell there are various accidental "recursion constructs" you can use
02:31:18 <kmc> http://okmij.org/ftp/Haskell/types.html#fix
02:31:23 <FreeFull> > replicate 3 [()] >> replicate 5 [()] >>= id
02:31:25 <lambdabot> [(),(),(),(),(),(),(),(),(),(),(),(),(),(),()]
02:31:42 <FreeFull> Oh, duh
02:31:46 <FreeFull> > replicate 3 () >> replicate 5 ()
02:31:47 <lambdabot> [(),(),(),(),(),(),(),(),(),(),(),(),(),(),()]
02:32:11 <kmc> anyway if you have a simple typed lambda calculus, you can't write fix
02:32:29 <kmc> note that its type, (a -> a) -> a, is unsound as a logical proposition
02:32:59 <oerjan> > sequence_ $ [(),(),()] <$ [(),()]
02:33:01 <lambdabot> [(),(),(),(),(),(),(),(),()]
02:33:10 <kmc> once you allow arbitrary recursion, your programs are no longer really proofs, because they can loop forever instead of yielding a value of their declared type
02:33:42 <Jafet> Somehow I can't see {-# RULES forall m n. length (replicate m () *> replicate n ()) = m * n #-} becoming a thing
02:33:59 <FreeFull> If you don't allow arbitrary recursion, your programs aren't turing-complete
02:34:01 <oerjan> > (mapM_ . const) [(),(),()] [(),()]
02:34:04 <lambdabot> [(),(),(),(),(),(),(),(),()]
02:34:44 <shachaf> @let voided n = replicate n ()
02:34:46 <lambdabot> Defined.
02:34:50 <shachaf> > void [1..] > voided 5
02:34:53 <lambdabot> True
02:34:56 <FreeFull> Jafet: Wouldn't that give a different result for negative values of m and n
02:35:47 <shachaf> > (compare `on` void) (1:2:3:4:5:undefined) [10,20,30]
02:35:49 <lambdabot> GT
02:36:05 <FreeFull> :t on
02:36:07 <lambdabot> (b -> b -> c) -> (a -> b) -> a -> a -> c
02:36:33 <Jafet> > null .
02:36:35 <lambdabot> <hint>:1:7: parse error (possibly incorrect indentation)
02:36:41 <Jafet> :t null .: void
02:36:43 <lambdabot> Couldn't match expected type `[a0]' with actual type `()'
02:36:43 <lambdabot> Expected type: g0 a1 -> g0 [a0]
02:36:43 <lambdabot> Actual type: g0 a1 -> g0 ()
02:37:09 <FreeFull> I love expressive type systems
02:37:26 <FreeFull> :t null
02:37:28 <lambdabot> [a] -> Bool
02:37:42 <FreeFull> > (null .)
02:37:43 <lambdabot> No instance for (GHC.Show.Show (f0 [a0] -> f0 GHC.Types.Bool))
02:37:44 <lambdabot> arising f...
02:38:03 <FreeFull> :t (null .)
02:38:04 <lambdabot> Functor f => f [a] -> f Bool
02:38:19 <Bike> kmc: i know all that much at least, you don't need to tell me again :P
02:39:11 <shachaf> but do you know the type newtype T = T (T -> T)!!
02:39:23 <FreeFull> Ah, lambdabot does the (.) = fmap thing
02:40:03 <FreeFull> shachaf: T id
02:40:04 <Bike> FreeFull: http://en.wikipedia.org/wiki/%CE%9C-recursive_function you only need search!!!
02:41:44 <kmc> Bike: ok
02:42:00 <kmc> it's hard to remember what people know and don't know
02:42:14 <Bike> i suppose
02:42:18 <Bike> nothing wrong with talking it through again
02:42:47 <FreeFull> Back to my num instance
02:45:46 <Bike> hm, i had this idea that cata(morphism) was actually reasonably widespread in haskell world
02:46:40 <Bike> more of an agda thing maybe?
02:46:56 -!- Phantom_Hoover has joined.
02:48:13 <FreeFull> Maybe I shouldn't have used separate constructors for positive and negative
02:48:20 <FreeFull> It's bloating my num instnace
02:50:39 <FreeFull> data Sign = Negative | Zero | Positive deriving Show data SillyNum = SillyNum Sign [()] deriving Show this might be better, probably should derive more instances but whatever
02:50:54 <Bike> so what's this all for
02:51:11 <FreeFull> Sillyness
02:51:48 <FreeFull> Actually, screw Sign, I'll just use Integer or something
02:52:48 <kmc> i'll make my own Num instance, with blackjack and hookers
02:55:33 -!- DH____ has quit (Read error: Connection reset by peer).
03:04:00 <FreeFull> data SillyNum = SillyNum Integer [()] deriving Show
03:04:11 <FreeFull> instance Num SillyNum where { fromInteger x = SillyNum (signum x) (genericReplicate (abs x) ()); negate (SillyNum x y) = SillyNum (-x) y; abs (SillyNum x y) = SillyNum (abs x) y; signum (SillyNum x _) = SillyNum x [()]; (SillyNum x a) + (SillyNum y b) = fromInteger (x * genericLength a + y * genericLength b); (SillyNum x a) * (SillyNum y b) = SillyNum (x*y) (a >> b)
03:04:46 <FreeFull> }
03:05:33 <Bike> :t (>>)
03:05:35 <lambdabot> Monad m => m a -> m b -> m b
03:05:36 <FreeFull> Appears to work
03:06:21 <FreeFull> Bike: Same as *> but for monads
03:11:45 <FreeFull> What happens when you call length on a list larger than maxBound :: Int
03:12:15 <FreeFull> Assuming you wait for it to actually finish
03:12:35 <Sgeo> > length ([1.. (fromIntegral (maxBound :: Int) + 1)])
03:12:39 <Jafet> You realize that you need to buy a 64-bit CPU
03:12:39 <lambdabot> mueval-core: Time limit exceeded
03:12:58 <kmc> FreeFull: I think the semantics are not defined by the standard
03:13:03 <Bike> > length ([1.. (fromIntegral (maxBound :: Int))])
03:13:07 <lambdabot> mueval-core: Time limit exceeded
03:13:12 <FreeFull> Let me look up the standard implementation of length
03:13:15 <kmc> in practice it will depend on how length is implemented and how Int overflow works on your Haskell implementation
03:13:21 <kmc> length [] = 0
03:13:21 <kmc> length (_:l) = 1 + length l
03:13:24 <kmc> from the report
03:13:37 <kmc> so that will pretty directly depend on what (+) :: Int -> Int -> Int does
03:13:46 <Sgeo> > 1 + (maxBound::Int)
03:13:47 <Jafet> Are there laws for (+)
03:13:48 <lambdabot> -9223372036854775808
03:13:53 <Bike> nice!
03:14:07 <kmc> Jafet: if there are any laws for numbers, they are almost certainly violated by Double ;P
03:14:12 <kmc> i mean equality is not even reflexive
03:14:39 <Jafet> Since there are no laws, length can return anything on a non-null list
03:14:43 <Bike> hm, i do wonder about that sometimes. like should you have * work on both integers and matrices even though they have different properties. how do you fit this into a type system that makes any sense at all.
03:14:54 <Jafet> CHECKMATE
03:15:00 <kmc> Jafet: i think the semantics of Int specifically are specified within the range [-2^29..2^29-1]
03:15:01 <FreeFull> So you'll eventually end up with a negative value for length :D
03:15:18 <FreeFull> And it's possible to get a list large enough that length will say it's length is 0
03:15:19 <kmc> > let n :: Double; n = read "NaN" in n == n
03:15:21 <lambdabot> False
03:15:29 <Bike> good representation
03:15:33 <kmc> int overflows are a grave security concern in C
03:15:49 <kmc> lotta code will do like buf = malloc(n * sizeof(foo))
03:16:02 <Bike> haha oops
03:16:04 <kmc> if that multiplication overflows, you allocate less memory than you expect
03:16:27 <FreeFull> kmc: Should I be surprised Haskell has adopted the NaN /= NaN thing?
03:16:28 <Jafet> sscanf(buf, "%d", &n)
03:16:50 <FreeFull> I shouldn't
03:16:52 <Bike> isn't it just using ieee like everyone else in the universe?
03:16:56 <FreeFull> Makes sense for ieee
03:17:02 <Bike> except ps2 gpus maybe
03:17:18 <Jafet> In other words calloc is more secure than malloc???
03:17:34 <FreeFull> But then
03:17:35 <kmc> Jafet: how's that
03:17:38 <FreeFull> > Nothing == Nothing
03:17:40 <lambdabot> True
03:17:52 <Jafet> calloc(n, sz)
03:18:01 <kmc> ah yes
03:18:11 <kmc> does the haskell report specify that floating point is IEEE754?
03:18:14 <Bike> FreeFull: what's the relevance
03:18:22 <kmc> > isIEEE (undefined :: Float)
03:18:23 <lambdabot> True
03:18:30 <kmc> okay so it's not spec'd but you get a runtime check
03:18:56 <Jafet> Double should be an algebraic type
03:19:11 <FreeFull> > isIEEE (3 :: Real)
03:19:11 <kmc> and NaN /= NaN does make sense, it's just unfortunate
03:19:13 <lambdabot> Expecting one more argument to `GHC.Real.Real'
03:20:01 <Bike> kmc: unfortunate?
03:20:14 <FreeFull> :k Real
03:20:16 <kmc> NaN is almost like ⊥ -- it means you have no information about the "actual" result
03:20:16 <lambdabot> * -> Constraint
03:20:22 <FreeFull> :k Constraint
03:20:23 <lambdabot> BOX
03:20:55 <kmc> ow my brain
03:20:55 <FreeFull> > (Nothing == Nothing) :: Maybe Float
03:20:57 <lambdabot> Couldn't match expected type `Data.Maybe.Maybe GHC.Types.Float'
03:20:58 <lambdabot> ...
03:21:12 <FreeFull> > (Nothing == (Nothing :: Maybe Float))
03:21:12 <Bike> oh right, nan means "not representable" in addition to "doesn't make sense". gosh i'm bad with floats
03:21:14 <lambdabot> True
03:22:08 <kmc> however Infinity == Infinity which seems a little bit wrong
03:22:21 <kmc> because two numbers which are too big to represent might still be unequal
03:22:33 <FreeFull> > (1/0) == (2/0)
03:22:33 <Jafet> Isn't no information about the actual result undefined
03:22:35 <lambdabot> True
03:22:42 <Bike> positive infinity, infinity on the pi/4 vector, what's the diff
03:22:53 <FreeFull> Multiply both sides by 0, 1 == 2
03:23:07 <kmc> Jafet: yeah, most systems allow configuring the floating point unit to treat NaN as an exception
03:23:14 -!- constant has changed nick to function.
03:23:16 <kmc> though iirc it's pretty nasty with GHC haskell
03:23:27 <kmc> because this FPU state is not saved by the green-thread scheduler
03:23:33 <Jafet> > 2.0^10000 == 2.0^20000
03:23:35 <lambdabot> True
03:24:14 <FreeFull> Why do most programming languages have mediocre type systems ):
03:24:23 <kmc> any attempt to represent real numbers in a computer is doomed to incoherence
03:24:38 <kmc> FreeFull: most things are bad
03:24:38 <Bike> Also it's weird to blame type systems for reals being weird.
03:24:40 <Jafet> There are always the unreal computers
03:24:59 <kmc> many explanations are offered but I prefer to think that success is simply random, and most things people try are bad
03:25:03 <kmc> so most things that succeed are also bad
03:25:31 <FreeFull> Bike: Nah, I'm not
03:25:45 <FreeFull> There are only so many reals you can represent in a limited space
03:26:09 <kmc> there are only so many reals you can represent in countably infinite space
03:26:14 <kmc> which is to say almost none of them
03:26:25 <Bike> lebesgue measure is so passé
03:26:30 <Jafet> Well, any real is countably infinite
03:26:32 <kmc> almost every real number contains an infinite amount of information
03:26:50 <kmc> yeah it's true Jafet
03:26:55 <kmc> i was speaking imprecisely
03:27:01 <Jafet> "Damn you cantor"
03:27:08 <kmc> however the problem of representing reals in a computer is more fundamental than the problem of representing integers
03:27:24 <kmc> the latter is just about space whereas the former is about the fact that reals are crazy and fucked up
03:27:25 <Bike> ya think? representing integers is a pretty neat problem too.
03:27:58 <Bike> of course you don't really have to think about it unless you're dealing with trillion-digit numbers, i guess. how boring
03:28:33 <Bike> (and not that reals aren't crazy and fucked up)
03:28:47 <FreeFull> You're lucky if your real is just transcendental, you can still approximate that with a rational
03:29:26 <FreeFull> Most reals can't be and all you can do is assign some symbol to it
03:29:59 <ion> “eog or the Eye of GNOME is a simple graphics viewer for the GNOME desktop which uses the gdk-pixbuf library. It can deal with large images, and zoom and scroll with constant memory usage.” (eog:21228): GLib-ERROR **: /build/buildd/glib2.0-2.34.1/./glib/gmem.c:165: failed to allocate 18446744071773880320 bytes
03:30:17 <Bike> uh aren't most reals transcendental
03:30:37 <Jafet> eog failed to open my 32768x32768 image
03:30:41 <Jafet> gnome sucks
03:30:51 <Sgeo> FreeFull, except for the ones that no string of symbols can be assigned to
03:30:57 <Sgeo> Which is most of them
03:31:10 <Sgeo> Well, hmm
03:31:16 <Sgeo> Not a good way to phrase that
03:31:27 <Bike> You can assign them. Omega = chaitin's constant on 2,3 machines.
03:31:36 <Bike> but that's not what you mean.
03:31:42 <FreeFull> Different meaning of symbol
03:31:44 <Sgeo> No finite amount of symbols and description suffices to describe.
03:31:50 <Bike> There you go.
03:32:09 <Bike> Also isn't the golden ratio algebraic or am I being dumb
03:32:30 <Jafet> Chaitin's constant is described as the real number containing the probability of halting for 2,3 machines
03:32:30 <FreeFull> Sgeo: to describe as distinctive from other reals you mean
03:32:43 <Sgeo> FreeFull, good point
03:32:47 <FreeFull> Because I could just say x is a real
03:32:51 <Bike> Jafet: most numbers are undefinable too, though.
03:32:54 -!- Phantom_Hoover has quit (Remote host closed the connection).
03:33:01 <Jafet> Those don't exist
03:33:11 <Bike> Monster.
03:33:21 <shachaf> Everything exists.
03:33:34 <FreeFull> If all numbers are definable, how many numbers are between 0 and 1?
03:33:50 <Jafet> Existence is easy
03:33:54 <FreeFull> Actually, nevermind
03:33:56 <Jafet> (Therefore: everything is easy)
03:33:57 <Bike> FreeFull: cardinality of the naturals duh
03:34:48 <Bike> FreeFull: also, the golden ratio is algebraic but all rational approximations of it suck (for reasonable definitions of suckage)
03:35:17 <FreeFull> How would you make a function that takes a floating value of Inf and makes it 1 using just arithmetic operations?
03:35:39 * function returns 1 to FreeFull
03:35:42 <FreeFull> Bike: Good enough
03:35:43 <Bike> f _ = 1
03:36:00 <FreeFull> Bike: I didn't specify enough
03:36:09 <Bike> Heh, heh.
03:36:17 <FreeFull> It has to return 1 only for Inf and 1, for everything else it's id
03:36:55 <Sgeo> No ifs?
03:36:57 <Sgeo> Hm
03:37:04 -!- Nisstyre-laptop has joined.
03:37:09 <Jafet> f n | n /= n = 1 | 1>0 = n
03:37:12 <kmc> > let f n | isInfinite n = 1; f n = n in (f 3, f (1/0))
03:37:13 <lambdabot> (3.0,1.0)
03:37:15 <FreeFull> Not necessarily id
03:37:36 -!- WeThePeople has joined.
03:37:39 <Sgeo> Surely guards count as ifs
03:37:43 <FreeFull> Not necessarily 1 for 1, but has to return different values for different inputs
03:37:44 <kmc> > let f n | (isInfinite n && (n > 0)) = 1; f n = n in (f 3, f (1/0), f (-1/0))
03:37:45 <lambdabot> (3.0,1.0,-Infinity)
03:37:46 <Bike> You could probably say it has to be a composition of possibly partially applied arithmetic functions.
03:38:04 <FreeFull> Guards count as non-arithmetic operations here, and isInfinite does too
03:38:24 <Sgeo> NaN is non-arithmetic
03:38:30 <Bike> Or you could just get to your point instead of adding more and more constraints as kmc works around yours.
03:38:38 <Jafet> Non-arithmetic number
03:38:43 <kmc> i'm not really paying attention
03:38:46 <FreeFull> Ignore NaN
03:38:52 <kmc> just fuckin' around
03:38:55 <kmc> on the internet
03:38:57 <Bike> same thing
03:38:57 <Sgeo> But then what's Inf-Inf?
03:39:04 <Bike> > Inf - Inf
03:39:06 <Sgeo> That's an arithmetic operation
03:39:06 <lambdabot> Not in scope: data constructor `Inf'
03:39:06 <lambdabot> Perhaps you meant one of these: `In' ...
03:39:09 <Bike> hth
03:39:30 <FreeFull> > let Inf = 1/0 in Inf - Inf
03:39:32 <lambdabot> Not in scope: data constructor `Inf'
03:39:32 <lambdabot> Perhaps you meant one of these: `In' ...
03:39:42 <FreeFull> > let inf = 1/0 in inf - inf
03:39:44 <lambdabot> NaN
03:39:57 <FreeFull> There, it's bread
03:40:01 <Sgeo> Unless you want to take the utter crazy view that Inf-Inf = 0, in which case, (1+) . (`subtract` inf)
03:40:23 <Bike> well, let's see, on the riemann sphere such a function wouldn't be continuous so fuck it
03:40:25 <Sgeo> I think J does that or something
03:41:03 <kmc> smokin' a J
03:41:16 <Sgeo> Oh it doesn't
03:41:18 <Sgeo> ) _-_
03:41:19 <jconn> Sgeo: |NaN error
03:41:19 <jconn> Sgeo: | _ -_
03:41:32 <Bike> j's syntax is a thing of beauty
03:41:56 <FreeFull> I was thinking there are functions that squish -Inf..Inf to -1..1 or some other range
03:42:20 <FreeFull> But wouldn't IEEE floats foil that without explicitly considering infs
03:42:55 <Sgeo> Wouldn't any non-infinite number get squished to, say, 0?
03:42:57 <Bike> well it wouldn't be injective
03:43:42 <FreeFull> Sgeo: Not necessarily
03:43:56 <FreeFull> Sgeo: The closer the number is to 0, the less it'd get squished
03:44:11 <Sgeo> hrm
03:44:29 <Sgeo> Shouldn't say "arithmetic" operations. Makes me want to exclude logarithmic stuff
03:44:57 <FreeFull> Ok, include logarithmic and trigonometric stuff too then
03:45:05 <FreeFull> Say, atan :)
03:45:05 <Bike> Since you're dealing with reals you could just say analytic functions.
03:45:09 <kmc> ) $%97^3$@>.$(Po.uo.godeto.go4i$*%#@(
03:45:09 <jconn> kmc: |spelling error
03:45:09 <jconn> kmc: | $%97^3$@>.$(Po.uo.godeto.go4i$*%#@(
03:45:09 <jconn> kmc: | ^
03:45:19 <Bike> god kmc, check your spelling
03:45:23 <kmc> ) $%97^3$@>.$(
03:45:23 <jconn> kmc: |syntax error
03:45:23 <jconn> kmc: | $%97^3$@>.$(
03:45:43 <Bike> But I don't know if there's a reasonable extension of the complex plane with two points at infinity.
03:46:22 <FreeFull> > atan (1/0)
03:46:23 <lambdabot> 1.5707963267948966
03:46:33 <FreeFull> Close enough
03:46:45 <Sgeo> ) _3 o. 1%0
03:46:45 <jconn> Sgeo: 1.5708
03:46:50 <FreeFull> > tan (atan (1/0))
03:46:51 <lambdabot> can't find file: L.hs
03:46:59 <FreeFull> > tan (atan (1/0))
03:47:00 <lambdabot> 1.633123935319537e16
03:47:09 <FreeFull> Not close enough
03:47:17 <Sgeo> ) 3o._3o._
03:47:18 <jconn> Sgeo: |ill-formed number
03:47:25 <Sgeo> ) 3o._ 3o._
03:47:25 <jconn> Sgeo: |ill-formed number
03:47:35 <Sgeo> ) 3o. _ _3o._
03:47:35 <jconn> Sgeo: |ill-formed number
03:47:42 <FreeFull> > tan (1/0)
03:47:43 <Sgeo> ) 3o. _ (_3)o._
03:47:44 <jconn> Sgeo: |ill-formed number
03:47:44 <lambdabot> NaN
03:47:48 <Sgeo> ) 3 o. _ (_3)o._
03:47:48 <jconn> Sgeo: |limit error
03:47:49 <jconn> Sgeo: | 3 o._(_3)o._
03:47:54 <kmc> ) ꙮ
03:47:54 <jconn> kmc: |spelling error
03:47:54 <jconn> kmc: | ꙮ
03:47:54 <jconn> kmc: | ^
03:48:05 <Bike> ) 'ꙮ'
03:48:05 <jconn> Bike: ꙮ
03:48:06 <FreeFull> Is there any value for which tan will actually produce Inf or -Inf
03:48:09 <Bike> yesssss
03:48:11 <kmc> ) fungot
03:48:12 <fungot> kmc: more simply put: siod sucks as a general purpose ( similar, and i'd like to see that mystical forest powers, but this time on the impact of the introduction to theoretical computer, fnord of the fnord here, so i don't
03:48:12 <jconn> kmc: |value error: fungot
03:48:12 <fungot> jconn: and is one thing which you might want is broken" archives. even less chance. i called " o" in " the other side has that as their whole thing, i mean...
03:48:12 <jconn> fungot: |spelling error
03:48:12 <jconn> fungot: | and is one thing which you might want is broken" archives. even less chance. i called " o" in " the other side has that as their whole thing, i mean...
03:48:12 <jconn> fungot: | ^
03:48:12 <fungot> jconn: ( c) a player who makes further play impossible by eir actions or lack thereof, or
03:48:12 <fungot> jconn: to. why, this is for you guys are a lot
03:48:12 <fungot> jconn: to " print" statement should always remember the songs on p2p apps in scheme, besides, was not beyond normal credibility atheist. you cannot _read_ a procedure, but maybe i will when i start fixing it rather than having arbitrary bf is with a fnord struct, where the actual standard being sane) scheme implementations but guile is my fnord' doggie than a dozen tales, of the whole fnord range of the ' ' ' delete a value of
03:48:12 <jconn> fungot: c (a player who makes further play impossible by eir actions or lack thereof , or)
03:48:18 <Sgeo> ) 3:'x=.5'
03:48:20 <Bike> OH NO
03:48:24 <jconn> fungot: | ^
03:48:24 <jconn> Sgeo: 3
03:48:41 <Bike> FreeFull: do you mean in math or in some programming language
03:48:43 <FreeFull> I think the bots have flood protection
03:48:47 <FreeFull> Or at least fungot does
03:48:47 <fungot> FreeFull:, so i'd have to consider that although the reduction in actual transportation section from former friend lives, their door had my computer with full u+ support" then they both bowed low. just keep the safe or tub and emptied it
03:48:52 <Sgeo> ) 13:'x=.5'
03:48:52 <jconn> Sgeo: |spelling error
03:48:53 <jconn> Sgeo: | 13:'x=.5'
03:48:53 <jconn> Sgeo: | ^
03:48:59 <FreeFull> Bike: Say, haskell
03:49:02 <monqy> FreeFull: fungot doesn't respond to the person so many times in a row
03:49:02 <fungot> monqy: use the ' ' ' delete a value of type " airbus is a big fan of avril....but this song " there
03:49:19 <Bike> FreeFull: so... what's Inf in haskell exactly
03:52:04 <Jafet> > (\n -> 2/n - 4/(n+1) + 1) <$> [1, 1/0]
03:52:05 <lambdabot> [1.0,1.0]
03:52:46 <FreeFull> Bike: Any value that produces True when fed to isInfinite
03:53:09 <FreeFull> Which means it has to be a RealFloat
03:53:23 <Bike> So... why did you tell us to forget about nans.
03:53:53 <Sgeo> FreeFull just wants a smooth compression algorithm on all reals+extended reals to the reals
03:53:56 <FreeFull> I didn't want you to care about what happens when nan is fed to your function
03:54:00 <shachaf> Bike: Do you know a lot of things about subtyping?
03:54:05 <shachaf> You should say them all.
03:54:09 <Bike> I don't know much about anything.
03:54:34 <shachaf> Sgeo: What does Ada do about this?
03:58:23 <Jafet> > (\n -> 1 - 1/(n+1)) <$> [0, 1, 2, 4, 8, 1/0]
03:58:25 <lambdabot> [0.0,0.5,0.6666666666666667,0.8,0.8888888888888888,1.0]
04:03:20 <FreeFull> > 1/(1/0)
04:03:22 <lambdabot> 0.0
04:03:26 <FreeFull> I forgot that
04:03:28 <kmc> Did you mean: beeeeeeeeees
04:03:50 * FreeFull offers Jafet a hug prize
04:03:59 <Bike> FreeFull: well it depends on how these things are defined on infinities, i guess
04:04:59 <FreeFull> Jafet is a winner
04:06:12 <FreeFull> > (\x -> 1 - 1/(n+1)) <$> [0,(-0.000001)..]
04:06:14 <lambdabot> [1 - 1 / (n + 1),1 - 1 / (n + 1),1 - 1 / (n + 1),1 - 1 / (n + 1),1 - 1 / (n...
04:06:21 <Jafet> @hugs
04:06:22 <lambdabot> http://hackage.haskell.org/trac/ghc/newticket?type=bug
04:06:28 <FreeFull> > (\n -> 1 - 1/(n+1)) <$> [0,(-0.000001)..]
04:06:29 <lambdabot> [0.0,-1.000001000006634e-6,-2.0000039999690244e-6,-3.000009000109216e-6,-4....
04:06:45 -!- oerjan has quit (Quit: Gnite).
04:07:06 <FreeFull> Jafet: Behaves weirdly on negative values but fulfills my specification
04:07:29 <Bike> > (\n -> 1 - 1/(n+1)) -1/0
04:07:32 <lambdabot> No instance for (GHC.Real.Fractional (a0 -> a0))
04:07:32 <lambdabot> arising from a use of `...
04:07:41 <Bike> huh
04:07:50 <Bike> > (\n -> 1 - 1/(n+1)) -1
04:07:52 <lambdabot> No instance for (GHC.Num.Num (a0 -> a0))
04:07:52 <lambdabot> arising from a use of `e_11111'...
04:08:00 <Bike> > (\n -> 1 - 1/(n+1)) 1
04:08:03 <lambdabot> 0.5
04:08:07 <Bike> > (\n -> 1 - 1/(n+1)) (-1/0)
04:08:10 <lambdabot> 1.0
04:08:44 <FreeFull> > (\n -> 1 - 1/(n+1)) -49
04:08:46 <lambdabot> No instance for (GHC.Num.Num (a0 -> a0))
04:08:46 <lambdabot> arising from a use of `e_111149...
04:08:49 <FreeFull> > (\n -> 1 - 1/(n+1)) (-49)
04:08:51 <lambdabot> 1.0208333333333333
04:08:57 <FreeFull> > (\n -> 1 - 1/(n+1)) (-3)
04:08:59 <lambdabot> 1.5
04:09:12 <FreeFull> > (\n -> 1 - 1/(n+1)) (-0.3)
04:09:13 <lambdabot> -0.4285714285714286
04:09:19 <FreeFull> > (\n -> 1 - 1/(n+1)) (-0.5)
04:09:20 <lambdabot> -1.0
04:09:24 <FreeFull> > (\n -> 1 - 1/(n+1)) (-0.6)
04:09:26 <lambdabot> -1.5
04:10:32 <FreeFull> It's basically a shifted over 1/x
04:11:03 <FreeFull> > (\n -> 1 - 1/(n+1)) (-1)
04:11:05 <lambdabot> -Infinity
04:15:00 <Sgeo> Oh crud I got a call yesterday and don't know who it was from
04:15:03 <Sgeo> I may have been asleep
04:15:17 <Sgeo> Could have been job related for all I know
04:17:06 -!- c00kiemon5ter has left.
04:17:20 -!- c00kiemon5ter has joined.
04:17:21 <FreeFull> You could do something like (\n -> 1 / (1 + 2**(-n)))
04:17:31 -!- Nisstyre-laptop has quit (Ping timeout: 245 seconds).
04:17:43 <FreeFull> > (\n -> 1 / (1 + 2**(-n))) (1/0)
04:17:45 <lambdabot> 1.0
04:17:51 <FreeFull> > (\n -> 1 / (1 + 2**(-n))) (-1/0)
04:17:52 <lambdabot> 0.0
04:17:52 -!- c00kiemon5ter has left.
04:18:14 <Bike> That just moves the pole to 4.something * i
04:20:04 <Sgeo> pole?
04:20:42 <FreeFull> Bike: But we're only concerned with reals here
04:20:44 <Sgeo> what pole?
04:20:56 <Sgeo> Oh that pole
04:20:56 <Bike> Sgeo: Where 2^-n = -1 and you get infinity again.
04:21:10 <Jafet> The nazis moved millions of poles
04:21:24 <Bike> The Nazis were known real analysts.
04:26:02 <FreeFull> Analyst?
04:26:12 <Bike> like real analysis.
04:26:44 <Jafet> <TRWBW> don't google "intro to anal"
04:27:07 <Bike> thanks
04:27:35 <FreeFull> The advanced classes aren't much better
04:34:23 <kmc> research frontiers in anal
04:36:07 -!- Mathnerd314 has joined.
04:55:42 -!- WeThePeople has quit (Quit: Leaving).
05:02:34 <zzo38> This is my idea what a register in a hardware NSF might do, which the expansion byte in the NSF header is written to:
05:02:35 <zzo38> If bit2 is set, the memory from $8000-$DFFF becomes read/write (except main routine ROM which is always read-only), otherwise it is read-only. If bit0 is set, VRC6 audio will play, otherwise it will be muted. If bit1 is set, VRC7 audio will play and otherwise is muted. If bit5 is set, Sunsoft 5B audio is played and is otherwise muted. Other bits (bit3, bit4, bit6, and bit7) are ignored.
05:03:21 <zzo38> I think it is compatible with the .NSF specification, isn't it?
05:10:56 <zzo38> This is something someone did to deter spambots on MediaWiki: http://wiki.nesdev.com/w/index.php?title=Talk:Nesdev_Wiki&action=edit They say it worked for sixteen months. Does it work for you?
05:31:05 -!- monqy has quit (Quit: hello).
05:38:14 <ThatOtherPerson> Sgeo: I am.
05:41:40 <zzo38> You are?
05:54:19 <kmc> how strange it is to be anything at all
05:57:32 -!- ogrom has joined.
05:58:05 <zzo38> O, well.........
05:58:11 <shachaf> hi zzo38
05:58:17 <shachaf> Did you ever figure out my CodensityAsk thing?
05:58:44 <zzo38> shachaf: Yes I think I do know what that one does.
05:59:23 <shachaf> Oh? What does it do?
05:59:47 <zzo38> I think it is difficult to explain but possible to understand.
06:01:33 <zzo38> (But it is a monad; (CodensityAsk w) is always a monad regardless of what w is.)
06:22:14 <Sgeo> o.O
06:22:17 <Sgeo> http://www.reddit.com/r/todayilearned/comments/17rpkr/til_when_you_tell_someone_a_goal_or_thing_youre/
06:22:22 <Sgeo> I have _got_ to stop doing that then
06:23:17 <Bike> chemically satisfies your brain
06:29:05 -!- copumpkin has quit (Ping timeout: 252 seconds).
06:30:03 -!- copumpkin has joined.
06:31:49 <Sgeo> Actually, I remember BYOND actually warned against doing that exact thing
06:32:08 <Sgeo> (Talking about what you're doing before you do it)
06:32:16 <Bike> "Make games for free with BYOND. Easy to learn, but powerful. Play online & multiplayer: RPGs, action, strategy, board games, and more!"
06:34:10 <Sgeo> For what it's worth, it does use a (custom) programming language. It's not some point and click nonsense
06:35:12 <Bike> Oh, is that actually what you meant?
06:35:37 <Bike> I didn't think game makers told you about your life choices...
06:38:47 <Sgeo> "Become a BYOND Member to add a game"
06:38:55 <Sgeo> ....adding games to my hub is no longer free
06:38:56 * Sgeo sads
06:39:31 <Bike> I wonder if there are video games in Ada. It must have graphics stuff for the gubmint, right
06:51:05 -!- Bike has quit (Ping timeout: 252 seconds).
06:55:25 -!- Bike has joined.
06:56:26 <zzo38> You can look see if video game in Ada, or write one if you know how to program Ada
06:56:43 <zzo38> Since you can use Ada with GNU compiler
07:16:56 -!- ion has quit (Ping timeout: 252 seconds).
07:17:42 -!- Patashu has joined.
07:19:55 <zzo38> http://zzo38computer.org/img_14/uselessness_rpg.png It isn't very good, you cannot even make a attack which has a script on it, which is terrible.
07:20:09 <shachaf> kmc: Do you know a lot of things about subtyping?
07:20:32 -!- Patashu has quit (Client Quit).
07:20:46 -!- Patashu has joined.
07:20:53 -!- Patashu has quit (Client Quit).
07:20:55 * Sgeo guesses that Scala people would
07:21:09 <shachaf> Scala people have their own problems.
07:21:32 <Sgeo> Such as?
07:22:41 <Bike> Why are you asking about subtyping?
07:22:48 <shachaf> Because I want to figure it out.
07:23:14 <Bike> What's to figure out, you have a type and then you have a bigger type. And it makes everything less computable but whatever.
07:23:40 <shachaf> Bike: If A is a subtype of B, which one is bigger?
07:23:51 <Bike> B
07:24:13 <shachaf> If I have e.g. class Foo { A a; }; class Bar : Foo { B b; };, is Bar a subtype of Foo?
07:24:34 <shachaf> (Such that you can give a Bar to a thing that wants a Foo.)
07:24:59 <Bike> yeah, that's yet another usage of the term "polymorphism".
07:25:21 <shachaf> Polymorphism?
07:25:26 <shachaf> I didn't say polymorphism.
07:25:43 <Bike> You didn't, but what you described is subtype polymorphism.
07:25:59 <shachaf> Is Bar a subtype of Foo?
07:26:15 <Bike> Yeah.
07:26:27 <shachaf> Then I don't know what you mean by bigger.
07:26:38 <shachaf> I normally think "bigger" means "has more inhabitants".
07:26:39 <Sgeo> "bigger" means "includes more possible values"
07:27:05 <shachaf> Bar has more inhabitants thn Foo, though.
07:27:07 <Bike> If I have an object of type Foo (only) and an object of type Bar then I have two Foos and one Bar.
07:27:07 <Sgeo> If A is a subtype of B, then B includes all the values in A, as well as potentially other values
07:27:10 <shachaf> So that's not what Bike meant.
07:27:40 <Bike> How does Bar have more inhabitants? Every Bar is also a Foo, Foo can't have less inhabitants than Bar.
07:27:48 <shachaf> Let's say that (A,B) <: A
07:27:49 -!- RodgerTheGreat has quit (Quit: RodgerTheGreat).
07:27:57 <Sgeo> Inhabitant does not mean "field"
07:28:00 <shachaf> (0,'a') :: (Int,Char)
07:28:03 <shachaf> (0,'b') :: (Int,Char)
07:28:09 <shachaf> They both map to the same Foo
07:28:17 <shachaf> For every Foo, I have |B| Bars.
07:29:09 <Sgeo> They're different Foos, even if code that expects a Foo treats them identically, I think.
07:29:21 <Bike> yeah.
07:29:37 <Bike> I see your point, though.
07:29:41 <shachaf> So Bool has infinitely (uncountably?) many inhabitants?
07:29:56 <Bike> What makes you say that?
07:30:07 <shachaf> (Bool,Integer) <: Bool
07:30:15 <Bike> Tuples are Bools?
07:30:24 * shachaf sighs.
07:30:42 <Sgeo> Bike, the idea is that you subtype from Bool, to get a thing that acts like a Bool but has other properties
07:30:43 <shachaf> class Hi { Bool x; }; -- Hi has infinitely many inhabitants?
07:30:43 <Sgeo> I guess
07:31:43 <Bike> shachaf: I suppose at that point you have to clarify your notion of distinctness. "low-level" style extensional equality (I allocate Hi(true) twice and they're different) would mean infinitely many inhabitants.
07:32:15 <shachaf> I'm not talking about pointer equality here. :-(
07:32:15 <Bike> But looked at intensionally you're right, there are only two His, and a subtype could possibly have more distinctiveness.
07:32:26 <shachaf> OK.
07:32:41 <shachaf> I don't think you can tell anything about |A| <=> |B| given A <: B
07:32:47 <Bike> I suppose the latter is more common in type theory but hey guess what I'm shit at type theory.
07:32:59 <Bike> How often does type theory even use cardinalities?
07:33:22 <Sgeo> You should ask this question on #scala
07:33:24 <shachaf> Who knows?
07:33:36 <Bike> So, to rephrase my original silly way of putting it.
07:34:18 <Bike> or rather rethink. A subtype has more distinctiveness than its parent type, in that operations can be defined that act differently on objects of the subtype that are the same as far as operations on the parent type are concerned.
07:34:33 <shachaf> Bike: Can I say that A <: Either A B?
07:35:18 <Bike> As I understand it Either is a functor that takes things away. In the same way Maybe Foo isn't just Foo plus nothing, it's made distinct.
07:35:41 <Bike> that is, Either A B is a /disjoint/ sum of A and B, not a union.
07:35:56 <shachaf> Right.
07:36:03 <shachaf> So every A maps to an Either A B
07:36:19 -!- ion has joined.
07:36:19 <Bike> So, no you can't say A is a subtype of Either A B, is what I mean.
07:36:28 <shachaf> Why not?
07:37:18 <Bike> Because Either maps its two types to a distinct category from vanilla types.
07:37:45 <shachaf> And (A,B) is distinct from vanilla A
07:37:53 <Bike> yes.
07:38:03 <shachaf> We have an injection Left : a -> Either a b
07:38:26 <Bike> Sure.
07:38:40 <shachaf> OK, what properties should a subtype have that this doesn't?
07:39:12 <Bike> If A <: B then anywhere a B can be used an A works just as well, to put it coarsely.
07:39:31 <Bike> This is pretty obviously not true of A and Either, yeah?
07:39:45 <shachaf> Why?
07:39:57 <shachaf> If your function takes (Either A B), I can pass it my A.
07:40:07 <Sgeo> A static typing system might prevent a direct use, but there's a simple transform you can do on the A to get Either A B
07:40:20 <Bike> Wait, really? I thought you couldn't do that in Haskell.
07:40:33 <Bike> Like you'd have to pass a Left A or something...
07:40:33 <shachaf> No, it won't be implicitly converted.
07:40:40 <Sgeo> Although, considering that the transform doesn't work the other way, maybe the fact that it doesn't work the other way excludes being able to call it a subtype?
07:40:40 <shachaf> That's also true for (A,B) <: A
07:40:49 <shachaf> The point is that the relationship is there.
07:40:57 * Sgeo isn't sure
07:40:59 <Bike> (A,B) <: A isn't true either.
07:41:23 <Bike> Sgeo: no, just having a bijection isn't enough for type equality or anything either
07:41:28 <shachaf> Why not?
07:41:42 -!- DHeadshot has joined.
07:42:20 <Bike> Because a tuple of A and B can't be used everywhere an A can be used. (You'd have to "extract" the A first.)
07:42:33 <shachaf> 23:24 <Bike> yeah, that's yet another usage of the term "polymorphism".
07:42:49 <shachaf> I don't care about polymorphism. I'm fine being explicit about conversions from a subtype to a supertype.
07:43:03 <Bike> Polymorphism is like the whole point of subtyping, though.
07:43:32 <Bike> If you just want injective morphisms or whatever you can do that without subtyping.
07:43:47 <shachaf> is "morphism" a word that means "function" here
07:43:56 <Bike> sure, whatever.
07:44:06 <shachaf> This isn't about Haskell.
07:44:11 <Bike> I know.
07:44:20 <shachaf> Obviously Haskell doesn't have *any* subtyping, and it has *no* implicit conversions.
07:44:25 <Bike> right.
07:44:52 <shachaf> But it still makes sense to talk about how (A,B) could <: A, doesn't it?
07:45:02 <Sgeo> Scala has implicit conversions
07:45:39 <Bike> You could, yes, sorry.
07:45:47 <Sgeo> (Not really for this case so much, though, although I guess you could, but that would be dumb)'
07:45:49 <Bike> I'm used to nominal subtyping, I guess.
07:46:04 <shachaf> This is extremely nominal subtyping. :-)
07:46:09 <shachaf> I'm specifying the relationship here.
07:46:28 <shachaf> Anyway, the interesting thing is that the function :: (A,B) -> A *isn't* enough to specify the subtyping relationship.
07:46:53 <shachaf> If you have a function that takes a mutable A, and I pass it a mutable (A,B), it can mutate it just fine.
07:47:16 <Sgeo> Is this reaching around to lenses?
07:47:23 <shachaf> Everything is lenses.
07:55:34 <shachaf> except for monoids :D
07:55:57 <Bike> imo lenses should have generic monoid traversal
07:56:10 <shachaf> imo they do
07:56:56 <Bike> good
08:02:17 <zzo38> Catching exceptions of pure functions in Haskell violates the Matthew 6:3 rule. I would rather suggest a macro (if (x ->| y) is the type of macros that take an expression of type x and result in a value of type y) where catchPureErrors :: x ->| IO (Either String x); or something like that.
08:06:22 <Sgeo> If it's a pure function it shouldn't throw exceptions.
08:06:27 <Sgeo> (/) is an abberation
08:06:34 <Sgeo> and an abomination
08:06:44 <shachaf> (/) doesn't throw exceptions.
08:07:19 <Sgeo> :t try
08:07:21 <lambdabot> Not in scope: `try'
08:07:27 <Sgeo> :t Control.Exception.try
08:07:29 <lambdabot> GHC.Exception.Exception e => IO a -> IO (Either e a)
08:07:53 <Sgeo> > try (return $ 1/0)
08:07:55 <lambdabot> Not in scope: `try'
08:08:02 <Sgeo> > Control.Exception.try (return $ 1/0)
08:08:04 <lambdabot> Not in scope: `Control.Exception.try'
08:08:10 <zzo38> I know it shouldn't throw exceptions, but it does, so that is why I suggest, make it a macro instead.
08:08:16 <Sgeo> uh
08:08:34 <Sgeo> > Control.Exception.try (return $ 1/0)
08:08:37 <lambdabot> Not in scope: `Control.Exception.try'
08:08:39 <Sgeo> :(
08:08:46 <shachaf> > 1/0
08:08:48 <lambdabot> Infinity
08:09:00 <Sgeo> > 1/0 :: Integer
08:09:03 <lambdabot> No instance for (GHC.Real.Fractional GHC.Integer.Type.Integer)
08:09:04 <lambdabot> arising f...
08:09:11 <Sgeo> > 1/0 :: Int
08:09:11 <zzo38> You cannot run I/O in lambdabot; use your own computer or use HackEgo or something.
08:09:13 <lambdabot> No instance for (GHC.Real.Fractional GHC.Types.Int)
08:09:13 <lambdabot> arising from a use o...
08:09:13 -!- monqy has joined.
08:09:22 <shachaf> hi monqy
08:09:27 <shachaf> does tapl talk about subtyping
08:09:27 <Sgeo> > 1/0 :: Rational
08:09:29 <lambdabot> *Exception: Ratio.%: zero denominator
08:09:32 <monqy> hi??????
08:09:33 <Sgeo> There.
08:09:34 <Bike> shachaf: near the end.
08:09:45 <shachaf> monqy: tell me about subtyping??
08:09:50 <shachaf> are you "an expe"rt
08:09:50 <monqy> ok
08:09:55 <monqy> what do you want to know about it
08:10:00 <monqy> i know.....some stuff.....
08:10:12 <monqy> perhaps enough?? perhaps not
08:10:17 <monqy> depends on what you want to know about it
08:10:40 <monqy> like i'm no expert on intersection/union types but i know about other stuff
08:12:23 <shachaf> monqy: well uhh.......
08:12:29 <shachaf> so what kinds of subtyping are there
08:12:43 <shachaf> there's a sort of subtyping thing for products right??
08:12:49 <shachaf> where you can say (a,b) <: a
08:12:54 <shachaf> and also one for sums??
08:12:59 <shachaf> where you can say a <: Either a b
08:14:41 <zzo38> I think you can say that (a) is less than or equal to (Either a b)
08:14:42 <monqy> uhh you can do that sort of thing if you want to....the treatment i'm familiar with does it with subtyping for records and variants rather than implicitly doing injections/projections for...semantic reasons...
08:16:01 <shachaf> ok can you explaiin that treatment a bit........
08:16:08 <monqy> like {l1: a, l2: b} <: {l1: a}; <l1: a> <: <l1: a | l2: b>
08:16:21 <shachaf> is this "structural subtyping"..............................
08:16:48 <shachaf> anyway ok maybe i'll try "the monqy treatment" for a bit??
08:16:50 <monqy> when you're working with the theory you usually deal with structural typing always, since it's cleaner
08:16:57 -!- asiekierka has quit (Excess Flood).
08:17:11 <shachaf> so now let's add mutability "for fun"
08:17:26 <monqy> and the full treatment that way is just an extension of that for arbitrary width and you can have the types of the stuff change as well
08:17:29 <monqy> since covariance
08:17:41 <shachaf> if foo accepts {l1: a}, i can pass it {l1: a, l2: b}, and it can mutate the l1 part
08:17:44 <shachaf> right??
08:18:09 <shachaf> but for variants it ""doesn't work"" that way
08:18:28 <monqy> oh if you get into that territory you have to make the fields invariant i think so disregard what i said about covariance
08:18:46 <Bike> but it's that a is a subtype of a|b, not the other way
08:18:49 <shachaf> well sure you have to get invariance with mutability
08:19:16 <shachaf> Bike: right but if foo operates on a|b i can't pass it an "a"!!
08:19:23 <shachaf> because it might mutate the variant to l2?
08:19:50 <monqy> no?
08:19:56 <Bike> might... what?
08:19:58 <monqy> what do you mean
08:21:01 <shachaf> well if you have a mutable foo : <l1: a | l2: b>
08:21:06 <shachaf> you can mutate it from l1 to l2
08:21:07 <shachaf> right??
08:21:16 <monqy> what do you mean "mutate it from l1 to l2"
08:21:30 <Bike> oh, i see
08:21:32 <shachaf> i don't know :'(
08:21:36 <shachaf> what should i mean
08:21:42 <Bike> change the object from being an a to being a b
08:21:48 <shachaf> how does mutability + variants work
08:22:23 <Bike> that seems like a weird mutation though? maybe you just say 'nope you can't do that' and that's that
08:22:27 <monqy> wwweeeeeeeelllllll
08:22:38 <monqy> the treatment im used to for mutability is sort of
08:22:40 <monqy> "explicit"
08:22:45 <monqy> which makes this nice
08:23:12 <monqy> you'd have something like ref(a|b) and then since ref(t) is invariant in t............
08:23:48 -!- asiekierka has joined.
08:23:55 <monqy> (answer: you don't get the "bad subtyping")
08:24:36 <monqy> if you don't want to put explicit "ref's" over everything then just pretend there's invariance everywhere anything could go hay wire
08:25:02 <shachaf> okay so what happens with th ref
08:25:10 <shachaf> when you have the product subtype
08:25:32 <monqy> well ref(t) is invariant in t in general
08:25:35 <shachaf> right
08:25:42 <shachaf> so that's "not good enough????"
08:26:17 <monqy> are you looking for an answer to something more specific or
08:26:23 <shachaf> for example in "some languages" if you have class Foo { A a; }; class Bar : Foo { B b; }; you can pass a mutable Bar to something that expects a mutable Foo??
08:26:26 <shachaf> right
08:26:38 <shachaf> and that seems "valid to me"
08:27:32 <monqy> is B <: A here
08:27:50 <shachaf> no
08:27:57 <shachaf> it's an """"additional field""""
08:28:02 <monqy> oh
08:28:22 <shachaf> so this is like (A,B) <: A
08:28:22 <monqy> i see now, that's "weird snytax" not "inconsistent syntax
08:28:23 <monqy> "
08:28:40 <shachaf> sorry for using weird syntax
08:29:40 <shachaf> monqy: so do you see what i mean now....
08:29:43 -!- ion has quit (Ping timeout: 245 seconds).
08:29:46 <shachaf> you can't do this with ref
08:29:51 <shachaf> because it has to "be invariant"
08:30:22 -!- Bike has left.
08:30:28 <monqy> mhm
08:30:46 <shachaf> so the "point is":: this doesn't work for "sum subtypes"
08:30:57 <shachaf> right?
08:31:47 <monqy> im..,,,.thinking about it
08:32:30 <shachaf> monqy: anyway my "point is" that the kind of mutability i gave for product-subtypes is like lenses
08:32:38 <shachaf> and this kind is like prisms
08:33:03 <monqy> ok
08:33:50 <shachaf> and if you think about it profunctor-lenses and simple-lenses are related to "substitutatutatatututability"
08:33:54 <shachaf> because you have
08:34:06 <shachaf> forall p. (CONSTRAINTS p) => p A -> p S
08:34:17 <shachaf> if there are no constraints then you have leibniz equality
08:34:32 <shachaf> and then you "add on" more constraints to get lenses/prisms/"other stuff"
08:34:43 <monqy> mhm
08:35:03 <Sgeo> wtf is a meatpacking district
08:35:13 <monqy> a district that packs meat
08:35:13 <shachaf> monqy: so what does "that mean"
08:35:20 <Sgeo> Some job offer is talking about how they're located in a glamorous meatpacking district
08:35:39 <Sgeo> s/glamorous/hip/
08:35:45 <Sgeo> But they use the word glamorous elsewhere
08:35:52 <monqy> they pack hip meat
08:36:12 <shachaf> is this in new york
08:36:16 <Sgeo> yes
08:36:23 <shachaf> wow
08:36:28 <Sgeo> It's an entry level position
08:36:31 <shachaf> that's a pretty hip district imo
08:36:41 <Sgeo> "- Swanky and fashionably bright Manhattan loft space in the hip meatpacking district."
08:36:59 <shachaf> wow
08:37:03 <shachaf> sounds swanky
08:37:18 <Sgeo> I should stop making fun of potential future employers in publically logged chat
08:37:29 <Sgeo> Although I could never have a bad word to say about Transcriptic, I think
08:37:30 <shachaf> why?
08:37:33 -!- ion has joined.
08:37:33 <shachaf> they're going to make fun of you
08:37:34 <Sgeo> Except they're too far away :(
08:37:43 <zzo38> Are you nondualist?
08:37:45 <Sgeo> shachaf, yeah, but not where I'm going to see
08:37:49 <shachaf> zzo38: yes and no
08:38:05 <zzo38> shachaf: Please be more specific.
08:38:25 <shachaf> zzo38: what's a nondu alist.
08:38:40 <shachaf> monqy: Did you go see NANDA?
08:39:31 <monqy> what's nanda
08:39:49 <shachaf> http://nandatown.com/
08:40:01 <shachaf> they were in los angeles a few months ago/??
08:43:17 <monqy> shachaf: anyway i think this is something like ref(a,b) ~ (ref a, ref b) but ref(a|b) !~ <ref a | ref b> for the reason you described
08:43:55 <monqy> id have to think "a bit more" to come up what with it's isomorphic to but "probably lens has the answer already so"
08:44:07 <impomatic> Grrr... it seems like the only way to get this regex to work is to reverse the string, regex, then reverse again :-(
08:44:31 <shachaf> monqy: maybe it does but i don't know it :"(
08:44:58 <monqy> <ref a | ref b> <: ref(a|b) at least, i think, if you want to get "real fancy"
08:45:35 <shachaf> it does?
08:45:52 <shachaf> hm
08:46:18 <monqy> it's the standard "prism thing" isn't it
08:46:43 <monqy> maybe i forgot a detail
08:46:44 <monqy> "woops"
08:46:52 <shachaf> what thing
08:47:03 <shachaf> "you're probably right but im not sure what you mean"
08:47:07 <monqy> im going to think about it a bit more and then respond
08:47:19 <shachaf> ok
08:49:13 <Sgeo> Just applied
08:49:27 <monqy> oh yeah i forgot a case i think
08:49:30 <monqy> woops woops
08:50:18 <monqy> or: Did I???
08:51:47 <monqy> inj (Left a) = {view: Left (view a), set (Left a'): set a = a'; set (Right b'): a}
08:51:55 <monqy> inj (Right b) similar
08:51:58 <monqy> shachaf: look about right?
08:52:06 <Sgeo> So maybe I'll get a "swanky" job with "swanky" Mac Pros
08:52:11 <monqy> shachaf: "very pseudocode"
08:52:14 <Sgeo> In the meatpacking district
08:52:16 <shachaf> wait what's inj
08:52:21 <Sgeo> How ... fashion...y
08:52:30 <Sgeo> visual....ness.....glamour.....stuff
08:52:35 <monqy> shachaf: injection from <ref a|ref b> into ref(a|b)
08:53:08 <shachaf> oh
08:53:50 <shachaf> i'm not completely sure i understand your pseudocode but "does it work the other way around"
08:54:05 <shachaf> and is this meant to be sort of prismlike or what
08:55:25 <monqy> well the setting is like uhh what's it called
08:55:40 <monqy> i -remember- there being a lens thing like that
08:55:44 <monqy> but i forget what it's called
08:56:02 <shachaf> alongside outside inside within without
08:56:06 <shachaf> "one of that crowd???????"
08:56:33 <shachaf> hmmm maybe not
08:56:59 <monqy> no it's not
08:57:19 <shachaf> which lens are you thinking of
08:58:18 <monqy> im probably actually thinking of something in something more general than prism but it acts like this for prisms
08:58:38 <monqy> Setter perhaps?
08:59:00 <shachaf> wait what does it do
08:59:22 <monqy> > Left "hi" .~ _Left "there"
08:59:23 <lambdabot> Couldn't match expected type `Control.Lens.Setter.ASetter
08:59:24 <lambdabot> ...
08:59:27 <monqy> oh no~~~~
08:59:29 <monqy> !!!!!!!
08:59:39 <monqy> oh right
08:59:39 <shachaf> > Left "hi" & _Left .~ "there"
08:59:42 <lambdabot> Left "there"
08:59:44 <monqy> yes
08:59:45 <monqy> and
08:59:58 <monqy> > Right "hi" & _Left .~ "woops!!"
09:00:01 <lambdabot> Right "hi"
09:00:04 <monqy> it's that sort of thing
09:00:24 <shachaf> well sure a prism is a setter
09:00:50 <shachaf> (but note that maybe a prism should actually be an unprism??)
09:00:53 <shachaf> (to match up with lens)
09:00:56 <ion> I love prisms. They are so easy.
09:00:57 <shachaf> (if you're talking about subtyping"
09:00:58 <shachaf> )
09:01:08 <shachaf> (in which case an unprism is not a setter. though it's an unsetter)
09:02:59 <monqy> anyway uh the idea is that from a <ref a | ref b> you can get a ref <a|b> that when you look at it you look at whatever you put in, and when you try to set it you only go through with the setting if you're setting the "right thing"
09:03:03 -!- DHeadshot has quit (Ping timeout: 245 seconds).
09:03:18 <shachaf> right
09:03:19 <monqy> whereas you can't really go the other way
09:03:28 <shachaf> that was my idea from before
09:03:33 <monqy> yes..
09:03:35 <shachaf> where you pass the supertype
09:03:39 <shachaf> but it doesn't really work..................
09:03:49 <monqy> oh what's your idea from before
09:03:56 <monqy> i "forgot" it
09:04:05 <shachaf> maybe i didn't say it
09:04:23 <shachaf> it's just that when you have a product, i.e. a thing you can make a lens for, you can pass in a subtype
09:04:38 <shachaf> but when you have a sum ie something you can make a prism for, you can pass in a supertype
09:04:45 <shachaf> because that way you still get "over"
09:05:39 <monqy> yeah
09:05:59 <monqy> this conforms to my intuitions,,,,at least,,,,,,
09:06:15 <shachaf> but then how do you actually use it
09:06:53 <shachaf> because i can't just write function Foo(A a) { a."mutatify"(); } and then pass it (Either a b)
09:07:04 <shachaf> well not if it has any other "side effects for instance'.
09:07:33 <monqy> are we talking about lenses/prisms or mutability :( lenses/prisms are a lot easier to think about imo
09:07:34 <shachaf> because it expects there to be an a
09:07:50 <shachaf> monqy: imo too but i want to see what these concepts "translate to" with subtyping
09:07:55 <shachaf> "and maybe vice versa"
09:08:07 <shachaf> imo if you do Foo(Right x) then Foo won't be called at all.
09:08:16 <shachaf> otherwise it doesn't really make sense??
09:08:28 <monqy> well yeah that's the exact same thing you get with .~ isn't it
09:08:28 <shachaf> but this way it doesn't really make sense either
09:08:43 <monqy> what doesn't make sense about it
09:08:44 <shachaf> well sure but it's kind of weird from the perspective of "mutability and subtyping"
09:08:57 <shachaf> because are you calling Foo or aren't you
09:12:06 <monqy> what sort of perspective of "mutability and subtyping" is this? in "mutability and subtyping" languages i know of it doesn't work like this :-) you don't have sum types like that, you don't pass the supertype yada yada
09:12:25 <monqy> that example would be a "downcast" and you'd hit a "runtime failure"
09:12:29 <shachaf> i know but i was trying to figure out like "what if it would??"
09:12:40 <shachaf> monqy: prisms are a lot like a "downcast" with a "runtime failure"
09:12:53 <shachaf> Prism' s a = (a -> s, s -> Maybe a)
09:12:55 <monqy> except prisms are well-behaved and easy to think about
09:13:25 <monqy> from the "what if it would" perspective of "analogy by prisms" it'd work in the "weird" way "oh well"
09:13:35 <monqy> i don't think there's anything wrong with that?
09:13:49 <shachaf> well ok
09:13:52 <impomatic> The FYB hill is broken :-(
09:13:53 <shachaf> so how would sums work with subtyping
09:14:05 <shachaf> i guess usually they have "open sums??"
09:14:24 <shachaf> well that doesn't really work
09:14:28 <monqy> as in if you have a ref <a|b> what's that isomorphic to?
09:14:37 <monqy> or
09:14:40 <shachaf> well that's one question yes
09:15:05 <monqy> the answer is "i'd have to think about it"
09:15:18 <shachaf> good answer
09:17:00 <shachaf> monqy: btw should we use Unprisms instead of Prisms
09:17:06 <shachaf> i guess "probably not"
09:17:08 <monqy> what's an unprism
09:17:14 <monqy> what if you used both
09:17:16 <shachaf> it's a p t s -> p b a prism
09:17:25 <shachaf> monqy: oh that reminds me i have a lens question
09:17:34 <shachaf> what do lenses and unprisms have in common
09:17:39 <shachaf> what's their "common superclass"
09:18:06 <shachaf> class Lensy p where lensy :: p a b -> p (r,a) (r,b)
09:18:19 <shachaf> class Unprismy p where unprismy :: p (r,a) (r,b) -> p a b
09:18:22 <shachaf> errrrr
09:18:23 <shachaf> ignore that
09:18:27 <shachaf> class Lensy p where lensy :: p a b -> p (r,a) (r,b)
09:18:41 <shachaf> class Unprismy p where unprismy :: p (Either r a) (Either r b) -> p a b
09:18:55 <shachaf> i think these two have a "common superclass" (other than profunctor)
09:19:17 <shachaf> monqy: simple version:
09:19:23 <shachaf> class Lensy p where lensy :: p a -> p (r,a)
09:19:33 <shachaf> class Unprismy p where unprismy :: p (Either r a) -> p a
09:19:51 <monqy> h m
09:21:16 <shachaf> also there's Unlensy and Prismy
09:21:23 <shachaf> which are "analogous"
09:21:50 <monqy> do you have an "analogous" question about unlensy and prismy or is that "well known" or "uninteresting"
09:22:11 <shachaf> i have an "analogous" question
09:22:26 <shachaf> Lensy and Unprismy both have a Forget r instance.
09:22:39 <shachaf> And Unlensy and Prismy both have a Tagged instance
09:23:11 <shachaf> (and instance Lensy p => Unlensy (Un p a b), and instance Unlensy p => Lensy (Un p a b), naturally.)
09:23:23 <shachaf> (where newtype Un p a b s t = Un { unUn :: p t s -> p b a })
09:24:20 <shachaf> i think Lensy/Unprismy (or Unlensy/Prismy)'s superclass might be interesting "from a subtyping perspective too"
09:24:30 <shachaf> (but that's not where the question came from)
09:33:32 <shachaf> monqy: any other instances for Unprismy btw
09:33:44 <shachaf> other than Forget and Un (and Neither)
09:33:53 <shachaf> data Neither a b = Neither
09:36:00 <zzo38> O! It is a category.
09:36:38 <shachaf> What is?
09:37:50 <zzo38> id = Neither; Neither . Neither = Neither;
09:38:11 <shachaf> Oh, Neither is. Sure.
09:38:14 <shachaf> Neither is a lot of things. :-)
09:39:34 <shachaf> zzo38: What constraints on p do you need to make (Un p a b) a category?
09:43:27 <zzo38> I don't know.
09:47:46 <Sgeo> My computer's so slow I can't even turn the volume up
09:49:49 -!- monqy has quit (Quit: hello).
09:49:51 -!- Taneb has joined.
09:50:15 <Jafet> pactl set-sink-volume 0 65537
09:53:39 <Taneb> Did you know Hexham has a Village Band?
10:37:32 <Jafet> `? hexham
10:37:37 <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.
10:39:54 <Sgeo> Instead of sleeping I am watching QI. I am brillant.
10:51:24 * impomatic has been to Hexham :-)
10:54:45 <shachaf> Who hasn't?
10:58:58 <Sgeo> I haven't
11:03:06 <Sgeo> I might not count as a who though
11:06:48 <shachaf> I'm afraid you don't.
11:06:51 <shachaf> Sorry. :-(
11:11:12 <FreeFull> Jafet: http://en.wikipedia.org/wiki/Hexham
11:11:21 <FreeFull> shachaf: I haven't been to hexham
11:11:52 <FreeFull> Way too far up north
11:12:54 <quintopia> in finland
11:15:45 <fizzie> I haven't been to Hexham either, even though I live in Finland. *shame*
11:16:06 <shachaf> `?hh finland
11:16:08 <HackEgo> ​/hackenv/bin/?hh: line 1: u: command not found
11:16:17 <shachaf> `cat bin/?hh
11:16:18 <HackEgo> ​? "$@" | perl -pe 's/([aeiouy])([bcdfghjklmnpqrstvxz])/$1h$2/ig'
11:16:45 <fizzie> Heh, someone made a file called "u", I see.
11:17:13 <fizzie> `run sed -i -e 's#^#/#' bin/\?hh
11:17:16 <HackEgo> No output.
11:17:20 <fizzie> `?hh finland
11:17:21 <HackEgo> ​/hackenv/bin/?hh: line 1: /?: No such file or directory
11:17:30 <fizzie> And I mistake / for a \.
11:17:32 <fizzie> (Impressive.)
11:17:41 <fizzie> `run sed -i -e 's#^/#\#' bin/\?hh
11:17:42 <HackEgo> sed: -e expression #1, char 7: unterminated `s' command
11:17:45 <fizzie> `run sed -i -e 's#^/#\\#' bin/\?hh
11:17:48 <fizzie> TOO HARD.
11:17:49 <HackEgo> No output.
11:17:52 <fizzie> `?hh finland
11:17:54 <HackEgo> Fihnlahnd ihs a Euhrohpeahn couhntry. Thehre ahre two peohple ihn Fihnlahnd, ahnd aht leahst nihne ohf thehm ahre ihn thihs chahnnehl. Cohruhn drihvehs the buhs.
11:18:04 <shachaf> `hyfinate finland
11:18:35 <HackEgo> No output.
11:19:21 <shachaf> `run \? finland | hyfinate
11:19:23 <HackEgo> Fin-land is a Eu-ro-pe-an count-ry. The-re a-re two pe-op-le in Fin-land, and at le-ast ni-ne of them a-re in this chan-nel. Co-run dri-ves the bus.
11:19:41 <Taneb> impomatic, what were you doing in Hexham?
11:19:50 <Taneb> `run \? Taneb | hyfinate
11:19:52 <HackEgo> Ta-neb is not el-li-ott, no mat-ter who y-ou ask. He al-so isn't a rab-bi alt-hough he has pre-ten-ded in the past. (see al-so: d-mo-du-les)
11:19:55 <fizzie> `run words --eng-all 20 | hyfinate
11:20:01 <HackEgo> su-ber a-tor e-mild er-ry-e asch-ro-duz-co haul-tins-hi wi-de mo-ni-a land-res-sibl ha-ga-nin ne-cei pu-bis-sab-le ga-lam-ber sixt bla en-ta-mi-o wor-det to-pi-do ge-ney al-pi-or
11:20:16 <Taneb> ...this makes me read it in a Welsh accent
11:21:02 <impomatic> Taneb: I can't remember... Probably just taking a look around, nothing memorable! Also visited a reenactment at Corbridge.
11:21:24 <Taneb> There are reenactments in Corbridge?
11:21:33 <Taneb> I've seen a few in Hexham, but not Corbridge
11:21:44 <impomatic> Well they called it a reenactment. It was more like Romans vs English Civil War.
11:21:59 <fizzie> Is that a Finnish hyphenation attempt, actually?
11:22:09 <fizzie> `run words --finnish 15 | hyfinate
11:22:11 <HackEgo> mul-le kä-hei-jai-si mah-ta-viin puh-ku-mak-se-si reik-kai-te e-lis-tauk-sen-ne a-ge-ner-to-vit-tam-me ver-sy-vi-än-nös-sä-ni tun-tel-tä y-hyy-dyl-le-ni tai-sem-pan-ne in-tä-vin vas-sa-si kil-lan-sa as-ta-ni
11:22:57 <quintopia> fizzie: is hyfinate just hh but with the h's replaced with hyphens?
11:23:31 <impomatic> Also visited Birdoswald nearby where they'd set up a Roman camp and did some demonstrations, but no battle.
11:23:40 <fizzie> quintopia: It's not quite the same.
11:23:45 <fizzie> `cat bin/hyfinate
11:23:46 <HackEgo> ​#!/bin/sh \ exec perl -CS -Mutf8 -pwe 'my$vow=qr/[aeiouyäö]/i;my$con=qr/[bcdfghjklmnpqrstvwxz]/i;1while s/($vow$con*)($con$vow)/$1-$2/g;1while s/a[eoyäö]|e[aoäö]|i[aoäö]|o[aeyäö]|u[aeyäö]|y[aeouä]|ä[aeouö]|ö[aeouä]/my@s=split"",$&;$s[0]."-".$s[1]/egi'
11:23:55 <quintopia> wow
11:24:09 <ion> fizzie: It should be correct if the input doesn’t have compound words or foreign words.
11:24:28 <ion> I.e. anything that would require dictionary lookups.
11:24:31 <fizzie> ion: I'm sure there are some exceptions to every rule somewhere.
11:25:37 <quintopia> fizzie: does it correctly break finnish words at syllables?
11:26:03 <ion> It should.
11:26:04 <fizzie> It seems to do a pretty good job.
11:27:42 <quintopia> i wonder if it's possible to do it in english without just looking it up in a syllable dictionary
11:27:46 <fizzie> ion: http://www2.lingsoft.fi/doc/d-finhyp9.html seems to suggest you do need a bit more rules to be entirely correct.
11:28:39 -!- Frooxius has quit (Ping timeout: 260 seconds).
11:29:30 <ion> ok
11:30:05 <fizzie> I guess compound words might account for a lot of the complexity, though.
11:30:18 <fizzie> At least based on these TeX Finnish hyphenation rules.
11:30:51 <fizzie> `run echo maauimala | hyfinate # wovels across the word boundary go wrong, for example
11:30:53 <HackEgo> maaui-ma-la
11:31:02 <ion> `run sed -i -re 's/bcdfghjklmnpqrstvwxz/b-df-hj-np-tv-xz/' bin/hyphenate.fi
11:31:05 <HackEgo> No output.
11:31:18 <ion> Yeah, as i said, it doesn’t support compound words at all.
11:31:18 <quintopia> wovels eh
11:31:41 <fizzie> I keep mistyping that.
11:31:50 <ion> `run words --finnish 15 | hyphenate.fi
11:31:53 <HackEgo> val-vit-täm-me hel-lyt-tu-val-ta kut-ta-vit-ta-mil-lam-me o-hen-tu-vik-sel-lem-mil-ta i-lo-pet-teik-si tul-ke-väm-mäs-sä loi-si-suu kaa-mil-tä hi-ot-ta-ni pom-paat-ti-sem-piin lis-täm-mäk-se-ni si-va-mil-tään va-rot-ta kat-kim-pa-na huo-len-ne
11:34:11 <fizzie> Is hyphenate.fi different from hyfinate?
11:34:28 <ion> I named it hyphenate.fi, shachaf (IIRC) symlinked it to hyfinate.
11:34:43 <shachaf> Yes, I symlinked it to hyfinate in IRC.
11:35:04 -!- sirdancealot7 has quit (Ping timeout: 240 seconds).
11:35:29 <Sgeo> help I was compelled to click that as though it was a link
11:35:46 <ion> Silly, it doesn’t even have a protocol.
11:37:27 <fizzie> Of course there are some compound words where the word break has multiple valid locations, those are arguably impossible to get right without some mind-reading hardware. (The TeX hyphenation rules mention kaivos|aukko vs. kaivo|saukko as an example.)
11:38:01 <ion> Fortunately Perl has readmind() for that.
11:39:06 * Sgeo is sure J has a 2 character symbol for that
11:40:03 <ion> I’d be interested to see a non-compound Finnish word hyphenate.fi actually doesn’t get right.
11:41:31 <shachaf> What's a non-compound Finnish word?
11:42:05 <ion> Kakka is a Finnish word that is not a compound word, for instance.
11:47:38 -!- sirdancealot has joined.
11:54:23 -!- sirdancealot has quit (Excess Flood).
11:55:48 -!- sirdancealot has joined.
12:04:30 -!- carado has joined.
12:05:51 -!- sirdancealot has quit (Ping timeout: 245 seconds).
12:09:20 -!- Phantom_Hoover has joined.
12:15:05 -!- sirdancealot has joined.
12:21:43 <fizzie> `run echo säie | hyfinate # ion: should be säi-e according to Karjalainen, Sulkala, "Finnish (Descriptive Grammar)", 1992.
12:21:46 <HackEgo> säie
12:23:06 <fizzie> `run echo rakkaus rakkautta | hyfinate # should be rak-ka-us rak-ka-ut-ta according to the same book.
12:23:09 <HackEgo> rak-kaus rak-kaut-ta
12:24:48 <fizzie> `run echo huouimme | hyfinate # ditto huo-ui-mme
12:24:50 <HackEgo> huouim-me
12:25:35 <fizzie> (Examples picked from Syllabilification of Medial Units and Clusters, the "following additional rules can be mentioned" list.)
12:27:15 <fizzie> Er, s/ui-mme/uim-me/ in the last comment, but anyway.
12:30:42 <zzo38> So, using ORDER BY doesn't prevent or change the order of side effects in the result expressions and causes them to be evaluated even in the case of LIMIT and OFFSET, but WHERE does prevent side effects (even in the presence of ORDER BY), but LIMIT and/or OFFSET without ORDER BY will evaluate only the rows actually returned.
12:32:40 <zzo38> Doing this even affects a query in which a subquery has ORDER BY, but if the outer query which is used to perform the side effects has its own ORDER BY which isn't affecting the order of the results, then it will prevent the side effect for rows not returned and will do them in the order returned by the inner query.
12:32:52 <zzo38> Is this understandable and/or reasonable to you?
12:33:55 <zzo38> Is this how the SQL specification says it should work?
12:48:22 <Vorpal> zzo38, what sort of side effects? In a select statement?
12:50:34 <zzo38> I mean functions that might be called in the results of a SELECT statement.
12:50:49 <Vorpal> ah, no clue about that, never used such stuff
13:03:02 <FreeFull> I love how SQL shouts at everyone
13:04:02 -!- RodgerTheGreat has joined.
13:33:06 -!- zzo38 has quit (Remote host closed the connection).
14:46:54 -!- azaq23 has joined.
14:51:31 <ion> fizzie: Alright, thanks for the examples.
15:14:38 -!- FreeFull has quit (Ping timeout: 255 seconds).
15:27:25 -!- oerjan has joined.
15:28:59 -!- FreeFull has joined.
15:37:57 <oerjan> <shachaf> Bike: If A is a subtype of B, which one is bigger?
15:38:07 <oerjan> i thought we'd clarified that yesterday
15:38:24 <shachaf> What was our conclusion?
15:38:53 <Applejacques> Which TYPE is bigger, or which INSTANCE is bigger? :)
15:39:15 <shachaf> Instance of what?
15:39:23 <Applejacques> Instance of those types.
15:39:24 <oerjan> the answer is: it has nothing to do with number of members, because when A is a subtype of B that _is_ a subset, then (B -> C) is a subtype of (A -> C) which is _larger_.
15:39:45 <shachaf> oerjan: Right.
15:39:49 <shachaf> That's my answer too.
15:39:50 <Applejacques> Right, if we're talkin' types, then B is larger than A.
15:39:56 <shachaf> No it's not.
15:40:06 <elliott> "Instance of a type" :(
15:40:44 <Applejacques> lol, this is fun.
15:42:08 <ion> `run type love || (printf '%s\n' '#!/bin/sh' 'printf "i love %s. they are so easy." "$*"' >bin/love && chmod 755 bin/love && love instances)
15:42:13 <HackEgo> bash: line 0: type: love: not found \ i love instances. they are so easy.
15:42:21 <FreeFull> `love whores
15:42:24 <HackEgo> i love whores. they are so easy.
15:42:46 * shachaf sighs.
15:42:48 <elliott> `rm bin/love
15:42:51 <HackEgo> No output.
15:43:31 <ion> D-:
15:44:18 <ion> help
15:44:28 <ion> elliott is destroying the fruits of my labor
15:44:52 <oerjan> ion: you are attempting to resurrect dead horses. that is evil.
15:45:17 <ion> But i love dead horses. They are so easy.
15:45:22 <oerjan> especially since it was a nasty horse to start with.
15:46:14 <oerjan> `wtf saying "they are so easy"
15:46:16 <HackEgo> why saying "they are so easy" is like wtf
15:46:35 <oerjan> HTH
15:46:40 <shachaf> imo has FreeFull ever said a single useful thing in here ever?
15:47:51 -!- oerjan has quit (Quit: Probably.).
15:49:11 <ion> or ion
15:49:54 <shachaf> ion has said at least one useful thing.
15:50:34 <elliott> what about shachaf
15:51:01 <shachaf> ion: did you seriously just look at beaky.txt to get more accurate beaky uotes
15:51:03 <shachaf> q
15:51:46 <ion> shachaf: I thought you were against logs.
15:52:11 <shachaf> Who said anything about logs?
15:52:15 <shachaf> I'm reading in real time.
15:52:17 <ion> {bea,mon}{k,q}y
15:52:59 <ion> beaky.txt is a log.
15:53:09 <shachaf> Oh.
15:53:11 <shachaf> That's a public log.
16:03:08 <FreeFull> shachaf: Does it matter if the things I say are useful
16:35:27 <Vorpal> ogrom, "HTH"? What does that mean
16:36:05 <elliott> hellish taiga hapapiness
16:39:50 <Phantom_Hoover> Hot Tasmanian Housewives.
16:53:26 <Vorpal> hm I think Phantom_Hoover is right
16:53:39 <Vorpal> it makes perfect sense in the context unlike your suggestion elliott
16:54:34 <elliott> I like how you pinged ogrom.
16:55:35 <Vorpal> elliott, lol oops
17:19:41 <kmc> shachaf: i know a few things about subtyping
17:19:46 <kmc> i know TaPL things about subtyping
17:31:08 <FreeFull> Homo Taurus Hinensis
17:31:18 <kmc> high temperature halibut
17:31:40 <FreeFull> Henry The Hippopotamus
17:33:24 <shachaf> kmc: I may not be coherent enough now to talk about the things I was going to talk about.
17:33:34 <shachaf> So what TaPL things are there about subtyping?
17:33:40 <shachaf> What sorts of subtyping are there?
17:35:40 <shachaf> How do sums and products work out?
17:38:05 <kmc> i don't remember
17:38:10 <kmc> i could look them up in TaPL
17:38:13 <kmc> "know" may have been an overstatement
17:38:32 <kmc> i think generally (Int,String) would not be a subtype of Int
17:38:56 <kmc> but you can have record systems where {a:Int, b:String} is a subtype of {a:Int}
17:40:07 <kmc> you can pick something like that as your "primitive" subtyping relation
17:40:33 <kmc> and then you want it to be reflexive, antisymmetric, transitive
17:41:16 <kmc> and you extend the subtyping relation to function types with covariance in the return position and contravariance in the argument position
17:43:05 <kmc> this is only the basic stuff, it's what i remember
17:43:14 -!- Phantom_Hoover has quit (Ping timeout: 255 seconds).
17:45:05 -!- Phantom_Hoover has joined.
17:45:13 -!- function has changed nick to trout.
17:45:37 <shachaf> kmc: OK, but what about the relationship of Int and Either Int String?
17:47:21 <shachaf> It seems to make sense to say a <: Either a b in a similar way to the way it makes sense to say (a,b) <: a
17:47:36 <shachaf> These let you do different things, though.
17:47:43 <shachaf> Does TaPL talk about mutability?
17:48:32 <kmc> i think so
17:49:15 <shachaf> With "product" subtypes, you add extra fields, but if f expects a mutable (a,b), I can pass it a mutable (a,b,c) just fine.
17:49:20 <shachaf> And it can mutate the a and b if it wants.
17:49:25 <shachaf> Right?
17:49:49 -!- ogrom has quit (Quit: Left).
17:49:56 <kmc> yeah i think so
17:50:11 -!- Bike_ has joined.
17:50:43 <shachaf> But with sums you don't get that.
17:50:57 <shachaf> Because what if you try to mutate it from a Left to a Right or something?
17:52:08 <kmc> mm
17:52:13 <kmc> i haven't thought about that
17:52:39 <kmc> i do know that (a <: b) => ((a,c) <: (b,c)) becomes problematic if your pairs are mutable
17:52:42 <kmc> doesn't it?
17:54:23 <kmc> for the same reason as for arrays/lists
17:54:28 <kmc> got to go to lunch though, ttyl
17:54:29 <shachaf> Right.
17:54:47 <shachaf> kmc: Anyway I think this corresponds to lenses and prisms.
17:55:06 <shachaf> kmc: And I think functor/profunctor lenses correspond to Liskov substitutability.
17:55:19 <shachaf> But I might just be making things up.
17:57:30 -!- AnotherTest has joined.
17:57:42 <AnotherTest> Hello
18:00:33 -!- Taneb has quit (Ping timeout: 245 seconds).
18:01:21 <shachaf> Is it just me or are these a bit similar?
18:01:22 <shachaf> uncompose f g k = Un2 $ \q -> ($ q) . under _Un2 f $ \x -> ($ q) . under _Un2 g $ \y -> unUn2 k (x C.. y)
18:01:25 <shachaf> nip f g k = Op $ \t -> ($ t) . under _Op f $ \x -> ($ t) . under _Op g $ \y -> getOp k (x,y)
18:04:52 -!- Taneb has joined.
18:10:54 -!- Bike_ has changed nick to Bike.
18:13:11 -!- asiekierka has quit (Excess Flood).
18:21:52 -!- asiekierka has joined.
18:28:14 -!- heroux has quit (Ping timeout: 255 seconds).
18:40:30 -!- heroux has joined.
18:43:18 -!- Bike has quit (Ping timeout: 244 seconds).
18:45:14 -!- Bike has joined.
19:14:21 -!- ais523 has joined.
19:29:34 -!- atriq has joined.
19:32:35 -!- Taneb has quit (Ping timeout: 260 seconds).
19:44:45 -!- atriq has quit (Ping timeout: 256 seconds).
19:45:12 <ais523> @messages
19:45:12 <lambdabot> You don't have any new messages.
19:51:47 <olsner> @messages
19:51:47 <lambdabot> You don't have any new messages.
19:53:26 <elliott> @tell ais523 hi
19:53:27 <lambdabot> Consider it noted.
19:53:30 <elliott> @tell ais523 what is up
19:53:31 <lambdabot> Consider it noted.
19:53:35 <ais523> @clear-messages
19:53:35 <lambdabot> Messages cleared.
19:53:37 <ais523> hi elliott
19:53:40 <elliott> @tell ais523 wow that's impolite
19:53:41 <lambdabot> Consider it noted.
19:53:48 <ais523> @clear-messages
19:53:49 <lambdabot> Messages cleared.
19:53:55 <ais523> I've already read them as you sent them
19:54:08 <shachaf> @ask ais523 for advice
19:54:08 <lambdabot> Consider it noted.
19:54:22 <ais523> @clear-messages
19:54:22 <lambdabot> Messages cleared.
19:54:23 <olsner> @tell elliott hi
19:54:24 <lambdabot> Consider it noted.
19:54:26 <ais523> shachaf: that's nto a question
19:54:28 <ais523> *not a question
19:54:35 <ais523> btw, we should probably stop the bot abuse
19:54:43 -!- epicmonkey has joined.
19:55:13 -!- Frooxius has joined.
19:55:36 <elliott> @ignore + ais523
19:55:38 <elliott> Agreed!
19:55:38 <lambdabot> elliott: You have 1 new message. '/msg lambdabot @messages' to read it.
19:55:44 <elliott> @messages
19:55:44 <lambdabot> olsner said 1m 20s ago: hi
19:56:07 <ais523> elliott: huh, I didn't use lambdabot much anyway
19:56:09 * elliott waits for ais523 to try and use lambdabot so he can take the ignore off.
19:56:16 <ais523> so this mostly means that if you send me messages, I won't be able to read them
19:56:48 <elliott> ais523: Would I do that?
19:56:49 -!- Phantom_Hoover has quit (Read error: Operation timed out).
19:57:02 <ais523> well you did earlier
19:57:10 <shachaf> @ignore - ais523
19:57:12 <elliott> Hmm, apparently if lambdabot is ignoring you it won't notify you of new messages.
19:57:19 <ais523> that makes sense
19:57:19 <lambdabot> ais523: You have 1 new message. '/msg lambdabot @messages' to read it.
19:57:22 <elliott> @admin - shachaf
19:57:24 <ais523> @messages
19:57:24 <lambdabot> elliott said 39s ago: hello
19:57:26 <elliott> shachaf: Abusing your privileges!!!!
19:57:42 <shachaf> @admin - elliott
19:57:42 <lambdabot> Not enough privileges
19:57:55 <shachaf> @admin - elliott
19:57:59 <elliott> By privileges I mean non-privileges.
19:58:06 <elliott> (Since you're not actually a lambdabot admin.)
19:58:10 <Bike> check your lack of privilege
19:58:19 -!- atriq has joined.
19:58:24 <elliott> shachaf: By the way you should undo that.
19:58:32 <shachaf> @undo @admin - elliott
19:58:33 <lambdabot> Parse error at "@admi..." (column 1)
19:58:43 <shachaf> "if only ghc had undo notation"
19:58:57 <shachaf> @admin + elliott
19:59:11 <shachaf> "try not to abuse it this time"
19:59:51 <elliott> I like how I was going to un@ignore ais523 once it gave him the message notification anyway.
20:01:07 <AnotherTest> You just fooled my IRC client into thinking un@ignore is someone's email address :(
20:01:42 <ais523> AnotherTest: who knows, it theoretically could be
20:01:53 <shachaf> #include <irc.h>
20:01:56 <ais523> even on the public internet, what with ICANN going crazy recently
20:01:57 <shachaf> Don't join it!
20:02:00 <ais523> but definitely privately
20:02:04 -!- Nisstyre-laptop has joined.
20:02:05 <AnotherTest> Not sure, is ignore a DNS TLD?
20:02:14 <ais523> AnotherTest: ICANN have been adding loads of new ones recently
20:02:15 <shachaf> Do you want it to be?
20:02:31 <shachaf> ICANN easily imagine it being one.
20:02:38 <AnotherTest> Meh, if you have enough money
20:02:46 <AnotherTest> ICANN is corrupt
20:03:25 -!- atriq has changed nick to Taneb.
20:03:38 <AnotherTest> Actually, I don't know of any TLD that is also a hostname mapping to an actual server
20:08:11 -!- asiekierka has quit (Excess Flood).
20:10:41 <ais523> AnotherTest: "an.", I thought was one
20:10:51 <ais523> although I don't think there's a webserver there, just an email server
20:11:35 -!- Phantom_Hoover has joined.
20:12:22 -!- asiekierka has joined.
20:17:53 -!- oerjan has joined.
20:20:04 -!- asiekierka has quit (Excess Flood).
20:22:22 -!- asiekierka has joined.
20:29:56 -!- AnotherTest has quit (Quit: Leaving.).
20:40:32 -!- monqy has joined.
20:50:53 -!- epicmonkey has quit (Ping timeout: 255 seconds).
21:11:18 -!- zzo38 has joined.
21:18:36 <oerjan> shachaf: hm back to the subtyping a moment - even if a is not a subtype of Either a b and (a,b) is not a subtype of a, types that are internally _represented_ identically to those can be subtypes of each other. so subtyping is something independent of representation (and cardinality).
21:19:33 <oerjan> basically, if something is a subtype at a higher level, there needs to be a conversion of the internal representations.
21:20:10 <oerjan> which needs be neither injective nor surjective.
21:20:18 <monqy> there's ways to work subtypey-coercions into the semantics yes
21:20:58 <oerjan> i slightly understand scala uses implicit coercions a _lot_ to get advanced type features
21:25:58 <oerjan> <shachaf> But it still makes sense to talk about how (A,B) could <: A, doesn't it? <-- in an OO system where almost any type means "these methods exist, and there might be others because of subtyping" something resembling (A,B) <: A is sort of necessary
21:26:45 <oerjan> i believe ocaml's type system makes these things more explicit than most...
21:27:10 <oerjan> although i only vaguely recall the specifics.
21:27:46 <oerjan> but you have types that _do_ mean simply "methods of these names and types exist".
21:28:26 <oerjan> "(and there might be others)"
21:29:00 <oerjan> which means it has structural types for objects.
21:30:03 <Taneb> Did you guys work out the difference between a cosubtype and a supertype yet
21:30:32 <oerjan> i have no idea.
21:32:55 <Vorpal> Taneb, what is a cosubtype
21:33:03 <Taneb> I dunno
21:33:07 <Vorpal> oh okay
21:33:11 <Taneb> I think shachaf was talking about them the other day
21:36:28 -!- carado has quit (Ping timeout: 246 seconds).
21:37:07 -!- Arc_Koen has joined.
21:42:36 <oerjan> so what definition of coref would satisfy <coref a|coref b> ~ coref <a|b> ?
21:42:51 <oerjan> (nontrivial of course)
21:43:19 <oerjan> something dual to mutability...
21:47:32 <shachaf> hi oerjan
21:47:36 <shachaf> I bet it would have to do with prisms.
21:48:03 <elliott> oerjan: coref a = ref a -> r for some r?
21:48:22 <elliott> <ref a -> r | ref b -> r> ~ (ref <a|b> -> r)
21:48:36 <elliott> That needs mapping over refs, though.
21:48:49 <oerjan> i don't think that is true.
21:49:38 <oerjan> there is nothing preventing the function on the right from storing both a's and b's into the ref in sequence
21:51:40 <oerjan> maybe if ref's are implicitly wrapping things into State monads, then coref's should be wrapping things into Costate comonads
21:51:59 <oerjan> *-' -'
21:53:32 <oerjan> that is, maybe corefs don't live in the kind of imperative language that is modeled with monads at all
21:57:33 <elliott> So you have a comonad CoST?
21:58:19 <oerjan> ...i was just thinking that thought
21:59:04 * elliott is terrified of what the equivalent of runST looks like.
22:00:35 <elliott> oerjan: btw although (Ref a, Ref b) is like Ref (a, b) they are *not* the same in Haskell
22:00:40 <elliott> i.e. there is no function either way.
22:01:07 <elliott> you need to wrap it up with data Ref a = forall b. Ref (SomeRef b) (a -> b) (b -> a)
22:01:16 <elliott> so I assume the same would apply to Coref
22:03:04 <Vorpal> what is a Coref?
22:03:23 <Vorpal> and what is the use of it
22:03:45 <kmc> i totally read 'corefs' as 'core fs'
22:04:05 <kmc> obviously, too much systems and not enough haskell for me :(
22:07:04 <kmc> ) fungot
22:07:04 <fungot> kmc:. i'm so kind, even to assholes! anmaster no not markov anmaster no not markov
22:07:04 <jconn> kmc: |value error: fungot
22:07:04 <fungot> jconn: just to help an fnord archive)" means " land of meadows" from the name of the array, it is documented, and only if the strings? what kind of like that) which is actually pretty nice) is the name of the array, it is documented, and only if the strings? what kind of like that) which is actually pretty nice, but sometimes it's necessary to achieve the planned than fnord since no sign, perhaps, it may be said that particular
22:07:04 <jconn> fungot: |open quote
22:07:04 <jconn> fungot: | just to help an fnord archive)" means " land of meadows" from the name of the array, it is documented, and only if the strings? what kind of like that) which is actually pretty nice) is the name of the array, it is documented, and only if the strings? what kind of like that) which is actually pretty nice, but sometimes it's necessary to achieve the planned than fnord since no sign,
22:07:04 <jconn> fungot: | ^
22:07:04 <fungot> jconn: i am just as confused. you know, that thing which you might want is broken" archives. even less chance. i called " o" in " the other side has, perhaps, it may be said that particularly here, parliament will give a single instance,
22:07:04 <fungot> jconn: is that something you know and and the cases that required to actually mutate the original i think you were still a very famous program talisman with fnord windows. that's always tricky. i could actually make progress. securing budgetary authority, can the governments. i know 2. that's obvious and you did refer to his fnord code
22:07:04 <fungot> jconn: to " print" statement should always remember the songs on p2p apps in scheme, besides, was not beyond normal credibility!
22:07:05 <jconn> fungot: |spelling error
22:07:10 <elliott> Vorpal: We don't know, and there aren't any.
22:07:12 <jconn> fungot: | i am just as confused. you know, that thing which you might want is broken" archives. even less chance. i called " o" in " the other side has, perhaps, it may be said that particularly here, parliament will give a single instance,
22:07:12 <jconn> fungot: | ^
22:07:16 <jconn> fungot: |spelling error
22:07:27 <oerjan> elliott: no that wrapping doesn't work either, because translating a write to a Ref (a,b) into (Ref a, Ref b) requires _two_ writes
22:07:28 <jconn> fungot: | is that something you know and and the cases that required to actually mutate the original i think you were still a very famous program talisman with fnord windows. that's always tricky. i could actually make progress. securing budgetary authority, can the governments. i know 2. that's obvious and you did refer to his fnord code
22:07:36 <jconn> fungot: | ^
22:07:44 <jconn> fungot: to"_ _ _"_ _ _ (should always remember the songs on p2p apps in scheme , besides , was not beyond normal credibility !)
22:08:10 <oerjan> fizzie: i think it is about time to expand ^ignore again.
22:08:55 <oerjan> hm...
22:09:02 <oerjan> > "hi fungot"
22:09:02 <fungot> oerjan: so, let's say i call them mindless games. if we hit every stupid person, any person going to the theater
22:09:04 <lambdabot> "hi fungot"
22:10:02 <kmc> `addquote <jconn> fungot: |open quote <jconn> fungot: | just to help an fnord archive)" [...] <fungot> jconn: i am just as confused. you know, that thing which you might want is broken
22:10:02 <fungot> kmc: that is just a value of type " airbus is a big fan of avril....but this song " there
22:10:07 <ais523> bleh, now I want to know the rest of that fungot sentence
22:10:07 <fungot> ais523:, so i'd make stuff up to. why, this is for you guys are a lot of the design, prisoners and slaves that have sucked. rephrase: " i tried todo a _" is 0
22:10:10 <ais523> about stupid people
22:10:16 <HackEgo> 951) <jconn> fungot: |open quote <jconn> fungot: | just to help an fnord archive)" [...] <fungot> jconn: i am just as confused. you know, that thing which you might want is broken
22:10:31 <elliott> `addquote <fungot> kmc: that is just a value of type " airbus is a big fan of avril....but this song " there
22:10:31 <fungot> elliott: if it's ( syntactically) long, and brainfuck command keys. secondly, the establishment)
22:10:53 <HackEgo> 952) <fungot> kmc: that is just a value of type " airbus is a big fan of avril....but this song " there
22:14:02 <FreeFull> > map (+1) [1..]
22:14:04 <lambdabot> [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,2...
22:14:17 <FreeFull> > fix (\x -> x : map (+1) x )
22:14:19 <lambdabot> Occurs check: cannot construct the infinite type: a0 = [a0]
22:14:21 <FreeFull> > fix (\x -> x : map (+1) x ) 1
22:14:23 <lambdabot> Couldn't match expected type `t0 -> t1' with actual type `[a0]'
22:14:27 <FreeFull> > fix (\x -> 1 : map (+1) x )
22:14:28 <lambdabot> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28...
22:15:24 <FreeFull> > fix (\x -> 1 : zipWith (+) x x )
22:15:26 <lambdabot> [1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,...
22:22:48 <Taneb> > scanl1 (+) (repeat 1)
22:22:50 <lambdabot> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28...
22:23:25 <oerjan> > [1..]
22:23:27 <lambdabot> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28...
22:23:29 <oerjan> I WIN
22:24:22 <Arc_Koen> so everything is a contest with you?
22:24:37 <Taneb> > scanl1 (+) [1..]
22:24:39 <lambdabot> [1,3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210,231,253,27...
22:24:59 <oerjan> ...i can barely begin to explain how much that question doesn't describe me.
22:25:08 <Bike> Arc_Koen: well, one time he got in a contest to see who could make more things into contests, and it got out of hand.
22:25:18 <Arc_Koen> haha
22:25:28 <oerjan> i don't remember that.
22:26:05 <Arc_Koen> did you make a contest to see who was the fastest to forget about it?
22:27:09 <fizzie> ^ignore
22:27:09 <fungot> ^(EgoBot|HackEgo|toBogE|Sparkbot|optbot|lambdabot|oonbotti|cuttlefish)!
22:27:17 <fizzie> ^ignore ^(EgoBot|HackEgo|toBogE|Sparkbot|optbot|lambdabot|oonbotti|cuttlefish|jconn)!
22:27:18 <fungot> OK.
22:27:49 <oerjan> Arc_Koen: MAYBE
22:28:21 -!- Phantom_Hoover has quit (Remote host closed the connection).
22:29:17 <elliott> fizzie: I liked it when fungot didn't ignore jconn.
22:29:18 <fungot> elliott: i know i didn't know that you've had it for some time i added a new page and sends it to emacs, i suggest, vote). you need to install in /usr/ lib " 1.ss" " srfi"
22:30:05 <Bike> Does toBogE do nothing but issue bot commands?
22:33:10 -!- Phantom_Hoover has joined.
22:42:37 -!- Taneb has quit (Quit: goodnight).
22:46:47 <Vorpal> <elliott> Vorpal: We don't know, and there aren't any. <-- ?
22:48:42 -!- coppro has quit (Ping timeout: 264 seconds).
22:49:49 <ais523> who's jconn?
22:49:57 <Bike> a bot for J.
22:51:39 <zzo38> Why do you try to fix it with ignore lists and zero-width spaces and everything like that instead of using the proper way?
22:52:25 <Bike> because nobody uses notices
22:53:05 <oerjan> ) 'Hi ais523'
22:53:05 <jconn> oerjan: Hi ais523
22:53:36 <ais523> the proper way annoys mIRC users
22:53:38 <ais523> I see this as an advantage
22:53:51 <ais523> btw, thutubot has a prefix to send notice rather than privmsg
22:53:55 <oerjan> ais523: it also annoys irssi users, maybe not as much
22:53:56 <FreeFull> There should be a bot for all programming languages
22:53:56 <ais523> perhaps I should make it always notice
22:53:58 <FreeFull> Ever
22:54:02 <zzo38> Bike: That isn't a good reason. The server and client still supports it.
22:54:08 <ais523> oerjan: mIRC treats channel notices as pings
22:54:16 <ais523> FreeFull: EgoBot has all the languages that matter
22:54:34 <oerjan> ais523: except fueue.
22:54:43 <ais523> yeah, I was going to except an esolang
22:54:45 <ais523> but wasn't sure which
22:54:56 <oerjan> `fueue 72 105 H
22:54:56 <zzo38> ais523: Well, that is a somewhat better reason but still even in mIRC and irssi and whatever don't they have macros and/or options to control them?
22:54:58 <Bike> zzo38: well, we'd have to convince jconn's owner to make it spit out notices instead of messages, so there's that.
22:54:59 <HackEgo> Hi
22:55:26 <ais523> let's do it backwards
22:55:31 <ais523> and make the bots only respond to channel notices
22:55:43 <ais523> this has all the disadvantages of the correct way of doing things, and fewer advantages
22:56:39 <zzo38> Well, yes, it is too disadvantageous.
22:56:57 <FreeFull> ais523: Which ones are those?
22:57:11 <ais523> FreeFull: requiring changes to all the bots, and sending channel notices
22:57:13 <FreeFull> ais523: Does it have C?
22:57:14 <zzo38> And simply wrong.
22:57:18 <ais523> EgoBot has C
22:57:27 <Vorpal> <ais523> the proper way annoys mIRC users <-- also xchat
22:57:30 <FreeFull> Some form of ASM?
22:57:38 <ais523> !c int main() { int printf(char *, ...); printf("Hello, world!\n"); }
22:57:45 <EgoBot> Hello, world!
22:57:51 <oerjan> yes EgoBot has asm
22:58:00 <zzo38> Making the bots to reply with notices (whether operating privately or publicly) is better.
22:58:17 <ais523> btw, you can /totally/ declare printf inside main like that
22:58:18 <Bike> FreeFull: VAX simulator imo
22:58:36 <FreeFull> !c int main() { printf("Test\n"); return 0;}
22:58:39 <EgoBot> Test
22:58:57 <FreeFull> EgoBot seems to have printf defined already =P
22:59:37 <Vorpal> ais523, that is not the correct prototype for printf
22:59:42 <Vorpal> it is const char* I'm pretty sure
22:59:45 <FreeFull> !c int main() { printf("%f\n",sin(3.4)); return 0;}
22:59:48 <EgoBot> ​-0.255541
22:59:50 <zzo38> PRIVMSG messages may still be sent if it is not a result of a command it received in the same way and if auto-replying would be OK from such messages, though. (I do not know if there are any such cases for the existing bots though)
22:59:52 <FreeFull> Has math.h too
23:00:01 <ais523> Vorpal: it's correct /enough/ to work
23:00:16 <ais523> I don't think there are many C systems on which char * and const char * have different calling conventions
23:00:23 <ais523> (I know it's theoretically legal)
23:00:44 <kmc> yikes
23:00:44 <zzo38> Does the C standard allow char * and const char * have different calling conventions?
23:00:52 <ais523> it allows all sorts of ridiculous tihngs
23:00:53 <kmc> well hm it might be nice to have hardware level const pointers
23:00:54 <ais523> *things
23:00:59 <FreeFull> Lesse if it has complex.h
23:01:04 <Vorpal> ais523, true
23:01:05 <ais523> and a const pointer register for passing them around in?
23:01:18 <kmc> type tagged registers, dude
23:01:33 <zzo38> What is the case for using these things with LLVM?
23:01:58 <ais523> also, the pointer isn't const
23:02:01 <ais523> just it's pointing to const things
23:02:23 <ais523> I ended up writing something along the lines of "char * volatile" recently
23:02:39 <ais523> in order to stop gcc giving me warnings about longjmp (some of which were possibly correct, some of which weren't)
23:03:30 <elliott> 22:46:47 <Vorpal> <elliott> Vorpal: We don't know, and there aren't any. <-- ?
23:03:32 <zzo38> I do have another question about volatile, is a function parameter allowed to specify volatile even if the caller expects the type without volatile, and then cast it to a pointer to a non-volatile type inside of the function?
23:03:44 <elliott> Vorpal: I realise your scrollback is small but I was answering a question you asked literally a few lines prior.
23:03:58 <ais523> zzo38: volatile follows the same rules as const
23:03:59 <Vorpal> elliott, my client crashed
23:04:03 <ais523> so no, without manual casts
23:04:04 <Vorpal> elliott, and i reconnected to the bouncer
23:04:16 <Vorpal> elliott, so yes it was 3 lines of scroll back at that point
23:04:19 <FreeFull> !c int main() { double complex x = I; printf("%f %f\n",creal(x),cimag(x)); return 0;}
23:04:21 <EgoBot> Does not compile.
23:04:29 <FreeFull> Doesn't have complex.h ):
23:04:35 <Vorpal> FreeFull, use #include?
23:04:43 <elliott> zzo38: It isn't better to use notices because the bots are made for people in #esoteric who have clients that don't follow the spec.
23:04:44 <Vorpal> hm tricky with no newlines
23:04:59 <elliott> If they were made for people who had IRC clients that followed the spec they would be different.
23:05:21 <FreeFull> !help
23:05:21 <EgoBot> ​help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help <command>.
23:05:26 <FreeFull> !help c
23:05:26 <EgoBot> ​Sorry, I have no help for c!
23:05:32 <FreeFull> !help languages
23:05:32 <EgoBot> ​languages: Esoteric: 1l 2l adjust asm axo bch befunge befunge98 bf bf8 bf16 bf32 boolfuck cintercal clcintercal dimensifuck glass glypho haskell kipple lambda lazyk linguine malbolge pbrain perl qbf rail rhotor sadol sceql trigger udage01 underload unlambda whirl. Competitive: bfjoust fyb. Other: asm c cxx forth sh.
23:05:40 <FreeFull> !help languages c
23:05:40 <EgoBot> ​Sorry, I have no help for languages_c!
23:05:49 <zzo38> elliott: Whatever... of course they will program them how they want to... Even if I make the suggestion is not the requirement for everyone to use but at least should be considered at least a little bit.
23:05:51 <FreeFull> !help perl
23:05:51 <EgoBot> ​Sorry, I have no help for perl!
23:06:03 <FreeFull> EgoBot isn't very helpful
23:06:13 <FreeFull> !info
23:06:13 <EgoBot> ​EgoBot is a bot for running programs in esoteric programming languages. If you'd like to add support for your language to EgoBot, check out the source via mercurial at https://codu.org/projects/egobot/hg/ . Cheers and patches (preferably hg bundles) can be sent to Richards@codu.org , PayPal donations can be sent to AKAQuinn@hotmail.com , complaints can be sent to /dev/null
23:07:49 <ais523> we complain at /dev/null easily enough
23:07:52 <ais523> (NetHack joke)
23:07:56 <FreeFull> https://codu.org/projects/egobot/hg/index.cgi/file/ffe171208ae9/multibot_cmds/interps/gcccomp/gcccomp
23:07:59 <FreeFull> This seems to be some of the srouce
23:10:30 <FreeFull> I can't find the bit that does the actual IRC interaction
23:11:03 <elliott> that's multibot
23:12:37 <FreeFull> Specifically the bit that notices I typed !c at the beginning of the line and parses the rest
23:12:56 <zzo38> How do you override the pointer aliasing rules in C?
23:13:51 <FreeFull> https://codu.org/projects/egobot/hg/index.cgi/file/ffe171208ae9/multibot_cmds/hcmds/c
23:15:47 <zzo38> What kind of computer keyboard has keys labeled "5 F POISON" and "NUM/ALPHA EDIT"?
23:16:05 <FreeFull> !c \n int main() { double complex x = I; printf("%f %f\n",creal(x),cimag(x)); return 0;}
23:16:07 <EgoBot> Does not compile.
23:16:16 <FreeFull> !c \n int main() { return 0;}
23:16:17 <EgoBot> Does not compile.
23:19:42 <zzo38> I asked before about a mathematical structure which has successor and predecessor, but no designated zero point. Do you know what I intend to use this for?
23:20:22 <FreeFull> zzo38: a semigroup?
23:20:37 <FreeFull> Or rather, a semigroup that's not a monoid?
23:20:56 <Vorpal> <elliott> If they were made for people who had IRC clients that followed the spec they would be different. <-- I don't think that exists
23:21:34 <zzo38> I think you are correct that it is a semigroup and is not a monoid, but that is not what I mean, by, what I intend to use this for.
23:21:39 <zzo38> Vorpal: Don't think what exists?
23:21:56 <FreeFull> zzo38: Iteration with no fixed point?
23:22:14 <zzo38> FreeFull: No. I will tell you I am not using it for a computer program!
23:22:30 <FreeFull> Folding paper?
23:22:34 <zzo38> No
23:24:26 <FreeFull> No idea
23:26:06 <zzo38> To number the relatives to the prime material plane (which itself is relative!) in Icosahedral Role Playing Game.
23:26:28 <kmc> fungot: Боже мой
23:26:28 <fungot> kmc: to " print" statement should always remember the songs on p2p apps in scheme, besides, was not beyond normal credibility mightn't take his breath away: but i had to choose fnord, but don't
23:26:37 <Bike> ok, i have to hear about the icosahedral role playing game.
23:28:13 <zzo38> You can download it from my computer on port 70 on the selector string "phlog*c_dnd.icosahedral-rpg-i" (without the quotes) followed by CRLF for a bit of information.
23:28:20 -!- augur has quit (Remote host closed the connection).
23:28:33 <zzo38> It is very mathematical, for example the mathematical definition of a "mana" and a "multimana", of category theory, etc.
23:30:45 <FreeFull> mana ** mana
23:30:56 <FreeFull> mana !!!!!!!!!!!!
23:36:43 <Vorpal> <zzo38> Vorpal: Don't think what exists? <-- a completely standard conforming irc client
23:37:34 <zzo38> There are also template-spells, which means that some of the choices for the spell are selected when you learn the spell rather than when you cast the spell.
23:39:04 <zzo38> Vorpal: I try to make my program standard conforming; at least it conforms in ways others don't; and I think there must be others too even if the other ones are no longer maintained or whatever
23:40:35 <zzo38> A multimana is a multiset of manas.
23:42:20 <zzo38> A mana is a multiset of the elements (w), (u), (b), (r), and (g).
23:44:57 <zzo38> A mana X is less than or equal to Y iff the multiset X is a subset of Y.
23:49:18 -!- copumpkin has quit (Ping timeout: 245 seconds).
23:49:45 -!- copumpkin has joined.
23:56:02 <zzo38> The product of manas is their multiset sum. The sum of multimanas is their multiset sum.
23:56:45 <Bike> it conforms in ways others don't <-- I guess that about sums up the problem.
←2013-02-02 2013-02-03 2013-02-04→ ↑2013 ↑all