2022/01/19

2022-01-19 00:00:14 +0100notzmv(~zmv@user/notzmv)
2022-01-19 00:04:19 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-19 00:04:44 +0100wombat875(~neilfulwi@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev)
2022-01-19 00:06:02 +0100Henson(~kvirc@107-179-133-201.cpe.teksavvy.com) (Ping timeout: 268 seconds)
2022-01-19 00:06:22 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
2022-01-19 00:09:04 +0100alp(~alp@user/alp)
2022-01-19 00:10:37 +0100ksqsf(~user@134.209.106.31)
2022-01-19 00:11:35 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
2022-01-19 00:13:37 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2022-01-19 00:15:39 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 256 seconds)
2022-01-19 00:17:41 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-19 00:17:45 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 268 seconds)
2022-01-19 00:19:17 +0100_FlawLess_(~user@2a01:e0a:a4:7098::10) (Ping timeout: 240 seconds)
2022-01-19 00:26:27 +0100unyu(~pyon@user/pyon) (Quit: Reboot.)
2022-01-19 00:27:43 +0100burnsidesLlama(~burnsides@dhcp168-015.wadham.ox.ac.uk)
2022-01-19 00:28:48 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-01-19 00:30:43 +0100shapr(~user@2601:7c0:c37c:46d0:9d97:8334:355a:b331)
2022-01-19 00:32:51 +0100wmacmil(~wmacmil@83-233-165-97.cust.bredband2.com)
2022-01-19 00:33:57 +0100cosimone(~user@93-47-230-83.ip115.fastwebnet.it) (Ping timeout: 256 seconds)
2022-01-19 00:36:06 +0100Tuplanolla(~Tuplanoll@91-159-68-166.elisa-laajakaista.fi) (Quit: Leaving.)
2022-01-19 00:36:47 +0100ksqsf(~user@134.209.106.31)
2022-01-19 00:40:08 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
2022-01-19 00:41:32 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 240 seconds)
2022-01-19 00:43:51 +0100laslmtduuuk^(~laslmtduu@wsip-98-188-242-61.mc.at.cox.net)
2022-01-19 00:44:21 +0100max22-(~maxime@2a01cb0883359800e30a3abeb76df7a4.ipv6.abo.wanadoo.fr) (Remote host closed the connection)
2022-01-19 00:44:56 +0100Zugul(~Zugul@52.173.255.131) (Remote host closed the connection)
2022-01-19 00:45:21 +0100deadmarshal(~deadmarsh@95.38.228.70)
2022-01-19 00:45:50 +0100newsham(~newsham@2603-800c-2d00-e994-c564-1d76-1f18-c3ec.res6.spectrum.com) (Quit: Client closed)
2022-01-19 00:47:47 +0100DNH(~DNH@2a02:8108:1100:16d8:edf9:3833:cff9:92b3) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-19 00:48:15 +0100mmhat(~mmh@55d4d6e9.access.ecotel.net) (Quit: WeeChat 3.4)
2022-01-19 00:49:49 +0100deadmarshal(~deadmarsh@95.38.228.70) (Ping timeout: 256 seconds)
2022-01-19 00:53:39 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-19 00:54:12 +0100ksqsf(~user@134.209.106.31)
2022-01-19 00:57:19 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-01-19 01:01:59 +0100Henson(~kvirc@107-179-133-201.cpe.teksavvy.com)
2022-01-19 01:04:11 +0100shapr(~user@2601:7c0:c37c:46d0:9d97:8334:355a:b331) (Remote host closed the connection)
2022-01-19 01:04:24 +0100shapr(~user@2601:7c0:c37c:46d0:9d97:8334:355a:b331)
2022-01-19 01:05:14 +0100Sindai(~Sindai@2a01cb0583e8cd008d228a3c88136061.ipv6.abo.wanadoo.fr) (Quit: Client closed)
2022-01-19 01:06:03 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Read error: Connection reset by peer)
2022-01-19 01:06:20 +0100mjs2600(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net)
2022-01-19 01:06:28 +0100Feuermagier(~Feuermagi@user/feuermagier) (Ping timeout: 250 seconds)
2022-01-19 01:07:02 +0100jkaye(~jkaye@2601:281:200:1958:2b64:9a7d:6899:8349) (Ping timeout: 240 seconds)
2022-01-19 01:07:11 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
2022-01-19 01:07:16 +0100 <qhong> Q: given (Typeable a, Typeable b) in a function signature, how can I call a function requiring a->b to be Typeable in its body?
2022-01-19 01:07:19 +0100machinedgod(~machinedg@24.105.81.50)
2022-01-19 01:08:02 +0100 <EvanR> well there is a support function in Data.Dynamic called dynApply :: Dynamic -> Dynamic -> Maybe Dynamic
2022-01-19 01:08:09 +0100 <EvanR> Dynamic is basically a wrapped Typeable
2022-01-19 01:09:25 +0100 <jackdk> I don't understand the question, I'm sorry
2022-01-19 01:09:33 +0100 <EvanR> actually me neither sorry
2022-01-19 01:10:28 +0100 <Axman6> yeah, qhong can you give an example of what's not working?
2022-01-19 01:10:56 +0100qwedfg(~qwedfg@user/qwedfg) (Quit: ZNC - https://znc.in)
2022-01-19 01:11:24 +0100 <qhong> so I have a library function with type f :: (Typeable a => Bool -> IO (Every a))
2022-01-19 01:11:55 +0100 <qhong> I want to use it as (f True :: IO (Every (a -> b)))
2022-01-19 01:12:23 +0100 <qhong> I declared type variable a and b to be Typeable, but GHC don't buy that a->b is Typeable
2022-01-19 01:12:47 +0100 <Axman6> You probably also need a Typeable (a -> b) constraint?
2022-01-19 01:12:48 +0100qwedfg(~qwedfg@user/qwedfg)
2022-01-19 01:12:49 +0100 <jackdk> what is Every?
2022-01-19 01:13:46 +0100 <qhong> jackdk: it's just a newtype alias, prob not relevant
2022-01-19 01:14:04 +0100 <qhong> Axman6: Let me try. Seems that need to turn on some extension
2022-01-19 01:14:29 +0100 <Axman6> I just follow whatever advice GHC gives me and turn on extensions until it stops complaining >_>
2022-01-19 01:14:53 +0100 <jackdk> probably FlexibleContexts at a guess
2022-01-19 01:15:20 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-01-19 01:15:31 +0100 <EvanR> {-# LANGUAGE WhateverYouWantDamn! #-}
2022-01-19 01:15:31 +0100 <Axman6> with that constraint you might only need Typeable (a -> b) and can leave out the other two
2022-01-19 01:15:39 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-01-19 01:15:49 +0100 <qhong> jackdk: Yes!
2022-01-19 01:15:50 +0100 <Axman6> EvanR: It's spelled {-# LANGUAGE DeferredTypeErrors #-}
2022-01-19 01:16:20 +0100 <EvanR> no that's to stop the programmer from complaining
2022-01-19 01:16:21 +0100 <qhong> Axman6: weird, it still says "Could not deduce (Typeable a1)"
2022-01-19 01:16:31 +0100 <Axman6> huh, well add it back then :)
2022-01-19 01:16:32 +0100cyphase(~cyphase@user/cyphase) (Ping timeout: 240 seconds)
2022-01-19 01:16:39 +0100 <geekosaur> that sounds like a different problem
2022-01-19 01:16:56 +0100 <Axman6> I would've thought that (Typeable a, Typeable b) => Typeable (a -> b) was a thing
2022-01-19 01:17:01 +0100 <jackdk> @where paste -- any chance you could share some code?
2022-01-19 01:17:01 +0100 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
2022-01-19 01:17:07 +0100 <geekosaur> usually means you have either missed some connection between types, or you tried to reuse a type from the function signature
2022-01-19 01:17:17 +0100shapr(~user@2601:7c0:c37c:46d0:9d97:8334:355a:b331) (Remote host closed the connection)
2022-01-19 01:17:37 +0100 <geekosaur> (the types in the signature do *not* scope over the function)
2022-01-19 01:17:39 +0100 <EvanR> Axman6, might overlap, since function types (of some sort) is already Typeable
2022-01-19 01:18:17 +0100 <qhong> geekosaur: Ah. so I can't use type variables in the type signature of a function?
2022-01-19 01:19:03 +0100 <geekosaur> yiou can use them there, yyou just can't reference them in the body by default
2022-01-19 01:19:25 +0100jgeerds(~jgeerds@55d4090e.access.ecotel.net) (Ping timeout: 268 seconds)
2022-01-19 01:19:32 +0100 <geekosaur> you need the ScopedTypeVariables extension *and* "declare" a;; the type variables with an explicit "forall"
2022-01-19 01:19:46 +0100 <qhong> geekosaur: I see. Thanks!
2022-01-19 01:19:52 +0100 <geekosaur> I agree with jackdk, please show code
2022-01-19 01:20:40 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d)
2022-01-19 01:20:49 +0100lavaman(~lavaman@98.38.249.169)
2022-01-19 01:21:22 +0100 <qhong> geekosaur: it's working now after added forall. thanks a lot!
2022-01-19 01:21:34 +0100cyphase(~cyphase@user/cyphase)
2022-01-19 01:21:48 +0100 <Axman6> I got bitten by that in a job interview (for the job I'm doing now, so not such a big deal =)
2022-01-19 01:23:05 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-01-19 01:23:07 +0100wmacmil(~wmacmil@83-233-165-97.cust.bredband2.com) (Ping timeout: 268 seconds)
2022-01-19 01:25:02 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-01-19 01:25:27 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-01-19 01:26:40 +0100 <EvanR> the ScopeTypeVariables "ritual" should be in the FAQ
2022-01-19 01:26:54 +0100 <EvanR> Scoped
2022-01-19 01:27:04 +0100 <EvanR> also there should be an FAQ
2022-01-19 01:27:10 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d) (Remote host closed the connection)
2022-01-19 01:27:23 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d)
2022-01-19 01:27:30 +0100 <Axman6> 360NoScopeTypeVaariables
2022-01-19 01:27:43 +0100 <jackdk> Vaariables?
2022-01-19 01:27:47 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 256 seconds)
2022-01-19 01:28:13 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-19 01:28:13 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-19 01:28:13 +0100wroathe(~wroathe@user/wroathe)
2022-01-19 01:29:05 +0100laslmtduuuk^(~laslmtduu@wsip-98-188-242-61.mc.at.cox.net) (Remote host closed the connection)
2022-01-19 01:29:14 +0100 <Axman6> like normal variables but even more 1337
2022-01-19 01:29:51 +0100 <Axman6> On a completely unrelated note, I found out the other day that PPC has both sub-normal and super-normal floating point numbers
2022-01-19 01:33:09 +0100 <EvanR> ah, super-normals...
2022-01-19 01:34:14 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-01-19 01:34:14 +0100 <EvanR> I'm starting to realize why I never understood the extreme ends of floating point
2022-01-19 01:34:36 +0100 <Henson> is there a way I can get Haskell to redo a computation it's already done? Say I'm benchmarking something and want to use the same inputs over and over again 1 million times just to see how long it takes. I'm under the impression that Haskell will not evaluate a function with the exact same arguments twice, right? Or is that not correct?
2022-01-19 01:34:55 +0100 <EvanR> compute it in a function that takes a ()
2022-01-19 01:34:59 +0100 <EvanR> scheme style
2022-01-19 01:35:01 +0100 <Axman6> trying to figure out what they are, came across this code - the definition of fastfloor is making me cry: https://opensource.apple.com/source/Libm/Libm-315/Source/PowerPC/fpmacros.c.auto.html
2022-01-19 01:35:31 +0100Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-01-19 01:35:32 +0100 <Henson> EvanR: can you elaborate on that or give me a simple example? I'm not sure I understand.
2022-01-19 01:35:34 +0100 <Axman6> Henson: you've just described exactly what criterion will do for you, but also give you pretty reports
2022-01-19 01:35:36 +0100 <EvanR> haskell will evaluate a function with the exact same arguments twice, unless you saved the result to some variable and use that
2022-01-19 01:35:50 +0100 <EvanR> or optimizations happen
2022-01-19 01:35:56 +0100 <Axman6> @hackage criterion
2022-01-19 01:35:56 +0100 <lambdabot> https://hackage.haskell.org/package/criterion
2022-01-19 01:36:04 +0100Hensonloads
2022-01-19 01:36:20 +0100 <EvanR> let f () = 2^1000 :: Integer in (f (), f ())
2022-01-19 01:36:36 +0100Kaiepi(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-01-19 01:36:37 +0100 <ephemient> Axman6, https://en.wikipedia.org/wiki/Long_double "On some PowerPC systems, long double is implemented as a double-double arithmetic, where a long double value is regarded as the exact sum of two double-precision values" TIL, that's weird and I had no idea
2022-01-19 01:37:18 +0100 <Axman6> huh, interesting, that's just compensated arithmetic - see edwardk's compensated package
2022-01-19 01:38:08 +0100 <Axman6> also, I think I've realised why the alignment is so weird in that fpmacros file above - it's aligned to show which FP units should be running in parallel on the CPU
2022-01-19 01:38:13 +0100 <Axman6> (a guess)
2022-01-19 01:38:17 +0100 <EvanR> my example may not work because of Common Subexpression Elimination
2022-01-19 01:38:52 +0100 <EvanR> but you can try things to get that optimization to fail, anyway, a test suite is probably better
2022-01-19 01:38:59 +0100 <Axman6> does GHC actually do CSE? I thought it didn't because it can change the laziness of functions considerably
2022-01-19 01:39:13 +0100 <EvanR> yeah it does sometimes!
2022-01-19 01:39:22 +0100Kaiepi(~Kaiepi@156.34.47.253)
2022-01-19 01:40:00 +0100 <monochrom> I once saw it happen to a very simple toy example.
2022-01-19 01:40:08 +0100 <ephemient> it's not clear to me from the wiki whether that's just a software thing or if double-double is in ppc hardware
2022-01-19 01:41:03 +0100 <monochrom> But usually it is very easy to discourage GHC from doing CSE.
2022-01-19 01:41:47 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-01-19 01:43:45 +0100 <monochrom> BTW fpmacros.c contains misalignments too, look at where it uses tabs. :)
2022-01-19 01:44:36 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-19 01:44:36 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep)
2022-01-19 01:44:47 +0100 <Axman6> yeah it's definitely kinda gross
2022-01-19 01:45:05 +0100 <Axman6> Apple: We'll do open source, but we won't like it, and we'll make your eyes bleed
2022-01-19 01:45:11 +0100jackson99(~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout))
2022-01-19 01:47:19 +0100 <ephemient> bad code indentation was present in Apple's goto fail; too
2022-01-19 01:48:43 +0100 <Axman6> you know you're having fun when you -funroll-all-loops
2022-01-19 01:50:52 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d) (Remote host closed the connection)
2022-01-19 01:51:05 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d)
2022-01-19 01:53:43 +0100unyu(~pyon@user/pyon)
2022-01-19 01:54:04 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d) (Remote host closed the connection)
2022-01-19 01:54:17 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d)
2022-01-19 01:54:23 +0100Kaiepi(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-01-19 01:54:56 +0100 <Henson> Axman6: thanks for the pointer to Criterion
2022-01-19 01:55:41 +0100 <Axman6> if you use it, getting the output as HTML is very useful, definitely easier to read than the command line output
2022-01-19 01:58:16 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 268 seconds)
2022-01-19 01:59:44 +0100 <Henson> EvanR: so a function that takes an () will get computed no matter how many times you call it, unless you save the output? Is there a way, in pure code, that I can get something to be evaluated many times even though the output isn't important. If I were to use a map or a fold, the results would somehow have to be used, otherwise the code would never be called. Would I use "evaluate" in IO?
2022-01-19 02:00:12 +0100 <EvanR> you foldl seq over the results
2022-01-19 02:00:25 +0100 <EvanR> and evaluate the result somehow, maybe with evaluate in IO
2022-01-19 02:01:14 +0100 <EvanR> > foldl seq () [(),(),(),(),()]
2022-01-19 02:01:16 +0100 <lambdabot> ()
2022-01-19 02:01:23 +0100 <EvanR> > foldl seq () [(),(),(),error "bomb",()]
2022-01-19 02:01:25 +0100 <lambdabot> *Exception: bomb
2022-01-19 02:01:42 +0100califax(~califax@user/califx) (Remote host closed the connection)
2022-01-19 02:02:32 +0100 <EvanR> > foldl seq () [(),(),let expensive = last [1..10000000] in expensive,(),()]
2022-01-19 02:02:33 +0100 <lambdabot> error:
2022-01-19 02:02:33 +0100 <lambdabot> • No instance for (Num ()) arising from a use of ‘expensive’
2022-01-19 02:02:33 +0100 <lambdabot> • In the expression: expensive
2022-01-19 02:02:56 +0100califax(~califax@user/califx)
2022-01-19 02:02:57 +0100 <EvanR> > foldl seq 0 [1,1,let expensive = last [1..10000000] in expensive,1,1]
2022-01-19 02:02:59 +0100 <lambdabot> 1
2022-01-19 02:03:15 +0100Kaiepi(~Kaiepi@156.34.47.253)
2022-01-19 02:03:28 +0100 <Henson> haha
2022-01-19 02:03:50 +0100 <EvanR> > foldl seq 0 [1,1,let expensive = last [1..10000000000] in expensive,1,1]
2022-01-19 02:03:56 +0100 <lambdabot> mueval-core: Time limit exceeded
2022-01-19 02:03:59 +0100 <EvanR> k
2022-01-19 02:05:21 +0100 <EvanR> and you probably want foldl' if it's a long list
2022-01-19 02:06:02 +0100waleee-cl(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds)
2022-01-19 02:06:50 +0100 <Henson> EvanR: so like foldl' seq 0 $ replicate numIterations functionToTest
2022-01-19 02:06:55 +0100 <albet70> can liftIO lift a series IO actions? liftIO $ do { ... }?
2022-01-19 02:07:03 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-19 02:07:20 +0100 <EvanR> > foldl' seq 0 []
2022-01-19 02:07:20 +0100 <Henson> EvanR: maybe with an "evaluate $" in front of everything?
2022-01-19 02:07:21 +0100 <lambdabot> 0
2022-01-19 02:07:34 +0100 <monochrom> albet70: Yes.
2022-01-19 02:07:42 +0100 <EvanR> > foldl' seq 0 (replicate 1000 1)
2022-01-19 02:07:43 +0100 <lambdabot> 1
2022-01-19 02:07:44 +0100 <albet70> ok
2022-01-19 02:07:48 +0100 <EvanR> Henson, sounds right
2022-01-19 02:08:11 +0100 <EvanR> if the results are all numbers
2022-01-19 02:08:27 +0100lbseale(~ep1ctetus@user/ep1ctetus) (Quit: Leaving)
2022-01-19 02:08:34 +0100 <EvanR> if they are non-flat data, seq might not be a good indicator of "cost"
2022-01-19 02:08:53 +0100 <Henson> EvanR: right, if the results were all tuples of numbers, then the seq wouldn't work properly, it would only evaluate to (_,_) and not evaluate the contents, right?
2022-01-19 02:09:00 +0100 <EvanR> right
2022-01-19 02:09:12 +0100 <monochrom> IIRC criterion has a function for re-computing a thing n times.
2022-01-19 02:09:40 +0100 <monochrom> If this is also the nth time you hear "criterion", well, let this be the (n+1)th time.
2022-01-19 02:09:41 +0100 <Henson> EvanR: so I'd just have to wrap it in a function that would add the tuple contents together into a single number. Or would that not be sufficient?
2022-01-19 02:09:49 +0100 <monochrom> Let this be an omen.
2022-01-19 02:10:02 +0100 <EvanR> a strict tuple would solve it
2022-01-19 02:10:18 +0100 <Henson> monochrom: I've already used Criterion to test my simple example and will use it tomorrow on my more complex production code
2022-01-19 02:10:19 +0100 <EvanR> data SP a b = SP !a !b
2022-01-19 02:10:21 +0100waleee-cl(~waleee@h-98-128-229-110.NA.cust.bahnhof.se)
2022-01-19 02:10:54 +0100 <EvanR> again assuming a and b are numbers or flat-ass values
2022-01-19 02:11:03 +0100 <monochrom> Also consider the deepseq library (comes with GHC).
2022-01-19 02:11:30 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-01-19 02:12:40 +0100whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2022-01-19 02:14:04 +0100 <Henson> monochrom: c_wraith said earlier than deepseq is more of a debugging tool, and probably wouldn't show up in production code. Is it something that some people use in their libraries, or should it just be used for testing?
2022-01-19 02:14:52 +0100 <EvanR> maybe it's useful for stress testing, but I'm having a hard time seeing what else is tests xD
2022-01-19 02:15:28 +0100 <EvanR> performance testing, I'm not sure it makes sense
2022-01-19 02:15:39 +0100 <EvanR> not evaluating stuff is faster than deepseqing it, if you don't need it
2022-01-19 02:15:54 +0100 <EvanR> *huge memory footprints slowdown gc
2022-01-19 02:16:26 +0100Kaiepi(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-01-19 02:16:44 +0100 <Henson> I think I've got some ideas and tools now to help me probe this. The Criterion library and EvanR's suggestions on evaluating functions many times will simplify my performance testing. I've got some webpages on space leak probing to investigate as well.
2022-01-19 02:17:15 +0100 <Henson> thanks so much, everyone, for your advice and suggestions. I'll be back tomorrow with more questions, but hopefully some answers, too :-)
2022-01-19 02:17:30 +0100 <monochrom> If you're too lazy to roll your own "data SP a b = SP !a !b" (I know I am) then "rnf mytuple" does the job just as well.
2022-01-19 02:17:36 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-01-19 02:17:45 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d) (Remote host closed the connection)
2022-01-19 02:17:55 +0100 <EvanR> ah true
2022-01-19 02:17:59 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d)
2022-01-19 02:18:13 +0100 <monochrom> So much for "not used in production".
2022-01-19 02:18:29 +0100 <monochrom> And then there is the history of deepseq.
2022-01-19 02:18:43 +0100 <jackdk> "space leak" - is that the name of a haskell Q&A platform?
2022-01-19 02:18:47 +0100 <monochrom> It used to be part of the parallelization library.
2022-01-19 02:19:25 +0100 <EvanR> still, like, "what is the airspeed velocity that I can construct a tuple with values in it" leaves some questions unanswered about how itll be used later, or not used
2022-01-19 02:19:25 +0100 <monochrom> By popular demand, there was enough people wanting the rnf feature but didn't want the whole parallelization library because they're using rnf outside parallelization.
2022-01-19 02:19:36 +0100 <monochrom> So tell me again how useless it is?
2022-01-19 02:20:06 +0100 <dolio> Just because a lot of people use it doesn't mean it's a good idea. :þ
2022-01-19 02:21:19 +0100ksqsf(~user@134.209.106.31)
2022-01-19 02:21:52 +0100 <Henson> javascript?
2022-01-19 02:22:48 +0100 <EvanR> not used in the production much
2022-01-19 02:26:02 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 240 seconds)
2022-01-19 02:26:43 +0100machinedgod(~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
2022-01-19 02:27:20 +0100SummerSonw(~The_viole@203.77.49.232)
2022-01-19 02:28:52 +0100nek0(~nek0@nek0.eu) (Quit: The Lounge - https://thelounge.chat)
2022-01-19 02:31:15 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 256 seconds)
2022-01-19 02:32:57 +0100rtsn(~nstr@user/rtsn) (Ping timeout: 256 seconds)
2022-01-19 02:40:06 +0100Guest|38(~Guest|38@50.38.63.144)
2022-01-19 02:40:32 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 240 seconds)
2022-01-19 02:40:34 +0100Guest|38(~Guest|38@50.38.63.144) (Client Quit)
2022-01-19 02:43:40 +0100Kaiepi(~Kaiepi@156.34.47.253)
2022-01-19 02:44:02 +0100nek0(~nek0@nek0.eu)
2022-01-19 02:46:53 +0100Kaiepi(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-01-19 02:47:03 +0100ProfSimm(~ProfSimm@87.227.196.109) (Remote host closed the connection)
2022-01-19 02:48:17 +0100little_mac(~little_ma@2601:410:4300:3ce0:1c4:1928:78d1:c799)
2022-01-19 02:51:21 +0100Kaiepi(~Kaiepi@156.34.47.253)
2022-01-19 02:51:51 +0100SummerSonw(~The_viole@203.77.49.232) (Quit: Leaving)
2022-01-19 02:58:05 +0100Kaiepi(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-01-19 03:00:09 +0100Kaiepi(~Kaiepi@156.34.47.253)
2022-01-19 03:04:37 +0100califax-(~califax@user/califx)
2022-01-19 03:04:48 +0100waleee-cl(~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Remote host closed the connection)
2022-01-19 03:05:13 +0100waleee-cl(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4)
2022-01-19 03:05:34 +0100califax(~califax@user/califx) (Remote host closed the connection)
2022-01-19 03:05:40 +0100califax-califax
2022-01-19 03:09:58 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-19 03:10:50 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds)
2022-01-19 03:11:51 +0100little_mac(~little_ma@2601:410:4300:3ce0:1c4:1928:78d1:c799) (Remote host closed the connection)
2022-01-19 03:15:24 +0100ksqsf(~user@134.209.106.31)
2022-01-19 03:15:39 +0100vysn(~vysn@user/vysn)
2022-01-19 03:18:43 +0100Cajun(~Cajun@user/cajun)
2022-01-19 03:20:22 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 250 seconds)
2022-01-19 03:20:57 +0100xff0x(~xff0x@2001:1a81:5209:df00:b3fa:3a32:fd8e:f809) (Ping timeout: 240 seconds)
2022-01-19 03:21:41 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-9841-fdb7-086b-ec04.res6.spectrum.com)
2022-01-19 03:23:11 +0100xff0x(~xff0x@2001:1a81:5244:9c00:ed3e:b304:fdc1:f902)
2022-01-19 03:24:09 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-19 03:25:12 +0100 <Cajun> so im running into a problem when i try to avoid the State effect/monad in which i end up requiring constant binds to pass the game state. is there any better solution than this? https://paste.tomsmeding.com/LV3XYPLl
2022-01-19 03:25:34 +0100neurocyte0917090(~neurocyte@user/neurocyte) (Ping timeout: 250 seconds)
2022-01-19 03:27:04 +0100waleee-cl(~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 268 seconds)
2022-01-19 03:31:13 +0100 <EvanR> name all the gameprimes the same so they shadow and you don't accidentally use an old one xD
2022-01-19 03:32:46 +0100 <EvanR> what the heck is that (>>) = (>>=) trick
2022-01-19 03:34:07 +0100 <Cajun> its set up such that using bind will compile (since the game gets passed to the drawN) but i cant use >>= in do notation without the arrow <-, and >> means i dont have to use an arrow, so it looks cleaner. problem being i cant use the normal >>......
2022-01-19 03:34:30 +0100 <Cajun> the extension that allows for (>>) = (>>=) is -XRebindableSyntax
2022-01-19 03:34:35 +0100 <EvanR> oh
2022-01-19 03:35:36 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4)
2022-01-19 03:35:39 +0100 <Cajun> and the shadowing idea isnt bad, but doesnt solve the constant binding issue. i am not affront to it though
2022-01-19 03:36:35 +0100 <Cajun> i could use state in the interpreter for those functions, but i tried that and my code got messy *fast*
2022-01-19 03:36:38 +0100 <EvanR> also in a chain of commands that looks like f x y foo >>= \foo' -> g z w foo' >>= \foo'' -> ...
2022-01-19 03:36:57 +0100 <EvanR> that's f x y >=> g z w >=> ...
2022-01-19 03:37:18 +0100 <EvanR> or something
2022-01-19 03:37:26 +0100 <Cajun> well preferably none of the >>, >>=, >=>, or their ilk appear in the code, as do notation makes it cleaner
2022-01-19 03:38:05 +0100 <Cajun> s/appear/do not appear
2022-01-19 03:38:28 +0100 <Cajun> (wait dont change that, reading is hard)
2022-01-19 03:38:59 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d) (Remote host closed the connection)
2022-01-19 03:39:12 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d)
2022-01-19 03:42:51 +0100 <dsal> Well, if >> doesn't work for you and you don't want to keep naming the thing, then it sounds like do notation is making it less clean by your requirements.
2022-01-19 03:42:51 +0100 <Cajun> EvanR: thats >>= in that instance. more specifically, `f x y foo >>= g z w` is the same as `f x y foo >>= \foo' -> g z w foo'`
2022-01-19 03:43:43 +0100 <EvanR> I doubtted >=> would work
2022-01-19 03:43:49 +0100 <EvanR> never helped me none
2022-01-19 03:48:50 +0100mbuf(~Shakthi@110.225.233.59)
2022-01-19 03:50:19 +0100jackson99(~bc8147f2@cerf.good1.com)
2022-01-19 03:50:39 +0100 <EvanR> yeah I dunno how clear do notation is for someone who didn't write it 30 minutes ago, unless it's a very straightforward monad
2022-01-19 03:51:07 +0100 <dsal> I always find >=> weird -- I am confused by what it is or I need it and it's obvious.
2022-01-19 03:51:39 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2022-01-19 03:51:42 +0100 <Cajun> monadic function composition
2022-01-19 03:52:03 +0100 <EvanR> >=> and <=< feel like we left purely functional land and were composing functions that have side effects
2022-01-19 03:52:15 +0100 <EvanR> which... I never did
2022-01-19 03:52:28 +0100 <EvanR> applying functions with side effects is bad enough
2022-01-19 03:52:58 +0100zmt01(~zmt00@user/zmt00)
2022-01-19 03:53:35 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-01-19 03:54:16 +0100akurilin_(uid322841@id-322841.ilkley.irccloud.com)
2022-01-19 03:54:22 +0100Swahili(~Swahili@a95-94-208-187.cpe.netcabo.pt) (Remote host closed the connection)
2022-01-19 03:55:02 +0100zmt01(~zmt00@user/zmt00) (Read error: Connection reset by peer)
2022-01-19 03:56:16 +0100zmt01(~zmt00@user/zmt00)
2022-01-19 03:56:20 +0100zmt00(~zmt00@user/zmt00) (Ping timeout: 250 seconds)
2022-01-19 03:58:31 +0100Henson(~kvirc@107-179-133-201.cpe.teksavvy.com) (Ping timeout: 268 seconds)
2022-01-19 04:00:17 +0100 <Cajun> i might try making a quasi quoter for it, but thatll be done later *shrug*
2022-01-19 04:01:43 +0100ksqsf(~user@134.209.106.31)
2022-01-19 04:04:08 +0100amk(~amk@109.255.169.126) (Ping timeout: 250 seconds)
2022-01-19 04:06:44 +0100amk(~amk@109.255.169.126)
2022-01-19 04:07:17 +0100 <Axman6> Hmm, just had a possible terrible idea - when processing data which comes in as serialised binary, we usually parse it into a Haskell type with all the relevant fields, which can increase the size of the data quite a lot. Instead, we could read the data, parser it, but then use data MyType = MyType_ !ByteArray#; and provide pattern synonyms for the parsed type. Anyone know of this being done?
2022-01-19 04:07:53 +0100 <Axman6> (ByteArray# being somewhat arbitrary, it could be any representation of bytes with a length)
2022-01-19 04:08:26 +0100 <c_wraith> I'm not familiar with that exact technique, but I've certainly seen libraries that just allocate a thunk and only parse the inner elements if the thunk is demanded
2022-01-19 04:09:01 +0100 <c_wraith> which works very well on length-prefixed encodings. Still works on other encodings, but it takes a little more effort.
2022-01-19 04:09:03 +0100 <EvanR> similar to javascript typed arrays
2022-01-19 04:09:57 +0100raym(~raym@user/raym) (Remote host closed the connection)
2022-01-19 04:10:20 +0100 <EvanR> Axman6, so compact region, but skip the compacting part because it's already compacted xD
2022-01-19 04:10:44 +0100 <Axman6> possibly* yeah, sort of
2022-01-19 04:11:25 +0100 <EvanR> how complex is your data, just some value backed by bytes, or does it represent nested levels of stuff
2022-01-19 04:11:35 +0100 <Axman6> IIRC this is how capt'n proto or... one of those other serialisation libraries works, which aim to keep the in memory representation the same as the on the wire one
2022-01-19 04:13:29 +0100raym(~raym@user/raym)
2022-01-19 04:15:39 +0100lavaman(~lavaman@98.38.249.169)
2022-01-19 04:17:21 +0100 <EvanR> an ADT programming interface on top of some big buffer of bytes would be cool
2022-01-19 04:18:01 +0100 <Axman6> on a somewhat related note, I wish we had the binary pattern matching syntax that Erlang has
2022-01-19 04:18:15 +0100 <EvanR> pattern matching would look into the buffer. Construction on the other hand
2022-01-19 04:21:16 +0100 <c_wraith> There is a big question of whether you do a check to see that the data parses correctly up-front
2022-01-19 04:21:28 +0100 <c_wraith> You probably *should*
2022-01-19 04:21:47 +0100 <c_wraith> unless you're able to trust the data, for some reason. (It was signed by another instance of the same program, for instance)
2022-01-19 04:22:13 +0100 <Axman6> yeah, the only way to create them would be to parse them
2022-01-19 04:22:33 +0100 <c_wraith> not in length-prefixed binary data.
2022-01-19 04:22:43 +0100 <c_wraith> If you could trust it, you wouldn't even need to parse it
2022-01-19 04:23:55 +0100 <Axman6> sure - my question is mostly about the interface for working with the data, using pattern synonyms over some bytes
2022-01-19 04:24:35 +0100 <c_wraith> I think it has some value. The real trick would be how to make it into a library
2022-01-19 04:24:38 +0100 <Axman6> storing things in memory encoded using CBOR :thinking-face:
2022-01-19 04:25:08 +0100 <c_wraith> there's no way to abstract over patterns :(
2022-01-19 04:25:55 +0100 <c_wraith> (you can abstract over encoding them as an algebra, but that's pretty far away from your suggestion in terms of usability)
2022-01-19 04:29:21 +0100alp(~alp@user/alp) (Ping timeout: 268 seconds)
2022-01-19 04:29:40 +0100rtsn(~nstr@h-155-4-221-229.NA.cust.bahnhof.se)
2022-01-19 04:30:02 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 240 seconds)
2022-01-19 04:34:47 +0100td_(~td@muedsl-82-207-238-179.citykom.de) (Ping timeout: 256 seconds)
2022-01-19 04:35:20 +0100 <Axman6> not sure what you mean
2022-01-19 04:35:51 +0100 <Axman6> Also, I'm only considering the product types
2022-01-19 04:36:16 +0100td_(~td@muedsl-82-207-238-121.citykom.de)
2022-01-19 04:36:17 +0100 <EvanR> 'structs' xD
2022-01-19 04:36:42 +0100 <EvanR> that's what you should call the lib
2022-01-19 04:36:47 +0100 <Axman6> I'll give you one guess who wrote https://hackage.haskell.org/package/structs
2022-01-19 04:36:54 +0100 <EvanR> dangit
2022-01-19 04:36:56 +0100 <c_wraith> I don't need a guess, I know.
2022-01-19 04:37:14 +0100 <c_wraith> I feel like that library was never quite finished, somehow
2022-01-19 04:39:00 +0100hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Quit: Konversation terminated!)
2022-01-19 04:40:11 +0100 <c_wraith> anyway - my point was that this is not the sort of thing that easily fits into a library. The kinds of library designs currently used for parsers tend to be very Applicative-centric, and it's hard to get the guarantees this needs out of Applicative.
2022-01-19 04:41:46 +0100hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
2022-01-19 04:42:14 +0100 <Axman6> yeah it would need to be monadic
2022-01-19 04:42:38 +0100 <Axman6> assuming there are length prefixed values contained within
2022-01-19 04:43:24 +0100 <c_wraith> I don't think you can get the guarantees you need from that, either.
2022-01-19 04:43:34 +0100 <c_wraith> the problem is that they allow arbitrary functions to be embedded
2022-01-19 04:43:37 +0100zmt01(~zmt00@user/zmt00) (Ping timeout: 240 seconds)
2022-01-19 04:43:50 +0100 <c_wraith> So that people can and will happily parse things early
2022-01-19 04:44:19 +0100 <c_wraith> You need a more restrictive interface.
2022-01-19 04:44:40 +0100zmt00(~zmt00@user/zmt00)
2022-01-19 04:45:27 +0100 <c_wraith> I guess there's QualifiedDo now. That might solve a lot of issues.
2022-01-19 04:47:02 +0100zmt00(~zmt00@user/zmt00) (Client Quit)
2022-01-19 04:48:31 +0100nunggu(~q@user/nunggu) (Remote host closed the connection)
2022-01-19 04:49:36 +0100zmt00(~zmt00@user/zmt00)
2022-01-19 04:50:05 +0100Henson(~kvirc@107-179-133-201.cpe.teksavvy.com)
2022-01-19 04:50:35 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net)
2022-01-19 04:56:01 +0100ksqsf(~user@134.209.106.31)
2022-01-19 04:58:11 +0100finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-01-19 04:58:11 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-01-19 04:58:11 +0100finn_elijaFinnElija
2022-01-19 05:00:32 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 240 seconds)
2022-01-19 05:01:29 +0100hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Remote host closed the connection)
2022-01-19 05:02:23 +0100russruss(~russruss@my.russellmcc.com)
2022-01-19 05:03:25 +0100hgolden(~hgolden2@cpe-172-114-81-123.socal.res.rr.com)
2022-01-19 05:03:32 +0100burnsidesLlama(~burnsides@dhcp168-015.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-19 05:03:44 +0100razetime(~quassel@49.207.203.87)
2022-01-19 05:07:15 +0100 <Axman6> I think if this were to be a library, it would be a TH based library, which would provide a quasiquoter which is passed a data declaration and it would produce the type and pattern synonyms
2022-01-19 05:09:43 +0100 <Axman6> so if you pass it data MyType = MyType { w8 :: Word8; i64 :: Int64; bs :: ByteString {- maybe not easy to handle? -}; } you'd get back data MyType = MyType_ !ByteArray#; pattern MyType w8 i64 bs = ... but I'm not sure what other problems you'd run into
2022-01-19 05:10:41 +0100 <Axman6> I'm imagining it working like a C struct though, where fields are indexable by offset ot offset plus the size of dynamically sized members appearing before
2022-01-19 05:12:28 +0100lbseale(~ep1ctetus@user/ep1ctetus)
2022-01-19 05:13:30 +0100lbseale(~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer)
2022-01-19 05:13:32 +0100ksqsf(~user@134.209.106.31)
2022-01-19 05:18:25 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 256 seconds)
2022-01-19 05:19:06 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 250 seconds)
2022-01-19 05:20:15 +0100ksqsf(~user@134.209.106.31)
2022-01-19 05:25:09 +0100hololeap_hololeap
2022-01-19 05:31:30 +0100zmt01(~zmt00@user/zmt00)
2022-01-19 05:31:47 +0100deadmarshal(~deadmarsh@95.38.228.70)
2022-01-19 05:32:20 +0100jenna8912(~jenna@c-107-5-104-51.hsd1.mi.comcast.net) (Quit: Reconnecting)
2022-01-19 05:32:32 +0100jenna8912(~jenna@c-107-5-104-51.hsd1.mi.comcast.net)
2022-01-19 05:33:46 +0100zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-01-19 05:34:43 +0100zmt00(~zmt00@user/zmt00) (Ping timeout: 250 seconds)
2022-01-19 05:35:20 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Ping timeout: 268 seconds)
2022-01-19 05:36:17 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds)
2022-01-19 05:36:54 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2022-01-19 05:38:44 +0100lavaman(~lavaman@98.38.249.169)
2022-01-19 05:40:38 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-01-19 05:43:13 +0100Guest48(~Guest48@133.8.220.53)
2022-01-19 05:44:51 +0100qeqeqw1(~qeqeqw3@2001:861:3a04:e320:31ea:a59b:1c06:51f4)
2022-01-19 05:49:46 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-19 05:51:32 +0100pavonia(~user@user/siracusa) (Ping timeout: 240 seconds)
2022-01-19 05:52:44 +0100Guest48faustind
2022-01-19 05:59:20 +0100pavonia(~user@user/siracusa)
2022-01-19 05:59:22 +0100pfurla(~pfurla@2804:d41:4331:4800:31ef:1aaf:1e7:47d) (Quit: gone to sleep. ZZZzzz…)
2022-01-19 06:07:43 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
2022-01-19 06:08:52 +0100slowButPresent(~slowButPr@user/slowbutpresent) (Quit: leaving)
2022-01-19 06:09:47 +0100 <EvanR> I see there is no Stream type in base? Is there a conventional :ctor operator name for it
2022-01-19 06:09:50 +0100 <EvanR> :> or such
2022-01-19 06:10:10 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d) (Remote host closed the connection)
2022-01-19 06:10:24 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d)
2022-01-19 06:10:49 +0100 <faustind> Hi. My question is about the simplifier of the compiler. Specifically
2022-01-19 06:10:50 +0100 <faustind> about the interaction of inlining and rewrite rules.
2022-01-19 06:10:50 +0100 <faustind> I know that we can control the interaction of inlining and rules with phase numbers.
2022-01-19 06:10:51 +0100 <faustind> But I am curious, in the same run of the simplifier,
2022-01-19 06:10:51 +0100 <faustind> between inlining and rules application which one takes place first?
2022-01-19 06:10:52 +0100 <faustind> I read that inlining is relied upon to expose more opportunities
2022-01-19 06:10:52 +0100 <faustind> for optimization. So I think inlining happens first. But I am not sure.
2022-01-19 06:12:20 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 268 seconds)
2022-01-19 06:15:18 +0100Erutuon(~Erutuon@user/erutuon) (Quit: WeeChat 2.8)
2022-01-19 06:16:29 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-19 06:17:19 +0100 <Axman6> I don't know the answer but GHC has quite a lot of information on its wiki, so I would start there
2022-01-19 06:19:27 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Ping timeout: 256 seconds)
2022-01-19 06:20:45 +0100amk(~amk@109.255.169.126) (Ping timeout: 256 seconds)
2022-01-19 06:21:51 +0100amk(~amk@109.255.169.126)
2022-01-19 06:22:41 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-01-19 06:23:01 +0100jackson99(~bc8147f2@cerf.good1.com) (Quit: quit)
2022-01-19 06:23:25 +0100xsperry(~xs@user/xsperry) ()
2022-01-19 06:24:03 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-01-19 06:25:37 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293) (Ping timeout: 240 seconds)
2022-01-19 06:27:05 +0100 <sclv> EvanR: in a lazy language, streams can often be just lazy lists
2022-01-19 06:27:39 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds)
2022-01-19 06:27:52 +0100 <Axman6> @hoogle (:>)
2022-01-19 06:27:52 +0100 <lambdabot> Data.Sequence (:>) :: Seq a -> a -> ViewR a
2022-01-19 06:27:52 +0100 <lambdabot> Data.Sequence.Internal (:>) :: Seq a -> a -> ViewR a
2022-01-19 06:27:52 +0100 <lambdabot> Control.Lens.Cons pattern (:>) :: forall a b . Snoc a a b b => () => a -> b -> a
2022-01-19 06:27:55 +0100 <sclv> parameterized streams are also often done as cofree comonads like so https://hackage.haskell.org/package/free-5.1.7/docs/Control-Comonad-Cofree.html
2022-01-19 06:29:08 +0100 <EvanR> I mean specifically this data type
2022-01-19 06:29:17 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-01-19 06:29:23 +0100 <EvanR> data Stream a = a :? Stream a deriving everything
2022-01-19 06:29:43 +0100 <EvanR> a list that can't end
2022-01-19 06:30:09 +0100 <EvanR> i can't remember if there is a conventional ctor name
2022-01-19 06:30:35 +0100 <Axman6> :> feels familiar for that...
2022-01-19 06:31:12 +0100 <EvanR> yeah I knew it conflicted with Sequence
2022-01-19 06:31:37 +0100 <EvanR> apparently something in Lens
2022-01-19 06:31:49 +0100 <Axman6> it makes me uneasy that it should probably be a Foldable, but things like length will never work
2022-01-19 06:32:21 +0100 <EvanR> doctor, it hurts when I try to length an infinite structure!
2022-01-19 06:32:55 +0100 <EvanR> actually
2022-01-19 06:33:06 +0100 <EvanR> the length of a stream can be expressed as a lazy natural
2022-01-19 06:33:17 +0100 <EvanR> so "never work" for some value of work
2022-01-19 06:33:44 +0100 <EvanR> it could usefully be compared to finite lazy nats
2022-01-19 06:33:56 +0100xsperry(~xs@user/xsperry)
2022-01-19 06:34:03 +0100 <Axman6> "Hopw long is that stream?" "At least this long.... S (S (S (S (S ..."
2022-01-19 06:34:32 +0100deadmarshal(~deadmarsh@95.38.228.70) (Ping timeout: 268 seconds)
2022-01-19 06:35:08 +0100 <EvanR> exactly!
2022-01-19 06:35:57 +0100 <monochrom> Maybe is an instance of Alternative, and some (Just 0) hurts. I think it's OK for length (your stream) to hurt, too. :)
2022-01-19 06:36:51 +0100 <EvanR> I don't particularly understand Alternative
2022-01-19 06:37:30 +0100 <Axman6> Alternative: or do you?
2022-01-19 06:37:33 +0100 <Axman6> ly*
2022-01-19 06:37:34 +0100 <Axman6> damn
2022-01-19 06:38:47 +0100 <EvanR> well, STM is an instance of Alternative, and I get that
2022-01-19 06:39:11 +0100 <EvanR> is some broken there too
2022-01-19 06:39:18 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41)
2022-01-19 06:39:27 +0100 <Axman6> I feel both Maybe and list's instances make sense
2022-01-19 06:40:25 +0100ishutin(~ishutin@91-83-11-240.pool.digikabel.hu) (Ping timeout: 256 seconds)
2022-01-19 06:40:37 +0100shapr(~user@2601:7c0:c37c:46d0:a68f:6e87:2453:573d) (Ping timeout: 240 seconds)
2022-01-19 06:42:02 +0100ishutin(~ishutin@84-236-1-73.pool.digikabel.hu)
2022-01-19 06:45:32 +0100_ht(~quassel@82-168-34-160.fixed.kpn.net)
2022-01-19 06:52:42 +0100mvk(~mvk@2607:fea8:5cdd:f000::55f8) (Ping timeout: 250 seconds)
2022-01-19 06:55:18 +0100qeqeqw1(~qeqeqw3@2001:861:3a04:e320:31ea:a59b:1c06:51f4) (Ping timeout: 250 seconds)
2022-01-19 06:55:38 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd) (Quit: leaving)
2022-01-19 06:58:43 +0100namkeleser(~namkelese@124.188.192.57)
2022-01-19 06:59:07 +0100zaquest(~notzaques@5.130.79.72) (Quit: Leaving)
2022-01-19 07:06:17 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
2022-01-19 07:09:01 +0100Jing(~hedgehog@240e:390:7c53:a7e1:a11d:216c:4ca3:2c86)
2022-01-19 07:09:32 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 240 seconds)
2022-01-19 07:10:12 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-19 07:10:47 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
2022-01-19 07:11:42 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-01-19 07:14:37 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)
2022-01-19 07:16:53 +0100 <jackdk> I would've expected `some (Just 0)` to be an infinite list, not an infinite loop. What am I doing wrong?
2022-01-19 07:17:03 +0100 <jackdk> (in my brain, I mean)
2022-01-19 07:17:17 +0100rusrushal13(~rusrushal@2401:4900:5d14:5eb2:ab40:4205:c981:41c3)
2022-01-19 07:17:30 +0100 <hololeap> I think it tries to keep going until it hits a Nothing, which never happens
2022-01-19 07:18:15 +0100 <dsal> Hmm... I think I also misunderstand some that way. I expect it to be lazy and start giving me stuff.
2022-01-19 07:18:19 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 268 seconds)
2022-01-19 07:18:56 +0100xff0x(~xff0x@2001:1a81:5244:9c00:ed3e:b304:fdc1:f902) (Ping timeout: 268 seconds)
2022-01-19 07:19:25 +0100 <hololeap> @src some
2022-01-19 07:19:25 +0100 <lambdabot> some v = some_v
2022-01-19 07:19:25 +0100 <lambdabot> where many_v = some_v <|> pure []
2022-01-19 07:19:25 +0100 <lambdabot> some_v = (:) <$> v <*> many_v
2022-01-19 07:20:21 +0100xff0x(~xff0x@2001:1a81:525d:1e00:f1de:1cfe:e8a8:d6c0)
2022-01-19 07:21:50 +0100 <hololeap> % let some_v = (:) <$> Just 0 <*> some_v
2022-01-19 07:21:50 +0100 <yahb> hololeap:
2022-01-19 07:22:02 +0100 <hololeap> % some_v
2022-01-19 07:22:03 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-19 07:22:03 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-19 07:22:03 +0100wroathe(~wroathe@user/wroathe)
2022-01-19 07:22:07 +0100 <yahb> hololeap: [Timed out]
2022-01-19 07:23:31 +0100 <jackdk> right, but I need to case on the tail to know whether to return Just at all
2022-01-19 07:23:51 +0100 <jackdk> and because there's no tail, we spin forever
2022-01-19 07:24:05 +0100 <hololeap> since some_v always succeeds, it never gets to the second part of the <|> inside many_v
2022-01-19 07:24:31 +0100 <hololeap> I'm also trying to understand it more fully :)
2022-01-19 07:26:01 +0100 <hololeap> so it ends up being equivalent to: fix $ liftA2 (:) (Just 0)
2022-01-19 07:26:32 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-19 07:29:02 +0100chomwitt(~chomwitt@2a02:587:dc0b:200:12c3:7bff:fe6d:d374)
2022-01-19 07:31:25 +0100rusrushal13(~rusrushal@2401:4900:5d14:5eb2:ab40:4205:c981:41c3) (Ping timeout: 256 seconds)
2022-01-19 07:31:50 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-01-19 07:32:09 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-01-19 07:34:32 +0100zmt01(~zmt00@user/zmt00) (Ping timeout: 240 seconds)
2022-01-19 07:35:25 +0100michalz(~michalz@185.246.204.101)
2022-01-19 07:35:48 +0100ksqsf(~user@134.209.106.31)
2022-01-19 07:36:39 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-19 07:37:59 +0100 <hololeap> % foo :: StateT Int Maybe () ; foo = get >>= bool (modify (+1)) empty . (>=5)
2022-01-19 07:38:00 +0100 <yahb> hololeap:
2022-01-19 07:38:10 +0100 <hololeap> % evalStateT (some foo) 0
2022-01-19 07:38:10 +0100 <yahb> hololeap: Just [(),(),(),(),()]
2022-01-19 07:41:13 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 256 seconds)
2022-01-19 07:41:24 +0100 <hololeap> % fix $ liftA2 (:) (Identity 0)
2022-01-19 07:41:29 +0100 <yahb> hololeap: Identity [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2022-01-19 07:42:06 +0100 <hololeap> so it might have something to do with Maybe being more strict than Identity?
2022-01-19 07:42:22 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 268 seconds)
2022-01-19 07:43:16 +0100 <int-e> > liftA2 (:) (Just 0) $ liftA2 (:) (Just 0) $ liftA2 (:) (Just 0) $ Nothing
2022-01-19 07:43:17 +0100 <lambdabot> Nothing
2022-01-19 07:43:48 +0100 <EvanR> at first I was boggling at how Maybe could be *more* strict than Identity, but I guess we're talking about Alternative instance
2022-01-19 07:43:53 +0100vglfr(~vglfr@46.96.165.111) (Ping timeout: 256 seconds)
2022-01-19 07:44:11 +0100 <EvanR> @src Identity
2022-01-19 07:44:11 +0100 <lambdabot> newtype Identity a = Identity { runIdentity :: a }
2022-01-19 07:44:42 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2022-01-19 07:45:01 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Ping timeout: 256 seconds)
2022-01-19 07:45:25 +0100 <int-e> > liftA2 (:) (pure 0) undefined :: Identity [Int]
2022-01-19 07:45:26 +0100 <lambdabot> Identity [0*Exception: Prelude.undefined
2022-01-19 07:45:32 +0100 <int-e> > liftA2 (:) (pure 0) undefined :: Maybe [Int]
2022-01-19 07:45:33 +0100 <lambdabot> *Exception: Prelude.undefined
2022-01-19 07:45:39 +0100 <hololeap> I'm pivoting to talking about why in ghci `fix $ liftA2 (:) (Just 0)` hangs but `fix $ liftA2 (:) (Identity 0)` will try to give you an infinite list ... it might explain why `some (Just 0)` also seems to hang
2022-01-19 07:45:55 +0100 <int-e> there you have your additional strictness demonstrated with actual bottoms
2022-01-19 07:46:20 +0100 <hololeap> right, that makes sense
2022-01-19 07:46:49 +0100 <int-e> but the *reason* is that you can't know that a later part of the computation won't be Nothing, which would collapse the result
2022-01-19 07:47:24 +0100 <hololeap> I see
2022-01-19 07:47:51 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-01-19 07:48:20 +0100 <hololeap> that's a good way to explain it
2022-01-19 07:51:01 +0100deadmarshal(~deadmarsh@95.38.228.70)
2022-01-19 07:51:47 +0100zaquest(~notzaques@5.130.79.72)
2022-01-19 07:55:16 +0100ksqsf(~user@134.209.106.31)
2022-01-19 08:00:02 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 240 seconds)
2022-01-19 08:00:02 +0100deadmarshal(~deadmarsh@95.38.228.70) (Ping timeout: 240 seconds)
2022-01-19 08:17:50 +0100kuribas(~user@ptr-25vy0i81lhv78yduvdy.18120a2.ip6.access.telenet.be)
2022-01-19 08:20:53 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
2022-01-19 08:25:29 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-19 08:28:51 +0100deadmarshal(~deadmarsh@95.38.230.192)
2022-01-19 08:31:26 +0100cfricke(~cfricke@user/cfricke)
2022-01-19 08:31:59 +0100shriekingnoise(~shrieking@201.231.16.156) (Quit: Quit)
2022-01-19 08:31:59 +0100ksqsf(~user@134.209.106.31)
2022-01-19 08:32:26 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-19 08:37:15 +0100ksqsf(~user@134.209.106.31) (Ping timeout: 268 seconds)
2022-01-19 08:37:21 +0100falafel(~falafel@2603-8000-d800-688c-7d7e-a81e-32e3-0736.res6.spectrum.com)
2022-01-19 08:38:25 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2022-01-19 08:45:21 +0100MajorBiscuit(~MajorBisc@86-88-79-148.fixed.kpn.net)
2022-01-19 08:45:23 +0100MajorBiscuit(~MajorBisc@86-88-79-148.fixed.kpn.net) (Client Quit)
2022-01-19 08:45:39 +0100MajorBiscuit(~MajorBisc@86-88-79-148.fixed.kpn.net)
2022-01-19 08:45:41 +0100ksqsf(~user@134.209.106.31)
2022-01-19 08:45:50 +0100 <qrpnxz> Maybe kills laziness because you need to finish to know if it's Just or Nothing, Identity doesn't have that problem.
2022-01-19 08:46:02 +0100 <qrpnxz> ah my bad, already explained
2022-01-19 08:46:23 +0100notzmv(~zmv@user/notzmv)
2022-01-19 08:46:33 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-01-19 08:49:11 +0100fef(~thedawn@user/thedawn)
2022-01-19 08:51:29 +0100deadmarshal(~deadmarsh@95.38.230.192) (Ping timeout: 256 seconds)
2022-01-19 08:53:40 +0100jakalx(~jakalx@base.jakalx.net)
2022-01-19 08:54:08 +0100slac13033(~slack1256@191.126.227.199)
2022-01-19 08:54:43 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-01-19 08:55:30 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-01-19 08:56:02 +0100slack1256(~slack1256@186.11.27.197) (Ping timeout: 240 seconds)
2022-01-19 08:56:04 +0100gehmehgeh(~user@user/gehmehgeh)
2022-01-19 08:57:56 +0100vysn(~vysn@user/vysn) (Ping timeout: 250 seconds)
2022-01-19 09:01:10 +0100simendsjo(~user@84.211.91.241)
2022-01-19 09:04:30 +0100deadmarshal(~deadmarsh@95.38.230.192)
2022-01-19 09:04:37 +0100falafel(~falafel@2603-8000-d800-688c-7d7e-a81e-32e3-0736.res6.spectrum.com) (Ping timeout: 240 seconds)
2022-01-19 09:05:56 +0100gehmehgeh(~user@user/gehmehgeh) (Remote host closed the connection)
2022-01-19 09:06:35 +0100gehmehgeh(~user@user/gehmehgeh)
2022-01-19 09:09:26 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-19 09:10:49 +0100fr33domlover(~fr33@5.102.195.159)
2022-01-19 09:15:08 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-19 09:20:47 +0100faustind(~Guest48@133.8.220.53) (Ping timeout: 256 seconds)
2022-01-19 09:22:16 +0100simendsjo(~user@84.211.91.241) (Ping timeout: 268 seconds)
2022-01-19 09:24:53 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
2022-01-19 09:25:30 +0100chele(~chele@user/chele)
2022-01-19 09:25:48 +0100Major_Biscuit(~MajorBisc@c-001-018-021.client.tudelft.eduvpn.nl)
2022-01-19 09:28:53 +0100MajorBiscuit(~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 256 seconds)
2022-01-19 09:29:40 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
2022-01-19 09:30:00 +0100falafel(~falafel@2603-8000-d800-688c-7d7e-a81e-32e3-0736.res6.spectrum.com)
2022-01-19 09:34:20 +0100falafel(~falafel@2603-8000-d800-688c-7d7e-a81e-32e3-0736.res6.spectrum.com) (Ping timeout: 250 seconds)
2022-01-19 09:35:07 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-01-19 09:37:49 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-19 09:38:32 +0100deadmarshal(~deadmarsh@95.38.230.192) (Ping timeout: 256 seconds)
2022-01-19 09:45:29 +0100deadmarshal(~deadmarsh@95.38.230.192)
2022-01-19 09:47:02 +0100ubert(~Thunderbi@p200300ecdf099420d5ce6ee7616221b3.dip0.t-ipconnect.de)
2022-01-19 09:48:15 +0100machinedgod(~machinedg@24.105.81.50)
2022-01-19 09:50:30 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr)
2022-01-19 09:50:44 +0100mastarija(~mastarija@2a05:4f46:e0e:5000:c96c:6830:df6b:3edb)
2022-01-19 09:53:17 +0100rtsn(~nstr@h-155-4-221-229.NA.cust.bahnhof.se) (Changing host)
2022-01-19 09:53:17 +0100rtsn(~nstr@user/rtsn)
2022-01-19 09:58:36 +0100dut(~dut@user/dut) (Quit: Leaving)
2022-01-19 09:58:37 +0100wmacmil(~wmacmil@83-233-165-97.cust.bredband2.com)
2022-01-19 10:00:24 +0100mmhat(~mmh@55d4fa95.access.ecotel.net)
2022-01-19 10:02:17 +0100mc47(~mc47@xmonad/TheMC47)
2022-01-19 10:02:37 +0100DNH(~DNH@2a02:8108:1100:16d8:edf9:3833:cff9:92b3)
2022-01-19 10:03:47 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-19 10:06:05 +0100alp(~alp@user/alp)
2022-01-19 10:06:46 +0100mastarija(~mastarija@2a05:4f46:e0e:5000:c96c:6830:df6b:3edb) (Quit: Leaving)
2022-01-19 10:07:05 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-01-19 10:08:38 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-01-19 10:09:14 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-01-19 10:09:40 +0100ubert1(~Thunderbi@p200300ecdf0994208629362fe72747a7.dip0.t-ipconnect.de)
2022-01-19 10:09:59 +0100SummerSonw(~The_viole@203.77.49.232)
2022-01-19 10:10:16 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Ping timeout: 256 seconds)
2022-01-19 10:11:26 +0100SummerSonw(~The_viole@203.77.49.232) (Client Quit)
2022-01-19 10:11:44 +0100SummerSonw(~The_viole@203.77.49.232)
2022-01-19 10:12:03 +0100antony(~The_viole@203.77.49.232)
2022-01-19 10:12:27 +0100lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
2022-01-19 10:14:58 +0100Codaraxis(~Codaraxis@user/codaraxis)
2022-01-19 10:14:59 +0100ardell(~ardell@user/ardell)
2022-01-19 10:15:18 +0100antony(~The_viole@203.77.49.232) (Client Quit)
2022-01-19 10:15:38 +0100antony(~The_viole@203.77.49.232)
2022-01-19 10:15:39 +0100PVPANTHONY(~The_viole@203.77.49.232)
2022-01-19 10:16:07 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:81c9:f67f:1443:f972) (Remote host closed the connection)
2022-01-19 10:16:32 +0100SummerSonw(~The_viole@203.77.49.232) (Ping timeout: 268 seconds)
2022-01-19 10:17:16 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-01-19 10:17:39 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-01-19 10:19:12 +0100PVPANTHONY(~The_viole@203.77.49.232) (Client Quit)
2022-01-19 10:19:17 +0100antony(~The_viole@203.77.49.232) (Client Quit)
2022-01-19 10:20:22 +0100SummerSonw(~The_viole@203.77.49.232)
2022-01-19 10:21:53 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-01-19 10:22:55 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-01-19 10:24:18 +0100DNH(~DNH@2a02:8108:1100:16d8:edf9:3833:cff9:92b3) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-19 10:32:05 +0100jgeerds(~jgeerds@55d4090e.access.ecotel.net)
2022-01-19 10:32:34 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 268 seconds)
2022-01-19 10:35:18 +0100Gurkenglas(~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de)
2022-01-19 10:37:22 +0100namkeleser(~namkelese@124.188.192.57) (Quit: Client closed)
2022-01-19 10:40:32 +0100raym(~raym@user/raym) (Ping timeout: 240 seconds)
2022-01-19 10:44:48 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net)
2022-01-19 10:46:29 +0100SummerSonw(~The_viole@203.77.49.232) (Quit: Leaving)
2022-01-19 10:46:42 +0100raym(~raym@user/raym)
2022-01-19 10:46:50 +0100SummerSonw(~The_viole@203.77.49.232)
2022-01-19 10:46:55 +0100slac13033(~slack1256@191.126.227.199) (Ping timeout: 256 seconds)
2022-01-19 10:47:41 +0100SummerSonw(~The_viole@203.77.49.232) (Client Quit)
2022-01-19 10:47:59 +0100SummerSonw(~The_viole@203.77.49.232)
2022-01-19 10:50:34 +0100sprout_(~quassel@2a02:a467:ccd6:1:5d8f:20db:5ddd:bcf4)
2022-01-19 10:51:32 +0100sprout(~quassel@2a02:a467:ccd6:1:798d:4129:9f07:fe5b) (Ping timeout: 240 seconds)
2022-01-19 10:55:20 +0100phma(phma@2001:5b0:211b:a618:dfa3:a13:fe81:dc84) (Read error: Connection reset by peer)
2022-01-19 10:55:22 +0100Jing(~hedgehog@240e:390:7c53:a7e1:a11d:216c:4ca3:2c86) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-19 10:56:19 +0100DNH(~DNH@2a02:8108:1100:16d8:edf9:3833:cff9:92b3)
2022-01-19 10:56:43 +0100phma(phma@2001:5b0:215d:e318:4fbc:412:b7cd:6bd5)
2022-01-19 10:58:05 +0100vglfr(~vglfr@88.155.46.9)
2022-01-19 11:05:34 +0100Jing(~hedgehog@115.207.51.203)
2022-01-19 11:08:29 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Read error: Connection reset by peer)
2022-01-19 11:09:17 +0100Midjak(~Midjak@may53-1-78-226-116-92.fbx.proxad.net)
2022-01-19 11:10:21 +0100rusrushal13(~rusrushal@2401:4900:5d18:76e4:7b06:d89d:4706:dcce)
2022-01-19 11:12:02 +0100raym(~raym@user/raym) (Ping timeout: 256 seconds)
2022-01-19 11:13:49 +0100raym(~raym@user/raym)
2022-01-19 11:15:51 +0100Guest48(~Guest48@M014008067225.v4.enabler.ne.jp)
2022-01-19 11:17:08 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b976:af3b:634a:9904)
2022-01-19 11:18:49 +0100Codaraxis_(~Codaraxis@user/codaraxis)
2022-01-19 11:19:08 +0100tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2022-01-19 11:21:22 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:b976:af3b:634a:9904) (Ping timeout: 250 seconds)
2022-01-19 11:21:29 +0100Codaraxis(~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
2022-01-19 11:22:02 +0100jgeerds(~jgeerds@55d4090e.access.ecotel.net) (Ping timeout: 240 seconds)
2022-01-19 11:28:41 +0100razetime(~quassel@49.207.203.87) (Ping timeout: 268 seconds)
2022-01-19 11:28:54 +0100razetime(~quassel@49.207.203.87)
2022-01-19 11:41:52 +0100qeqeqw1(~qeqeqw3@2001:861:3a04:e320:31ea:a59b:1c06:51f4)
2022-01-19 11:42:21 +0100Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-01-19 11:43:02 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds)
2022-01-19 11:43:38 +0100Lord_of_Life_Lord_of_Life
2022-01-19 11:47:04 +0100pfurla(~pfurla@2804:d41:4331:4800:31ef:1aaf:1e7:47d)
2022-01-19 11:48:23 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
2022-01-19 11:48:24 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-01-19 11:48:32 +0100qeqeqw1(~qeqeqw3@2001:861:3a04:e320:31ea:a59b:1c06:51f4) (Ping timeout: 240 seconds)
2022-01-19 11:52:32 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-19 11:55:59 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-19 11:56:38 +0100Codaraxis(~Codaraxis@user/codaraxis)
2022-01-19 11:57:02 +0100Codaraxis_(~Codaraxis@user/codaraxis) (Ping timeout: 240 seconds)
2022-01-19 11:59:31 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 268 seconds)
2022-01-19 12:01:48 +0100wyrd(~wyrd@gateway/tor-sasl/wyrd)
2022-01-19 12:03:59 +0100rusrushal13(~rusrushal@2401:4900:5d18:76e4:7b06:d89d:4706:dcce) (Ping timeout: 256 seconds)
2022-01-19 12:04:37 +0100fr33domlover(~fr33@5.102.195.159) (Ping timeout: 240 seconds)
2022-01-19 12:05:29 +0100fr33domlover(~fr33@2.55.33.131)
2022-01-19 12:09:04 +0100Codaraxis_(~Codaraxis@user/codaraxis)
2022-01-19 12:09:57 +0100d0ku(~d0ku@178.43.152.233.ipv4.supernova.orange.pl)
2022-01-19 12:12:05 +0100MiguelNegrao(~MiguelNeg@2001:818:dc71:d100:9e5a:44ff:fe17:1240)
2022-01-19 12:12:24 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-19 12:12:28 +0100Codaraxis(~Codaraxis@user/codaraxis) (Ping timeout: 268 seconds)
2022-01-19 12:13:07 +0100 <MiguelNegrao> Hi all. What is the best/most popular solution for a generic uncurry function that uncurries for tuples of any length ?
2022-01-19 12:14:03 +0100 <MiguelNegrao> I found this one https://hackage.haskell.org/package/tuple-0.3.0.2/docs/Data-Tuple-Curry.html#v:uncurryN
2022-01-19 12:14:42 +0100ubert(~Thunderbi@p200300ecdf099420d5ce6ee7616221b3.dip0.t-ipconnect.de) (Quit: ubert)
2022-01-19 12:14:42 +0100ubert1ubert
2022-01-19 12:15:52 +0100 <MiguelNegrao> I found this issue also ("curry & uncurry family of functions"): https://github.com/haskell-foundation/foundation/issues/223
2022-01-19 12:16:56 +0100 <MiguelNegrao> The solution here doesn't seem to be viable as type class instance is needed for the result type: https://ro-che.info/articles/2013-01-29-generic-uncurry
2022-01-19 12:16:59 +0100 <sshine> MiguelNegrao, I'd go with lists :D
2022-01-19 12:17:14 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
2022-01-19 12:17:39 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:4901:95ce:aaba:4aa1)
2022-01-19 12:17:42 +0100 <MiguelNegrao> lists, hum... ?
2022-01-19 12:17:52 +0100 <MiguelNegrao> How would that work ?
2022-01-19 12:18:14 +0100 <sshine> (what I mean is, if you want to perform an operation on a tuple of a variable size, then lists are data structures with a variable size.)
2022-01-19 12:18:31 +0100 <MiguelNegrao> basicaly, I need to transform any function of type (a1 -> b, a1 -> a2 -> b, a1 -> a2 -> a3 -> b, etc) into ( a -> b)
2022-01-19 12:18:35 +0100kjak(~kjak@pool-108-45-56-21.washdc.fios.verizon.net) (Ping timeout: 250 seconds)
2022-01-19 12:19:01 +0100 <MiguelNegrao> because I need to use that function as arrow (think `arr` combinator) and the input must go in as a tuple
2022-01-19 12:19:41 +0100 <MiguelNegrao> The functions I need to turn into arrows, are any function of gi-gtk, so they already exist and I can't change them.
2022-01-19 12:22:02 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:4901:95ce:aaba:4aa1) (Ping timeout: 240 seconds)
2022-01-19 12:22:07 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-01-19 12:22:07 +0100 <MiguelNegrao> In this case not exactly `arr` but `arrM :: Monad m => (a -> m b) -> MSF m a b` , e.g., from [here](https://hackage.haskell.org/package/dunai-0.8.1/docs/Data-MonadicStreamFunction-Core.html#v:arrM)
2022-01-19 12:23:49 +0100ardell(~ardell@user/ardell) (Quit: Konversation terminated!)
2022-01-19 12:30:13 +0100vysn(~vysn@user/vysn)
2022-01-19 12:35:54 +0100cfricke(~cfricke@user/cfricke) (Ping timeout: 268 seconds)
2022-01-19 12:42:56 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4)
2022-01-19 12:45:07 +0100faustind(~faustin@240b:12:43e1:7b00:fc04:33:8474:c903)
2022-01-19 12:46:45 +0100Guest48(~Guest48@M014008067225.v4.enabler.ne.jp) (Quit: Connection closed)
2022-01-19 12:47:17 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-01-19 12:47:23 +0100 <tomsmeding> MiguelNegrao: you can also do this, but type inference breaks quite badly and you probably have to add type annotations everywhere: https://paste.tomsmeding.com/UflC766M
2022-01-19 12:47:49 +0100 <tomsmeding> this then works: `uncurryN (\x y z -> x + y + z :: Int) (1::Int, (2::Int, (3::Int, ()))) :: Int`
2022-01-19 12:48:09 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Client Quit)
2022-01-19 12:48:34 +0100 <tomsmeding> advantage: works for any function arity. disadvantages: everything
2022-01-19 12:51:22 +0100 <MiguelNegrao> This approach with Generics looks promising: https://stackoverflow.com/a/28942478
2022-01-19 12:52:32 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-19 12:53:10 +0100 <tomsmeding> (another disadvantage of my approach: you can't choose how far to uncurry, i.e. the codomain of the uncurried function cannot be a function type)
2022-01-19 12:54:09 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-19 12:55:50 +0100pfurla(~pfurla@2804:d41:4331:4800:31ef:1aaf:1e7:47d) (Quit: gone to sleep. ZZZzzz…)
2022-01-19 12:57:27 +0100 <MiguelNegrao> I think I will go with https://hackage.haskell.org/package/tuple-0.3.0.2/docs/Data-Tuple-Curry.html#v:uncurryN
2022-01-19 12:59:41 +0100perrierjouet(~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
2022-01-19 12:59:49 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
2022-01-19 13:04:53 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Ping timeout: 268 seconds)
2022-01-19 13:08:04 +0100pfurla(~pfurla@2804:d41:4331:4800:31ef:1aaf:1e7:47d)
2022-01-19 13:12:34 +0100simendsjo(~user@2a02:2121:6c0:42f8:d80b:8f5a:9182:35dd)
2022-01-19 13:17:10 +0100bravespear|2(~Ranhir@157.97.53.139) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/)
2022-01-19 13:17:56 +0100qeqeqw1(~qeqeqw3@2001:861:3a04:e320:31ea:a59b:1c06:51f4)
2022-01-19 13:18:24 +0100deadmarshal(~deadmarsh@95.38.230.192) (Ping timeout: 256 seconds)
2022-01-19 13:19:28 +0100Guest5233(~Guest52@80-100-97-100.ip.xs4all.nl)
2022-01-19 13:20:44 +0100 <qeqeqw1> Hi. I'm reading "learn you a haskell for great good" and the examples of function type declarations don't work. Like this one for example: "factorial :: Integer -> Integer" What is the correct syntax ?
2022-01-19 13:21:33 +0100Ranhir(~Ranhir@157.97.53.139)
2022-01-19 13:21:58 +0100 <Guest5233> qeqeqw1 What is the error you're getting?
2022-01-19 13:22:09 +0100 <Guest5233> That type signature should work
2022-01-19 13:22:56 +0100 <qeqeqw1> I'm getting this : • No instance for (Show (Integer -> Integer))
2022-01-19 13:22:56 +0100 <qeqeqw1> arising from a use of ‘print’
2022-01-19 13:22:56 +0100 <qeqeqw1> (maybe you haven't applied a function to enough arguments?)
2022-01-19 13:22:56 +0100 <qeqeqw1> • In a stmt of an interactive GHCi command: print it
2022-01-19 13:23:01 +0100pfurla(~pfurla@2804:d41:4331:4800:31ef:1aaf:1e7:47d) (Quit: Textual IRC Client: www.textualapp.com)
2022-01-19 13:24:51 +0100 <Guest5233> That error is not related to the type signature
2022-01-19 13:25:12 +0100 <Guest5233> Are trying to do the following?
2022-01-19 13:25:13 +0100 <Guest5233> show factorial
2022-01-19 13:25:35 +0100 <qeqeqw1> this is the factorial: "factorial n = product [1..n]"
2022-01-19 13:26:00 +0100 <Guest5233> The error is telling you that you're trying to `show` something that has the type `Integer -> Integer`. In other words, you're trying to `show` a _function_, rather than the _result_ of a function
2022-01-19 13:26:56 +0100 <Guest5233> (`show` is used by `print`, by the way)
2022-01-19 13:27:16 +0100 <qeqeqw1> I understand what you're saying but I do not understand what I am doing wrong
2022-01-19 13:27:40 +0100 <AWizzArd> HLS in vs code: how can I turn off formatting when saving a file? I only want to manually mark the area that I want to format. I already tried in my settings.json to do "haskell.formattingProvider": "none"
2022-01-19 13:28:45 +0100 <Guest5233> qeqeqw1 Can you show me your full code?
2022-01-19 13:28:46 +0100Jing(~hedgehog@115.207.51.203) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-19 13:29:31 +0100 <qeqeqw1> Guest5233, this is the full code :
2022-01-19 13:29:34 +0100 <qeqeqw1> $ ghci
2022-01-19 13:29:34 +0100 <qeqeqw1> GHCi, version 9.0.2: https://www.haskell.org/ghc/ :? for help
2022-01-19 13:29:34 +0100 <qeqeqw1> ghci> factorial n = product [1..n]
2022-01-19 13:29:34 +0100 <qeqeqw1> ghci> factorial :: Integer -> Integer
2022-01-19 13:29:34 +0100 <qeqeqw1> <interactive>:2:1: error:
2022-01-19 13:29:37 +0100 <qeqeqw1> • No instance for (Show (Integer -> Integer))
2022-01-19 13:29:39 +0100 <qeqeqw1> arising from a use of ‘print’
2022-01-19 13:29:41 +0100 <qeqeqw1> (maybe you haven't applied a function to enough arguments?)
2022-01-19 13:29:43 +0100 <qeqeqw1> • In a stmt of an interactive GHCi command: print it
2022-01-19 13:29:45 +0100 <qeqeqw1> ghci>
2022-01-19 13:30:22 +0100 <Guest5233> Ah, I see
2022-01-19 13:31:12 +0100 <Guest5233> When you want to include a type signature in GHCi, you should wrap your code in `:{` and `:}`
2022-01-19 13:31:27 +0100xb0o2(~xb0o2@user/xb0o2)
2022-01-19 13:31:31 +0100 <Guest5233> :{
2022-01-19 13:31:31 +0100 <Guest5233> factorial n = product [1..n]
2022-01-19 13:31:32 +0100 <Guest5233> factorial :: Integer -> Integer
2022-01-19 13:31:32 +0100 <Guest5233> :}
2022-01-19 13:31:33 +0100 <Guest5233> factorial 5
2022-01-19 13:31:33 +0100 <Guest5233> > 120
2022-01-19 13:31:35 +0100 <lambdabot> 120
2022-01-19 13:32:05 +0100jgeerds(~jgeerds@55d4090e.access.ecotel.net)
2022-01-19 13:32:09 +0100 <Guest5233> More info here: https://downloads.haskell.org/~ghc/9.0.1/docs/html/users_guide/ghci.html#ghci-cmd-:{
2022-01-19 13:32:58 +0100 <qeqeqw1> Guest5233, Yes that worked! Thank you very much!
2022-01-19 13:33:45 +0100 <Guest5233> No problem!
2022-01-19 13:34:08 +0100 <qeqeqw1> Guest5233, I will read this. First time on #haskell and not disapointed :)
2022-01-19 13:34:59 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-01-19 13:35:24 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:ac4b:acb4:af59:598f)
2022-01-19 13:38:48 +0100cfricke(~cfricke@user/cfricke)
2022-01-19 13:39:16 +0100jakalx(~jakalx@base.jakalx.net) (Disconnected: Replaced by new connection)
2022-01-19 13:39:16 +0100jakalx(~jakalx@base.jakalx.net)
2022-01-19 13:40:16 +0100biberu\(~biberu@user/biberu)
2022-01-19 13:40:19 +0100mikoto-chan(~mikoto-ch@213.177.151.239)
2022-01-19 13:41:01 +0100phma_(phma@2001:5b0:215d:e318:4fbc:412:b7cd:6bd5)
2022-01-19 13:41:48 +0100ubert(~Thunderbi@p200300ecdf0994208629362fe72747a7.dip0.t-ipconnect.de) (Quit: ubert)
2022-01-19 13:41:49 +0100erisco_(~erisco@d24-57-249-233.home.cgocable.net)
2022-01-19 13:42:05 +0100ubert(~Thunderbi@p200300ecdf0994202d2de89ac733253b.dip0.t-ipconnect.de)
2022-01-19 13:42:36 +0100jkaye(~jkaye@2601:281:200:1958:cc69:95b3:52f2:6773)
2022-01-19 13:42:38 +0100jmct__(sid160793@id-160793.tinside.irccloud.com)
2022-01-19 13:42:40 +0100terrorjack0(~terrorjac@2a01:4f8:1c1e:509a::1)
2022-01-19 13:42:41 +0100wallymathieu_(sid533252@id-533252.uxbridge.irccloud.com)
2022-01-19 13:42:41 +0100davetapley_(sid666@id-666.uxbridge.irccloud.com)
2022-01-19 13:42:41 +0100awpr_(uid446117@id-446117.lymington.irccloud.com)
2022-01-19 13:42:46 +0100b20n_(sid115913@id-115913.uxbridge.irccloud.com)
2022-01-19 13:42:47 +0100rtpg_(sid443069@id-443069.ilkley.irccloud.com)
2022-01-19 13:42:47 +0100lagash_(lagash@lagash.shelltalk.net)
2022-01-19 13:42:51 +0100megeve_(sid523379@id-523379.hampstead.irccloud.com)
2022-01-19 13:42:52 +0100elvishjerricco_(sid237756@id-237756.helmsley.irccloud.com)
2022-01-19 13:42:52 +0100joel135_(sid136450@id-136450.hampstead.irccloud.com)
2022-01-19 13:42:53 +0100choucavalier_(~choucaval@peanutbuttervibes.com)
2022-01-19 13:42:54 +0100akurilin__(uid322841@id-322841.ilkley.irccloud.com)
2022-01-19 13:43:00 +0100hugo-(znc@verdigris.lysator.liu.se)
2022-01-19 13:43:00 +0100codedmart_(~codedmart@li335-49.members.linode.com)
2022-01-19 13:43:01 +0100tafama(~tafa@user/tafa)
2022-01-19 13:43:02 +0100greyrat_(~greyrat@ip202.ip-51-178-215.eu)
2022-01-19 13:43:02 +0100Hash_(~Hash@hashsecurity.org)
2022-01-19 13:43:03 +0100rembo10_(~rembo10@remulis.com)
2022-01-19 13:43:07 +0100kristjansson_(sid126207@id-126207.tinside.irccloud.com)
2022-01-19 13:43:28 +0100rubin55_(sid175221@id-175221.hampstead.irccloud.com)
2022-01-19 13:43:31 +0100EvanR_(~EvanR@user/evanr)
2022-01-19 13:43:32 +0100vgtw_(~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se)
2022-01-19 13:43:45 +0100the_proffesor(~theproffe@2601:282:847f:8010::85ac)
2022-01-19 13:43:45 +0100the_proffesor(~theproffe@2601:282:847f:8010::85ac) (Changing host)
2022-01-19 13:43:45 +0100the_proffesor(~theproffe@user/theproffesor)
2022-01-19 13:44:10 +0100obfusk_(~quassel@a82-161-150-56.adsl.xs4all.nl)
2022-01-19 13:44:21 +0100carbolymer_(~carbolyme@dropacid.net)
2022-01-19 13:44:29 +0100szkl_(uid110435@uxbridge.irccloud.com)
2022-01-19 13:44:46 +0100caubert_(~caubert@136.244.111.235)
2022-01-19 13:45:04 +0100aforemny_(~aforemny@static.248.158.34.188.clients.your-server.de)
2022-01-19 13:45:06 +0100stilgart_(~Christoph@chezlefab.net)
2022-01-19 13:45:09 +0100mal1(~mal@ns2.wyrd.be)
2022-01-19 13:45:12 +0100Clint_(~Clint@user/clint)
2022-01-19 13:45:12 +0100Logio_(em@kapsi.fi)
2022-01-19 13:45:14 +0100jlamothe_(~jlamothe@198.251.61.229)
2022-01-19 13:45:16 +0100opqdonut_(opqdonut@pseudo.fixme.fi)
2022-01-19 13:45:17 +0100cls_(~cls@chalk.lubutu.com)
2022-01-19 13:45:17 +0100andjjj23_(~irc@107.170.228.47)
2022-01-19 13:45:19 +0100ddb1(~ddb@ipv6two.tilde.club)
2022-01-19 13:45:20 +0100hrdl_(~hrdl@mail.hrdl.eu)
2022-01-19 13:45:21 +0100perro_(~perro@072-191-245-069.res.spectrum.com)
2022-01-19 13:45:21 +0100PHO`__(~pho@akari.cielonegro.org)
2022-01-19 13:45:26 +0100farn_(~farn@2a03:4000:7:3cd:d4ab:85ff:feeb:f505)
2022-01-19 13:45:26 +0100enicar(~enikar@user/enikar)
2022-01-19 13:45:29 +0100kmein_(~weechat@user/kmein)
2022-01-19 13:45:31 +0100ridcully_(~ridcully@p57b52a9a.dip0.t-ipconnect.de)
2022-01-19 13:45:36 +0100bravespear|2(~Ranhir@157.97.53.139)
2022-01-19 13:45:37 +0100w1gz_(~do@159.89.11.133)
2022-01-19 13:45:44 +0100sabx_(~sabbas@user/sabbas)
2022-01-19 13:45:51 +0100emf_(~emf@2620:10d:c090:400::5:2d26)
2022-01-19 13:45:52 +0100noddy_(~user@user/noddy)
2022-01-19 13:45:55 +0100Megant_(megant@user/megant)
2022-01-19 13:46:04 +0100fef(~thedawn@user/thedawn) (Remote host closed the connection)
2022-01-19 13:46:05 +0100yaroot(~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953) (Ping timeout: 240 seconds)
2022-01-19 13:46:05 +0100b20n(sid115913@id-115913.uxbridge.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:05 +0100totte(~totte@h-82-196-112-155.A166.priv.bahnhof.se) (Ping timeout: 240 seconds)
2022-01-19 13:46:05 +0100davetapley(sid666@id-666.uxbridge.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100remexre(~remexre@user/remexre) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100tito(tito@tilde.team) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100erisco(~erisco@d24-57-249-233.home.cgocable.net) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100greyrat(~greyrat@ip202.ip-51-178-215.eu) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100kristjansson(sid126207@id-126207.tinside.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100lieven(~mal@ns2.wyrd.be) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100rtpg(sid443069@id-443069.ilkley.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100lagash(lagash@lagash.shelltalk.net) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100jmct_(sid160793@id-160793.tinside.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100koolazer(~koo@user/koolazer) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100flukiluke(~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100megeve(sid523379@id-523379.hampstead.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100ddb(~ddb@ipv6two.tilde.club) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100akurilin_(uid322841@id-322841.ilkley.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100jlamothe(~jlamothe@198.251.61.229) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100Flow(~none@gentoo/developer/flow) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100cocreature(~moritz@2a03:b0c0:3:d0::c8:f001) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100PHO`_(~pho@akari.cielonegro.org) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100wallymathieu(uid533252@id-533252.uxbridge.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100tafa(~tafa@user/tafa) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100awpr(uid446117@id-446117.lymington.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100aforemny(~aforemny@static.248.158.34.188.clients.your-server.de) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100choucavalier(~choucaval@peanutbuttervibes.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100Hafydd(~Hafydd@user/hafydd) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100Clint(~Clint@user/clint) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100Logio(em@kapsi.fi) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100Ranhir(~Ranhir@157.97.53.139) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100phma(phma@2001:5b0:215d:e318:4fbc:412:b7cd:6bd5) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100kmein(~weechat@user/kmein) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100emf(~emf@2620:10d:c090:400::5:2d26) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100hays(rootvegeta@fsf/member/hays) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100szkl(uid110435@id-110435.uxbridge.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100EvanR(~EvanR@user/evanr) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100mtjm(~mutantmel@2604:a880:2:d0::208b:d001) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100biberu(~biberu@user/biberu) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100vgtw(~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100emergence(thelounge@2607:5300:60:5910:dcad:beff:feef:5bc) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100sabx(~sabbas@user/sabbas) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100cls(~cls@chalk.lubutu.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100stefan-_(~cri@42dots.de) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100Hash(~Hash@hashsecurity.org) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100caubert(~caubert@136.244.111.235) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100rubin55(sid175221@id-175221.hampstead.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100carbolymer(~carbolyme@dropacid.net) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100hrdl(~hrdl@mail.hrdl.eu) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100obfusk(~quassel@a82-161-150-56.adsl.xs4all.nl) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100opqdonut(opqdonut@pseudo.fixme.fi) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100nisstyre(~wes@user/nisstyre) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100hexology(~hexology@user/hexology) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100landonf(landonf@mac68k.info) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100stilgart(~Christoph@chezlefab.net) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100farn(~farn@2a03:4000:7:3cd:d4ab:85ff:feeb:f505) (Ping timeout: 240 seconds)
2022-01-19 13:46:06 +0100andjjj23(~irc@107.170.228.47) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100rembo10(~rembo10@remulis.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100theproffesor(~theproffe@user/theproffesor) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100codedmart(codedmart@2600:3c01::f03c:92ff:fefe:8511) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100hugo(znc@verdigris.lysator.liu.se) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100joel135(sid136450@id-136450.hampstead.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100noddy(~user@user/noddy) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100elvishjerricco(sid237756@id-237756.helmsley.irccloud.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100perro(~perro@072-191-245-069.res.spectrum.com) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100Megant(megant@user/megant) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100w1gz(~do@159.89.11.133) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100ridcully(~ridcully@p57b52a9a.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-01-19 13:46:07 +0100enikar(~enikar@user/enikar) (Ping timeout: 240 seconds)
2022-01-19 13:46:08 +0100landonf(landonf@mac68k.info)
2022-01-19 13:46:08 +0100jmct__jmct_
2022-01-19 13:46:08 +0100awpr_awpr
2022-01-19 13:46:08 +0100rtpg_rtpg
2022-01-19 13:46:13 +0100b20n_b20n
2022-01-19 13:46:13 +0100davetapley_davetapley
2022-01-19 13:46:13 +0100erisco_erisco
2022-01-19 13:46:13 +0100akurilin__akurilin_
2022-01-19 13:46:13 +0100wallymathieu_wallymathieu
2022-01-19 13:46:13 +0100kristjansson_kristjansson
2022-01-19 13:46:13 +0100terrorjack0terrorjack
2022-01-19 13:46:14 +0100joel135_joel135
2022-01-19 13:46:14 +0100elvishjerricco_elvishjerricco
2022-01-19 13:46:15 +0100rubin55_rubin55
2022-01-19 13:46:20 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-01-19 13:46:20 +0100flukiluke(~m-7humut@2603:c023:c000:6c7e:8945:ad24:9113:a962)
2022-01-19 13:46:23 +0100remexre(~remexre@user/remexre)
2022-01-19 13:46:29 +0100stefan-_(~cri@42dots.de)
2022-01-19 13:46:31 +0100yaroot(~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953)
2022-01-19 13:46:31 +0100mtjm(~mutantmel@2604:a880:2:d0::208b:d001)
2022-01-19 13:46:32 +0100kmein_kmein
2022-01-19 13:46:38 +0100biberu(~biberu@user/biberu)
2022-01-19 13:46:38 +0100koolazer(~koo@user/koolazer)
2022-01-19 13:46:38 +0100fef(~thedawn@user/thedawn)
2022-01-19 13:46:45 +0100hays(rootvegeta@fsf/member/hays)
2022-01-19 13:47:05 +0100cocreature(~moritz@2a03:b0c0:3:d0::c8:f001)
2022-01-19 13:47:08 +0100Hafydd(~Hafydd@user/hafydd)
2022-01-19 13:47:16 +0100nisstyre(~wes@user/nisstyre)
2022-01-19 13:47:17 +0100Flow(~none@gentoo/developer/flow)
2022-01-19 13:47:24 +0100TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2022-01-19 13:47:29 +0100totte(~totte@h-82-196-112-155.A166.priv.bahnhof.se)
2022-01-19 13:49:17 +0100jgeerds(~jgeerds@55d4090e.access.ecotel.net) (Ping timeout: 268 seconds)
2022-01-19 13:49:54 +0100fr33domlover(~fr33@2.55.33.131) (Ping timeout: 268 seconds)
2022-01-19 13:49:57 +0100hrdl_(~hrdl@mail.hrdl.eu) (Ping timeout: 256 seconds)
2022-01-19 13:49:57 +0100cls_(~cls@chalk.lubutu.com) (Ping timeout: 256 seconds)
2022-01-19 13:49:57 +0100szkl_(uid110435@uxbridge.irccloud.com) (Ping timeout: 256 seconds)
2022-01-19 13:49:57 +0100vgtw_(~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se) (Ping timeout: 256 seconds)
2022-01-19 13:50:06 +0100Jing(~hedgehog@240e:390:7c53:a7e1:84bf:ceba:6161:c1f6)
2022-01-19 13:50:31 +0100opqdonut_(opqdonut@pseudo.fixme.fi) (Ping timeout: 256 seconds)
2022-01-19 13:50:31 +0100biberu\(~biberu@user/biberu) (Ping timeout: 256 seconds)
2022-01-19 13:50:34 +0100vgtw(~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se)
2022-01-19 13:51:34 +0100hrdl(~hrdl@mail.hrdl.eu)
2022-01-19 13:51:39 +0100cls(~cls@chalk.lubutu.com)
2022-01-19 13:51:46 +0100szkl_(uid110435@id-110435.uxbridge.irccloud.com)
2022-01-19 13:51:54 +0100opqdonut(opqdonut@pseudo.fixme.fi)
2022-01-19 13:52:24 +0100wmacmil(~wmacmil@83-233-165-97.cust.bredband2.com) (Ping timeout: 256 seconds)
2022-01-19 13:52:37 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-01-19 13:53:15 +0100 <merijn> qeqeqw1: fwiw, I (and most people) would generally recommend not trying to write multiline code in ghci
2022-01-19 13:53:31 +0100 <merijn> qeqeqw1: It's generally easier to just write it in an editor, then load the file in ghci to play with
2022-01-19 13:56:31 +0100 <raehik> I've got an instance that I needed QuantifiedConstraints for to allow me to say "given an instance that works with any KnownNat n, we have an instance X". Now I can't figure out how to use it!
2022-01-19 13:57:07 +0100deadmarshal(~deadmarsh@95.38.230.192)
2022-01-19 13:57:35 +0100 <hpc> in fact, i would recommend that anyway
2022-01-19 13:57:51 +0100 <hpc> vim foo.hs, ghci foo.hs, and :r in ghci as you make edits
2022-01-19 13:58:12 +0100 <hpc> easier than whatever fancy :l and :{ :} nonsense anyone could possibly come up with
2022-01-19 13:58:37 +0100 <hpc> the hardest part of the whole thing is exiting vim when you're done :D
2022-01-19 14:02:40 +0100 <raehik> is what I'm trying currently disallowed in the first place? https://gitlab.haskell.org/ghc/ghc/-/issues/18150
2022-01-19 14:04:01 +0100 <raehik> feels weird, I just want an instance that knows it can use any KnownNat rather than having to put each type nat in the instance head
2022-01-19 14:04:42 +0100max22-(~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 268 seconds)
2022-01-19 14:06:44 +0100 <merijn> is there a name for generalising quad-tree/oct-trees to N-dimensions?
2022-01-19 14:08:01 +0100 <hpc> space partition?
2022-01-19 14:08:48 +0100slack1256(~slack1256@191.125.227.223)
2022-01-19 14:09:02 +0100 <merijn> as in data structure name
2022-01-19 14:09:32 +0100 <merijn> so binary trees, quad trees, and oct trees are 1, 2, and 3 dimensional instance of ?? trees
2022-01-19 14:09:45 +0100 <merijn> Trying to figure out the ?? :p
2022-01-19 14:09:52 +0100 <qeqeqw1> merijn, Right I will start this habit then. That's a good tip. I'm not really the repl type anyway so it'all good
2022-01-19 14:10:01 +0100 <hpc> ah
2022-01-19 14:10:30 +0100Kaiepi(~Kaiepi@156.34.47.253) (Quit: Leaving)
2022-01-19 14:10:43 +0100 <merijn> qeqeqw1: You can simply do ":l yourfile.hs" and everything will be accessible
2022-01-19 14:10:45 +0100Kaiepi(~Kaiepi@156.34.47.253)
2022-01-19 14:10:48 +0100 <qeqeqw1> merijn, I think the term you're looking for is N-ary tree
2022-01-19 14:11:20 +0100 <merijn> (and ":r" or ":reload" to reload file after changes)
2022-01-19 14:11:25 +0100 <qeqeqw1> merijn, Yes, I've read it in the tutorial but thanks anyway
2022-01-19 14:12:03 +0100 <qeqeqw1> Does modifying functions in the repl and then do reload change the file, though ?
2022-01-19 14:12:36 +0100 <merijn> you can't really modify things in the repl, only define new things
2022-01-19 14:13:44 +0100 <qeqeqw1> right, that's a sensible behavior
2022-01-19 14:15:18 +0100 <hpc> qeqeqw1: that's "no more than N children" instead of "exactly N children", and N doesn't have to be a power of two
2022-01-19 14:17:40 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-01-19 14:18:41 +0100 <hpc> merijn: maybe give up on finding an existing term and call it a 2**n-ary space partition?
2022-01-19 14:19:19 +0100 <merijn> hpc: I need a name so I can search for whatever people have written about them :p
2022-01-19 14:19:25 +0100 <hpc> ah
2022-01-19 14:19:26 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:ede6:9f76:f2c5:9990)
2022-01-19 14:20:12 +0100 <hpc> if it was me, i would try a search for "space partition" and just deal with the extra results
2022-01-19 14:20:35 +0100 <hpc> unless there's an ungodly huge number of search results, that seems easiest
2022-01-19 14:20:36 +0100 <merijn> especially how to get self-balancing right :p
2022-01-19 14:23:20 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-01-19 14:23:37 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:ede6:9f76:f2c5:9990) (Ping timeout: 240 seconds)
2022-01-19 14:25:03 +0100simendsjo(~user@2a02:2121:6c0:42f8:d80b:8f5a:9182:35dd) (Ping timeout: 268 seconds)
2022-01-19 14:25:52 +0100ChaiTRex(~ChaiTRex@user/chaitrex)
2022-01-19 14:27:05 +0100aforemny_aforemny
2022-01-19 14:28:58 +0100fef(~thedawn@user/thedawn) (Remote host closed the connection)
2022-01-19 14:31:39 +0100fr33domlover(~fr33@141.226.10.136)
2022-01-19 14:31:58 +0100alp(~alp@user/alp) (Remote host closed the connection)
2022-01-19 14:32:02 +0100deadmarshal(~deadmarsh@95.38.230.192) (Ping timeout: 250 seconds)
2022-01-19 14:32:18 +0100alp(~alp@user/alp)
2022-01-19 14:33:55 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-01-19 14:34:26 +0100ChaiTRex(~ChaiTRex@user/chaitrex)
2022-01-19 14:34:55 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net) (Ping timeout: 268 seconds)
2022-01-19 14:34:58 +0100PHO`__PHO`
2022-01-19 14:37:19 +0100epolanski(uid312403@id-312403.helmsley.irccloud.com)
2022-01-19 14:37:56 +0100 <merijn> ah, feck, I don't think quad/oct trees are quite right for my problem anyway :\
2022-01-19 14:39:01 +0100faustind(~faustin@240b:12:43e1:7b00:fc04:33:8474:c903) (Quit: Leaving.)
2022-01-19 14:44:38 +0100__monty__(~toonn@user/toonn)
2022-01-19 14:45:18 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net)
2022-01-19 14:46:03 +0100vglfr(~vglfr@88.155.46.9) (Ping timeout: 256 seconds)
2022-01-19 14:46:16 +0100deadmarshal(~deadmarsh@95.38.230.192)
2022-01-19 14:46:20 +0100vglfr(~vglfr@88.155.46.9)
2022-01-19 14:48:55 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset)
2022-01-19 14:55:07 +0100deadmarshal(~deadmarsh@95.38.230.192) (Ping timeout: 256 seconds)
2022-01-19 14:56:16 +0100max22-(~maxime@2a01cb0883359800afbe144533f29e72.ipv6.abo.wanadoo.fr)
2022-01-19 14:56:17 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
2022-01-19 14:57:12 +0100Clint_Clint
2022-01-19 14:58:57 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-01-19 14:59:17 +0100ChaiTRex(~ChaiTRex@user/chaitrex)
2022-01-19 14:59:29 +0100 <merijn> ok, so help me out. I'm trying to invent something like IntervalMap from data-interval
2022-01-19 14:59:34 +0100 <merijn> @hackage data-interval
2022-01-19 14:59:34 +0100 <lambdabot> https://hackage.haskell.org/package/data-interval
2022-01-19 14:59:44 +0100 <merijn> Except, that only deals with 1-dimensional intervals
2022-01-19 14:59:47 +0100mal1lieven
2022-01-19 14:59:55 +0100 <merijn> And I need N-dimensional
2022-01-19 15:00:37 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-01-19 15:02:53 +0100shriekingnoise(~shrieking@201.231.16.156)
2022-01-19 15:03:57 +0100 <merijn> I was looking at the data-interval implementation, but that stores the smallest point for each interval and then does a lookup, but that's...not as doable with N dimensions. At least I'm not sure how...
2022-01-19 15:04:25 +0100 <merijn> And octtrees seems like they'd inflict a lot of additional storage
2022-01-19 15:08:17 +0100azimut_(~azimut@gateway/tor-sasl/azimut)
2022-01-19 15:08:57 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds)
2022-01-19 15:09:03 +0100joo-_(~joo-_@fsf/member/joo--) (Quit: leaving)
2022-01-19 15:09:10 +0100 <__monty__> Oof, are you a day ahead in AoC or something? : )
2022-01-19 15:09:18 +0100joo-_(~joo-_@80-62-117-53-mobile.dk.customer.tdc.net)
2022-01-19 15:09:18 +0100joo-_(~joo-_@80-62-117-53-mobile.dk.customer.tdc.net) (Changing host)
2022-01-19 15:09:18 +0100joo-_(~joo-_@fsf/member/joo--)
2022-01-19 15:10:53 +0100deadmarshal(~deadmarsh@95.38.230.192)
2022-01-19 15:11:50 +0100 <merijn> __monty__: This is actual work >.>
2022-01-19 15:12:41 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net) (Ping timeout: 256 seconds)
2022-01-19 15:13:06 +0100shapr(~user@2601:7c0:c37c:46d0:f28:8342:f51d:c5e2)
2022-01-19 15:13:10 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2022-01-19 15:14:58 +0100betelgeuse9(~betelgeus@94-225-47-8.access.telenet.be)
2022-01-19 15:17:03 +0100 <__monty__> Yeah, it's just that Octrees kinda popped up this year, for 3D intervals. It sounds like a pretty hard problem.
2022-01-19 15:17:22 +0100betelgeuse9(~betelgeus@94-225-47-8.access.telenet.be) (Client Quit)
2022-01-19 15:18:06 +0100wombat875(~neilfulwi@pool-72-89-24-154.nycmny.fios.verizon.net)
2022-01-19 15:20:12 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dd9f:9c7:a4ae:c7f9)
2022-01-19 15:21:49 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-01-19 15:22:03 +0100lavaman(~lavaman@98.38.249.169)
2022-01-19 15:22:10 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-01-19 15:22:28 +0100lavaman(~lavaman@98.38.249.169)
2022-01-19 15:22:30 +0100gdd(~gdd@129.199.146.230)
2022-01-19 15:22:35 +0100lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2022-01-19 15:24:13 +0100max22-(~maxime@2a01cb0883359800afbe144533f29e72.ipv6.abo.wanadoo.fr) (Ping timeout: 250 seconds)
2022-01-19 15:24:17 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dd9f:9c7:a4ae:c7f9) (Ping timeout: 240 seconds)
2022-01-19 15:25:43 +0100jlamothe_(~jlamothe@198.251.61.229) (Quit: leaving)
2022-01-19 15:26:37 +0100deadmarshal(~deadmarsh@95.38.230.192) (Ping timeout: 240 seconds)
2022-01-19 15:27:21 +0100 <tomsmeding> merijn: why are oct trees not right for your problem?
2022-01-19 15:29:45 +0100dut(~dut@user/dut)
2022-01-19 15:30:50 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-01-19 15:31:57 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net)
2022-01-19 15:32:09 +0100 <tomsmeding> note that BVH also exists, but you probably already found that, and without knowing more about the problem it's impossible to say whether it will be more suitable anyway :)
2022-01-19 15:32:15 +0100 <xerox> people might be interested in POPL streamed live https://www.youtube.com/watch?v=83D2k5pgFlM
2022-01-19 15:32:28 +0100 <merijn> tomsmeding: Intervals that cover multiple branches will have to be split a lot
2022-01-19 15:32:54 +0100wombat875(~neilfulwi@pool-72-89-24-154.nycmny.fios.verizon.net) (Read error: Connection reset by peer)
2022-01-19 15:32:58 +0100 <tomsmeding> ah
2022-01-19 15:33:13 +0100 <merijn> tomsmeding: My intervals will most be large and dense
2022-01-19 15:33:16 +0100 <merijn> *mostly
2022-01-19 15:33:23 +0100 <tomsmeding> does IntervalMap even solve that issue? from a peek at the implementation it looked like it doesn't deal with overlapping intervals _at all_
2022-01-19 15:33:32 +0100 <merijn> tomsmeding: Which is, like, the pessimal case for octtrees
2022-01-19 15:33:42 +0100 <merijn> tomsmeding: There can't be overlap
2022-01-19 15:34:46 +0100 <merijn> tomsmeding: But with quad/octrees you end up doing a lot of gratuitous splitting to fit into the 4/8 quads/octs of the space
2022-01-19 15:34:58 +0100 <tomsmeding> yeah I see
2022-01-19 15:35:13 +0100 <merijn> Aha!
2022-01-19 15:35:25 +0100qeqeqw1(~qeqeqw3@2001:861:3a04:e320:31ea:a59b:1c06:51f4) (Leaving)
2022-01-19 15:35:26 +0100 <merijn> kd-tree, that was the name I was looking for earlier, I think
2022-01-19 15:35:29 +0100 <tomsmeding> BVH won't split (with the standard implementation -- you can make it split if you want), but it will just have an inefficient tree structure probably
2022-01-19 15:36:42 +0100 <tomsmeding> what dimensions are you looking at? <=3? <=10? <=10000?
2022-01-19 15:36:58 +0100 <merijn> tomsmeding: BVH seems more general than I want anyway, since I will never have overlap
2022-01-19 15:37:12 +0100 <merijn> tomsmeding: Let's say *at least* up to 5
2022-01-19 15:37:15 +0100x_kuru(~xkuru@user/xkuru)
2022-01-19 15:37:20 +0100 <tomsmeding> bvh is just an alternative on kd trees
2022-01-19 15:37:40 +0100 <tomsmeding> the bounding volumes of the internal nodes will overlap
2022-01-19 15:37:55 +0100 <tomsmeding> where a kd tree would split things
2022-01-19 15:38:16 +0100 <tomsmeding> (that is, if I remember graphics class correctly :p )
2022-01-19 15:39:00 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-19 15:39:00 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-19 15:39:00 +0100wroathe(~wroathe@user/wroathe)
2022-01-19 15:40:14 +0100 <merijn> tomsmeding: That makes sense for sparse items, in my case I'm looking more at dense things. That is most (if not all) of the space is assigned a value
2022-01-19 15:40:17 +0100xkuru(~xkuru@user/xkuru) (Ping timeout: 268 seconds)
2022-01-19 15:40:18 +0100eron(~eron@2804:431:c7c2:3848:2c26:bc50:f8a2:a008)
2022-01-19 15:41:40 +0100 <merijn> So it's more like (in the 3d case) I have a collection of (non-overlapping) volumes and wanna efficiently query "what's the volume of point (x, y, z)?"
2022-01-19 15:42:04 +0100 <merijn> (I guess "what volume does (x, y, z) fall within?" is a more natural formulation)
2022-01-19 15:42:04 +0100shapr(~user@2601:7c0:c37c:46d0:f28:8342:f51d:c5e2) (Remote host closed the connection)
2022-01-19 15:42:17 +0100shapr(~user@2601:7c0:c37c:46d0:d31:791c:8c24:e54b)
2022-01-19 15:42:32 +0100vysn(~vysn@user/vysn) (Ping timeout: 240 seconds)
2022-01-19 15:43:33 +0100 <merijn> Which seems like it should be a solved problem, I just dunno what the solution is called :p
2022-01-19 15:43:37 +0100 <tomsmeding> store a list of neighbour volumes for each volume, and walk towards your destination
2022-01-19 15:43:44 +0100jlamothe(~jlamothe@198.251.61.229)
2022-01-19 15:43:58 +0100 <tomsmeding> more seriously, I don't know of anything better or more recent than a kd tree or bvh
2022-01-19 15:44:35 +0100 <tomsmeding> note that you can make a kd tree adaptive: select its split points depending on the volumes in your set
2022-01-19 15:44:36 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-01-19 15:44:41 +0100 <tomsmeding> instead of always in the middle
2022-01-19 15:44:57 +0100 <tomsmeding> whether that helps depends on your dataset I guess :p
2022-01-19 15:46:36 +0100 <merijn> tomsmeding: Yeah, but then I still need a sensible way to build a (semi-balanced) tree with the kd solution, which is unclear :p
2022-01-19 15:47:53 +0100 <merijn> That's my problem, most of these are talking about partitioning "sets of points" when constructing, but that only makes sense for sparse things
2022-01-19 15:49:51 +0100ardell(~ardell@user/ardell)
2022-01-19 15:50:41 +0100SummerSonw(~The_viole@203.77.49.232) (Quit: Leaving)
2022-01-19 15:51:53 +0100wombat875(~neilfulwi@pool-72-89-24-154.nycmny.fios.verizon.net)
2022-01-19 15:52:06 +0100pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-01-19 15:52:55 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net) (Ping timeout: 256 seconds)
2022-01-19 15:53:25 +0100lavaman(~lavaman@98.38.249.169)
2022-01-19 15:53:44 +0100 <wombat875> \quit
2022-01-19 15:53:46 +0100wombat875(~neilfulwi@pool-72-89-24-154.nycmny.fios.verizon.net) (Client Quit)
2022-01-19 15:54:22 +0100wombat875(~neilfulwi@72.89.24.154)
2022-01-19 15:54:57 +0100wombat875(~neilfulwi@72.89.24.154) (Client Quit)
2022-01-19 15:56:05 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
2022-01-19 15:56:29 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Client Quit)
2022-01-19 15:56:31 +0100slac74781(~slack1256@186.11.27.197)
2022-01-19 15:57:18 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net)
2022-01-19 15:57:37 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 240 seconds)
2022-01-19 15:58:33 +0100max22-(~maxime@2a01cb08833598003263d82d70b82807.ipv6.abo.wanadoo.fr)
2022-01-19 15:58:55 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-01-19 15:59:34 +0100slack1256(~slack1256@191.125.227.223) (Ping timeout: 250 seconds)
2022-01-19 16:00:43 +0100Vajb(~Vajb@2001:999:50:e6be:1e98:9376:d93e:4506)
2022-01-19 16:02:51 +0100Sgeo(~Sgeo@user/sgeo)
2022-01-19 16:05:37 +0100fr33domlover(~fr33@141.226.10.136) (Ping timeout: 240 seconds)
2022-01-19 16:06:03 +0100rembo10_(~rembo10@remulis.com) (Quit: ZNC 1.8.2 - https://znc.in)
2022-01-19 16:06:06 +0100 <merijn> man, I seem to have accidentally stumbled into some really tricky nerd-snipy shit >.>
2022-01-19 16:06:23 +0100rembo10(~rembo10@remulis.com)
2022-01-19 16:07:42 +0100deadmarshal(~deadmarsh@95.38.230.192)
2022-01-19 16:13:17 +0100 <merijn> I stumbled across R-trees, but I think something more efficient should be possible, since I *can* simply split my volumes if needed. But this whole thing requires more thinking than my brain can handle >.>
2022-01-19 16:16:54 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-19 16:16:54 +0100polyphem(~rod@2a02:810d:840:8754:e450:3ca3:b389:687a) (Ping timeout: 250 seconds)
2022-01-19 16:18:33 +0100wmacmil(~wmacmil@83-233-165-97.cust.bredband2.com)
2022-01-19 16:22:50 +0100hugo-hugo
2022-01-19 16:23:35 +0100Guest70(~Guest70@2a00:1fa1:8247:926e:abaa:e5d4:d634:d5d9)
2022-01-19 16:23:55 +0100Guest70(~Guest70@2a00:1fa1:8247:926e:abaa:e5d4:d634:d5d9) ()
2022-01-19 16:23:58 +0100mmhat(~mmh@55d4fa95.access.ecotel.net) (Quit: WeeChat 3.4)
2022-01-19 16:25:10 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-19 16:25:10 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-19 16:25:10 +0100wroathe(~wroathe@user/wroathe)
2022-01-19 16:25:45 +0100LukeHoersten(~LukeHoers@user/lukehoersten)
2022-01-19 16:26:09 +0100darchitect(~darchitec@2a00:23c6:3584:df00:8fb:65a6:c5ec:35ce)
2022-01-19 16:26:32 +0100polyphem(~rod@2a02:810d:840:8754:e450:3ca3:b389:687a)
2022-01-19 16:28:03 +0100cfricke(~cfricke@user/cfricke) (Ping timeout: 256 seconds)
2022-01-19 16:29:25 +0100ec(~ec@gateway/tor-sasl/ec)
2022-01-19 16:29:45 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-19 16:32:12 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-19 16:33:39 +0100ksqsf(~user@134.209.106.31) (Remote host closed the connection)
2022-01-19 16:34:50 +0100ksqsf(~user@2001:da8:d800:611:d4b0:39ea:c0c9:ff22)
2022-01-19 16:38:13 +0100fr33domlover(~fr33@141.226.170.143)
2022-01-19 16:38:53 +0100 <zwro[m]> question: are "bound" variables in let expressions called "closed" variables, and are these terms interchangeable?
2022-01-19 16:41:22 +0100michalz(~michalz@185.246.204.101) (Remote host closed the connection)
2022-01-19 16:42:14 +0100 <merijn> tomsmeding: Oh!
2022-01-19 16:43:02 +0100 <merijn> tomsmeding: I think I *can* reformulate it into a (simple) 1D case, iff I only admit simple, "rectangular" (however that's called in higher dimensions) shapes
2022-01-19 16:43:06 +0100 <merijn> )
2022-01-19 16:43:07 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-19 16:43:31 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-01-19 16:46:12 +0100LukeHoersten(~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-19 16:49:38 +0100albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-01-19 16:52:11 +0100 <zzz> zwro[m]: you mean bound vs free / closed vs _ ?
2022-01-19 16:52:26 +0100 <zwro[m]> zzz: exactly
2022-01-19 16:52:51 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net)
2022-01-19 16:54:37 +0100zebrag(~chris@user/zebrag)
2022-01-19 16:55:45 +0100 <zzz> as i understading there's a suble difference between bound vs free in math and in programming. in programming, a free variable is one that needs to be looked up the function call stack
2022-01-19 16:56:18 +0100 <zzz> no sure if that exactly correlates with all let/where bindings
2022-01-19 16:57:22 +0100d0ku(~d0ku@178.43.152.233.ipv4.supernova.orange.pl) (Ping timeout: 268 seconds)
2022-01-19 16:58:02 +0100 <lortabac> zwro[m]: IIRC a term is called "closed" if it doesn't contain free variables
2022-01-19 16:58:29 +0100 <lortabac> a variable can't be closed, a term can
2022-01-19 16:59:04 +0100 <zwro[m]> i see. are terms called "open" in opposition?
2022-01-19 16:59:36 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net)
2022-01-19 17:00:08 +0100 <zwro[m]> and can we set warnings for closed terms?
2022-01-19 17:01:34 +0100 <zwro[m]> i want to enforce (for stylistic purposes) defining all terms at the highest level
2022-01-19 17:02:52 +0100Topsi(~Tobias@dyndsl-095-033-018-085.ewe-ip-backbone.de)
2022-01-19 17:04:14 +0100 <lortabac> zwro[m]: these are two different things
2022-01-19 17:05:16 +0100 <zzz> which things?
2022-01-19 17:05:22 +0100 <lortabac> you want to emit a warning when let or where is used?
2022-01-19 17:05:30 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2022-01-19 17:05:32 +0100 <lortabac> open/closed and toplevel/nested
2022-01-19 17:06:11 +0100 <zzz> i think they want to avoid let/where bindings without free variables
2022-01-19 17:06:38 +0100 <zzz> force defining them at the highest possile level
2022-01-19 17:07:51 +0100 <lortabac> so for example (f x = y + 1 where y = x + 2) would be allowed and (f = x where x = 1) would emit a warning?
2022-01-19 17:12:04 +0100 <zwro[m]> lortabac: yes
2022-01-19 17:12:20 +0100 <lortabac> I don't think such a warning exists in GHC, but it shouldn't be too hard to implement, I suppose
2022-01-19 17:14:15 +0100jgeerds(~jgeerds@55d4090e.access.ecotel.net)
2022-01-19 17:14:47 +0100 <zzz> i was going to say that's superfulous because ghc probably treats all "closed" bindings the same as top-level but i see a point in zwro[m]'s style
2022-01-19 17:15:34 +0100 <zwro[m]> lortabac: it should be trivial
2022-01-19 17:16:14 +0100 <zwro[m]> how can i make sure the setting doesn't exist yet?
2022-01-19 17:16:24 +0100HyperTimeBreaker(~HyperTime@202.3.77.166)
2022-01-19 17:16:31 +0100MiguelNegrao(~MiguelNeg@2001:818:dc71:d100:9e5a:44ff:fe17:1240) (Quit: Client closed)
2022-01-19 17:17:13 +0100 <zwro[m]> zzz: mostly for conciseness and to avoid duplication, but there are other advantages
2022-01-19 17:17:58 +0100HyperTimeBreaker(~HyperTime@202.3.77.166) (Client Quit)
2022-01-19 17:18:27 +0100 <lortabac> zzz: let expressions can be considered syntactic sugar for lambdas (it is the case in Scheme for example)
2022-01-19 17:19:31 +0100 <lortabac> (let x = 1 in x) is just sugar for ((\x -> x) 1)
2022-01-19 17:20:02 +0100 <lortabac> that's why we can say bound/free for both lambdas and lets
2022-01-19 17:21:51 +0100 <tomsmeding> merijn: cuboidal?
2022-01-19 17:22:02 +0100 <zzz> lortabac: there are some caveats regarding generalization of polymorphic types
2022-01-19 17:22:38 +0100 <EvanR_> is zwro[m] talking about supercombinators
2022-01-19 17:22:39 +0100 <merijn> tomsmeding: Anyway, I realised I'm wrong because I have a partial order that's screwing me over >.>
2022-01-19 17:23:24 +0100 <zwro[m]> EvanR_: am I?
2022-01-19 17:24:10 +0100 <EvanR_> nvm, I'm not sure why f = x where x = 1 would not be allowed
2022-01-19 17:24:15 +0100 <merijn> tomsmeding: I was thinking I could just order by (in 2d land, but generalises to N) by like the "top-most, leftmost point of an interval" and then lookup the greatest one "smaller than my target" and identify the volume it's in.
2022-01-19 17:24:31 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:ac4b:acb4:af59:598f) (Quit: WeeChat 2.8)
2022-01-19 17:24:41 +0100 <merijn> But that doesn't quite work, because a total (lexicographical) order on points gets you the wrong one sometimes
2022-01-19 17:24:55 +0100 <merijn> But a partial order doesn't play nice with a BST
2022-01-19 17:25:28 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-19 17:25:28 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-19 17:25:28 +0100wroathe(~wroathe@user/wroathe)
2022-01-19 17:26:53 +0100 <zwro[m]> EvanR_: i just checked what supercombinators are. i guess that's more useful! that example not being allowed would just be an unfortunate side-effect
2022-01-19 17:27:29 +0100 <zwro[m]> if i'm understanding, any combinator can be trivially turned into a supercombinator, right?
2022-01-19 17:29:12 +0100 <zzz> (lortabac: MonoLocalBinds)
2022-01-19 17:29:26 +0100 <EvanR_> actually, sometimes just "combinator" is what people call a top level thing with no free vars
2022-01-19 17:30:00 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 256 seconds)
2022-01-19 17:30:11 +0100 <zzz> i see
2022-01-19 17:30:17 +0100 <EvanR_> whereas supercombinator is in an implementation context and often has an explicit arity for compiler purposes
2022-01-19 17:30:57 +0100geranim0(~geranim0@modemcable242.171-178-173.mc.videotron.ca)
2022-01-19 17:31:02 +0100 <zzz> haskell needs a compreehensive list of common terminology
2022-01-19 17:32:39 +0100hyiltiz_(~quassel@31.220.5.250) (Ping timeout: 256 seconds)
2022-01-19 17:33:00 +0100hyiltiz(~quassel@31.220.5.250)
2022-01-19 17:33:23 +0100 <zwro[m]> so i guess i was not talking about it, exactly
2022-01-19 17:34:13 +0100 <zwro[m]> i just want to avoid having stuff limited by a function's scope when it has no reason to
2022-01-19 17:34:27 +0100fendor(~fendor@77.119.169.94.wireless.dyn.drei.com)
2022-01-19 17:34:58 +0100 <EvanR_> sounds like xkcd style, there are only so many functions, we should never write the same combinator twice
2022-01-19 17:35:17 +0100 <zwro[m]> ScopedTypeVariables, which i have always on, complicates things
2022-01-19 17:35:21 +0100 <EvanR_> oh oh, there's the birding combinator book
2022-01-19 17:36:01 +0100random-jellyfish(~random-je@user/random-jellyfish)
2022-01-19 17:36:23 +0100 <EvanR_> https://hackage.haskell.org/package/data-aviary haven't thought of this in a while
2022-01-19 17:36:48 +0100eron(~eron@2804:431:c7c2:3848:2c26:bc50:f8a2:a008) (Quit: Client closed)
2022-01-19 17:37:56 +0100 <dolio> The really technical definition is that combinators are defined like `f x y z ... = E` where `E` contains only application and previously defined combinators.
2022-01-19 17:38:07 +0100 <merijn> oh, wait, maybe this is rescuable by using manhattan distance to induce a total ordering!
2022-01-19 17:38:08 +0100 <zwro[m]> EvanR_: xkcd style? now i need a link
2022-01-19 17:38:10 +0100 <dolio> Oh, and the bound variables, of course.
2022-01-19 17:38:28 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-01-19 17:38:46 +0100 <EvanR_> on xkcd's irc network (who has their own irc network anyway) there is a channel where the bot is set up to stop you from using a previously spoken message
2022-01-19 17:38:47 +0100 <dolio> I.E. it's a formalism without lambda expressions.
2022-01-19 17:39:13 +0100 <EvanR_> seems similar to your not wanting to write the same combinator again xD
2022-01-19 17:39:59 +0100 <EvanR_> dolio, but doesn't e.g. Y combinator use lambdas
2022-01-19 17:40:21 +0100 <zzz> EvanR_: is Data.Aviary a reference to Smullyan?
2022-01-19 17:40:53 +0100 <EvanR_> yes
2022-01-19 17:40:59 +0100 <dolio> Not if you define it in a combinator calculus.
2022-01-19 17:41:24 +0100laslmtdwbcs^(~laslmtdwb@wsip-98-188-242-61.mc.at.cox.net)
2022-01-19 17:41:24 +0100 <zzz> how can Y be defined in Haskell?
2022-01-19 17:41:31 +0100 <zzz> fix ?
2022-01-19 17:41:45 +0100 <zzz> you can't excape the let
2022-01-19 17:42:26 +0100 <dolio> I don't have the combinator definition memorized, though, and don't really feel like working it out. :þ
2022-01-19 17:42:34 +0100johnjaye(~pi@154.6.152.74)
2022-01-19 17:42:55 +0100 <johnjaye> i'm looking at a build script and it has names like 'v1-install' as commands for building a haskell project. is that reasonable?
2022-01-19 17:42:59 +0100 <dolio> @pl \f -> (\x -> f (x x)) (\x -> f (x x))
2022-01-19 17:42:59 +0100 <lambdabot> ap (. join id) (. join id)
2022-01-19 17:43:13 +0100 <dolio> @pl (\x -> f (x x)) (\x -> f (x x))
2022-01-19 17:43:16 +0100 <lambdabot> (f . ap id id) (f . ap id id)
2022-01-19 17:43:16 +0100 <lambdabot> optimization suspended, use @pl-resume to continue.
2022-01-19 17:43:36 +0100 <EvanR_> @pl-resume
2022-01-19 17:43:42 +0100 <lambdabot> (f . ap id id) (f . ap id id)
2022-01-19 17:43:42 +0100 <lambdabot> optimization suspended, use @pl-resume to continue.
2022-01-19 17:43:45 +0100 <dolio> :)
2022-01-19 17:43:46 +0100 <maerwald> johnjaye: what do you mean witth reasonable?
2022-01-19 17:43:47 +0100 <EvanR_> nice
2022-01-19 17:43:52 +0100 <EvanR_> partiality monad
2022-01-19 17:44:18 +0100 <EvanR_> could be used for a "loading" screen in a video game
2022-01-19 17:44:30 +0100 <johnjaye> maerwald: i'm trying to figure out if it's an option to cabal, ghc, or something else
2022-01-19 17:44:41 +0100 <johnjaye> man cabal doesn't exist. oops
2022-01-19 17:44:47 +0100 <geekosaur> v1-install would be cabal
2022-01-19 17:45:06 +0100 <geekosaur> https://cabal.readthedocs.io/
2022-01-19 17:45:08 +0100 <johnjaye> ok --help works
2022-01-19 17:45:14 +0100 <johnjaye> i see i there
2022-01-19 17:45:21 +0100 <geekosaur> but the v1-* commands are deprecated at this point
2022-01-19 17:45:25 +0100 <johnjaye> ok
2022-01-19 17:45:38 +0100 <geekosaur> they're a good way to make unsolvable messes
2022-01-19 17:45:45 +0100 <maerwald> johnjaye: cabal man
2022-01-19 17:46:27 +0100 <johnjaye> maerwald: illegal option -l
2022-01-19 17:46:32 +0100 <johnjaye> then some usage message about man. lol
2022-01-19 17:46:34 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-19 17:46:35 +0100 <johnjaye> on bsd
2022-01-19 17:46:55 +0100 <maerwald> yeah, it's a bug https://github.com/haskell/cabal/issues/7714
2022-01-19 17:47:25 +0100 <zzz> @type \f -> (\x -> f (x x)) (\x -> f (x x))
2022-01-19 17:47:26 +0100 <lambdabot> error:
2022-01-19 17:47:26 +0100 <lambdabot> • Occurs check: cannot construct the infinite type: t0 ~ t0 -> t
2022-01-19 17:47:26 +0100 <lambdabot> • In the first argument of ‘x’, namely ‘x’
2022-01-19 17:47:31 +0100 <zzz> ^
2022-01-19 17:48:33 +0100zmt01(~zmt00@user/zmt00)
2022-01-19 17:48:37 +0100 <zzz> @type ap (. join id) (. join id)
2022-01-19 17:48:38 +0100 <lambdabot> error:
2022-01-19 17:48:38 +0100 <lambdabot> • Occurs check: cannot construct the infinite type: a0 ~ a0 -> b
2022-01-19 17:48:38 +0100 <lambdabot> Expected type: (a0 -> b) -> (a0 -> b) -> b
2022-01-19 17:48:40 +0100enicarenikar
2022-01-19 17:49:04 +0100 <zzz> computer says no
2022-01-19 17:49:57 +0100 <zzz> dolio EvanR_
2022-01-19 17:50:06 +0100 <ksqsf> you'll need some recursive type to guide the type checking
2022-01-19 17:50:24 +0100 <ksqsf> a simpler and more evil way is to use unsafeCoerce
2022-01-19 17:50:51 +0100Sgeo_(~Sgeo@user/sgeo)
2022-01-19 17:50:57 +0100Sgeo(~Sgeo@user/sgeo) (Ping timeout: 240 seconds)
2022-01-19 17:51:04 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
2022-01-19 17:51:07 +0100 <zzz> ksqsf: can we make it typecheck with a recursive type?
2022-01-19 17:51:08 +0100 <EvanR_> zzz, you wrote a Y combinator for untyped lambda calculus
2022-01-19 17:51:23 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-01-19 17:51:30 +0100 <zzz> EvanR_: yes, that's my point
2022-01-19 17:51:31 +0100 <EvanR_> many things from untyped lambda calculus don't work as is when you add types
2022-01-19 17:52:26 +0100 <tomsmeding> merijn: probably a bad idea, but (in 2d land): store for each rect with left-top (x,y) the other rect with left-top (a,b) such that a<=x, b>=y, and b is minimal with tiebreaker (a is maximal). Also store the symmetric thing on the top. Then by following these "other rect" pointers you kind of walk a convex hull thing around your query point, if you start with a rect with left-top (x,y) with x <=
2022-01-19 17:52:26 +0100 <tomsmeding> queryx and y <= queryy, optimised by some metric. Not sure if this actually works
2022-01-19 17:52:35 +0100 <ksqsf> zzz: yes, try newtype Mu a = Mu (Mu a -> a)
2022-01-19 17:54:04 +0100 <tomsmeding> @let newtype Mu a = Mu (Mu a -> a)
2022-01-19 17:54:05 +0100 <lambdabot> Defined.
2022-01-19 17:54:21 +0100 <tomsmeding> @type \f -> (\(Mu x) -> f (x (Mu x))) (\x -> f (x (Mu x)))
2022-01-19 17:54:22 +0100 <lambdabot> error:
2022-01-19 17:54:22 +0100 <lambdabot> • Couldn't match expected type ‘Mu t’
2022-01-19 17:54:22 +0100 <lambdabot> with actual type ‘(Mu t -> t) -> t1’
2022-01-19 17:54:33 +0100burnsidesLlama(~burnsides@dhcp168-042.wadham.ox.ac.uk)
2022-01-19 17:54:37 +0100jgeerds(~jgeerds@55d4090e.access.ecotel.net) (Ping timeout: 240 seconds)
2022-01-19 17:54:46 +0100 <tomsmeding> @type \f -> (\x -> f (x (Mu x))) (\(Mu x) -> f (x (Mu x)))
2022-01-19 17:54:47 +0100 <lambdabot> (a -> a) -> a
2022-01-19 17:55:01 +0100 <merijn> tomsmeding: That's what I was thinking, but I don't think I can get a good enough ordering for "closest, left-top"
2022-01-19 17:55:18 +0100 <merijn> Because lexicographical ordering produces the wrong order
2022-01-19 17:55:25 +0100 <tomsmeding> also I now realise that this suffers from combinatorial explosion if d > 2
2022-01-19 17:55:44 +0100 <dolio> Ruling out the Y combinator is one of the reasons types were invented.
2022-01-19 17:55:53 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
2022-01-19 17:55:59 +0100 <merijn> If you can smash the ordering into a 1-d total order the problem is "solved"
2022-01-19 17:56:18 +0100 <merijn> But I can't make that work
2022-01-19 17:56:19 +0100Vajb(~Vajb@2001:999:50:e6be:1e98:9376:d93e:4506) (Read error: Connection reset by peer)
2022-01-19 17:57:16 +0100 <johnjaye> is building with ghc -O1 a lot slower than with -O0?
2022-01-19 17:57:23 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-01-19 17:57:27 +0100 <johnjaye> ah there's a #ghc channel ok
2022-01-19 17:57:32 +0100 <geekosaur> not usually a "lot" slower
2022-01-19 17:57:43 +0100 <geekosaur> note that #ghc is a dev channel, they send user questions here
2022-01-19 17:57:50 +0100 <johnjaye> ok. i notice my processors aren't really working that hard
2022-01-19 17:58:01 +0100 <johnjaye> like one goes to 100% every few seconds
2022-01-19 17:58:26 +0100Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-01-19 17:58:56 +0100 <tomsmeding> johnjaye: soundsd like you're compiling using one thread, which makes sense since ghc compiles one component (library or executable) single-threaded
2022-01-19 17:59:09 +0100 <tomsmeding> the build parallelism is in compiling multiple packages in parallel, not really within one package
2022-01-19 17:59:16 +0100burnsidesLlama(~burnsides@dhcp168-042.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-19 17:59:37 +0100fr33domlover(~fr33@141.226.170.143) (Ping timeout: 240 seconds)
2022-01-19 18:00:24 +0100neverfindme(~hayden@158.123.160.43)
2022-01-19 18:00:41 +0100neverfindme(~hayden@158.123.160.43) (Max SendQ exceeded)
2022-01-19 18:00:46 +0100 <tomsmeding> merijn: also my idea doesn't work, found a counterexample (in the walking even, not the selection of the first rect)
2022-01-19 18:01:01 +0100neverfindme(~hayden@158.123.160.43)
2022-01-19 18:01:50 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-19 18:01:51 +0100mbuf(~Shakthi@110.225.233.59) (Quit: Leaving)
2022-01-19 18:02:01 +0100 <merijn> tomsmeding: it feels like there *should* be an efficient/simple solution, but I just can't make it work :(
2022-01-19 18:02:27 +0100 <johnjaye> i see
2022-01-19 18:02:55 +0100 <tomsmeding> johnjaye: there technically is a -j argument to ghc, but in my experience that is very successful in using more cores and keeping total compilation time roughly constant
2022-01-19 18:03:14 +0100neverfindme(~hayden@158.123.160.43) (Remote host closed the connection)
2022-01-19 18:03:31 +0100neverfindme(~hayden@158.123.160.43)
2022-01-19 18:03:44 +0100lbseale(~ep1ctetus@user/ep1ctetus)
2022-01-19 18:03:59 +0100neverfindme(~hayden@158.123.160.43) (Remote host closed the connection)
2022-01-19 18:05:11 +0100 <tomsmeding> (that's a different -j argument than the one to cabal; the cabal one is on by default and is for cross-package parallelism and works well)
2022-01-19 18:05:43 +0100 <tomsmeding> merijn: combination of these three examples defeated my idea https://tomsmeding.com/ss/get/tomsmeding/XEkacx
2022-01-19 18:06:05 +0100random-jellyfish(~random-je@user/random-jellyfish) (Ping timeout: 256 seconds)
2022-01-19 18:06:24 +0100 <[itchyjunk]> Trying to see if i remember foldr. it took a function , element of type a, list [a] and returned [b] so foldr :: a -> a -> b -> a -> [a] -> [b] ?
2022-01-19 18:06:27 +0100 <[itchyjunk]> :t foldr
2022-01-19 18:06:28 +0100 <lambdabot> Foldable t => (a -> b -> b) -> b -> t a -> b
2022-01-19 18:06:33 +0100 <[itchyjunk]> ree
2022-01-19 18:06:39 +0100 <[itchyjunk]> thats what i had first lol
2022-01-19 18:06:55 +0100 <tomsmeding> missing some parens in your suggestion
2022-01-19 18:06:56 +0100 <[itchyjunk]> hmm
2022-01-19 18:07:02 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-19 18:07:02 +0100 <[itchyjunk]> oh right, oops
2022-01-19 18:07:06 +0100 <tomsmeding> a -> b -> c is not the same as (a -> b) -> c
2022-01-19 18:07:12 +0100 <tomsmeding> though it _is_ the same as a -> (b -> c)
2022-01-19 18:07:30 +0100 <[itchyjunk]> right, the second one suggests a function (a -> b)
2022-01-19 18:07:37 +0100 <tomsmeding> not only suggests
2022-01-19 18:07:38 +0100 <[itchyjunk]> right associativity
2022-01-19 18:07:52 +0100 <[itchyjunk]> implies is a better word, maybe
2022-01-19 18:08:02 +0100 <tomsmeding> 'a -> b -> c' = 'a -> (b -> c)' can be remembered by knowing that \x -> \y -> E is the same as \x y -> E
2022-01-19 18:08:41 +0100 <[itchyjunk]> hmm
2022-01-19 18:08:42 +0100 <EvanR_> a -> (b -> c) could be read as `a' implies `b -> c' xD
2022-01-19 18:08:56 +0100 <tomsmeding> EvanR_: or is that a => (b -> c) :p
2022-01-19 18:09:02 +0100 <johnjaye> incredibly the command line argument to ghc is 2,000 characters long
2022-01-19 18:09:13 +0100 <tomsmeding> or are => and -> secretly the same thing? hmmmmmmmmmm
2022-01-19 18:09:17 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds)
2022-01-19 18:09:21 +0100EvanR_dumps out a big bin of arrow glyphs on the table and starts searching through them
2022-01-19 18:09:24 +0100 <johnjaye> i think it put every submodule to build for the project on the command argument
2022-01-19 18:09:25 +0100 <zzz> ksqsf: tomsmeding: wow
2022-01-19 18:09:34 +0100 <tomsmeding> johnjaye: it does :p
2022-01-19 18:09:44 +0100nvmd(~nvmd@user/nvmd) (Quit: Later, nerds.)
2022-01-19 18:09:56 +0100 <tomsmeding> cabal collects what modules belong in the component, then passes the full list to ghc, which then compiles them all
2022-01-19 18:10:02 +0100 <[itchyjunk]> :t unfoldr
2022-01-19 18:10:04 +0100 <johnjaye> i see
2022-01-19 18:10:04 +0100 <lambdabot> (b -> Maybe (a, b)) -> b -> [a]
2022-01-19 18:10:10 +0100 <[itchyjunk]> now this monstrosity..
2022-01-19 18:10:14 +0100 <tomsmeding> the reason why it's one ghc process instead of one per module is that ghc does a _lot_ of caching of intermediate products
2022-01-19 18:10:24 +0100 <[itchyjunk]> it takes a function and another argument and returns a list
2022-01-19 18:10:59 +0100 <tomsmeding> > unfoldr (\x -> if x > 10 then Nothing else Just (-x, x + 1)) 1
2022-01-19 18:11:01 +0100 <lambdabot> [-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]
2022-01-19 18:11:01 +0100 <[itchyjunk]> ah, i need to find function with type b -> Maybe (a,b) first!
2022-01-19 18:11:08 +0100 <zzz> dolio: if types were invented to rule out the Y combinator, howcome we can still define it?
2022-01-19 18:11:14 +0100 <johnjaye> i guess it's time to use the old fashioned progress indicator - du
2022-01-19 18:11:25 +0100 <tomsmeding> zzz: because we then went on and introduced recursive types
2022-01-19 18:11:39 +0100tito(tito@tilde.team)
2022-01-19 18:11:44 +0100 <tomsmeding> we can also leave those out; then you end up with the simply-typed lambda calculus, in which general recursion is not expressible
2022-01-19 18:12:35 +0100 <[itchyjunk]> okay, i can read you function up there i think, the \x one. but wouldn't it keep checking higher values of x forever and keep getting Nothing back?
2022-01-19 18:12:40 +0100 <[itchyjunk]> how does it know when to stop?
2022-01-19 18:12:43 +0100 <zzz> what wuold be a good book to read to introduce myself to these concepts?
2022-01-19 18:12:44 +0100 <tomsmeding> @src unfold
2022-01-19 18:12:44 +0100 <lambdabot> Source not found. Just what do you think you're doing Dave?
2022-01-19 18:12:47 +0100 <dolio> zzz: You can't. It's re-added as a basic thing when desired.
2022-01-19 18:12:51 +0100 <EvanR_> haskell restores the chaos of uncontrolled recursion with recursive bindings and recursive ADTs
2022-01-19 18:13:07 +0100 <tomsmeding> [itchyjunk]: https://hackage.haskell.org/package/base-4.14.0.0/docs/src/Data.OldList.html#unfoldr
2022-01-19 18:13:08 +0100 <[itchyjunk]> ahh, i'll file that under magic for now
2022-01-19 18:13:18 +0100 <EvanR_> but recursive ADTs are nice because they are lazy
2022-01-19 18:13:27 +0100 <tomsmeding> oh that's not very helpful with build there
2022-01-19 18:13:45 +0100 <tomsmeding> [itchyjunk]: read (:) instead of c, and [] instead of n
2022-01-19 18:14:15 +0100 <EvanR_> ADTs are necessarily guarded recursion
2022-01-19 18:14:25 +0100 <EvanR_> unlike let x = x in x
2022-01-19 18:14:52 +0100 <johnjaye> well that didn't work either. guess i'll go break and come back and hope ghc finished properly
2022-01-19 18:15:09 +0100 <tomsmeding> johnjaye: what are you even compiling :p
2022-01-19 18:15:15 +0100 <johnjaye> tomsmeding: agda
2022-01-19 18:15:26 +0100 <tomsmeding> and getting no progress feedback?
2022-01-19 18:15:29 +0100 <johnjaye> yes
2022-01-19 18:15:36 +0100 <zzz> EvanR_: but let x = f x in x is ok
2022-01-19 18:15:42 +0100 <tomsmeding> that's very odd
2022-01-19 18:15:47 +0100 <EvanR_> it depends on f
2022-01-19 18:15:56 +0100phma_phma
2022-01-19 18:16:03 +0100 <johnjaye> says Starting Agda-2.6.3 (all, legacy fallback)
2022-01-19 18:16:08 +0100 <johnjaye> then building. then nothing
2022-01-19 18:16:11 +0100 <tomsmeding> ah right, as a dependency
2022-01-19 18:16:14 +0100 <zzz> EvanR_: oh i see
2022-01-19 18:16:17 +0100 <zzz> nice
2022-01-19 18:16:18 +0100 <[itchyjunk]> I need an exercise where i can practice writing functions with Maybe blah in the return type. :x what do i google for?
2022-01-19 18:16:28 +0100 <tomsmeding> johnjaye: yeah it's probably working, agda is a _really_ large package
2022-01-19 18:16:41 +0100 <johnjaye> ok. i should probably learn how cabal works
2022-01-19 18:16:43 +0100 <[itchyjunk]> adga is written in haskell?
2022-01-19 18:16:45 +0100 <johnjaye> that might help
2022-01-19 18:16:49 +0100 <johnjaye> [itchyjunk]: maybe
2022-01-19 18:16:53 +0100 <tomsmeding> yes
2022-01-19 18:16:54 +0100 <[itchyjunk]> hmmm
2022-01-19 18:16:57 +0100 <[itchyjunk]> i didn't know that
2022-01-19 18:17:25 +0100 <tomsmeding> idris too, raku too, ghc itself too, whitespace too
2022-01-19 18:17:28 +0100 <johnjaye> only 55.1% haskell
2022-01-19 18:17:36 +0100 <[itchyjunk]> never heard of any of those :D
2022-01-19 18:17:44 +0100 <johnjaye> 26.7% agda
2022-01-19 18:17:53 +0100 <ksqsf> the law of haskell syntax: if a language looks like haskell, its compiler is probably written in haskell
2022-01-19 18:18:06 +0100 <EvanR_> wait, I thought that was law of perl
2022-01-19 18:18:10 +0100 <zzz> [itchyjunk]: you should know ghc at least
2022-01-19 18:18:11 +0100 <johnjaye> tomsmeding: the raku one seems odd to me. wouldn't that defeat self-hosting?
2022-01-19 18:18:14 +0100 <[itchyjunk]> I don't really know what agda looks like other than seeing it on youtube
2022-01-19 18:18:16 +0100 <geekosaur> mm, raku's not written in haskell. pugs was
2022-01-19 18:18:25 +0100 <[itchyjunk]> zzz, i know of ghci
2022-01-19 18:18:45 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2022-01-19 18:18:48 +0100 <johnjaye> someone linked me to a youtube video about agda but i don't remember. it was like CS410 and had a whiteboard
2022-01-19 18:18:59 +0100 <johnjaye> yes one of those types of vids
2022-01-19 18:19:04 +0100 <[itchyjunk]> i watched it on that computerphile video.
2022-01-19 18:19:07 +0100 <zzz> [itchyjunk]: ghci stands for ghc interactive [environment]
2022-01-19 18:19:13 +0100ec(~ec@gateway/tor-sasl/ec)
2022-01-19 18:19:14 +0100 <tomsmeding> geekosaur: ah, I misremembered
2022-01-19 18:19:21 +0100 <[itchyjunk]> the claim was you can turn run time type error into compile time type error
2022-01-19 18:19:31 +0100 <zzz> [itchyjunk]: ghc is the haskell compiler you're probably using
2022-01-19 18:19:53 +0100 <johnjaye> i'm using ghc right now
2022-01-19 18:19:55 +0100 <[itchyjunk]> zzz, right. i still need to learn to compile my stuff :< its on the todo
2022-01-19 18:19:57 +0100 <tomsmeding> johnjaye: seems like all the .agda files are in test/
2022-01-19 18:19:57 +0100 <zzz> the glorious/glasgow haskell compiler
2022-01-19 18:20:28 +0100 <monochrom> [itchyjunk]: Have you done this? Recall that "maximum []" is undefined. Implement a "nicerMaximum :: Ord a => [a] -> Maybe a" such that nicerMaximum [] = Nothing, nicerMaximum non_empty_list = Just (the answer).
2022-01-19 18:20:49 +0100 <johnjaye> tomsmeding: do you think it will go way faster i if i turn off tests?
2022-01-19 18:21:03 +0100 <tomsmeding> johnjaye: turn off which tests how exactly?
2022-01-19 18:21:18 +0100 <[itchyjunk]> Oh i haven't learned maximum. so i could work on this. i suppose i take a list an return the largest element in it
2022-01-19 18:21:22 +0100 <tomsmeding> johnjaye: also, what process is taking cpu at the moment?
2022-01-19 18:21:31 +0100 <monochrom> yeah
2022-01-19 18:21:45 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-19 18:23:16 +0100 <johnjaye> it involves --ghc-options=O0
2022-01-19 18:23:32 +0100tomku(~tomku@user/tomku) (Ping timeout: 240 seconds)
2022-01-19 18:23:41 +0100 <johnjaye> ghc is taking 100% of one cpu
2022-01-19 18:23:44 +0100 <tomsmeding> johnjaye: the command is ghc with flags? Then it's still building
2022-01-19 18:23:55 +0100tomku(~tomku@user/tomku)
2022-01-19 18:23:59 +0100 <tomsmeding> I don't think it will be running any tests unless you specifically asked it somehow
2022-01-19 18:24:08 +0100 <johnjaye> no i mean the makefile has an option for a quick build. and the quick bu ild is adding --ghc-options=O0
2022-01-19 18:24:23 +0100lavaman(~lavaman@98.38.249.169)
2022-01-19 18:24:28 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-19 18:24:28 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-19 18:24:28 +0100wroathe(~wroathe@user/wroathe)
2022-01-19 18:24:51 +0100 <tomsmeding> with O0 the resulting Agda binary will be a lot slower
2022-01-19 18:24:54 +0100 <ksqsf> Agda sure takes a long time to build, but I don't recall the compile time being so bad
2022-01-19 18:25:26 +0100 <ksqsf> probably due to GHC 9 being faster
2022-01-19 18:25:31 +0100 <tomsmeding> johnjaye: it has to build all these modules https://github.com/agda/agda/blob/master/Agda.cabal#L287-L645
2022-01-19 18:26:18 +0100 <tomsmeding> johnjaye: if you're on linux, open htop, select the ghc process taking cpu, and press the L key, then look at which .hs file it's currently looking at
2022-01-19 18:26:27 +0100 <johnjaye> ksqsf: how did you know i was using ghc-8.10.7?
2022-01-19 18:26:41 +0100 <tomsmeding> doesn't tell you much about how far it is, but it should show progress :p
2022-01-19 18:26:45 +0100econo(uid147250@user/econo)
2022-01-19 18:26:50 +0100 <tomsmeding> s/progress/action/
2022-01-19 18:27:57 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41)
2022-01-19 18:28:02 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
2022-01-19 18:28:50 +0100throwaaaa[m](~throwaaaa@2001:470:69fc:105::1:6fe6)
2022-01-19 18:28:56 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-19 18:28:57 +0100alp(~alp@user/alp) (Ping timeout: 240 seconds)
2022-01-19 18:29:19 +0100razetime(~quassel@49.207.203.87) (Ping timeout: 256 seconds)
2022-01-19 18:31:12 +0100burnsidesLlama(~burnsides@dhcp168-042.wadham.ox.ac.uk)
2022-01-19 18:31:58 +0100 <[itchyjunk]> I tried to write the regular version of maximum first, it's kinda works but it seems to have a weird issue
2022-01-19 18:31:59 +0100 <[itchyjunk]> https://bpa.st/TRLA
2022-01-19 18:32:19 +0100 <[itchyjunk]> i tried "apple", [1..10], [1..100]. works fine for first 2
2022-01-19 18:32:32 +0100 <[itchyjunk]> the thrid one just freezes
2022-01-19 18:33:10 +0100Akiva(~Akiva@user/Akiva)
2022-01-19 18:33:40 +0100 <[itchyjunk]> myMaximum [2,1,6,0,3]
2022-01-19 18:33:40 +0100 <[itchyjunk]> 6
2022-01-19 18:33:57 +0100slowButPresent(~slowButPr@user/slowbutpresent)
2022-01-19 18:34:01 +0100 <[itchyjunk]> So works for some list, but definately not for myMaximum [1..100] and i am wondering where i went wrong
2022-01-19 18:34:15 +0100kjak(~kjak@pool-108-45-56-21.washdc.fios.verizon.net)
2022-01-19 18:34:15 +0100 <tomsmeding> try 'myMaximum [1..20]'
2022-01-19 18:34:30 +0100 <monochrom> OK, do you know the efficiency difference between "f (n+1) = let y = f n in y+y" and "f (n+1) = f n + f n"?
2022-01-19 18:34:38 +0100 <[itchyjunk]> that worked but took a second.
2022-01-19 18:34:49 +0100 <[itchyjunk]> i do not know the efficiency difference there :<
2022-01-19 18:34:53 +0100 <monochrom> That is, one of them takes time proportional to n, the other exponential time.
2022-01-19 18:34:57 +0100tomsmedingis happy to have guessed the right number there
2022-01-19 18:35:03 +0100xb0o2(~xb0o2@user/xb0o2) (Quit: Client closed)
2022-01-19 18:35:11 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
2022-01-19 18:35:31 +0100 <[itchyjunk]> ah i will file this under complexity theory and move on then :x
2022-01-19 18:35:31 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-01-19 18:35:50 +0100 <tomsmeding> first one: f 2 = let y = (let y = (let y = f 0 in y+y) in y+y) in y+y
2022-01-19 18:36:17 +0100 <tomsmeding> ahem, f 3 is that
2022-01-19 18:36:36 +0100 <tomsmeding> second one: f 3 = ((f 0 + f 0) + (f 0 + f 0)) + ((f 0 + f 0) + (f 0 + f 0))
2022-01-19 18:36:42 +0100 <monochrom> This one is very easy baby-level complexity.
2022-01-19 18:37:20 +0100 <monochrom> If you use "f (n+1) = f n + f n", f n makes 2^n calls to f 0.
2022-01-19 18:37:26 +0100fr33domlover(~fr33@141.226.170.143)
2022-01-19 18:38:00 +0100burnsidesLlama(~burnsides@dhcp168-042.wadham.ox.ac.uk) (Ping timeout: 256 seconds)
2022-01-19 18:38:52 +0100Guest80(~Guest80@host-95-245-231-154.retail.telecomitalia.it)
2022-01-19 18:39:31 +0100 <monochrom> This is also why DRY is important.
2022-01-19 18:39:41 +0100 <[itchyjunk]> right, it makes 2^n calls for all f n it seems
2022-01-19 18:39:55 +0100 <[itchyjunk]> hmm my function looks pretty dry :x
2022-01-19 18:40:09 +0100 <monochrom> OK, why are you saying "myMaximum xs" twice?
2022-01-19 18:40:27 +0100 <monochrom> In the same way my "f (n+1) = f n + f n" says "f n" twice?
2022-01-19 18:40:38 +0100 <[itchyjunk]> oh
2022-01-19 18:42:17 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 240 seconds)
2022-01-19 18:42:20 +0100 <monochrom> I have had students who, for other problems, said "f (x:xs) = .... f xs .... f xs .... f xs ...", so, 3 times.
2022-01-19 18:42:35 +0100 <[itchyjunk]> https://bpa.st/B2XQ
2022-01-19 18:42:51 +0100 <monochrom> OK good.
2022-01-19 18:43:10 +0100 <monochrom> Did you also know: 2-argument "max" exists >:)
2022-01-19 18:43:20 +0100 <[itchyjunk]> no i did not
2022-01-19 18:43:46 +0100 <monochrom> "Based on your past searches, Amazon thinks you may be interested in..."
2022-01-19 18:43:54 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net)
2022-01-19 18:45:12 +0100 <[itchyjunk]> oh max blah blah returns maximum of two
2022-01-19 18:45:33 +0100 <[itchyjunk]> right, i saw that. i used somethign similar to find the longest length of nodes in itchyTree
2022-01-19 18:46:18 +0100 <EvanR_> max is cool, it can potentially return an answer without knowing everything about the arguments, which is important if the arguments are infinite or otherwise inconvenient to get all of
2022-01-19 18:47:20 +0100 <EvanR_> where as maximum can't return if you give it an empty list or an infinite list
2022-01-19 18:47:34 +0100 <janus> EvanR_: can't (<>) of Max do the same?
2022-01-19 18:48:18 +0100 <janus> sconcat only works for NonEmpty lists, so that issue is also taken care of
2022-01-19 18:48:48 +0100 <janus> NonEmpty also supports infinite lists, i guess
2022-01-19 18:49:33 +0100 <EvanR_> isn't <> of Max just max
2022-01-19 18:50:04 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
2022-01-19 18:50:15 +0100 <EvanR_> but yeah any combination of maxes also work
2022-01-19 18:50:23 +0100 <EvanR_> finite
2022-01-19 18:50:39 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net)
2022-01-19 18:50:59 +0100 <Guest80> does anyone have any experience using Haskell on Mac M1 and VSCode? I'm getting some weird "relocateSection: unexpected internal relocation type 10" errors
2022-01-19 18:51:14 +0100 <janus> EvanR_: yes https://hackage.haskell.org/package/base-4.16.0.0/docs/src/Data.Semigroup.html#line-238
2022-01-19 18:51:27 +0100Major_Biscuit(~MajorBisc@c-001-018-021.client.tudelft.eduvpn.nl) (Ping timeout: 268 seconds)
2022-01-19 18:51:39 +0100 <janus> Guest80: which version of ghc are you using?
2022-01-19 18:51:55 +0100 <EvanR_> semigroups in general are cool
2022-01-19 18:52:07 +0100 <Guest80> 8.10.7
2022-01-19 18:52:16 +0100 <Guest80> (sorry I'm not used to IRC)
2022-01-19 18:52:24 +0100 <geekosaur> also which version of llvm?
2022-01-19 18:52:47 +0100 <geekosaur> (and where did you get it?)
2022-01-19 18:53:06 +0100CiaoSen(~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-01-19 18:53:46 +0100 <[itchyjunk]> this seems to work : https://bpa.st/PSQA
2022-01-19 18:53:47 +0100Jing(~hedgehog@240e:390:7c53:a7e1:84bf:ceba:6161:c1f6) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-19 18:53:56 +0100 <Guest80> This is what I get running llvm-gcc --version
2022-01-19 18:53:57 +0100 <Guest80> Apple clang version 13.0.0 (clang-1300.0.29.30)
2022-01-19 18:53:57 +0100 <Guest80> Target: arm64-apple-darwin21.2.0
2022-01-19 18:54:17 +0100 <[itchyjunk]> althought this makes me wonder how you would use the result of improvedMaximum for a function that wants type `a` as parameter and not `Just a`
2022-01-19 18:54:26 +0100Henson(~kvirc@107-179-133-201.cpe.teksavvy.com) (Ping timeout: 256 seconds)
2022-01-19 18:55:04 +0100ksqsf(~user@2001:da8:d800:611:d4b0:39ea:c0c9:ff22) (Ping timeout: 250 seconds)
2022-01-19 18:55:06 +0100 <Guest80> I installed my GHC from brew, I believe
2022-01-19 18:56:19 +0100DNH(~DNH@2a02:8108:1100:16d8:edf9:3833:cff9:92b3) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-19 18:56:19 +0100 <Guest80> from a bit of digging around it looks like there is a missing case in ghc/MachO.hs, in GHC, type 10 seems to be ARM64_RELOC_ADDEND
2022-01-19 18:56:32 +0100 <Guest80> but I'm not really familiar with the compiler
2022-01-19 18:58:13 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Ping timeout: 256 seconds)
2022-01-19 18:58:46 +0100 <fgaz> johnjaye: if you want to see building progress at the module level _and_ disable parallelism you can build with -j1
2022-01-19 18:59:17 +0100neurocyte0917090(~neurocyte@IP-195080055024.dynamic.medianet-world.de)
2022-01-19 18:59:17 +0100neurocyte0917090(~neurocyte@IP-195080055024.dynamic.medianet-world.de) (Changing host)
2022-01-19 18:59:17 +0100neurocyte0917090(~neurocyte@user/neurocyte)
2022-01-19 18:59:57 +0100burnsidesLlama(~burnsides@dhcp168-042.wadham.ox.ac.uk)
2022-01-19 19:01:19 +0100Guest5233(~Guest52@80-100-97-100.ip.xs4all.nl) (Ping timeout: 268 seconds)
2022-01-19 19:03:53 +0100johnjaye(~pi@154.6.152.74) (Ping timeout: 256 seconds)
2022-01-19 19:05:16 +0100 <janus> Guest80: i don't think many in here are super familiar with the compiler, you could try asking in #ghc regarding your patch
2022-01-19 19:08:30 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 250 seconds)
2022-01-19 19:08:32 +0100 <Guest80> janus: thanks, I'll give it a try
2022-01-19 19:09:37 +0100fr33domlover(~fr33@141.226.170.143) (Quit: fr33domlover)
2022-01-19 19:10:08 +0100 <supersven> Guest80: You may want to try a newer version of GHC. AFAIK there were many changes on the AARCH support lately.
2022-01-19 19:12:26 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-19 19:12:36 +0100 <Guest80> supersven: that would be great, I'll try
2022-01-19 19:12:57 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net) (Ping timeout: 256 seconds)
2022-01-19 19:13:20 +0100ksqsf(~user@2001:da8:d800:611:d4b0:39ea:c0c9:ff22)
2022-01-19 19:13:20 +0100Henson(~kvirc@107-179-133-201.cpe.teksavvy.com)
2022-01-19 19:14:30 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-01-19 19:15:52 +0100Codaraxis_(~Codaraxis@user/codaraxis) (Ping timeout: 250 seconds)
2022-01-19 19:15:57 +0100alp(~alp@user/alp)
2022-01-19 19:16:17 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480::41) (Ping timeout: 240 seconds)
2022-01-19 19:16:39 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-19 19:16:39 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-19 19:16:39 +0100wroathe(~wroathe@user/wroathe)
2022-01-19 19:16:42 +0100 <Guest80> supersven: by newer version do you mean GHC version 9 or above?
2022-01-19 19:17:20 +0100 <geekosaur> I would avoid 9.2.1: it has native (instead if LLVM) support but severe bugs were found in its code generation post-release
2022-01-19 19:17:27 +0100 <geekosaur> 9.0.2 might work better
2022-01-19 19:17:36 +0100 <geekosaur> *instead of
2022-01-19 19:18:37 +0100ksqsf(~user@2001:da8:d800:611:d4b0:39ea:c0c9:ff22) (Ping timeout: 240 seconds)
2022-01-19 19:18:39 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-19 19:19:49 +0100 <geekosaur> there was a bit of a bobble with releases through that whole period so 9.0.2 is actually the most recent version of ghc. 9.2.2 is due later this month, I think
2022-01-19 19:20:57 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 240 seconds)
2022-01-19 19:22:31 +0100random-jellyfish(~random-je@user/random-jellyfish)
2022-01-19 19:22:35 +0100 <Guest80> geekosaur: thanks, sorry for the newbie question but how do I install GHC 9.0.2 on an M1? I can't see binaries for M1, do I need to compile it from source?
2022-01-19 19:23:38 +0100 <geekosaur> in general we use ghcup instead of brew or other platform repo to install ghc these days
2022-01-19 19:24:07 +0100 <geekosaur> it's possible brew has a cask (I think that's the right term?) for it
2022-01-19 19:24:14 +0100Akiva(~Akiva@user/Akiva)
2022-01-19 19:24:23 +0100 <maerwald> also make sure to install 9.2.1, because that's the only one with native codegen... the others require llvm and may cause linker bugs
2022-01-19 19:24:44 +0100 <geekosaur> native codegen has sign extension bugs and produces bad code :(
2022-01-19 19:24:49 +0100 <maerwald> GG
2022-01-19 19:24:52 +0100 <yushyin> but also avoid 9.2.1 :)
2022-01-19 19:24:58 +0100 <maerwald> ok, so don't install Haskell
2022-01-19 19:25:26 +0100 <EvanR_> obviously ghc is shit and we should start writing a new compiler
2022-01-19 19:25:32 +0100 <geekosaur> glwt
2022-01-19 19:25:35 +0100 <EvanR_> lol
2022-01-19 19:25:36 +0100 <Guest80> lol
2022-01-19 19:26:03 +0100 <geekosaur> although sometimes I really wish jhc hadn't dropped off into the ether
2022-01-19 19:27:13 +0100mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 268 seconds)
2022-01-19 19:28:38 +0100mikoto-chan(~mikoto-ch@213.177.151.239)
2022-01-19 19:28:49 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 256 seconds)
2022-01-19 19:29:17 +0100Akiva(~Akiva@user/Akiva) (Ping timeout: 240 seconds)
2022-01-19 19:29:52 +0100n3rdy1(~n3rdy1@2600:1700:4570:3480:1b88:50f:dae0:9293)
2022-01-19 19:30:23 +0100 <Guest80> how do I specify GHC version on GHCup?
2022-01-19 19:30:43 +0100 <Guest80> the command curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh.  reinstalled 8.10.7 for me
2022-01-19 19:30:58 +0100 <maerwald> Guest80: https://www.haskell.org/ghcup/guide/#basic-usage
2022-01-19 19:31:31 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-19 19:31:39 +0100ksqsf(~user@2001:da8:d800:611:5d60:36d8:624a:54af)
2022-01-19 19:33:32 +0100jkaye(~jkaye@2601:281:200:1958:cc69:95b3:52f2:6773) (Ping timeout: 240 seconds)
2022-01-19 19:33:55 +0100mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds)
2022-01-19 19:35:42 +0100fizzsegfaultbuzz(~segfaultf@135-180-0-138.static.sonic.net)
2022-01-19 19:35:54 +0100mikoto-chan(~mikoto-ch@213.177.151.239)
2022-01-19 19:36:14 +0100ksqsf(~user@2001:da8:d800:611:5d60:36d8:624a:54af) (Ping timeout: 250 seconds)
2022-01-19 19:36:25 +0100 <fizzsegfaultbuzz> so this isn't haskell per-se so feel free to tell me to buzz off, but i thought a programmer with more expertise might have a good answer to this question:
2022-01-19 19:38:10 +0100ksqsf(~user@2001:da8:d800:611:5d60:36d8:624a:54af)
2022-01-19 19:38:27 +0100 <fizzsegfaultbuzz> i have a function which maps points onto points (2d points onto 2d points). if i start from a uniform distribution of 2d points and apply f iteratively, i get a "limit" distribution
2022-01-19 19:38:31 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-19 19:38:52 +0100 <fizzsegfaultbuzz> my problem is that f samples extremely un-evenly from the region of the XY plane i am interested in
2022-01-19 19:39:07 +0100jgeerds(~jgeerds@55d4090e.access.ecotel.net)
2022-01-19 19:39:42 +0100 <EvanR_> using floats?
2022-01-19 19:40:05 +0100fef(~thedawn@user/thedawn)
2022-01-19 19:40:07 +0100 <fizzsegfaultbuzz> so i have X in [0,1] and Y in [0,1] and i want to know what the limit distribution of f looks like in those regions, although i only care about a fixed resolution for X an Y (think of pixelization,...)
2022-01-19 19:40:33 +0100 <fizzsegfaultbuzz> my two dimensional points are floats, yes
2022-01-19 19:40:59 +0100 <EvanR_> if you were at [1,2] x [1,2] uniform float would be a lot simpler xD
2022-01-19 19:41:02 +0100 <fizzsegfaultbuzz> what happens is that f sends nearly all points to (0.5, 0.5) but once in a rare while they will land somewhere else
2022-01-19 19:42:47 +0100xb0o2(~xb0o2@user/xb0o2)
2022-01-19 19:47:07 +0100epolanski(uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2022-01-19 19:47:31 +0100deadmarshal(~deadmarsh@95.38.230.192) (Ping timeout: 256 seconds)
2022-01-19 19:48:13 +0100 <tomsmeding> fizzsegfaultbuzz: wouldn't the limit distribution then be just [(0.5, 0.5)]?
2022-01-19 19:48:23 +0100 <tomsmeding> oh wait no that's not true
2022-01-19 19:48:26 +0100 <Henson> EvanR_: according to Criterion, I've been able to get a 10-15 times speed increase in my code by using a custom recursive function that uses a strict data type and completely avoids tuples and zipping/unzipping anywhere, as well as inlining one of the functions.
2022-01-19 19:48:43 +0100 <monochrom> We don't know the actual f enough to tell.
2022-01-19 19:48:44 +0100 <tomsmeding> fizzsegfaultbuzz: is f random?
2022-01-19 19:48:46 +0100Guest80(~Guest80@host-95-245-231-154.retail.telecomitalia.it) (Quit: Client closed)
2022-01-19 19:49:13 +0100 <monochrom> I also refuse to believe that a program actually iterates f for infinitely many times and actually hits the limit.
2022-01-19 19:49:34 +0100 <EvanR_> Henson, by avoid tuples, do you mean the usual tuple type, or any form of tupling (strict tuples too)
2022-01-19 19:49:37 +0100 <monochrom> There is still a difference between iterating 100 times and the limit.
2022-01-19 19:49:50 +0100ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2022-01-19 19:50:32 +0100 <Henson> EvanR_: any form of tupling. I needed to return 7 numbers from the function, so instead of a 7-tuple, I just made a new datatype with 7 strict Double fields in it.
2022-01-19 19:51:03 +0100 <monochrom> Sounds like s/tupling/lazy tupling/
2022-01-19 19:51:17 +0100ksqsf(~user@2001:da8:d800:611:5d60:36d8:624a:54af) (Ping timeout: 240 seconds)
2022-01-19 19:51:23 +0100 <EvanR_> that's a 7 tuple
2022-01-19 19:51:29 +0100 <fizzsegfaultbuzz> i was thinking of creating a table mapping the preimage to the image and then uniformly perturbing the preimage of points which map to locations i like
2022-01-19 19:51:47 +0100 <fizzsegfaultbuzz> then i would iterate, updating that table
2022-01-19 19:52:21 +0100 <Henson> EvanR_: ok, well, it's not using a (Double,Double,Double,Double,Double,Double,Double)
2022-01-19 19:52:31 +0100 <fizzsegfaultbuzz> that would probably create a bit of a fixed error with respect to the limit distribution but that is probably ok
2022-01-19 19:52:36 +0100 <EvanR_> yeah strict records for that kind of data is often a big win
2022-01-19 19:52:52 +0100 <EvanR_> like data V2 a = V2 !a !a
2022-01-19 19:53:03 +0100 <EvanR_> good for Int, Double, etc
2022-01-19 19:53:21 +0100 <Henson> EvanR_: yes, like that
2022-01-19 19:53:27 +0100 <Henson> monochrom: right, no more lazy tupling
2022-01-19 19:53:52 +0100 <EvanR_> another way is to make sure the components of the lazy tuple are evaluated before constructing the tuple
2022-01-19 19:54:08 +0100 <EvanR_> which might be a pain in the ass or not, hence these types
2022-01-19 19:54:09 +0100 <Henson> EvanR_: like seq a $ seq b (a,b)
2022-01-19 19:54:13 +0100 <EvanR_> yes
2022-01-19 19:54:13 +0100 <tomsmeding> fizzsegfaultbuzz: so your function is [0,1]x[0,1] -> [0,1]x[0,1], and you want the distribution of lim_{n -> \infty} f^n((x, y)) if (x, y) is uniformly chosen from [0,1]x[0,1]?
2022-01-19 19:54:22 +0100 <EvanR_> Henson, or bang patterns
2022-01-19 19:54:39 +0100 <Henson> EvanR_: but bang patterns can only be used on the left hand side, correct?
2022-01-19 19:54:50 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-19 19:54:51 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
2022-01-19 19:54:54 +0100 <EvanR_> yes
2022-01-19 19:55:02 +0100 <tomsmeding> if so, if f sends most (as in, more than half or something) of the points to (0.5,0.5), wouldn't the limit distribution then not just be {f((0.5,0.5))} ?
2022-01-19 19:55:02 +0100 <EvanR_> which is often a convenient place to put them
2022-01-19 19:55:10 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-01-19 19:55:11 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-19 19:55:22 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-19 19:55:30 +0100 <fizzsegfaultbuzz> tomsmeding: a bit of a correction there is that i initialize the distribution of points to be uniform
2022-01-19 19:55:37 +0100 <Henson> EvanR_: I did try seqing the variables before putting them in to a lazy 7-tuple, and that made the code about 2 times faster. But using the strict data type made it 10-15 times faster.
2022-01-19 19:55:38 +0100Kaiepi(~Kaiepi@156.34.47.253) (Remote host closed the connection)
2022-01-19 19:55:40 +0100 <tomsmeding> fizzsegfaultbuzz: is f random or deterministic?
2022-01-19 19:55:45 +0100 <fizzsegfaultbuzz> tomsmeding: and then iterative application of f leads to a fixed, complex, non-uniform distribution
2022-01-19 19:55:48 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
2022-01-19 19:55:56 +0100 <fizzsegfaultbuzz> f is fixed
2022-01-19 19:56:00 +0100 <fizzsegfaultbuzz> no, sorry
2022-01-19 19:56:03 +0100 <fizzsegfaultbuzz> f is stochastic
2022-01-19 19:56:05 +0100 <tomsmeding> is f random or deterministic? :p
2022-01-19 19:56:06 +0100 <tomsmeding> ah
2022-01-19 19:56:07 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-01-19 19:56:15 +0100 <fizzsegfaultbuzz> so there's a sort of a coinflip with each call to f
2022-01-19 19:56:15 +0100Kaiepi(~Kaiepi@156.34.47.253)
2022-01-19 19:56:19 +0100 <tomsmeding> so f is a markov chain
2022-01-19 19:56:58 +0100 <EvanR_> Henson, I bet there was another optimization where your strict 7 tuple was also UNPACKed, hence having the Doubles in the record instead of pointers to something in the record
2022-01-19 19:57:41 +0100 <Henson> EvanR_: can you elaborate on that? I don't really understand.
2022-01-19 19:57:53 +0100 <tomsmeding> fizzsegfaultbuzz: is f easily describable, you might be able to compute the limit distribution algebraically
2022-01-19 19:59:18 +0100 <tomsmeding> fizzsegfaultbuzz: what do you mean when you say "what the limit distribution of f looks like in a particular region"? What the limit distribution looks like when you sample input points only from that region, or what that portion of the limit distribution looks like if you start with fully uniform inputs?
2022-01-19 19:59:18 +0100 <tomjagua1paw> Henson: I would be very interested to know the performance if you put Strict around your tuple: https://hackage.haskell.org/package/strict-wrapper-0.0.0.0/docs/Data-Strict-Wrapper.html#v:Strict
2022-01-19 19:59:21 +0100chele(~chele@user/chele) (Remote host closed the connection)
2022-01-19 19:59:38 +0100 <EvanR_> most values in haskell are boxed, meaning they are manipulated as a pointer to heap object, containing the value. A tree data type is made of a bunch of pointer to boxes
2022-01-19 20:00:03 +0100 <EvanR_> a record or tuple is at best just a really flat tree
2022-01-19 20:00:19 +0100 <EvanR_> unpacking a record field means the value is stored in the record object itself
2022-01-19 20:01:22 +0100tomjagua1pawtomjaguarpaw
2022-01-19 20:01:50 +0100 <EvanR_> now the verb "unpack" makes no sense to me, coffee failing me
2022-01-19 20:02:10 +0100 <tomsmeding> "do not pack inside a box"
2022-01-19 20:02:27 +0100 <monochrom> yeah, analogous to "unbox".
2022-01-19 20:02:53 +0100 <monochrom> Now, it is the name "Boxing Day" that makes no sense to me, why is it not "Unboxing Day"? >:)
2022-01-19 20:02:54 +0100 <tomjaguarpaw> Reversing the packing that implicitly happened. Perhaps "nonpack" and "nonbox" would be better.
2022-01-19 20:03:09 +0100vicfred(~vicfred@user/vicfred)
2022-01-19 20:03:31 +0100 <tomsmeding> monochrom: because the ones that pack the boxes are always late and still have to do it frantically on the unboxing day?
2022-01-19 20:05:20 +0100bontaq(~user@ool-45779fe5.dyn.optonline.net)
2022-01-19 20:05:51 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-19 20:05:54 +0100johnjaye(~pi@173.209.65.233)
2022-01-19 20:06:17 +0100 <monochrom> {-# language Dec26 #-} = implies StrictData, and moreover, adds {-# UNPACK #-} wherever valid. >:)
2022-01-19 20:06:44 +0100 <tomsmeding> isn't that gibbon
2022-01-19 20:06:55 +0100 <monochrom> I don't know!
2022-01-19 20:06:57 +0100yassernasc(~yassernas@ec2-54-87-145-249.compute-1.amazonaws.com)
2022-01-19 20:07:19 +0100 <tomsmeding> https://github.com/iu-parfunc/gibbon
2022-01-19 20:07:26 +0100 <tomsmeding> read some papers but never tried
2022-01-19 20:07:37 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dd9f:9c7:a4ae:c7f9)
2022-01-19 20:07:42 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
2022-01-19 20:07:55 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 268 seconds)
2022-01-19 20:08:18 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-19 20:09:01 +0100darchitect(~darchitec@2a00:23c6:3584:df00:8fb:65a6:c5ec:35ce) (Ping timeout: 240 seconds)
2022-01-19 20:09:10 +0100 <monochrom> Interesting, but Dec26 does not optimize data layout order.
2022-01-19 20:09:28 +0100zincy_(~zincy@host86-151-99-97.range86-151.btcentralplus.com)
2022-01-19 20:09:28 +0100 <tomsmeding> not sure gibbon does either
2022-01-19 20:09:52 +0100 <tomsmeding> but there is also parallel gibbon, which attemps to get a nice middle ground between serialising everything and still being able to process parts of a tree in parallel
2022-01-19 20:10:00 +0100Tuplanolla(~Tuplanoll@91-159-68-166.elisa-laajakaista.fi)
2022-01-19 20:10:05 +0100 <monochrom> It sounds like one of the goals of gibbon. Although, "goal" also means work in progress.
2022-01-19 20:10:23 +0100 <tomsmeding> ah, could be
2022-01-19 20:10:37 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds)
2022-01-19 20:11:19 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net) (Ping timeout: 256 seconds)
2022-01-19 20:11:19 +0100random-jellyfish(~random-je@user/random-jellyfish) (Ping timeout: 256 seconds)
2022-01-19 20:11:24 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net)
2022-01-19 20:13:06 +0100 <[itchyjunk]> behold, i am monading https://bpa.st/ZHTQ
2022-01-19 20:13:27 +0100 <monochrom> That's just functoring.
2022-01-19 20:13:53 +0100 <EvanR_> just a functor wound
2022-01-19 20:14:18 +0100 <monochrom> OK OK fine! "I'm Haskelling" can also mean doing just a little part of Haskell.
2022-01-19 20:14:50 +0100 <monochrom> I'm humaning.
2022-01-19 20:15:04 +0100 <[itchyjunk]> I am lifting a -> b to Maybe a -> Maybe b hence monading?
2022-01-19 20:15:09 +0100 <tomsmeding> monochrom: is a cat, I always knew it
2022-01-19 20:15:14 +0100 <ephemient> :t maybe Nothing . (Just .) -- pointless
2022-01-19 20:15:15 +0100 <lambdabot> (a1 -> a2) -> Maybe a1 -> Maybe a2
2022-01-19 20:15:33 +0100 <tomsmeding> [itchyjunk]: that's what fmap does, and fmap is in the Functor typeclass
2022-01-19 20:15:41 +0100 <tomsmeding> every Monad is a Functor, but a Functor does not make a Monad
2022-01-19 20:15:50 +0100 <monochrom> Actually that is not entirely pointless. Behind it is the theorem that a lot of fmap's are catamorphisms.
2022-01-19 20:16:51 +0100boxscape_(~boxscape_@p4ff0b9d5.dip0.t-ipconnect.de)
2022-01-19 20:17:14 +0100 <EvanR_> [itchyjunk], lifting an (a -> b) to (f a -> f b) is decidedly functoring
2022-01-19 20:17:14 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-19 20:17:15 +0100 <boxscape_> Is there a way to have an export list that exports everything except for a single name (without explicitly listing everything else)?
2022-01-19 20:17:34 +0100 <tomsmeding> why does everyone have _ today
2022-01-19 20:17:42 +0100 <boxscape_> It's underscore day
2022-01-19 20:18:14 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net)
2022-01-19 20:18:17 +0100 <tomsmeding> boxscape_: no, but you can put all the stuff in an internal module, then have the public module be 'module Public (module Internal) where import Internal hiding (stuff)'
2022-01-19 20:18:21 +0100fef(~thedawn@user/thedawn) (Ping timeout: 276 seconds)
2022-01-19 20:18:23 +0100 <monochrom> It's on the wishlists of many people.
2022-01-19 20:18:26 +0100 <boxscape_> okay, thanks
2022-01-19 20:18:32 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net) (Quit: leaving)
2022-01-19 20:19:00 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net)
2022-01-19 20:19:26 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-19 20:20:29 +0100Akiva(~Akiva@user/Akiva)
2022-01-19 20:23:37 +0100`2jt(~jtomas@10.red-83-58-228.dynamicip.rima-tde.net) (Ping timeout: 240 seconds)
2022-01-19 20:26:49 +0100simendsjo(~user@84.211.91.241)
2022-01-19 20:28:28 +0100 <maerwald> tomsmeding: that produces annoying haddock, doesn't it?
2022-01-19 20:28:38 +0100 <tomsmeding> yeah it does
2022-01-19 20:30:11 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-19 20:30:41 +0100o-90(~o-90@gateway/tor-sasl/o-90)
2022-01-19 20:32:09 +0100 <awpr> `{-# OPTIONS_HADDOCK not-home #-}` on the internal module should help: https://haskell-haddock.readthedocs.io/en/latest/markup.html#module-attributes
2022-01-19 20:36:47 +0100o-90(~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection)
2022-01-19 20:36:58 +0100darchitect(~darchitec@2a00:23c6:3584:df00:8fb:65a6:c5ec:35ce)
2022-01-19 20:39:21 +0100 <boxscape_> ah, good to know
2022-01-19 20:40:34 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net)
2022-01-19 20:41:09 +0100acidsys(~LSD@2.lsd.systems) (Excess Flood)
2022-01-19 20:41:49 +0100acidsys(~LSD@2.lsd.systems)
2022-01-19 20:42:06 +0100Codaraxis(~Codaraxis@user/codaraxis)
2022-01-19 20:42:06 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net) (Client Quit)
2022-01-19 20:42:27 +0100darchitect(~darchitec@2a00:23c6:3584:df00:8fb:65a6:c5ec:35ce) (Ping timeout: 268 seconds)
2022-01-19 20:42:31 +0100Codaraxis_(~Codaraxis@user/codaraxis)
2022-01-19 20:42:50 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-19 20:42:53 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-01-19 20:43:27 +0100vicfred(~vicfred@user/vicfred) (Quit: Leaving)
2022-01-19 20:43:45 +0100geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2022-01-19 20:44:09 +0100geekosaur(~geekosaur@xmonad/geekosaur)
2022-01-19 20:44:42 +0100Codaraxis__(~Codaraxis@user/codaraxis)
2022-01-19 20:45:26 +0100jkaye(~jkaye@2601:281:200:1958:837d:401b:4a0:3b8f)
2022-01-19 20:45:40 +0100ubert(~Thunderbi@p200300ecdf0994202d2de89ac733253b.dip0.t-ipconnect.de) (Remote host closed the connection)
2022-01-19 20:46:38 +0100Codaraxis(~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
2022-01-19 20:46:39 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Remote host closed the connection)
2022-01-19 20:46:58 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg)
2022-01-19 20:47:38 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net)
2022-01-19 20:47:46 +0100Codaraxis_(~Codaraxis@user/codaraxis) (Ping timeout: 256 seconds)
2022-01-19 20:49:50 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-19 20:51:33 +0100ProfSimm(~ProfSimm@176-12-60-137.pon.spectrumnet.bg) (Ping timeout: 256 seconds)
2022-01-19 20:52:12 +0100Morrow(~Morrow@ool-1826f675.dyn.optonline.net)
2022-01-19 20:52:17 +0100yauhsien(~yauhsien@61-231-62-246.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
2022-01-19 20:53:07 +0100Guest80(~Guest80@host-95-245-231-154.retail.telecomitalia.it)
2022-01-19 20:53:33 +0100alp(~alp@user/alp) (Ping timeout: 268 seconds)
2022-01-19 20:55:54 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net)
2022-01-19 20:58:37 +0100Morrow(~Morrow@ool-1826f675.dyn.optonline.net) (Ping timeout: 240 seconds)
2022-01-19 21:00:34 +0100lavaman(~lavaman@98.38.249.169)
2022-01-19 21:03:35 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dd9f:9c7:a4ae:c7f9) (Remote host closed the connection)
2022-01-19 21:04:33 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-19 21:05:02 +0100juhp(~juhp@128.106.188.82) (Ping timeout: 240 seconds)
2022-01-19 21:05:42 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dd9f:9c7:a4ae:c7f9)
2022-01-19 21:07:48 +0100juhp(~juhp@128.106.188.82)
2022-01-19 21:10:18 +0100darchitect(~darchitec@2a00:23c6:3584:df00:8fb:65a6:c5ec:35ce)
2022-01-19 21:10:40 +0100ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2022-01-19 21:11:11 +0100ec(~ec@gateway/tor-sasl/ec)
2022-01-19 21:11:57 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net) (Ping timeout: 240 seconds)
2022-01-19 21:12:08 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-01-19 21:14:11 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-19 21:15:50 +0100ardell(~ardell@user/ardell) (Quit: Konversation terminated!)
2022-01-19 21:16:13 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net) (Ping timeout: 240 seconds)
2022-01-19 21:16:37 +0100Pickchea(~private@user/pickchea)
2022-01-19 21:17:10 +0100kuribas(~user@ptr-25vy0i81lhv78yduvdy.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2022-01-19 21:17:36 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 268 seconds)
2022-01-19 21:18:23 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net)
2022-01-19 21:19:17 +0100werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-01-19 21:23:22 +0100ProfSimm(~ProfSimm@87.227.196.109)
2022-01-19 21:23:35 +0100briandaed(~briandaed@185.234.208.208.r.toneticgroup.pl)
2022-01-19 21:24:33 +0100Hildegunst(~luc@80.248.12.109.rev.sfr.net) (Quit: leaving)
2022-01-19 21:24:48 +0100 <fizzsegfaultbuzz> tomsmeding: i think that as long as the starting distribution isn't "strange" the limit distribution is always the same, although that's an informal statement
2022-01-19 21:24:55 +0100 <fizzsegfaultbuzz> tomsmeding: f is very nonlinear
2022-01-19 21:26:41 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 256 seconds)
2022-01-19 21:28:27 +0100azimut_(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-01-19 21:28:52 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-01-19 21:29:15 +0100yassernasc(~yassernas@ec2-54-87-145-249.compute-1.amazonaws.com) (Remote host closed the connection)
2022-01-19 21:29:33 +0100Erutuon(~Erutuon@user/erutuon)
2022-01-19 21:30:33 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-19 21:35:15 +0100you(~ShmoSeph@173-167-220-193-ip-static.hfc.comcastbusiness.net)
2022-01-19 21:36:55 +0100johnw(~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0)
2022-01-19 21:37:25 +0100 <tomsmeding> fizzsegfaultbuzz: the limit distribution doesn't change if f lets every point go to every other point with nonzero probability after some number of steps
2022-01-19 21:44:58 +0100 <tomsmeding> also this is not a buddhabrot, is ot?
2022-01-19 21:45:00 +0100 <tomsmeding> *it
2022-01-19 21:47:00 +0100Guest80(~Guest80@host-95-245-231-154.retail.telecomitalia.it) (Quit: Client closed)
2022-01-19 21:47:18 +0100DNH(~DNH@2a02:8108:1100:16d8:edf9:3833:cff9:92b3)
2022-01-19 21:48:30 +0100you(~ShmoSeph@173-167-220-193-ip-static.hfc.comcastbusiness.net) (Remote host closed the connection)
2022-01-19 21:50:29 +0100dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4)
2022-01-19 22:00:18 +0100coot(~coot@89-64-85-93.dynamic.chello.pl)
2022-01-19 22:04:03 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dd9f:9c7:a4ae:c7f9) (Remote host closed the connection)
2022-01-19 22:04:04 +0100TonyStone(~TonyStone@2603-7080-8607-c36a-9841-fdb7-086b-ec04.res6.spectrum.com) (Remote host closed the connection)
2022-01-19 22:04:05 +0100lavaman(~lavaman@98.38.249.169) (Ping timeout: 256 seconds)
2022-01-19 22:04:05 +0100simendsjo(~user@84.211.91.241) (Ping timeout: 256 seconds)
2022-01-19 22:06:12 +0100TonyStone(~TonyStone@cpe-74-76-51-197.nycap.res.rr.com)
2022-01-19 22:09:38 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-01-19 22:09:43 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-19 22:12:23 +0100vicfred(~vicfred@user/vicfred)
2022-01-19 22:12:57 +0100mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 240 seconds)
2022-01-19 22:14:17 +0100_ht(~quassel@82-168-34-160.fixed.kpn.net) (Remote host closed the connection)
2022-01-19 22:17:49 +0100LukeHoersten(~LukeHoers@user/lukehoersten)
2022-01-19 22:19:56 +0100alp(~alp@user/alp)
2022-01-19 22:20:44 +0100gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-01-19 22:21:09 +0100spaceseller(~spacesell@31.147.205.13)
2022-01-19 22:21:37 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-19 22:23:04 +0100LukeHoersten(~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-01-19 22:25:34 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-01-19 22:25:34 +0100wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-01-19 22:25:34 +0100wroathe(~wroathe@user/wroathe)
2022-01-19 22:32:20 +0100zincy_(~zincy@host86-151-99-97.range86-151.btcentralplus.com) (Remote host closed the connection)
2022-01-19 22:33:51 +0100 <EvanR_> what's going on here
2022-01-19 22:35:09 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-01-19 22:35:53 +0100 <EvanR_> morphisms in a category support this operation, f b c -> f a b -> f a c. What about f a (f b c) -> f a b -> f a c. What's that
2022-01-19 22:37:21 +0100 <awpr> that looks kinda like a variant on the eval morphism of a cartesian closed category?
2022-01-19 22:37:42 +0100 <EvanR_> CCC... of course
2022-01-19 22:38:40 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-19 22:39:17 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-01-19 22:40:05 +0100 <awpr> in a bit more detail: "closed" means you have an internal "exponential" object representing morphisms between two objects: by putting `f b c` inside `f a _`, you're asserting one of the objects of the category is the morphisms between `b` and `c`
2022-01-19 22:41:28 +0100 <EvanR_> seems like mixing levels in a gnarly way
2022-01-19 22:41:52 +0100briandaed(~briandaed@185.234.208.208.r.toneticgroup.pl) (Quit: Lost terminal)
2022-01-19 22:42:12 +0100 <awpr> yeah, that presentation is restricting the objects of the category to be Type
2022-01-19 22:42:46 +0100 <awpr> because it uses the same `f` for the Hask-level functions and the exponential object
2022-01-19 22:43:22 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds)
2022-01-19 22:43:40 +0100little_mac(~little_ma@2601:410:4300:3ce0:d001:2aa2:4908:56e6)
2022-01-19 22:43:41 +0100 <awpr> if it's cartesian closed, there's also a cartesian product that can support `forall a. f a (a, a)` and `forall a b c d. f a b -> f c d -> f (a, c) (b, d)`, and an eval morphism `forall a b. f (a, f a b) b`
2022-01-19 22:43:58 +0100myShoggoth(~myShoggot@97-120-67-120.ptld.qwest.net)
2022-01-19 22:44:42 +0100 <awpr> if you plug all those together with the given `f a (f b c)` and `f a b`, you can get to `f a c`
2022-01-19 22:45:12 +0100 <EvanR_> I started talking about f a (f b c) -> f a b -> f a c, or the flip of that. Are products necessary for this to make sense, or are they implied, or
2022-01-19 22:45:12 +0100spaceseller(~spacesell@31.147.205.13) (Quit: Leaving)
2022-01-19 22:45:28 +0100 <EvanR_> like where did the cartesian come from
2022-01-19 22:45:46 +0100 <EvanR_> or is it just a possible thing to add
2022-01-19 22:47:49 +0100 <awpr> I had to invoke the product and diagonal morphism `f a (a, a)` to be able to "use the `a` twice" (both in the input of `f a (f b c)` and in the input of `f a b`). categories in general can't automatically do that, so they need some extra structure. I'm not sure whether there's a "smaller" way to gain that power instead of CCCs
2022-01-19 22:48:27 +0100 <EvanR_> it's funny because a product seems much more mundane than an exponential object, but it's critical
2022-01-19 22:48:43 +0100mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-01-19 22:48:59 +0100Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-01-19 22:49:24 +0100 <awpr> yeah, I was just looking at the definition of a closed category, and it looks like it doesn't even involve an apply morphism, just an internal composition `f (f a b)
2022-01-19 22:49:54 +0100 <EvanR_> I think you got cut off
2022-01-19 22:50:20 +0100 <awpr> `f (f b c) (f (f a b) (f a c))` (still abusing `f` as both hom-set and internal-hom)
2022-01-19 22:50:39 +0100 <EvanR_> oh that's confusing
2022-01-19 22:51:03 +0100 <awpr> [for some reason I made enter be adjacent to backspace on my keyboard layout...)
2022-01-19 22:51:31 +0100 <EvanR_> OK placed next to ABORT
2022-01-19 22:51:46 +0100 <EvanR_> nice UI/UX principle
2022-01-19 22:53:01 +0100 <awpr> try plugging `->` in for `f`: `(->) ((->) b c) ((->) ((->) a b) ((->) a c))`, or in infix form, `(b -> c) -> (a -> b) -> (a -> c)`
2022-01-19 22:53:42 +0100 <EvanR_> there are two kinds of f going on right?
2022-01-19 22:53:53 +0100 <geekosaur> I noticed the other one you had earlier looked suspiciously like an Arrow
2022-01-19 22:55:12 +0100 <awpr> in general, yeah, there would be two different ones. but in `Set` the hom-set and the internal hom are exactly the same, so if we're specializing to Haskell functions they both collapse onto functions anyway
2022-01-19 22:55:13 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-19 22:55:16 +0100 <EvanR_> :t app
2022-01-19 22:55:17 +0100 <lambdabot> ArrowApply a => a (a b c, b) c
2022-01-19 22:55:54 +0100 <EvanR_> awpr, haskell as a specialization of set which itself a confusing specialization is confusing xD
2022-01-19 22:55:58 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-19 22:56:50 +0100 <EvanR_> speaking of which, I guess we assumed we're talking about morphisms which are haskell values of a type implementing Category
2022-01-19 22:57:42 +0100 <EvanR_> this automatically brings in Hask somehow?
2022-01-19 22:57:59 +0100 <EvanR_> if so, is there a sane way to work with other kinds of categories
2022-01-19 22:58:28 +0100 <int-e> Heh, that type is nearly unreadable.
2022-01-19 22:58:44 +0100 <awpr> yeah, I think that's a reasonable assumption as long as we're pretending Hask = Set. ignoring enriched category theory, the morphisms are always a set, and things like functors' actions on morphisms are functions
2022-01-19 22:59:12 +0100 <int-e> app :: ArrowApply (~>) => (b ~> c, b) ~> c
2022-01-19 22:59:24 +0100 <EvanR_> ah
2022-01-19 22:59:59 +0100 <EvanR_> ok yeah, in that type there, b and c are haskell types
2022-01-19 23:00:24 +0100 <EvanR_> what if you wanted them to be restricted to some special kind of types
2022-01-19 23:00:27 +0100 <awpr> the place we're artificially limiting things is by identifying the objects with Type, by reusing the same `f` in both levels
2022-01-19 23:00:32 +0100 <awpr> yeah, that
2022-01-19 23:01:00 +0100eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-01-19 23:01:10 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-01-19 23:02:01 +0100 <EvanR_> *b and c are any arbitrary haskell types (I guess of compatible kind)
2022-01-19 23:03:07 +0100 <awpr> because we have `something :: f _ _`, then `f :: k1 -> k1 -> Type`, and because we have `f _ (f _ _)`, `f :: k2 -> k2 -> k2`, which forces everything to be `Type`. that's where it becomes important to distinguish the hom-set `f _ _` from the internal hom object which we've also been calling `f _ _`
2022-01-19 23:03:17 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
2022-01-19 23:04:57 +0100 <awpr> so an extra step towards real CT would be `eval :: f (_Product a (_Exp a b)) b` etc., with some form of type family or fundeps or something to tell you what `_Product` and `_Exp` should be
2022-01-19 23:06:22 +0100wombat875(~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Quit: WeeChat 2.2-dev)
2022-01-19 23:06:45 +0100shapr(~user@2601:7c0:c37c:46d0:d31:791c:8c24:e54b) (Remote host closed the connection)
2022-01-19 23:06:49 +0100bitmapper(uid464869@id-464869.lymington.irccloud.com)
2022-01-19 23:06:58 +0100shapr(~user@2601:7c0:c37c:46d0:d31:791c:8c24:e54b)
2022-01-19 23:09:49 +0100kaph(~kaph@net-2-47-208-144.cust.vodafonedsl.it) (Ping timeout: 256 seconds)
2022-01-19 23:12:56 +0100 <EvanR_> so an _Exp is better than just implementing an apply function?
2022-01-19 23:13:29 +0100tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-01-19 23:13:32 +0100Megant_(megant@user/megant) (Ping timeout: 268 seconds)
2022-01-19 23:14:39 +0100Megant(megant@user/megant)
2022-01-19 23:15:27 +0100 <awpr> having the exponential object be distinct from the Haskell-value-level representation of morphisms is what lets you use something other than Type for the objects: since Haskell values' types are of kind Type, making the exponential object the same as the type of morphisms forces the objects to be Types
2022-01-19 23:15:50 +0100 <EvanR_> oh
2022-01-19 23:18:00 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
2022-01-19 23:18:41 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-19 23:27:29 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
2022-01-19 23:30:47 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-19 23:32:19 +0100fendor(~fendor@77.119.169.94.wireless.dyn.drei.com) (Remote host closed the connection)
2022-01-19 23:32:26 +0100shapr(~user@2601:7c0:c37c:46d0:d31:791c:8c24:e54b) (Remote host closed the connection)
2022-01-19 23:32:39 +0100shapr(~user@2601:7c0:c37c:46d0:d31:791c:8c24:e54b)
2022-01-19 23:35:46 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl)
2022-01-19 23:37:01 +0100Sgeo_(~Sgeo@user/sgeo) (Ping timeout: 256 seconds)
2022-01-19 23:38:47 +0100coot(~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot)
2022-01-19 23:39:37 +0100Sgeo(~Sgeo@user/sgeo)
2022-01-19 23:40:02 +0100merijn(~merijn@c-001-001-018.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
2022-01-19 23:41:39 +0100Topsi(~Tobias@dyndsl-095-033-018-085.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2022-01-19 23:42:32 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dd9f:9c7:a4ae:c7f9)
2022-01-19 23:42:34 +0100 <monochrom> Hahaha, Oleg wrote a Scheme syntax-rule for the CPS transform, and commented "the standard CPS transformation written in Latin rather than in Greek"
2022-01-19 23:42:44 +0100 <monochrom> https://okmij.org/ftp/Scheme/callcc-calc-page.html
2022-01-19 23:43:39 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection)
2022-01-19 23:43:44 +0100burnsidesLlama(~burnsides@dhcp168-042.wadham.ox.ac.uk) (Remote host closed the connection)
2022-01-19 23:44:22 +0100chomwitt(~chomwitt@2a02:587:dc0b:200:12c3:7bff:fe6d:d374) (Ping timeout: 268 seconds)
2022-01-19 23:44:26 +0100cosimone(~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
2022-01-19 23:44:43 +0100Sgeo_(~Sgeo@user/sgeo)
2022-01-19 23:46:57 +0100Sgeo(~Sgeo@user/sgeo) (Ping timeout: 240 seconds)
2022-01-19 23:52:51 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2022-01-19 23:54:35 +0100eggplantade(~Eggplanta@2600:1700:bef1:5e10:dd9f:9c7:a4ae:c7f9) (Remote host closed the connection)
2022-01-19 23:56:20 +0100__monty__(~toonn@user/toonn) (Quit: leaving)