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