Logs on 2023-05-27 (liberachat/#haskell)
| 00:00:35 | → | bratwurst joins (~dfadsva@2604:3d09:207f:f650::9c24) |
| 00:02:45 | → | freeside joins (~mengwong@103.252.202.189) |
| 00:02:59 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 00:04:00 | <bratwurst> | so i'm looking at a function from v4l2 called withFrame. it takes a function '(Ptr a -> Int -> IO b)' |
| 00:04:07 | → | califax joins (~califax@user/califx) |
| 00:04:16 | <bratwurst> | my question is what would i use for a? |
| 00:04:32 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 00:04:55 | <bratwurst> | i don't know where to find examples of people using the v4l2 library so I'm confused as to how things work here |
| 00:05:43 | <bratwurst> | it calls a function v4l2_read which has type 'CInt -> Ptr a -> CSize -> IO CInt' |
| 00:06:07 | <bratwurst> | so i would use a c-like type? |
| 00:06:45 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 00:13:35 | × | Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.) |
| 00:19:20 | → | pavonia joins (~user@user/siracusa) |
| 00:19:36 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 00:19:36 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 00:19:36 | → | wroathe joins (~wroathe@user/wroathe) |
| 00:23:08 | → | kriity joins (~kriity@c-76-155-235-153.hsd1.co.comcast.net) |
| 00:28:06 | × | zeenk quits (~zeenk@2a02:2f04:a105:f00::7fe) (Quit: Konversation terminated!) |
| 00:28:30 | <c_wraith> | bratwurst: that looks like it'd be a void* in C |
| 00:29:35 | × | abrantesasf quits (~abrantesa@177.137.232.92) (Ping timeout: 240 seconds) |
| 00:30:00 | → | abrantesasf joins (~abrantesa@177.137.232.90) |
| 00:31:57 | <c_wraith> | bratwurst: looking at the source... I have no idea why that's unbounded. It looks like it expects you to know what the memory layout for that ImageFormat is, and use it correctly. That's a basically untyped interface. Not very haskell-like at all. |
| 00:32:13 | → | freeside joins (~mengwong@103.252.202.189) |
| 00:33:27 | → | dtman34 joins (~dtman34@2601:447:d000:93c9:e022:89b6:5591:cbde) |
| 00:34:09 | × | kriity quits (~kriity@c-76-155-235-153.hsd1.co.comcast.net) (Quit: Client closed) |
| 00:36:08 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 00:37:01 | <c_wraith> | bratwurst: so the `Ptr a' value is a buffer containing the captured image data. The Int is the size of the buffer. You can treat the buffer as any type you like, but things like Word8 seem to be the most primitive interface |
| 00:38:40 | → | Nosrep joins (~Nosrep@user/nosrep) |
| 00:39:35 | × | euandreh quits (~Thunderbi@189.6.18.7) (Ping timeout: 240 seconds) |
| 00:40:34 | → | euandreh joins (~Thunderbi@189.6.18.7) |
| 00:46:46 | <bratwurst> | so i have to figure out what format the buffer will have and go from there. ok thank you that helps |
| 00:53:21 | → | freeside joins (~mengwong@103.252.202.189) |
| 00:57:49 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 256 seconds) |
| 01:00:16 | × | jero98772 quits (~jero98772@2800:484:1d84:9000:8822:84bd:a4f4:947f) (Ping timeout: 248 seconds) |
| 01:10:21 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 01:14:05 | → | jero98772 joins (~jero98772@190.158.28.80) |
| 01:16:25 | → | freeside joins (~mengwong@103.252.202.189) |
| 01:16:32 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 01:18:31 | × | abrantesasf quits (~abrantesa@177.137.232.90) (Remote host closed the connection) |
| 01:21:35 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 01:27:07 | → | use-value1 joins (~Thunderbi@2a00:23c6:8a03:2f01:ddaa:9bff:1a38:a342) |
| 01:27:42 | × | use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:2dc5:45f3:ebf7:b99a) (Ping timeout: 265 seconds) |
| 01:27:42 | use-value1 | is now known as use-value |
| 01:29:50 | → | freeside joins (~mengwong@103.252.202.189) |
| 01:30:23 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 01:32:10 | → | wiosna joins (~karangura@c-73-93-95-154.hsd1.ca.comcast.net) |
| 01:34:01 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 01:34:56 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds) |
| 01:35:43 | → | koz_ joins (~koz@121.99.240.58) |
| 01:35:44 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds) |
| 01:35:44 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds) |
| 01:36:07 | → | Cheery_ joins (~cheery@server-239-7.tentacle.cloud) |
| 01:36:09 | → | stilgart joins (~Christoph@chezlefab.net) |
| 01:36:16 | → | barrucad1 joins (~barrucadu@carcosa.barrucadu.co.uk) |
| 01:36:19 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 01:36:19 | → | leeb- joins (~leeb@tk2-243-31079.vs.sakura.ne.jp) |
| 01:36:30 | → | dfordvm joins (~dfordivam@tk2-219-19469.vs.sakura.ne.jp) |
| 01:37:19 | → | int-e_ joins (~noone@int-e.eu) |
| 01:37:27 | → | bah_ joins (~bah@l1.tel) |
| 01:37:35 | × | int-e quits (~noone@int-e.eu) (Killed (NickServ (GHOST command used by int-e_))) |
| 01:37:45 | int-e_ | is now known as int-e |
| 01:37:55 | → | Hecate_ joins (~mariposa@user/hecate) |
| 01:37:57 | → | alpm joins (~alp@user/alp) |
| 01:38:40 | × | mcglk quits (~mcglk@131.191.19.145) (Ping timeout: 248 seconds) |
| 01:39:27 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 01:40:53 | → | mcglk joins (~mcglk@131.191.19.145) |
| 01:42:58 | × | lav quits (~pi@wikipedia/maddy-from-celeste) (*.net *.split) |
| 01:42:58 | × | canta1 quits (~canta@cvm0.d5k.one) (*.net *.split) |
| 01:42:58 | × | dfordivam1 quits (~dfordivam@tk2-219-19469.vs.sakura.ne.jp) (*.net *.split) |
| 01:42:58 | × | ridcully_ quits (~ridcully@p57b52f2c.dip0.t-ipconnect.de) (*.net *.split) |
| 01:42:58 | × | barrucadu quits (~barrucadu@carcosa.barrucadu.co.uk) (*.net *.split) |
| 01:42:58 | × | meejah quits (~meejah@rutas.meejah.ca) (*.net *.split) |
| 01:42:58 | × | adium quits (adium@user/adium) (*.net *.split) |
| 01:42:58 | × | heath1 quits (~heath@user/heath) (*.net *.split) |
| 01:42:58 | × | noctux1 quits (vBYKluURgE@karif.server-speed.net) (*.net *.split) |
| 01:42:58 | × | Cheery quits (~cheery@server-239-7.tentacle.cloud) (*.net *.split) |
| 01:42:58 | × | stilgart_ quits (~Christoph@chezlefab.net) (*.net *.split) |
| 01:42:58 | × | lyxia quits (~lyxia@poisson.chat) (*.net *.split) |
| 01:42:58 | × | koz quits (~koz@121.99.240.58) (*.net *.split) |
| 01:42:58 | × | andjjj23 quits (~irc@107.170.228.47) (*.net *.split) |
| 01:42:58 | × | mjacob quits (~mjacob@adrastea.uberspace.de) (*.net *.split) |
| 01:42:58 | × | xerox quits (~edi@user/edi) (*.net *.split) |
| 01:42:58 | × | kosmikus quits (~kosmikus@nullzig.kosmikus.org) (*.net *.split) |
| 01:42:58 | × | user___ quits (~user@162.255.84.96) (*.net *.split) |
| 01:42:58 | × | bcoppens quits (~bartcopp@vpn2.bartcoppens.be) (*.net *.split) |
| 01:42:58 | × | alp quits (~alp@user/alp) (*.net *.split) |
| 01:42:58 | × | opqdonut quits (opqdonut@pseudo.fixme.fi) (*.net *.split) |
| 01:42:58 | × | bah quits (~bah@l1.tel) (*.net *.split) |
| 01:42:58 | × | leeb quits (~leeb@tk2-243-31079.vs.sakura.ne.jp) (*.net *.split) |
| 01:42:58 | × | bsima quits (~bsima@143.198.118.179) (*.net *.split) |
| 01:42:58 | × | Hecate quits (~mariposa@user/hecate) (*.net *.split) |
| 01:42:59 | leeb- | is now known as leeb |
| 01:44:28 | × | bratwurst quits (~dfadsva@2604:3d09:207f:f650::9c24) (Ping timeout: 240 seconds) |
| 01:47:32 | × | wiosna quits (~karangura@c-73-93-95-154.hsd1.ca.comcast.net) (Ping timeout: 246 seconds) |
| 01:48:04 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 01:48:14 | → | lav joins (~pi@wikipedia/maddy-from-celeste) |
| 01:48:14 | → | canta1 joins (~canta@cvm0.d5k.one) |
| 01:48:14 | → | ridcully_ joins (~ridcully@p57b52f2c.dip0.t-ipconnect.de) |
| 01:48:14 | → | meejah joins (~meejah@rutas.meejah.ca) |
| 01:48:14 | → | adium joins (adium@user/adium) |
| 01:48:14 | → | heath1 joins (~heath@user/heath) |
| 01:48:14 | → | noctux1 joins (vBYKluURgE@karif.server-speed.net) |
| 01:48:14 | → | lyxia joins (~lyxia@poisson.chat) |
| 01:48:14 | → | mjacob joins (~mjacob@adrastea.uberspace.de) |
| 01:48:14 | → | xerox joins (~edi@user/edi) |
| 01:48:14 | → | kosmikus joins (~kosmikus@nullzig.kosmikus.org) |
| 01:48:14 | → | user___ joins (~user@162.255.84.96) |
| 01:48:14 | → | bcoppens joins (~bartcopp@vpn2.bartcoppens.be) |
| 01:48:14 | → | opqdonut joins (opqdonut@pseudo.fixme.fi) |
| 01:48:15 | → | bsima joins (~bsima@143.198.118.179) |
| 01:49:08 | → | andjjj23 joins (~irc@107.170.228.47) |
| 01:49:10 | → | rodental joins (~rodental@38.146.5.222) |
| 01:50:55 | × | vandita quits (~vandit@78-131-74-81.pool.digikabel.hu) (Ping timeout: 268 seconds) |
| 01:51:56 | × | jludwig quits (~justin@li657-110.members.linode.com) (Quit: ZNC - https://znc.in) |
| 01:52:23 | → | vandita joins (~vandit@94-21-48-62.pool.digikabel.hu) |
| 01:52:55 | → | jludwig joins (~justin@li657-110.members.linode.com) |
| 01:56:23 | × | xff0x quits (~xff0x@ai098135.d.east.v6connect.net) (Ping timeout: 240 seconds) |
| 01:58:33 | → | xff0x joins (~xff0x@178.255.149.135) |
| 02:05:08 | × | td_ quits (~td@i53870934.versanet.de) (Ping timeout: 240 seconds) |
| 02:06:03 | × | jero98772 quits (~jero98772@190.158.28.80) (Read error: Connection reset by peer) |
| 02:07:09 | → | td_ joins (~td@i5387090C.versanet.de) |
| 02:15:07 | → | Guest56 joins (~Guest56@2600:6c5e:527f:9c3b:bc9c:4e9d:7cc1:716) |
| 02:17:04 | × | xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 248 seconds) |
| 02:18:59 | → | xff0x joins (~xff0x@2405:6580:b080:900:7537:a7d1:a60d:3e58) |
| 02:20:55 | × | jjb quits (~jjb@user/jjb) (Remote host closed the connection) |
| 02:23:44 | → | jero98772 joins (~jero98772@190.158.28.80) |
| 02:26:04 | → | freeside joins (~mengwong@103.252.202.189) |
| 02:30:47 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 264 seconds) |
| 02:41:50 | → | reach joins (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) |
| 02:43:20 | → | freeside joins (~mengwong@103.252.202.189) |
| 02:45:20 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds) |
| 02:45:48 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 02:47:28 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 02:50:08 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 240 seconds) |
| 02:52:05 | × | Guest56 quits (~Guest56@2600:6c5e:527f:9c3b:bc9c:4e9d:7cc1:716) (Quit: Client closed) |
| 02:52:30 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:54:51 | <probie> | If I export a foreign C call from a module, can I import that same foreign call from a different module? (not at a machine where I can test right now, but perhaps someone knows off the top of their head) |
| 02:58:42 | <EvanR> | if you couldn't import something, what is the point of exporting it |
| 03:03:24 | × | td_ quits (~td@i5387090C.versanet.de) (Ping timeout: 265 seconds) |
| 03:04:33 | × | phma quits (phma@2001:5b0:2172:dd28:7cbf:d1f6:57c5:3699) (Read error: Connection reset by peer) |
| 03:04:58 | → | phma joins (~phma@host-67-44-208-181.hnremote.net) |
| 03:05:13 | → | td_ joins (~td@i53870921.versanet.de) |
| 03:07:09 | <int-e> | phma: Yes, you can. |
| 03:11:09 | × | Benzi-Junior quits (~BenziJuni@88-149-64-86.du.xdsl.is) (Quit: ZNC 1.8.2 - https://znc.in) |
| 03:16:17 | <int-e> | probie: Err, that was for you. Note that it'll be rather expensive... calling the exported/imported function will spawn a new (bound) Haskell thread. |
| 03:19:48 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds) |
| 03:20:05 | × | jero98772 quits (~jero98772@190.158.28.80) (Ping timeout: 240 seconds) |
| 03:20:46 | <int-e> | probie: In fact, `forkOS` is essentially implemented through this kind of exporting and importing the same Haskell function: https://hackage.haskell.org/package/base-4.18.0.0/docs/src/Control.Concurrent.html#line-308 ff. |
| 03:23:34 | <int-e> | Err, no? It's `runInBoundThread` that does that, hmm. |
| 03:25:00 | <int-e> | So it would be true if `forkOS` were implemented in terms of `forkIO` and `runInBoundThread` but I guess that isn't done because it leaves an extra idle Haskell thread around. |
| 03:27:36 | <phma> | int-e: I can what? |
| 03:28:28 | <int-e> | phma: tab completion failed me |
| 03:29:00 | <probie> | I think it may be unneeded for what I want to do. I want to be able to "call" a pinned ByteArray#. |
| 03:30:39 | <probie> | I can probably just use byteArrayContents# and then wrap it in a FunPtr, along with adding the relevant foreign import ccall "dynamic" boilerplate |
| 03:31:35 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 03:32:05 | <int-e> | Yeah that should work; I don't see the export/import dance helping you with that. |
| 03:32:27 | → | jero98772 joins (~jero98772@190.158.28.80) |
| 03:33:14 | <int-e> | But as the `runInBoundThread` thing shows, it is an interesting little gadget nonetheless. |
| 03:35:26 | <int-e> | Related... hs-plugins needs similar trickery. |
| 03:41:35 | × | xff0x quits (~xff0x@2405:6580:b080:900:7537:a7d1:a60d:3e58) (Ping timeout: 264 seconds) |
| 03:41:59 | → | xff0x joins (~xff0x@ai098135.d.east.v6connect.net) |
| 03:42:14 | → | freeside joins (~mengwong@103.252.202.189) |
| 03:46:25 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 03:50:39 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 03:54:25 | → | nate2 joins (~nate@98.45.169.16) |
| 03:54:38 | × | RedNifre quits (~RedNifre@dslb-088-068-116-161.088.068.pools.vodafone-ip.de) (Ping timeout: 265 seconds) |
| 03:54:48 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 240 seconds) |
| 03:56:50 | × | rf quits (~rf@2605:59c8:179c:f610:c3f5:9614:a40d:c16e) (Remote host closed the connection) |
| 03:59:09 | × | nate2 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 04:07:28 | → | RedNifre joins (~RedNifre@dslb-002-206-121-134.002.206.pools.vodafone-ip.de) |
| 04:14:48 | × | reach quits (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) (Ping timeout: 250 seconds) |
| 04:28:05 | → | reach joins (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) |
| 04:29:59 | × | jero98772 quits (~jero98772@190.158.28.80) (Ping timeout: 240 seconds) |
| 04:30:48 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 04:37:20 | × | reach quits (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) (Ping timeout: 248 seconds) |
| 04:38:06 | → | reach joins (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) |
| 04:40:20 | × | opqdonut quits (opqdonut@pseudo.fixme.fi) (Ping timeout: 260 seconds) |
| 04:40:44 | → | opqdonut joins (opqdonut@pseudo.fixme.fi) |
| 04:40:46 | → | wiosna joins (~karangura@c-73-93-95-154.hsd1.ca.comcast.net) |
| 04:44:08 | → | jero98772 joins (~jero98772@190.158.28.80) |
| 04:47:17 | × | shriekingnoise_ quits (~shrieking@186.137.175.87) (Ping timeout: 268 seconds) |
| 04:47:58 | → | trev joins (~trev@user/trev) |
| 04:48:10 | × | reach quits (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) (Ping timeout: 250 seconds) |
| 04:52:58 | → | reach joins (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) |
| 05:00:46 | × | jakzale_ quits (uid499518@user/jakzale) (Quit: Connection closed for inactivity) |
| 05:02:41 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz) |
| 05:07:09 | × | vandita quits (~vandit@94-21-48-62.pool.digikabel.hu) (Ping timeout: 256 seconds) |
| 05:09:01 | → | vandita joins (~vandit@176-241-45-188.pool.digikabel.hu) |
| 05:13:01 | × | mei quits (~mei@user/mei) (Quit: mei) |
| 05:16:30 | → | freeside joins (~mengwong@103.252.202.189) |
| 05:17:57 | → | harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
| 05:18:04 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 05:19:48 | × | shapr quits (~user@2600:1700:c640:3100:55f:2555:501d:44ae) (Ping timeout: 240 seconds) |
| 05:21:12 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 268 seconds) |
| 05:25:01 | × | reach quits (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) (Ping timeout: 240 seconds) |
| 05:36:08 | <sm> | I see I used https://hackage.haskell.org/package/base-prelude once, trying to reduce import boilerplate. It tries to provide as much of base as possible with a single import (plus a line disabling Prelude). I have questions two: |
| 05:36:08 | <sm> | 1. is there a compile or run time performance issue with having so many things imported to namespace ? |
| 05:36:08 | <sm> | 2. relude seems more popular, but doesn't seem to provide the low-import-noise benefit, as it is divided into many modules - true ? |
| 05:36:45 | <sm> | 3. any other prelude you'd recommend for reducing import noise ? |
| 05:39:59 | × | jero98772 quits (~jero98772@190.158.28.80) (Ping timeout: 240 seconds) |
| 05:43:40 | → | freeside joins (~mengwong@103.252.202.189) |
| 05:47:34 | × | wiosna quits (~karangura@c-73-93-95-154.hsd1.ca.comcast.net) (Quit: leaving) |
| 05:47:45 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 05:48:08 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds) |
| 05:49:10 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 05:52:17 | → | alecs joins (~alecs@151.82.2.124) |
| 05:53:59 | → | jero98772 joins (~jero98772@190.158.28.80) |
| 06:03:19 | <probie> | At least in older versions of GHC, I used to get better code size when I explicitly imported only the prelude functions/types I needed. I also vaguely remember there being a way to make GHC split out each function into a separate object file which mitigates this (at the cost of higher compile time) |
| 06:06:06 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 06:12:39 | → | jinsun__ joins (~jinsun@user/jinsun) |
| 06:12:39 | jinsun | is now known as Guest1374 |
| 06:12:39 | × | Guest1374 quits (~jinsun@user/jinsun) (Killed (molybdenum.libera.chat (Nickname regained by services))) |
| 06:12:39 | jinsun__ | is now known as jinsun |
| 06:12:49 | <geekosaur> | -fsplit-objs is deprecated, because -fsplit-sections is better and faster |
| 06:13:02 | <geekosaur> | (on platforms which support it) |
| 06:13:19 | <geekosaur> | sorry, no -f, just -split-{objs,sections} |
| 06:19:29 | <sm> | I converted this script from base-prelude to relude. relude appears to provide more, since it has a dozen deps rather than just base, but in fact it seems to provide less of the basic stuff. |
| 06:19:29 | <sm> | This: import "base-prelude" BasePrelude |
| 06:19:36 | <sm> | became this:... (full message at <https://libera.ems.host/_matrix/media/v3/download/libera.chat/d1469b8128ecf6933b644d4494874cb871dd329e>) |
| 06:23:58 | <sm> | it encouraged me to replace locale-dependent readFile' with a more explicit decodeUtf8 <$> readFileBS.. which I guess is positive |
| 06:24:44 | <sm> | also forced me to add a bunch of toString ... toText if I want to work with Strings |
| 06:27:05 | <sm> | maybe you need base-prelude + relude if you want a really batteries-included setup |
| 06:34:06 | → | falafel joins (~falafel@2603-8000-d700-115c-375f-6e24-bf15-2487.res6.spectrum.com) |
| 06:36:28 | × | alecs quits (~alecs@151.82.2.124) (Ping timeout: 240 seconds) |
| 06:38:36 | → | alecs joins (~alecs@151.36.175.147) |
| 06:40:56 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds) |
| 06:41:54 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 06:42:21 | → | mei joins (~mei@user/mei) |
| 06:47:19 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 06:47:23 | → | acidjnk joins (~acidjnk@p200300d6e7072f96316225cd2ab6c884.dip0.t-ipconnect.de) |
| 06:50:01 | × | jero98772 quits (~jero98772@190.158.28.80) (Ping timeout: 240 seconds) |
| 06:51:34 | × | mcglk quits (~mcglk@131.191.19.145) (Read error: Connection reset by peer) |
| 06:52:51 | → | freeside joins (~mengwong@103.252.202.189) |
| 06:53:43 | → | machinedgod joins (~machinedg@46.188.225.66) |
| 06:54:09 | → | mcglk joins (~mcglk@131.191.19.145) |
| 06:54:43 | × | kluk quits (~arrowhead@cpe-74-66-76-151.nyc.res.rr.com) (Remote host closed the connection) |
| 06:56:32 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds) |
| 06:57:59 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 06:58:41 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 07:01:41 | → | freeside joins (~mengwong@103.252.202.189) |
| 07:02:15 | → | jero98772 joins (~jero98772@190.158.28.80) |
| 07:03:51 | → | ubert joins (~Thunderbi@p200300ecdf000282b84f8c5708931366.dip0.t-ipconnect.de) |
| 07:06:22 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 07:07:23 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 264 seconds) |
| 07:10:41 | × | eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 07:11:11 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 07:12:29 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 07:12:39 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 07:27:28 | × | jle` quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 248 seconds) |
| 07:29:01 | → | elmklod joins (~Elm@94.25.164.115) |
| 07:29:24 | → | jle` joins (~jle`@cpe-23-240-75-236.socal.res.rr.com) |
| 07:31:28 | × | ubert quits (~Thunderbi@p200300ecdf000282b84f8c5708931366.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 07:33:18 | → | gurkenglas joins (~user@dynamic-046-114-177-161.46.114.pool.telefonica.de) |
| 07:43:10 | Hecate_ | is now known as Hecate |
| 07:48:39 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz) |
| 07:50:53 | → | oo_miguel joins (~Thunderbi@77.252.47.84) |
| 07:51:15 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 07:51:52 | → | ubert joins (~Thunderbi@p200300ecdf000282072de7d7af033fca.dip0.t-ipconnect.de) |
| 07:55:31 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 240 seconds) |
| 07:55:57 | → | nate2 joins (~nate@98.45.169.16) |
| 07:56:12 | × | harveypwca quits (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving) |
| 07:59:43 | × | oo_miguel quits (~Thunderbi@77.252.47.84) (Quit: oo_miguel) |
| 08:00:30 | → | oo_miguel joins (~Thunderbi@77.252.47.84) |
| 08:00:31 | × | nate2 quits (~nate@98.45.169.16) (Ping timeout: 240 seconds) |
| 08:02:03 | → | CiaoSen joins (~Jura@dynamic-046-114-221-062.46.114.pool.telefonica.de) |
| 08:11:04 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:e958:834b:4d15:c9fd) |
| 08:13:59 | → | zeenk joins (~zeenk@2a02:2f04:a105:f00::7fe) |
| 08:15:28 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:e958:834b:4d15:c9fd) (Ping timeout: 248 seconds) |
| 08:15:49 | × | kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 08:16:33 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 08:16:48 | × | machinedgod quits (~machinedg@46.188.225.66) (Ping timeout: 240 seconds) |
| 08:18:49 | → | kuribas joins (~user@ptr-17d51emeqlp3mkf19tm.18120a2.ip6.access.telenet.be) |
| 08:21:02 | → | gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 08:34:38 | → | szkl joins (uid110435@id-110435.uxbridge.irccloud.com) |
| 08:50:03 | → | Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) |
| 08:53:06 | → | _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
| 08:54:23 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 08:54:45 | × | gurkenglas quits (~user@dynamic-046-114-177-161.46.114.pool.telefonica.de) (Ping timeout: 240 seconds) |
| 08:54:47 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 240 seconds) |
| 08:57:13 | Lord_of_Life_ | is now known as Lord_of_Life |
| 09:00:01 | × | luffy[m] quits (~luffyinte@2001:470:69fc:105::3:4cd5) (Remote host closed the connection) |
| 09:02:46 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
| 09:05:55 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 09:13:01 | → | gurkenglas joins (~user@dynamic-046-114-177-161.46.114.pool.telefonica.de) |
| 09:15:16 | → | gmg joins (~user@user/gehmehgeh) |
| 09:22:28 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 240 seconds) |
| 09:25:36 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 09:31:13 | × | falafel quits (~falafel@2603-8000-d700-115c-375f-6e24-bf15-2487.res6.spectrum.com) (Ping timeout: 256 seconds) |
| 09:31:21 | × | alecs quits (~alecs@151.36.175.147) (Read error: Connection reset by peer) |
| 09:33:23 | × | gurkenglas quits (~user@dynamic-046-114-177-161.46.114.pool.telefonica.de) (Ping timeout: 246 seconds) |
| 09:33:25 | × | CiaoSen quits (~Jura@dynamic-046-114-221-062.46.114.pool.telefonica.de) (Ping timeout: 240 seconds) |
| 09:36:57 | → | alecs joins (~alecs@host-82-48-235-203.retail.telecomitalia.it) |
| 09:43:40 | → | falafel joins (~falafel@2603-8000-d700-115c-9f2e-bd7d-5866-de73.res6.spectrum.com) |
| 09:44:04 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 09:46:31 | → | ub joins (~Thunderbi@p548c91e0.dip0.t-ipconnect.de) |
| 09:47:01 | × | ubert quits (~Thunderbi@p200300ecdf000282072de7d7af033fca.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 09:47:01 | ub | is now known as ubert |
| 09:48:01 | × | falafel quits (~falafel@2603-8000-d700-115c-9f2e-bd7d-5866-de73.res6.spectrum.com) (Ping timeout: 240 seconds) |
| 09:58:31 | → | mechap joins (~mechap@user/mechap) |
| 10:16:38 | → | gurkenglas joins (~user@dynamic-046-114-177-161.46.114.pool.telefonica.de) |
| 10:20:06 | → | zenstoic joins (uid461840@id-461840.hampstead.irccloud.com) |
| 10:22:16 | × | alecs quits (~alecs@host-82-48-235-203.retail.telecomitalia.it) (Ping timeout: 250 seconds) |
| 10:40:39 | → | machinedgod joins (~machinedg@46.188.225.66) |
| 10:46:35 | × | gurkenglas quits (~user@dynamic-046-114-177-161.46.114.pool.telefonica.de) (Ping timeout: 256 seconds) |
| 10:53:24 | → | freeside joins (~mengwong@103.252.202.189) |
| 10:56:30 | × | szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 10:56:57 | × | gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
| 10:57:28 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 11:08:32 | → | Benzi-Junior joins (~BenziJuni@88-149-64-86.du.xdsl.is) |
| 11:14:48 | × | machinedgod quits (~machinedg@46.188.225.66) (Ping timeout: 240 seconds) |
| 11:21:12 | barrucad1 | is now known as barrucadu |
| 11:22:03 | → | freeside joins (~mengwong@103.252.202.189) |
| 11:29:05 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 256 seconds) |
| 11:32:36 | → | __monty__ joins (~toonn@user/toonn) |
| 11:38:27 | → | oblivious joins (~oblivious@183.108.191.92.dynamic.jazztel.es) |
| 11:40:04 | × | oblivious quits (~oblivious@183.108.191.92.dynamic.jazztel.es) (Client Quit) |
| 11:46:49 | → | freeside joins (~mengwong@103.252.202.189) |
| 11:50:48 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 11:57:42 | → | nate2 joins (~nate@98.45.169.16) |
| 12:00:09 | × | hrberg quits (~quassel@171.79-160-161.customer.lyse.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 12:00:27 | → | hrberg joins (~quassel@171.79-160-161.customer.lyse.net) |
| 12:02:48 | × | nate2 quits (~nate@98.45.169.16) (Ping timeout: 265 seconds) |
| 12:10:55 | → | freeside joins (~mengwong@103.252.202.189) |
| 12:13:59 | × | oo_miguel quits (~Thunderbi@77.252.47.84) (Ping timeout: 240 seconds) |
| 12:15:05 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 246 seconds) |
| 12:18:59 | → | gruff joins (uid459651@id-459651.lymington.irccloud.com) |
| 12:26:49 | × | zeenk quits (~zeenk@2a02:2f04:a105:f00::7fe) (Quit: Konversation terminated!) |
| 12:31:13 | × | mechap quits (~mechap@user/mechap) (Quit: WeeChat 3.8) |
| 12:32:26 | <Profpatsch> | I have an Applicative validator/parser which is also Selective; I want to check if two of the inputs are the same; can I do that with just the Selective interface? |
| 12:38:27 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 12:45:30 | → | gurkenglas joins (~user@dynamic-046-114-177-161.46.114.pool.telefonica.de) |
| 12:46:11 | <ncf> | show some code |
| 12:47:13 | <Profpatsch> | x = do { a <- get "a"; b <- get "b"; pure Foo{..} } |
| 12:48:03 | <Profpatsch> | a and b should be the same; either of them may be returned, but the parser should fail with an error for "b" iff they are not the same |
| 12:48:23 | <ncf> | guard (a == b) |
| 12:48:37 | <Profpatsch> | It’s not Alternative |
| 12:49:02 | <Profpatsch> | It’s Functor, Applicative and Selective |
| 12:49:42 | <ncf> | how do you fail then? |
| 12:49:55 | <Profpatsch> | In particular, every failing parser needs to have a reference to the field it is parsing, because the failure has to appear in the form field that caused the error |
| 12:50:15 | <Profpatsch> | ncf: in Validation (Id, Error) a |
| 12:50:30 | <Profpatsch> | via validation-selective |
| 12:50:58 | <Profpatsch> | I feel like Selective should provide the ability, but I can also go this on foot I think |
| 12:51:51 | → | mechap joins (~mechap@user/mechap) |
| 12:53:50 | × | mechap quits (~mechap@user/mechap) (Client Quit) |
| 12:54:27 | → | freeside joins (~mengwong@103.252.202.189) |
| 12:56:02 | <[exa]> | Profpatsch: you might need to smuggle an Either there manually |
| 12:56:45 | → | mechap joins (~mechap@user/mechap) |
| 12:57:36 | <ncf> | i still don't understand what this has to do with Selective. failureUnless (a == b) (yourFieldId, "boo") |
| 12:58:25 | <Profpatsch> | a and b come from a Selective m |
| 12:58:30 | <Profpatsch> | not monadic |
| 12:59:32 | <Profpatsch> | [exa]: yeah, that’s my guess as well |
| 13:00:42 | → | Albina_Pavlovna joins (~Albina_Pa@2603-7000-76f0-76e0-4593-7814-42d6-7053.res6.spectrum.com) |
| 13:01:44 | <Profpatsch> | Or I really need join anyway |
| 13:01:45 | <[exa]> | Profpatsch: like, you can start with (==) <$> get "a" <*> get "b", then convert it to Either, and on that you can do the select |
| 13:02:09 | <[Leary]> | `fromMaybeS (Failure err) do { a <- get "a"; b <- get "b"; pure $ guard (a == b) $> b }` perhaps? |
| 13:02:10 | × | gurkenglas quits (~user@dynamic-046-114-177-161.46.114.pool.telefonica.de) (Ping timeout: 250 seconds) |
| 13:02:38 | <Profpatsch> | But guard is Alternative, no? |
| 13:02:44 | <[Leary]> | That's for Maybe. |
| 13:02:49 | <Profpatsch> | Ah |
| 13:03:11 | <[exa]> | Profpatsch: you generally don't need join unless you use the partial results to generate the shape of the computation that follows |
| 13:03:37 | <Profpatsch> | [exa]: yeah, exactly that’s why I’m trying the Selective approach |
| 13:05:00 | <[exa]> | maybe try to draft what result you want to get out, then smash _ in the middle and do the type tetris |
| 13:06:20 | <Profpatsch> | [Leary]: I think that is getting real close; now I only have the remaining problem that I can’t expose a direct primitive to construct `Failure`, that should only fall out of trying to parse the field itself wtih `get` |
| 13:08:25 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 13:13:31 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 240 seconds) |
| 13:15:03 | × | vandita quits (~vandit@176-241-45-188.pool.digikabel.hu) (Ping timeout: 256 seconds) |
| 13:15:45 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:e958:834b:4d15:c9fd) |
| 13:16:29 | → | vandita joins (~vandit@fibhost-66-106-96.fibernet.hu) |
| 13:20:01 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:e958:834b:4d15:c9fd) (Ping timeout: 240 seconds) |
| 13:25:47 | <[exa]> | Profpatsch: btw, just that I understand the whole thing -- what is the effect that will be allowed to be skipped if the things are equal (or not equal)? |
| 13:25:49 | × | acidjnk quits (~acidjnk@p200300d6e7072f96316225cd2ab6c884.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 13:29:17 | <Profpatsch> | [exa]: Just (Failure (fieldId, errmsg)) |
| 13:29:27 | <Profpatsch> | [exa]: Failure (fieldId, errmsg) |
| 13:35:55 | × | SoF quits (~skius@user/skius) (Quit: Ping timeout (120 seconds)) |
| 13:36:45 | <Profpatsch> | Okay, I solved it “on foot” with your snippet [Leary], the code is not pretty but I think it kinda works |
| 13:36:48 | × | euandreh quits (~Thunderbi@189.6.18.7) (Ping timeout: 240 seconds) |
| 13:37:00 | <Profpatsch> | In particular the form is rendered correctly with the errors at the right places :) |
| 13:37:13 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 13:37:24 | <ncf> | post? |
| 13:37:37 | ncf | is still massively confused about the whole thing but is probably just being dense |
| 13:39:09 | <[exa]> | oh that's for web forms? makes sense now |
| 13:40:03 | <Profpatsch> | ncf: something like this: https://paste.tomsmeding.com/4RxpFDDj |
| 13:40:48 | <Profpatsch> | [exa]: yeah, I’m trying to see how far I can go with this, digestive-functors is a bit much for my tastes |
| 13:41:59 | <Profpatsch> | In particular, one should distinguish between programming errors (i.e. wrong field name) and user errors, hence the two different types composed together. |
| 13:42:55 | → | CiaoSen joins (~Jura@145.224.73.17) |
| 13:48:12 | <[exa]> | Profpatsch: what would be wrong with: ((\a b -> if a == b then Right a else Left a) <$> get "a" <*> get "b") S.<*? Failure ["not same"] |
| 13:48:20 | <[exa]> | (S is Control.Selective) |
| 13:48:38 | <[exa]> | the failures from the gets propagate and prevent the comparison failure from triggering |
| 13:48:40 | <Profpatsch> | [exa]: Is that the fromMaybeS just reformulated? |
| 13:48:45 | <[exa]> | likely |
| 13:49:18 | <[exa]> | ah yeah, good. :D |
| 13:49:20 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 13:49:22 | <Profpatsch> | yeah pretty sure it is? I guess? |
| 13:50:04 | <Profpatsch> | THe main issue I have is that I have to provide a function like failValidation :: f a |
| 13:50:06 | <[exa]> | that explains the best shortcut for the abysmal-quality if there |
| 13:50:57 | <[exa]> | Profpatsch: what's wrong with `failValidation x = Failure [x]` ? |
| 13:51:35 | × | vandita quits (~vandit@fibhost-66-106-96.fibernet.hu) (Ping timeout: 240 seconds) |
| 13:51:44 | <Profpatsch> | [exa]: Ideally there’d be some way of saying “validate this field by looking at some other field, but put the error into this field”; I mean I guess that’s what I’m doing in `aEqB` |
| 13:53:30 | → | vandita joins (~vandit@92-249-141-141.pool.digikabel.hu) |
| 13:53:39 | × | CiaoSen quits (~Jura@145.224.73.17) (Ping timeout: 268 seconds) |
| 13:54:12 | <Profpatsch> | It gets more complicated than that cause the multipart parser also supports files of course, in which case the form should re-populate the form value with the fielname I guess. |
| 13:54:27 | <Profpatsch> | In other cases with the original `value` string |
| 13:56:45 | <Profpatsch> | anyaway, next step is re-using these parsers for server-side validation after the fields lose focus |
| 13:57:53 | <[exa]> | hm so that routing information on "where this error belongs" is now stored in the label there.. what about something like bifunctorish `first changeLabel` ? |
| 13:59:49 | <Profpatsch> | [exa]: I don’t quite understand what you mean by that; the way I do it rn is that each form field html constuctor gets the whole list of errors and decides whether it should be displaying the error inputHtml :: Foldable f => FormField -> f (T2 "formFieldName" Text "error" Error) -> Html |
| 14:00:05 | <ncf> | i feel like the easiest would be to pass a predicate (== compare) to field' |
| 14:00:31 | <Profpatsch> | since FormField knows its own `name` |
| 14:01:14 | <ncf> | hm but maybe you need Monad for that |
| 14:02:25 | <[exa]> | Profpatsch: the interface would be like: displayTheErrorsAroundField @"asd" $ ...some validated stuff... |
| 14:03:00 | <Profpatsch> | [exa]: yeah, I had something like this in mind I guess … |
| 14:03:01 | <[exa]> | (for the validation, and later the html rendering may pick up the modified error locations) |
| 14:04:51 | <[exa]> | Profpatsch: btw selective in this case will only allow you to sanely skip validations that are impossible e.g. because there isn't enough data... Maybe you might want to bake a custom combinator for this (something like `allS`) |
| 14:06:09 | <[exa]> | as in: ifAllFieldsPresent ["a", "b", ...] $ \[a,b,...] -> if ... then Success ... else Failure ... |
| 14:06:47 | <Profpatsch> | [exa]: ah you mean the fromMaybeS isn’t actually doing anything here? |
| 14:07:18 | <[exa]> | it is only blocking the extra validation from firing (if others already failed) |
| 14:07:25 | <Profpatsch> | hm, but it has to |
| 14:07:44 | <Profpatsch> | As I said, I should probably go this on foot instead of via Selective :P |
| 14:08:11 | <[exa]> | with normal validation the extra check would fail too, so you would have "passwords not same" as an error because it was transitively triggered by the "get" failure. |
| 14:08:15 | <Profpatsch> | I haven’t yet found a case where using selective is nicer than adding custom combinator functions tbh. |
| 14:09:04 | <[exa]> | like, this ain't bad, but requires some effort to make it look nice |
| 14:11:54 | × | ryantrinkle quits (~ryantrink@140.174.243.224) (Remote host closed the connection) |
| 14:12:00 | <Profpatsch> | [exa]: it does seem to work though, if I say the second password field has to validate as an email, it will throw the email error, if I make it an email, it will throw the “have to be the same” error |
| 14:12:16 | <Profpatsch> | I guess that’s not the right semantics though, ideally both errors would be collected at the same time hm |
| 14:12:36 | <[exa]> | your may want an overall structure like: Result <$> get "field1" <* extraValidation1 <*> get "field2" <* extraValidation2; with extraValidationN things using the selective interface internally. The problem with applicatives/selectives is that you cannot send&re-use the values "around" easily as with full monads, which gets inconvenient esp. if you got used to monads |
| 14:12:45 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 14:13:00 | → | titibandit joins (~titibandi@user/titibandit) |
| 14:13:30 | <[exa]> | Profpatsch: for me it is collecting both errors if they both happen on the left side of the select (e.g., both fields are missing) |
| 14:16:37 | <Profpatsch> | yeah, but it definitely can’t be a Monad, because otherwise there’s no way to recapture the original values entered into the form. |
| 14:16:51 | <Profpatsch> | Hm, I guess it could be a best effort thing |
| 14:17:40 | → | euandreh joins (~Thunderbi@189.6.18.7) |
| 14:19:05 | <Profpatsch> | oh lol, now that I think about it, that won’t work anyway, because it only collects the values of fields that were wrong, not the others. So maybe I need These anyway, which would give be back my Monad instance |
| 14:21:46 | <[exa]> | Profpatsch: well Validation is about discarding the Success values (i.e., not having to produce them in the first place).... so maybe simply a different Selective would work |
| 14:23:46 | <[exa]> | like, morphology of the thing you have here looks like WriterT Either, instead you might want an EitherT Writer |
| 14:24:22 | → | hamzam3 joins (~hamzam3@2a01:e0a:1ee:8c60:849e:cc8e:5242:786f) |
| 14:24:23 | <[exa]> | spoiler: combining errors is hard. |
| 14:25:22 | → | dsrt^ joins (~dsrt@c-71-204-38-59.hsd1.ga.comcast.net) |
| 14:26:56 | <Profpatsch> | A Map wrapper with a monoid insteance that is (<>) = Map.mergeWith (<>) should work |
| 14:27:15 | → | shriekingnoise joins (~shrieking@186.137.175.87) |
| 14:31:07 | → | freeside joins (~mengwong@103.252.202.189) |
| 14:34:14 | → | gnalzo joins (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
| 14:35:08 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 14:35:45 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 14:37:22 | × | gruff quits (uid459651@id-459651.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 14:37:38 | → | ddellacosta joins (~ddellacos@146.70.185.10) |
| 14:40:20 | → | Guest56 joins (~Guest56@2600:6c5e:527f:9c3b:bc9c:4e9d:7cc1:716) |
| 14:51:15 | × | Guest56 quits (~Guest56@2600:6c5e:527f:9c3b:bc9c:4e9d:7cc1:716) (Quit: Client closed) |
| 15:01:39 | × | euandreh quits (~Thunderbi@189.6.18.7) (Remote host closed the connection) |
| 15:07:58 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 15:08:53 | → | img joins (~img@user/img) |
| 15:13:25 | → | euandreh joins (~Thunderbi@189.6.18.7) |
| 15:14:48 | → | freeside joins (~mengwong@103.252.202.189) |
| 15:15:52 | × | euandreh quits (~Thunderbi@189.6.18.7) (Remote host closed the connection) |
| 15:16:56 | → | euandreh joins (~Thunderbi@189.6.18.7) |
| 15:19:59 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 268 seconds) |
| 15:45:29 | × | euandreh quits (~Thunderbi@189.6.18.7) (Remote host closed the connection) |
| 15:48:27 | → | gurkenglas joins (~user@dynamic-046-114-179-235.46.114.pool.telefonica.de) |
| 15:50:49 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:e958:834b:4d15:c9fd) |
| 15:54:21 | → | oo_miguel joins (~Thunderbi@77.252.47.84) |
| 15:56:20 | × | Albina_Pavlovna quits (~Albina_Pa@2603-7000-76f0-76e0-4593-7814-42d6-7053.res6.spectrum.com) (Quit: ZZZzzz…) |
| 15:57:30 | × | zenstoic quits (uid461840@id-461840.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 15:59:14 | → | nate2 joins (~nate@98.45.169.16) |
| 15:59:46 | → | alternateved joins (~user@77-253-195-69.dynamic.inetia.pl) |
| 16:02:52 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 16:03:48 | × | nate2 quits (~nate@98.45.169.16) (Ping timeout: 240 seconds) |
| 16:05:07 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 16:05:41 | → | harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
| 16:13:17 | → | acidjnk joins (~acidjnk@p200300d6e7072f9698fc7344e9503bb5.dip0.t-ipconnect.de) |
| 16:16:41 | <jade[m]> | in regards to typeclass instances I wonder whether there could be a better way to handle the cases where there are multiple "correct" instances. |
| 16:16:41 | <jade[m]> | mainly the `Sum` or `Product` monoid come to mind. |
| 16:16:41 | <jade[m]> | We need a wrapper for each because we cannot just say |
| 16:16:41 | <jade[m]> | ...(truncated) |
| 16:17:29 | → | freeside joins (~mengwong@103.252.202.189) |
| 16:21:35 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 16:22:57 | <monochrom> | See my https://mail.haskell.org/pipermail/haskell-cafe/2017-May/127147.html >:) |
| 16:24:49 | <jade[m]> | that's amazing and nearly what I'm looking for :D |
| 16:26:02 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 246 seconds) |
| 16:27:21 | → | alternat` joins (~user@77-253-195-69.dynamic.inetia.pl) |
| 16:34:19 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 16:34:50 | × | eggplantade quits (~Eggplanta@2600:1700:38c5:d800:e958:834b:4d15:c9fd) (Remote host closed the connection) |
| 16:38:03 | × | alternat` quits (~user@77-253-195-69.dynamic.inetia.pl) (Remote host closed the connection) |
| 16:38:03 | × | alternateved quits (~user@77-253-195-69.dynamic.inetia.pl) (Remote host closed the connection) |
| 16:39:18 | × | kritzefitz quits (~kritzefit@debian/kritzefitz) (Remote host closed the connection) |
| 16:40:20 | → | eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
| 16:40:57 | → | alternateved joins (~user@77-253-195-69.dynamic.inetia.pl) |
| 16:42:45 | → | InvalidArgument joins (~fabrizio@2803:9800:98c4:76ad:983c:b21b:f36f:a8c9) |
| 16:47:02 | × | alternateved quits (~user@77-253-195-69.dynamic.inetia.pl) (Remote host closed the connection) |
| 16:50:28 | → | econo joins (uid147250@user/econo) |
| 16:51:29 | → | Pickchea joins (~private@user/pickchea) |
| 16:52:45 | → | kritzefitz joins (~kritzefit@debian/kritzefitz) |
| 16:55:59 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 264 seconds) |
| 16:57:22 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 16:57:45 | × | gurkenglas quits (~user@dynamic-046-114-179-235.46.114.pool.telefonica.de) (Ping timeout: 240 seconds) |
| 17:00:30 | → | freeside joins (~mengwong@103.252.202.189) |
| 17:06:55 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 17:07:04 | × | use-value quits (~Thunderbi@2a00:23c6:8a03:2f01:ddaa:9bff:1a38:a342) (Remote host closed the connection) |
| 17:07:23 | → | use-value joins (~Thunderbi@2a00:23c6:8a03:2f01:ddaa:9bff:1a38:a342) |
| 17:07:57 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 256 seconds) |
| 17:08:06 | × | eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 17:08:32 | → | reach joins (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) |
| 17:08:36 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 17:10:45 | × | Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Ping timeout: 240 seconds) |
| 17:11:53 | → | coot_ joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 17:14:35 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Ping timeout: 264 seconds) |
| 17:14:36 | coot_ | is now known as coot |
| 17:16:18 | → | robobub joins (uid248673@2a03:5180:f:5::3:cb61) |
| 17:20:44 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 17:20:44 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 17:20:44 | → | wroathe joins (~wroathe@user/wroathe) |
| 17:20:58 | → | eggplantade joins (~Eggplanta@2600:1700:38c5:d800:e958:834b:4d15:c9fd) |
| 17:23:54 | → | gurkenglas joins (~user@dynamic-046-114-179-235.46.114.pool.telefonica.de) |
| 17:27:35 | ← | InvalidArgument parts (~fabrizio@2803:9800:98c4:76ad:983c:b21b:f36f:a8c9) (Leaving) |
| 17:33:27 | → | hippoid joins (~hippoid@user/hippoid) |
| 17:35:21 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 17:36:32 | × | reach quits (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) (Ping timeout: 248 seconds) |
| 17:39:53 | × | kuribas quits (~user@ptr-17d51emeqlp3mkf19tm.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 27.1)) |
| 17:42:40 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 17:52:31 | → | taupiqueur joins (~taupiqueu@2a02-842a-8180-4601-1912-96d1-9f83-aa24.rev.sfr.net) |
| 17:56:04 | → | alexherbo2 joins (~alexherbo@2a02-842a-8180-4601-1912-96d1-9f83-aa24.rev.sfr.net) |
| 17:59:57 | → | Katarushisu joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
| 18:00:47 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 18:01:01 | × | vandita quits (~vandit@92-249-141-141.pool.digikabel.hu) (Ping timeout: 240 seconds) |
| 18:03:00 | → | vandita joins (~vandit@178-164-188-2.pool.digikabel.hu) |
| 18:03:19 | → | wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com) |
| 18:03:19 | × | wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
| 18:03:19 | → | wroathe joins (~wroathe@user/wroathe) |
| 18:08:36 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 18:08:41 | → | machinedgod joins (~machinedg@31.217.42.201) |
| 18:09:56 | × | hippoid quits (~hippoid@user/hippoid) (Quit: WeeChat 3.8) |
| 18:12:59 | → | __monty__ joins (~toonn@user/toonn) |
| 18:15:07 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 18:28:32 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 246 seconds) |
| 18:31:45 | × | zmt00 quits (~zmt00@user/zmt00) (Read error: Connection reset by peer) |
| 18:31:48 | → | enoq joins (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) |
| 18:34:35 | → | michalz joins (~michalz@185.246.204.90) |
| 18:35:51 | → | caryhartline joins (~caryhartl@168.182.58.169) |
| 18:39:35 | <hololeap> | I'm working on some code that uses `fmap` instead of <$> and I'm wondering if the latter didn't exist at some point or if these people just like to write odd code |
| 18:39:47 | → | freeside joins (~mengwong@103.252.202.189) |
| 18:39:56 | <hololeap> | literally `fmap` as an infix |
| 18:40:16 | <hololeap> | they also use a lot of snake_case >:( |
| 18:41:34 | <geekosaur> | <$> is fairly recent, yes |
| 18:41:46 | <geekosaur> | came in with Applicative |
| 18:42:05 | <hololeap> | ok, that makes more sense, then |
| 18:42:19 | <mauke> | snake_case is morally correct |
| 18:42:31 | <hololeap> | ikr |
| 18:43:34 | <hololeap> | hlint doesn't like it |
| 18:44:17 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 256 seconds) |
| 18:44:25 | <mauke> | what does it know? "hlint" isn't even a word |
| 18:44:50 | <monochrom> | It should have been h_lint, too. >:) |
| 18:45:23 | <monochrom> | We should also revive Oleg case. Example: oleg'case |
| 18:45:31 | <yushyin> | h-lint, kebab-case! |
| 18:45:57 | <monochrom> | yeah I like kebab-case in Scheme. |
| 18:46:22 | <mauke> | docker-compose |
| 18:46:25 | <hololeap> | No instance for (Num lint) arising from a use of '-' |
| 18:46:41 | <monochrom> | except when it's call-with-current-continuation. Then I prefer call/cc. |
| 18:47:04 | <mauke> | call/without/current/continuation |
| 18:47:10 | <mauke> | call-w/o-cc |
| 18:47:19 | <monochrom> | haha |
| 18:49:31 | × | Nosrep quits (~Nosrep@user/nosrep) (Remote host closed the connection) |
| 18:54:35 | × | machinedgod quits (~machinedg@31.217.42.201) (Ping timeout: 268 seconds) |
| 18:56:19 | × | titibandit quits (~titibandi@user/titibandit) (Remote host closed the connection) |
| 18:57:21 | <hololeap> | where is the function to look up the full path of an exe in PATH, sort of like the 'which' command? |
| 18:57:41 | × | perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.8) |
| 18:57:49 | → | Pickchea joins (~private@user/pickchea) |
| 18:58:06 | → | zmt00 joins (~zmt00@user/zmt00) |
| 19:00:46 | → | perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) |
| 19:01:39 | → | rburkholder joins (~blurb@96.45.2.121) |
| 19:03:50 | × | offtherock quits (~blurb@96.45.2.121) (Ping timeout: 268 seconds) |
| 19:03:51 | → | freeside joins (~mengwong@103.252.202.189) |
| 19:04:50 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 19:08:01 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 19:09:05 | → | offtherock joins (~blurb@96.45.2.121) |
| 19:11:31 | × | rburkholder quits (~blurb@96.45.2.121) (Ping timeout: 240 seconds) |
| 19:11:42 | <ncf> | simplest is probably to shell out and call command -v ? |
| 19:14:53 | <sm> | maybe useful: |
| 19:14:54 | <sm> | likelyExecutablesInPath = do |
| 19:14:54 | <sm> | pathdirs <- splitOneOf "[:;]" `fmap` getEnvSafe "PATH" |
| 19:14:54 | <sm> | pathfiles <- concat `fmap` mapM getDirectoryContentsSafe pathdirs |
| 19:14:54 | <sm> | return $ nubSort pathfiles |
| 19:16:48 | <hololeap> | I thought there was a simple one in base :/ |
| 19:16:58 | <mauke> | why split on [ |
| 19:17:27 | <yushyin> | hololeap: Shelly and Turtle both have a which function, but that's not base :/ |
| 19:17:46 | <sm> | mauke that is.. a very good question |
| 19:18:11 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 264 seconds) |
| 19:18:13 | <mauke> | have you been smoking too much sed? |
| 19:18:14 | <monochrom> | System.Directory.findExecutable :) |
| 19:18:25 | <monochrom> | and the plural version |
| 19:18:38 | <geekosaur> | filepath has stuff to split PATH up properly |
| 19:18:47 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 19:18:47 | <geekosaur> | (not base, but bootlib) |
| 19:19:09 | <sm> | yes.. thanks! And yes, I bet there is newer stuff in directory package |
| 19:19:50 | × | perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.8) |
| 19:20:57 | → | freeside joins (~mengwong@103.252.202.189) |
| 19:22:25 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 19:22:27 | <monochrom> | (pun intended dad joke) In general, System.Directory should be on your default search path for this kind of things. >:D |
| 19:23:03 | <ncf> | why split on ; also |
| 19:23:10 | <geekosaur> | windowes |
| 19:23:14 | <mauke> | quick and dirty windows compatibility |
| 19:23:17 | <ncf> | oh god |
| 19:23:27 | <mauke> | except it'll break on windows anyway |
| 19:23:35 | <mauke> | because C:\lol\whatever will be split on : |
| 19:24:15 | → | perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) |
| 19:24:18 | <sm> | I think I wrote this when System.Directory was less featureful |
| 19:25:08 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 19:26:17 | <sm> | ack.. I may have to break down and rewrite/retest. Where is a windows machine when you need one |
| 19:26:28 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 240 seconds) |
| 19:26:54 | <geekosaur> | waiting for you to plug in a credit card for the license |
| 19:27:53 | <sm> | actually I think I do have a working windows 7 vm here at least |
| 19:27:56 | <mauke> | the windows xp license code generator has been cracked |
| 19:28:04 | <mauke> | so that's an option :-) |
| 19:28:25 | <sm> | I think MS provides free vm images of (some version of) the older windows |
| 19:28:55 | <mauke> | also, github actions |
| 19:29:28 | <sm> | indeed, but you really need an interactive one sometimes |
| 19:31:11 | → | coot joins (~coot@89-69-206-216.dynamic.chello.pl) |
| 19:35:35 | × | manwithluck quits (manwithluc@hoeven.dossingday.ml) (Remote host closed the connection) |
| 19:36:01 | → | monoidal joins (~monoidal@2001:861:3f42:1b60:b35a:bce5:8722:1910) |
| 19:36:33 | <sm> | oh hmm.. "Your activation period has expired.". Maybe those images are time limited. |
| 19:37:19 | <sm> | oh well, I think no windows user cares about this, maybe I shouldn't either |
| 19:38:20 | → | manwithluck joins (manwithluc@hoeven.dossingday.ml) |
| 19:38:45 | <sm> | oh.. but then it lets me in anyway. |
| 19:39:51 | <sm> | nice.. seems I have a working windows 11 VM too. |
| 19:40:57 | <tomsmeding> | in my experience windows complaining about activation is just that -- complaining |
| 19:41:17 | <tomsmeding> | it disables some customisation settings iirc, stuff like desktop background and other personalisation settings |
| 19:41:19 | → | kluk joins (~arrowhead@cpe-74-66-76-151.nyc.res.rr.com) |
| 19:43:01 | <hololeap> | monochrom: thank you! |
| 19:43:08 | <hololeap> | not base but close enough |
| 19:43:48 | <sm> | wow.. I can run an intel windows binary in this arm version of windows. I guess it has some apple-rosetta-like translation |
| 19:45:02 | <sm> | though a minute later the vm crashed. |
| 19:46:11 | <monochrom> | Just like what happened when my students tried virtualboxing ubuntu on M1 :D |
| 19:53:22 | <hololeap> | monochrom: I think the reason why I didn't find it when I first looked in there is that it's catagorized under "existence tests" |
| 19:53:46 | <monochrom> | Ah |
| 19:53:59 | <monochrom> | ctrl-f is better :) |
| 19:54:14 | <hololeap> | I did that but I searched for "path" :( |
| 19:54:18 | × | monoidal quits (~monoidal@2001:861:3f42:1b60:b35a:bce5:8722:1910) (Quit: Client closed) |
| 19:54:26 | <monochrom> | Ah |
| 19:54:29 | <hololeap> | (I couldn't remember then name of it) |
| 19:54:30 | <hololeap> | haha |
| 19:54:46 | <monochrom> | This is why Searle's Chinese Room argument breaks. |
| 19:55:04 | → | monoidal joins (~monoidal@2001:861:3f42:1b60:93b1:31be:ae42:8ec9) |
| 19:55:06 | <monochrom> | There is an smbc for that. :) |
| 19:55:29 | → | titibandit joins (~titibandi@user/titibandit) |
| 19:58:01 | <monochrom> | https://www.smbc-comics.com/comic/robot-john-searle |
| 20:00:38 | <monochrom> | Complexity-wise if you can find the answer in time proportional to the question length, as opposed to the database size which is infinite anyway, then you can't be said to be "just dumb searching". |
| 20:00:44 | → | nate2 joins (~nate@98.45.169.16) |
| 20:01:24 | <monochrom> | Equivalently, just because the database is right in front of you, doesn't mean you know how to search it usefully. :) |
| 20:05:25 | × | nate2 quits (~nate@98.45.169.16) (Ping timeout: 240 seconds) |
| 20:06:19 | <mauke> | https://blog.plover.com/prog/loaded-uzi.html |
| 20:13:47 | → | cheater_ joins (~Username@user/cheater) |
| 20:14:23 | × | _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection) |
| 20:14:31 | → | waleee joins (~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) |
| 20:15:59 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 20:16:03 | cheater_ | is now known as cheater |
| 20:17:10 | → | szkl joins (uid110435@id-110435.uxbridge.irccloud.com) |
| 20:19:56 | <Profpatsch> | [exa]: Funnily enough I think the Applicative semantics I actually need for the form thingy is neither Valiadtion nor Either, but rather ((,) (These Error OriginalValue)) or something along those lines |
| 20:19:57 | × | gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer) |
| 20:20:04 | <Profpatsch> | A kingdom for Deriving Via … oh wait, it exists |
| 20:20:26 | <Profpatsch> | the future is bright |
| 20:20:36 | <Profpatsch> | the presence is bright :P |
| 20:21:21 | <[exa]> | Profpatsch: yap (,) is Writer... :D |
| 20:21:41 | → | ub joins (~Thunderbi@p200300ecdf000282072de7d7af033fca.dip0.t-ipconnect.de) |
| 20:21:51 | <geekosaur> | this is starting to look like Chronicle |
| 20:21:52 | × | ubert quits (~Thunderbi@p548c91e0.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 20:21:52 | ub | is now known as ubert |
| 20:23:07 | <Profpatsch> | [exa]: I don’t think it is? Does the Applicative instance for (x,) have the same space leaks? |
| 20:23:34 | × | mechap quits (~mechap@user/mechap) (Quit: WeeChat 3.8) |
| 20:25:39 | → | gentauro joins (~gentauro@user/gentauro) |
| 20:27:12 | <Profpatsch> | Wait, <*> left-associates and <> right-associates, isn’t that a very bad sign? |
| 20:29:13 | <int-e> | :t (<*>) |
| 20:29:14 | <lambdabot> | Applicative f => f (a -> b) -> f a -> f b |
| 20:29:39 | <int-e> | (it's not associative, you don't have a choice) |
| 20:30:10 | <Profpatsch> | no I mean |
| 20:30:11 | <Profpatsch> | (([], …) <*> ([1], …)) <*> ([2,3], …) |
| 20:30:14 | <Profpatsch> | (([] <> [1]), …) <*> [2,3], …) |
| 20:30:19 | <Profpatsch> | (([] <> [1]) <> [2,3], …) |
| 20:30:43 | × | coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
| 20:30:52 | <int-e> | yeah that's not ideal |
| 20:31:35 | <Profpatsch> | I guess I can use a Seq |
| 20:31:41 | <int-e> | But you can always fix that by using DList a ~ Endo [] a |
| 20:32:03 | <int-e> | Or Seq, sure |
| 20:32:11 | <Profpatsch> | I guess that’s the origin of the Writer space-leak |
| 20:32:24 | <int-e> | It is, and the fix is the same |
| 20:32:27 | <Profpatsch> | And the fix is Writer.CPS, which is exactly DList |
| 20:32:31 | <int-e> | Seq isn't lazy though |
| 20:32:31 | <Profpatsch> | yep yep |
| 20:32:39 | <Profpatsch> | int-e: is that a problem? |
| 20:32:46 | × | trev quits (~trev@user/trev) (Quit: trev) |
| 20:33:25 | <Profpatsch> | The applicative is gonna be forced in any case |
| 20:33:29 | <int-e> | Hmm, in the case of Writer (with DList, or the CPS version), having a lazy result actually works, you can consume it before the whole writing is done. |
| 20:33:54 | <Profpatsch> | but yeah, if you build an infinite Applicative structure and only look at the first n elements of the fst Seq, that might be a problem |
| 20:34:07 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 20:34:39 | <int-e> | > execWriter $ tell "abc" >> undefined |
| 20:34:40 | <lambdabot> | "abc*Exception: Prelude.undefined |
| 20:34:43 | <Profpatsch> | <> should right-associate, convince me otherwise :) |
| 20:34:54 | <Profpatsch> | I think that might solve a bunch of problems |
| 20:35:07 | <int-e> | infixr 6 <> |
| 20:35:41 | <Profpatsch> | err, I didn’t think this trough; but <*> right-associating makes no sense |
| 20:36:00 | <Profpatsch> | Hrm, I guess no real solution apart from using Dlists and maybe annotating the (,) applicative instance |
| 20:36:28 | <Profpatsch> | In general I feel like base should have better instance docs |
| 20:36:32 | → | freeside joins (~mengwong@103.252.202.189) |
| 20:36:33 | <Profpatsch> | with examples and dos and don’ts |
| 20:36:43 | <monochrom> | > take 3 (execWriter $ tell "abc" >> undefined) |
| 20:36:44 | <lambdabot> | "abc" |
| 20:36:46 | <monochrom> | :) |
| 20:36:52 | <Profpatsch> | There’s a bunch of trip mines like that |
| 20:37:17 | <int-e> | monochrom: my example did print the "abc part :) |
| 20:37:46 | <int-e> | (hmm, show of laziness?) |
| 20:37:50 | <monochrom> | Yeah, but there are always doubters and haters who focus on the irrelevant presence of an error message. |
| 20:38:00 | <int-e> | > fix error |
| 20:38:01 | <lambdabot> | "*Exception: *Exception: *Exception: *Exception: *Exception: *Exception: *Ex... |
| 20:38:16 | <Profpatsch> | But, like, I use (Validation (NonEmpty …)) throughout the code already and fixing that is a problem for future me |
| 20:38:23 | <Profpatsch> | (it has the same problem) |
| 20:40:26 | <Profpatsch> | Actually that’s a pretty bad thing, cause you have to rebuild n²/2 NonEmpty lists to get the final result |
| 20:40:45 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 20:41:10 | <Profpatsch> | So if you parse a CSV with 1000 lines and 750 of those have errors, that’s a pretty huge space leak |
| 20:43:10 | <Profpatsch> | (or rather n NonEmpty lists with n²/2 elements |
| 20:44:24 | × | biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer) |
| 20:45:04 | → | wroathe joins (~wroathe@50.205.197.50) |
| 20:45:04 | × | wroathe quits (~wroathe@50.205.197.50) (Changing host) |
| 20:45:04 | → | wroathe joins (~wroathe@user/wroathe) |
| 20:49:17 | → | biberu joins (~biberu@user/biberu) |
| 20:53:25 | <tomsmeding> | % import Data.List.NonEmpty |
| 20:53:25 | <yahb2> | <no output> |
| 20:53:34 | <tomsmeding> | % newtype NonEmptyEndo a = NonEmptyEndo ([a] -> NonEmpty a) |
| 20:53:34 | <yahb2> | <no output> |
| 20:54:17 | <tomsmeding> | % instance Semigroup (NonEmptyEndo a) where NonEmptyEndo f <> NonEmptyEndo g = NonEmptyEndo (g . toList . f) |
| 20:54:17 | <yahb2> | <interactive>:183:96: error: ; Ambiguous occurrence ‘toList’ ; It could refer to ; either ‘Data.List.NonEmpty.toList’, ; imported from ‘Data.List.NonEmpty’ ; ... |
| 20:54:28 | <tomsmeding> | % instance Semigroup (NonEmptyEndo a) where NonEmptyEndo f <> NonEmptyEndo g = NonEmptyEndo (g . Data.List.NonEmpty.toList . f) |
| 20:54:28 | <yahb2> | <no output> |
| 20:54:46 | <tomsmeding> | it's not a monoid, clearly |
| 20:55:08 | <Profpatsch> | NonEmpty has not mempty, yeah :) |
| 20:55:14 | <Profpatsch> | cause it’s non empty |
| 20:55:15 | <tomsmeding> | % runNonEmptyEndo :: NonEmptyEndo a -> NonEmpty a ; runNonEmptyEndo (NonEmptyEndo f) = f [] |
| 20:55:15 | <yahb2> | <no output> |
| 20:55:25 | <tomsmeding> | Profpatsch: replace your NonEmpty with NonEmptyEndo? :p |
| 20:55:28 | <Profpatsch> | tomsmeding: dlist has it now |
| 20:55:37 | <Profpatsch> | Data.DList.DNonEmpty |
| 20:55:41 | <Profpatsch> | includes patterns and everything |
| 20:55:52 | <tomsmeding> | ah lol |
| 20:55:58 | <Profpatsch> | Although no, no patterns yet |
| 20:56:08 | <tomsmeding> | always good to find out that others had your idea before you did |
| 20:56:14 | <tomsmeding> | shows it was a good idea |
| 20:56:16 | <Profpatsch> | NeSeq has some cool patterns tho |
| 20:56:29 | <Profpatsch> | tomsmeding: an idea whose time has come :P |
| 20:56:37 | <Profpatsch> | https://hackage.haskell.org/package/nonempty-containers-0.3.4.4/docs/Data-Sequence-NonEmpty.html#v:IsNonEmpty |
| 20:56:39 | <Profpatsch> | these are so cool |
| 20:57:02 | <Profpatsch> | you can match IsEmpty and then IsNonEmpty and it works cause |
| 20:57:04 | <Profpatsch> | {-# COMPLETE IsNonEmpty, IsEmpty #-} |
| 20:57:21 | <Profpatsch> | The moment where patterns clicked in my head |
| 20:57:29 | <Profpatsch> | in my *head* (ba dum ts) |
| 20:57:37 | → | ub joins (~Thunderbi@p548c91e0.dip0.t-ipconnect.de) |
| 20:58:08 | × | ubert quits (~Thunderbi@p200300ecdf000282072de7d7af033fca.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 20:58:08 | ub | is now known as ubert |
| 20:59:14 | <Profpatsch> | obligatory https://www.youtube.com/watch?v=6Ejga4kJUts |
| 21:01:58 | × | enoq quits (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq) |
| 21:09:21 | × | hamzam3 quits (~hamzam3@2a01:e0a:1ee:8c60:849e:cc8e:5242:786f) (Quit: Leaving) |
| 21:16:49 | sm | emerges from epic rabbit hole.. well I believe you mauke about that old PATH splitting code being broken on windows.. but somehow it seems to get the job done anyway |
| 21:19:31 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Quit: Leaving) |
| 21:19:32 | <int-e> | it works fine if *everything* is on C:? |
| 21:20:44 | <int-e> | Which if you're testing in a VM is more likely than with "serious" Windows installations. |
| 21:23:56 | × | caryhartline quits (~caryhartl@168.182.58.169) (Remote host closed the connection) |
| 21:37:24 | × | gurkenglas quits (~user@dynamic-046-114-179-235.46.114.pool.telefonica.de) (Ping timeout: 250 seconds) |
| 21:40:09 | <sm> | heheh finally I see what it's doing with my own eyes.. ["C","\\Windows\\system32","C","\\Windows","C","\\Windows\\System32\\Wbem",...] |
| 21:40:09 | <sm> | yes indeed, broken, though I used it in a way that it didn't matter |
| 21:41:47 | <sm> | though, as you say in real life someone might have installed hledger addons across multiple drives and they wouldn't work. That person is probably out there shaking their fist, if they exist. |
| 21:44:40 | <sm> | off topic, but I think I quite like Windows' window management (easy snapping to full/half/quarter screen positions) |
| 21:45:54 | <ncf> | wdym <*> right-associating? |
| 21:46:01 | <ncf> | oh i was scrolled up |
| 21:46:56 | → | reach joins (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) |
| 21:53:19 | × | titibandit quits (~titibandi@user/titibandit) (Remote host closed the connection) |
| 21:56:12 | × | elmklod quits (~Elm@94.25.164.115) (Quit: Leaving) |
| 21:57:35 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 22:02:29 | → | freeside joins (~mengwong@103.252.202.189) |
| 22:03:44 | × | gnalzo quits (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
| 22:07:24 | <sm> | ah, now I remember.. none of https://hackage.haskell.org/package/directory-1.3.8.1/docs/System-Directory.html#g:5 do quite what I need (find all the executables in PATH whose name starts with a prefix) |
| 22:08:45 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 22:12:44 | → | xameer joins (~xameer@144.48.224.57) |
| 22:16:46 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:19:45 | → | freeside joins (~mengwong@103.252.202.189) |
| 22:20:56 | × | mtjm quits (~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection) |
| 22:22:12 | → | mtjm joins (~mutantmel@2604:a880:2:d0::208b:d001) |
| 22:23:48 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 22:25:59 | × | xameer quits (~xameer@144.48.224.57) (Quit: Quit) |
| 22:29:50 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 22:31:31 | <sm> | mauke, https://github.com/simonmichael/hledger/issues/2040 noted and fixed, thanks for the report |
| 22:31:52 | <sm> | or was it int-e, oh dear |
| 22:32:00 | × | juri_ quits (~juri@84-19-175-187.pool.ovpn.com) (Ping timeout: 250 seconds) |
| 22:32:30 | <sm> | mauke first.. alright then |
| 22:32:53 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:36:53 | × | michalz quits (~michalz@185.246.204.90) (Remote host closed the connection) |
| 22:39:49 | → | freeside joins (~mengwong@103.252.202.189) |
| 22:40:18 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 22:44:01 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 22:47:44 | <int-e> | yeah |
| 22:48:29 | <int-e> | sm: I really only chimed in on the "but somehow it seems to get the job done anyway" part |
| 22:49:01 | <sm> | yes, and you were quite right, thanks |
| 22:49:08 | <int-e> | because "it worked in testing" is always a fun scenario to analyse |
| 22:50:56 | <darkling> | "I don't care if it works on your machine. We're not shipping your machine!" |
| 22:51:22 | <sm> | Windows is fun! Frequently popping up random ads and requests to do this or that! |
| 22:53:15 | × | johnw quits (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) (Quit: ZNC - http://znc.in) |
| 22:53:57 | <monochrom> | Yeah I'm not upgrading ("upgrading") to 11 any time soon. |
| 22:54:16 | <monochrom> | OK that's not fair, 11 has good additions too. |
| 22:54:35 | <int-e> | more like ad-itions amiright |
| 22:54:41 | <monochrom> | hahaha |
| 22:55:15 | <int-e> | it's amazing what people put up with :-/ |
| 22:55:17 | <sm> | I expect it's a major improvement on windows 8, at least |
| 22:55:39 | <sm> | if I could save this VM image I would actually try using it a bit |
| 22:56:09 | → | czy joins (~user@host-140-24.ilcub310.champaign.il.us.clients.pavlovmedia.net) |
| 22:57:30 | <sm> | as I was saying in #ghcup: ghcup copes with it pretty well, a few access errors here and there but everything seemed to work smoothly! |
| 22:58:41 | <sm> | as in: you might see an Access Error during install or during a cabal build, and then you run again and it carries on and things seem to work |
| 23:00:40 | × | reach quits (~reach@2607:fea8:4c0:990:9195:d8e:b2d8:baa7) (Read error: Connection reset by peer) |
| 23:02:41 | × | acidjnk quits (~acidjnk@p200300d6e7072f9698fc7344e9503bb5.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 23:17:48 | × | oo_miguel quits (~Thunderbi@77.252.47.84) (Ping timeout: 240 seconds) |
| 23:20:41 | → | juri_ joins (~juri@84-19-175-187.pool.ovpn.com) |
| 23:21:53 | → | mauke_ joins (~mauke@user/mauke) |
| 23:22:55 | → | merijn joins (~merijn@86-86-29-250.fixed.kpn.net) |
| 23:23:31 | × | mauke quits (~mauke@user/mauke) (Ping timeout: 240 seconds) |
| 23:23:31 | mauke_ | is now known as mauke |
| 23:24:47 | × | foul_owl quits (~kerry@45.143.82.40) (Ping timeout: 240 seconds) |
| 23:27:08 | × | merijn quits (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 240 seconds) |
| 23:30:16 | → | machinedgod joins (~machinedg@31.217.42.201) |
| 23:39:19 | → | reach joins (~reach@2607:fea8:4c0:990:f891:b512:3659:bf1b) |
| 23:43:09 | → | ratapaca joins (~ratapaca@98.40.240.33) |
| 23:43:33 | → | slack1256 joins (~slack1256@181.43.60.199) |
| 23:47:09 | → | freeside joins (~mengwong@103.252.202.189) |
| 23:50:27 | × | Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:51:00 | → | foul_owl joins (~kerry@45.143.82.39) |
| 23:51:05 | × | freeside quits (~mengwong@103.252.202.189) (Ping timeout: 240 seconds) |
| 23:52:50 | → | pyooque joins (~puke@user/puke) |
| 23:52:50 | puke | is now known as Guest9165 |
| 23:52:50 | pyooque | is now known as puke |
| 23:52:53 | → | xameer joins (~xameer@144.48.224.57) |
| 23:55:31 | × | Guest9165 quits (~puke@user/puke) (Ping timeout: 268 seconds) |
| 23:56:18 | × | xameer quits (~xameer@144.48.224.57) (Client Quit) |
| 23:56:31 | × | machinedgod quits (~machinedg@31.217.42.201) (Ping timeout: 240 seconds) |
| 23:58:17 | × | ratapaca quits (~ratapaca@98.40.240.33) (Quit: Leaving) |
All times are in UTC on 2023-05-27.