Logs on 2024-11-18 (liberachat/#haskell)
| 00:00:26 | → | xal joins (~xal@mx1.xal.systems) |
| 00:00:26 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds) |
| 00:01:25 | <Axman6> | yeah the RIO approach (or similar ReaderT Env IO ideas) get you a very long way. it's pretty easy to do things like `inDB :: DB a -> ReaderT Env IO a` which runs a transaction inside your reader |
| 00:02:48 | × | sprotte24 quits (~sprotte24@p200300d16f2c3600a1fb2e60ac56d901.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 00:10:06 | × | Everything quits (~Everythin@178-133-36-30.mobile.vf-ua.net) (Ping timeout: 246 seconds) |
| 00:12:25 | → | hiredman joins (~hiredman@frontier1.downey.family) |
| 00:12:33 | × | hiredman quits (~hiredman@frontier1.downey.family) (Client Quit) |
| 00:12:51 | → | hiredman joins (~hiredman@frontier1.downey.family) |
| 00:16:22 | → | athan joins (~athan@syn-173-042-095-241.biz.spectrum.com) |
| 00:19:23 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 00:19:49 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds) |
| 00:20:44 | Lord_of_Life_ | is now known as Lord_of_Life |
| 00:28:41 | × | mari-estel quits (~mari-este@user/mari-estel) (Remote host closed the connection) |
| 00:29:23 | × | tomboy64 quits (~tomboy64@user/tomboy64) (Read error: Connection reset by peer) |
| 00:29:29 | → | tomboy65 joins (~tomboy64@user/tomboy64) |
| 00:35:24 | → | rvalue- joins (~rvalue@user/rvalue) |
| 00:36:10 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 252 seconds) |
| 00:37:23 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 00:39:24 | <Leary> | SrPx: Note that if you use 'mtl' monad-polymorphically then performance will become unreliable for cross-module inlining reasons. Consider using a modern effect system like 'effectful' or 'bluefin' instead. |
| 00:40:39 | × | athan quits (~athan@syn-173-042-095-241.biz.spectrum.com) (Ping timeout: 260 seconds) |
| 00:41:30 | rvalue- | is now known as rvalue |
| 00:53:45 | × | oxide quits (~lambda@user/oxide) (Ping timeout: 252 seconds) |
| 00:54:53 | × | j1n37 quits (j1n37@user/j1n37) (Read error: Connection reset by peer) |
| 00:59:15 | → | j1n37 joins (j1n37@user/j1n37) |
| 01:05:57 | × | sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 248 seconds) |
| 01:09:33 | → | son0p joins (~ff@2800:e2:f80:ee7::4) |
| 01:18:24 | × | son0p quits (~ff@2800:e2:f80:ee7::4) (Remote host closed the connection) |
| 01:19:23 | → | son0p joins (~ff@2800:e2:f80:ee7::4) |
| 01:23:06 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 01:35:56 | × | tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in) |
| 01:41:41 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Ping timeout: 248 seconds) |
| 01:43:12 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 01:43:43 | → | gorignak joins (~gorignak@user/gorignak) |
| 01:53:23 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 01:53:53 | → | gorignak joins (~gorignak@user/gorignak) |
| 02:03:34 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 02:04:04 | → | gorignak joins (~gorignak@user/gorignak) |
| 02:13:44 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 02:14:15 | → | gorignak joins (~gorignak@user/gorignak) |
| 02:17:36 | × | ZLima12 quits (~zlima12@user/meow/ZLima12) () |
| 02:20:04 | → | ZLima12 joins (~zlima12@user/meow/ZLima12) |
| 02:23:56 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 02:24:27 | → | gorignak joins (~gorignak@user/gorignak) |
| 02:28:33 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 248 seconds) |
| 02:34:07 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 02:34:37 | → | gorignak joins (~gorignak@user/gorignak) |
| 02:35:41 | × | todi quits (~todi@p57803331.dip0.t-ipconnect.de) (Quit: ZNC - https://znc.in) |
| 02:35:59 | → | todi joins (~todi@p57803331.dip0.t-ipconnect.de) |
| 02:44:18 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 02:44:48 | → | gorignak joins (~gorignak@user/gorignak) |
| 02:54:29 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 02:54:59 | → | gorignak joins (~gorignak@user/gorignak) |
| 02:56:21 | × | Inst quits (~Inst@user/Inst) (Ping timeout: 246 seconds) |
| 03:03:59 | → | rvalue- joins (~rvalue@user/rvalue) |
| 03:04:40 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 03:04:40 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 252 seconds) |
| 03:05:11 | → | gorignak joins (~gorignak@user/gorignak) |
| 03:08:14 | rvalue- | is now known as rvalue |
| 03:14:51 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 03:15:21 | → | gorignak joins (~gorignak@user/gorignak) |
| 03:24:44 | × | xff0x quits (~xff0x@2405:6580:b080:900:ba13:33aa:3901:2450) (Ping timeout: 260 seconds) |
| 03:25:34 | × | td_ quits (~td@i5387090C.versanet.de) (Ping timeout: 252 seconds) |
| 03:27:45 | × | willscripted quits (~willscrip@user/willscripted) (Ping timeout: 248 seconds) |
| 03:32:41 | × | turlando quits (~turlando@user/turlando) () |
| 03:32:51 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 03:33:21 | → | gorignak joins (~gorignak@user/gorignak) |
| 03:37:58 | → | turlando joins (~turlando@user/turlando) |
| 03:42:48 | × | shapr quits (~user@2600:4040:5c49:5600:cd62:8744:52b3:406b) (Quit: sleeyp) |
| 03:43:02 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 03:43:33 | → | gorignak joins (~gorignak@user/gorignak) |
| 03:51:33 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 04:02:31 | × | notzmv quits (~daniel@user/notzmv) (Ping timeout: 264 seconds) |
| 04:21:54 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
| 04:32:03 | × | troydm quits (~troydm@user/troydm) (Ping timeout: 245 seconds) |
| 04:35:08 | × | werneta quits (~werneta@syn-071-083-160-242.res.spectrum.com) (Quit: Lost terminal) |
| 04:36:52 | × | Leary quits (~Leary@user/Leary/x-0910699) (Remote host closed the connection) |
| 04:38:53 | × | rekahsoft quits (~rekahsoft@bras-base-orllon1103w-grc-06-76-69-85-220.dsl.bell.ca) (Ping timeout: 252 seconds) |
| 04:45:14 | → | Leary joins (~Leary@user/Leary/x-0910699) |
| 04:48:57 | → | xff0x joins (~xff0x@106.178.114.108) |
| 04:57:33 | → | michalz joins (~michalz@185.246.207.197) |
| 05:53:50 | × | werneta_ quits (~werneta@syn-071-083-160-242.res.spectrum.com) (Ping timeout: 272 seconds) |
| 06:13:32 | → | notzmv joins (~daniel@user/notzmv) |
| 06:14:21 | × | vanishing quits (~vanishing@user/vanishingideal) (Ping timeout: 276 seconds) |
| 06:24:00 | → | briandaed joins (~root@user/briandaed) |
| 06:27:51 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:30:04 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 06:37:04 | × | euleritian quits (~euleritia@77.22.252.159) (Ping timeout: 260 seconds) |
| 06:38:42 | → | euleritian joins (~euleritia@dynamic-176-004-231-188.176.4.pool.telefonica.de) |
| 06:44:04 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 06:53:59 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f6925a61425bb02ca09.dip0.t-ipconnect.de) |
| 07:01:06 | × | xff0x quits (~xff0x@106.178.114.108) (Ping timeout: 248 seconds) |
| 07:15:44 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:25:18 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 07:39:29 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f6925a61425bb02ca09.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 07:39:53 | × | pointlessslippe1 quits (~pointless@62.106.85.17) (Read error: Connection reset by peer) |
| 07:44:49 | → | Square2 joins (~Square4@user/square) |
| 07:45:13 | → | pointlessslippe1 joins (~pointless@62.106.85.17) |
| 07:45:46 | × | szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 07:51:02 | × | ft quits (~ft@p4fc2a26f.dip0.t-ipconnect.de) (Quit: leaving) |
| 07:53:52 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f69701fb6560bc0f0be.dip0.t-ipconnect.de) |
| 07:59:58 | × | rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
| 08:00:03 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 08:00:29 | → | rvalue joins (~rvalue@user/rvalue) |
| 08:00:42 | → | caconym joins (~caconym@user/caconym) |
| 08:06:47 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 08:08:40 | × | fr33domlover quits (~fr33domlo@towards.vision) (Quit: The Lounge - https://thelounge.chat) |
| 08:14:02 | → | misterfish joins (~misterfis@046044172198.static.ipv4.heldenvannu.net) |
| 08:35:03 | → | sawilagar joins (~sawilagar@user/sawilagar) |
| 08:35:09 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 08:36:37 | × | euleritian quits (~euleritia@dynamic-176-004-231-188.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 08:36:54 | → | euleritian joins (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) |
| 08:48:10 | → | chele joins (~chele@user/chele) |
| 08:54:17 | → | xff0x joins (~xff0x@2405:6580:b080:900:e7b6:fba6:14b7:d70c) |
| 08:57:37 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 09:02:49 | × | lockywolf quits (~lockywolf@coconut.lockywolf.net) (Read error: Connection reset by peer) |
| 09:05:45 | alphazone | is now known as unalmasIRC |
| 09:06:48 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 09:08:56 | → | Digitteknohippie joins (~user@user/digit) |
| 09:09:04 | × | Digit quits (~user@user/digit) (Ping timeout: 244 seconds) |
| 09:11:15 | × | euleritian quits (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
| 09:11:22 | → | euleritian joins (~euleritia@dynamic-176-004-231-188.176.4.pool.telefonica.de) |
| 09:14:46 | → | kuribas joins (~user@ptr-17d51eowbvu84pzojhe.18120a2.ip6.access.telenet.be) |
| 09:19:26 | → | CrunchyFlakes joins (~CrunchyFl@31.19.233.78) |
| 09:19:59 | × | misterfish quits (~misterfis@046044172198.static.ipv4.heldenvannu.net) (Ping timeout: 260 seconds) |
| 09:32:19 | × | Alleria quits (~Alleria@user/alleria) (Ping timeout: 244 seconds) |
| 09:34:48 | → | __monty__ joins (~toonn@user/toonn) |
| 09:36:07 | → | Alleria joins (~Alleria@user/alleria) |
| 09:45:28 | × | euleritian quits (~euleritia@dynamic-176-004-231-188.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 09:45:45 | → | euleritian joins (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) |
| 09:45:54 | → | misterfish joins (~misterfis@31-161-39-137.biz.kpn.net) |
| 09:47:58 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 09:52:39 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 09:52:55 | → | mari-estel joins (~mari-este@user/mari-estel) |
| 09:55:41 | × | Vajb quits (~Vajb@n7m8bu6eaitlx0eukg2-1.v6.elisa-mobile.fi) (Ping timeout: 252 seconds) |
| 09:56:55 | → | Vajb joins (~Vajb@n84e9ei03jkqt6rm3ev-1.v6.elisa-mobile.fi) |
| 09:59:34 | → | mari15224 joins (~mari-este@user/mari-estel) |
| 10:02:59 | × | mari-estel quits (~mari-este@user/mari-estel) (Ping timeout: 260 seconds) |
| 10:03:24 | × | euleritian quits (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
| 10:06:13 | → | euleritian joins (~euleritia@dynamic-176-004-231-188.176.4.pool.telefonica.de) |
| 10:24:49 | × | son0p quits (~ff@2800:e2:f80:ee7::4) (Ping timeout: 248 seconds) |
| 10:24:57 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 10:27:33 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 248 seconds) |
| 10:33:25 | → | pavonia joins (~user@user/siracusa) |
| 10:43:34 | → | zlqrvx joins (~zlqrvx@user/zlqrvx) |
| 10:47:04 | × | jinsun quits (~jinsun@user/jinsun) (Ping timeout: 272 seconds) |
| 10:49:34 | → | jinsun joins (~jinsun@user/jinsun) |
| 11:04:50 | Digitteknohippie | is now known as Digit |
| 11:07:23 | × | Digit quits (~user@user/digit) (Remote host closed the connection) |
| 11:09:10 | → | Digit joins (~user@user/digit) |
| 11:10:03 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 11:15:52 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2) |
| 11:18:34 | × | euleritian quits (~euleritia@dynamic-176-004-231-188.176.4.pool.telefonica.de) (Read error: Connection reset by peer) |
| 11:18:52 | → | euleritian joins (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) |
| 11:38:12 | → | SlackCoder joins (~SlackCode@64-94-63-8.ip.weststar.net.ky) |
| 11:44:08 | → | Guest59 joins (~Guest25@2402:3a80:413e:e883:2944:58c2:e568:454c) |
| 11:44:56 | × | mari15224 quits (~mari-este@user/mari-estel) (Remote host closed the connection) |
| 11:45:41 | ← | Guest59 parts (~Guest25@2402:3a80:413e:e883:2944:58c2:e568:454c) () |
| 11:55:25 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 11:59:04 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 12:02:09 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 12:02:59 | → | jinsun_ joins (~jinsun@user/jinsun) |
| 12:02:59 | × | jinsun quits (~jinsun@user/jinsun) (Killed (tantalum.libera.chat (Nickname regained by services))) |
| 12:02:59 | jinsun_ | is now known as jinsun |
| 12:05:47 | × | notzmv quits (~daniel@user/notzmv) (Remote host closed the connection) |
| 12:11:10 | jinsun | is now known as Guest2809 |
| 12:11:10 | → | jinsun_ joins (~jinsun@user/jinsun) |
| 12:11:10 | × | Guest2809 quits (~jinsun@user/jinsun) (Killed (zinc.libera.chat (Nickname regained by services))) |
| 12:11:10 | jinsun_ | is now known as jinsun |
| 12:24:03 | → | szkl joins (uid110435@id-110435.uxbridge.irccloud.com) |
| 12:27:24 | × | SlackCoder quits (~SlackCode@64-94-63-8.ip.weststar.net.ky) (Remote host closed the connection) |
| 12:41:31 | → | shapr joins (~user@2600:4040:5c49:5600:7905:5c67:d410:b5e3) |
| 12:44:20 | × | user363627 quits (~user@user/user363627) (Remote host closed the connection) |
| 12:50:52 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 12:52:03 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 12:55:48 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f69701fb6560bc0f0be.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 12:58:39 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f69701fb6560bc0f0be.dip0.t-ipconnect.de) |
| 13:04:16 | × | mange quits (~user@user/mange) (Quit: Zzz...) |
| 13:15:45 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 13:22:52 | × | euleritian quits (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
| 13:23:30 | → | euleritian joins (~euleritia@dynamic-176-006-145-171.176.6.pool.telefonica.de) |
| 13:27:53 | → | zlqrvx_ joins (~zlqrvx@2001:8003:8c8b:e00:58ff:a30c:881f:1fe4) |
| 13:28:06 | × | euleritian quits (~euleritia@dynamic-176-006-145-171.176.6.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 13:28:27 | → | euleritian joins (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) |
| 13:31:55 | × | zlqrvx quits (~zlqrvx@user/zlqrvx) (Ping timeout: 264 seconds) |
| 13:33:00 | × | euleritian quits (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) (Ping timeout: 272 seconds) |
| 13:39:58 | → | euleritian joins (~euleritia@dynamic-176-007-160-241.176.7.pool.telefonica.de) |
| 13:40:59 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 13:41:25 | × | euleritian quits (~euleritia@dynamic-176-007-160-241.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 13:41:44 | → | euleritian joins (~euleritia@77.22.252.159) |
| 13:42:43 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 13:48:20 | × | manwithluck quits (manwithluc@gateway/vpn/protonvpn/manwithluck) (Remote host closed the connection) |
| 13:48:45 | → | manwithluck joins (manwithluc@gateway/vpn/protonvpn/manwithluck) |
| 13:52:43 | × | astroanax quits (~astroanax@2001:19f0:7402:f82:5400:1ff:fec4:f7d7) (Ping timeout: 244 seconds) |
| 13:53:35 | → | astroanax joins (~astroanax@2001:19f0:7402:f82:5400:1ff:fec4:f7d7) |
| 13:57:52 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 13:59:46 | × | stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 260 seconds) |
| 14:01:05 | × | misterfish quits (~misterfis@31-161-39-137.biz.kpn.net) (Ping timeout: 265 seconds) |
| 14:01:31 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 260 seconds) |
| 14:05:08 | × | euleritian quits (~euleritia@77.22.252.159) (Read error: Connection reset by peer) |
| 14:05:59 | → | euleritian joins (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) |
| 14:07:31 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 14:07:35 | × | euleritian quits (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 14:07:56 | → | euleritian joins (~euleritia@77.22.252.159) |
| 14:11:21 | → | ystael joins (~ystael@user/ystael) |
| 14:22:12 | → | alexherbo2 joins (~alexherbo@2a02-8440-3113-e8b3-4dc5-4d20-737c-18a7.rev.sfr.net) |
| 14:37:24 | → | k` joins (~k`@152.7.255.193) |
| 14:38:18 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 14:39:49 | → | willscripted joins (~willscrip@user/willscripted) |
| 14:41:56 | <k`> | Is it possible to include GADT constraints in a pattern synonym? I'm trying to do something like `pattern ()=> (a ~ Int)=> Bool -> Foo a ; pattern Foo b <- (unpack -> b) where Foo x = Foo__ (pack x)`, and I get type error "Couldn't match type 'a' with 'Bool'". |
| 14:43:32 | × | euleritian quits (~euleritia@77.22.252.159) (Ping timeout: 252 seconds) |
| 14:43:58 | → | euleritian joins (~euleritia@176.2.4.196) |
| 14:44:15 | <k`> | The GHC docs seem to imply that that's how the second set of constraints works, but I can't get the type to check. |
| 14:49:41 | → | misterfish joins (~misterfis@31-161-39-137.biz.kpn.net) |
| 14:50:11 | <dolio> | What is the type of unpack? |
| 14:50:16 | k` | is now known as Wygulmage |
| 14:52:41 | × | Wygulmage quits (~k`@152.7.255.193) (Changing host) |
| 14:52:41 | → | Wygulmage joins (~k`@user/Wygulmage) |
| 14:52:43 | <dolio> | Presumably the problem is that it just returns a boolean, which means that it doesn't actually get you the a ~ Int evidence that you say it has. |
| 14:53:14 | <dolio> | You need it to produce a type that is a Boolean with evidence that you're going to match on. |
| 14:54:12 | <dolio> | Like `data Witness c a where Wit :: c => a -> Witness c a` |
| 14:55:18 | lol_ | is now known as jcarpenter2 |
| 14:55:21 | <Wygulmage> | Sorry, so the GADT is `data Foo a where Foo__ :: Int -> Foo Bool |
| 14:55:38 | <Wygulmage> | type of unpack is Int -> Bool |
| 14:55:56 | <dolio> | Right, but what type is `unpack`? |
| 14:56:39 | × | misterfish quits (~misterfis@31-161-39-137.biz.kpn.net) (Ping timeout: 252 seconds) |
| 14:57:10 | <dolio> | Oh I see. Anyway, it doesn't matter. It just swaps around the problem. |
| 14:57:12 | <Wygulmage> | (actually `Int# -> Bool`, if that matters.) |
| 14:57:51 | <Wygulmage> | I assumed that strictly matching the GADT constructor Foo__ in the view pattern would bring the constraint into scope. |
| 14:58:49 | <dolio> | It does in unpack. But what is the type of unpack? |
| 14:59:09 | <Wygulmage> | `unpack :: Int# -> Bool` |
| 14:59:24 | <dolio> | Okay, so, it only returns a Bool, not evidence that `a ~ Int`. |
| 14:59:58 | <Wygulmage> | Right. Can I give it a type like `Int# -> (a ~ Bool)=> a` ? |
| 15:00:14 | <dolio> | You could, but that's not the right type. |
| 15:01:45 | <dolio> | The right type is something like `Foo a -> Witness (a ~ Bool) ...` |
| 15:03:33 | <Wygulmage> | Sorry, sorry, I had messed this up at the beginning. In desperation I had changed the pattern to `Foo b <- (\ (Foo_ i) -> unpack i -> b` |
| 15:04:56 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 15:05:22 | <Wygulmage> | Does a view pattern like that not bring `Foo__` 's constraints into scope? Do I need to return something like `(# b, Refl #)` ? |
| 15:05:28 | → | gorignak joins (~gorignak@user/gorignak) |
| 15:05:41 | <dolio> | Maybe you want `Foo u <- Foo_ (unpack -> u)` |
| 15:06:59 | <Wygulmage> | dolio: Thank you! I did not know that was legal syntax! |
| 15:07:17 | <dolio> | It's just using a view pattern nested under a normal pattern. |
| 15:07:35 | <dolio> | That way the Foo__ match gets you the evidence. |
| 15:08:00 | <dolio> | If you put it all in a function, then the function won't be returning the evidence unless you give it a more complicated return type. |
| 15:08:01 | <Wygulmage> | I'm pretty ignorant of view pattern syntax. I only use them when I need smart constructors in pattern synonyms. |
| 15:08:23 | <Wygulmage> | Anyway, that works perfectly. |
| 15:11:25 | → | weary-traveler joins (~user@user/user363627) |
| 15:15:08 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 15:15:38 | → | gorignak joins (~gorignak@user/gorignak) |
| 15:20:37 | → | housemate joins (~housemate@2a04:9dc0:0:162::5d91:d7ed) |
| 15:20:51 | <Wygulmage> | So here's a semirelated question: Do UNPACK pragmas do anything to UnliftedTypes? For example, my understanding is that `ByteArray#` is a reference to a GC-managed reference to a memory region of metadata and bytes. If you try to UNPACK the `ByteArray` into a lifted constructor `Bar Int# !ByteArray#` , is the result a reference to an `Int#` and a |
| 15:20:52 | <Wygulmage> | GC-managed reference to a memory region of metadata and bytes? Or is it a reference to ( an `Int#` and a reference to a GC managed...)? |
| 15:24:24 | <Wygulmage> | Is there a way to check by looking at the dumped .simpl file for the module? |
| 15:24:27 | <dolio> | I'm not sure what you're asking. You can't unpack the ByteArray# stuff directly into the constructor of another type (to my knowledge) if that's what you mean. |
| 15:24:50 | <dolio> | So the ByteArray# will still be an indirection. |
| 15:25:19 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 15:25:19 | <dolio> | In a manner of speaking. |
| 15:25:49 | → | gorignak joins (~gorignak@user/gorignak) |
| 15:28:22 | <Wygulmage> | For what it's worth, GHC does not complain about an UNPACK pragma on a ByteArray#. And I assume that if I define my own unlifted types, I can unpack them (because they are still boxed). |
| 15:28:40 | <dolio> | Basically, Bar contains two words (I think), one of which is the Int# and one which is the pointer to the byte array structure. |
| 15:30:34 | <Wygulmage> | The byte array structure as in the actual memory region, or another pointer (to GC-managed memory if unpinned and pinned memory if pinned) to the actual allocated memory? |
| 15:32:08 | <dolio> | It's not just a pointer to the beginning of the bytes, because byte arrays e.g. know their length. |
| 15:32:26 | <dolio> | It's a structure. |
| 15:33:38 | <dolio> | I don't know exactly how it's represented, though. I guess the structure could be all packed together instead of involving another pointer. |
| 15:34:56 | <Wygulmage> | Right. I think we're talking past each other. My understanding is that a ByteArray# is a pointer to another pointer to flat memory that consists of length in bytes and then the bytes. I'm wondering whether unpacking the ByteArray# lifts gets rid of that first pointer, |
| 15:35:29 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 15:35:31 | <Wygulmage> | (because GC can rewrite the pointer to actual memory inside the lifted structure that it's been unpacked into) |
| 15:35:59 | <dolio> | You can only unpack data types. |
| 15:36:01 | → | gorignak joins (~gorignak@user/gorignak) |
| 15:37:35 | <Wygulmage> | Right. So UnliftedTypes are inside strict boxes (pointers) that allow the garbage collector to manage them. Does unpacking an unlifted type get rid of that box? |
| 15:38:24 | → | mari-estel joins (~mari-este@user/mari-estel) |
| 15:39:24 | <dolio> | Are you asking about ByteArray#? Then the answer is no, because it's not defined with data. It's a built-in. |
| 15:40:09 | <dolio> | If you're asking about a data definition with a specified kind of UnliftedType, then I'm less certain. I think the answer might still be no. |
| 15:40:16 | → | Alleria_ joins (~Alleria@user/alleria) |
| 15:40:35 | <Wygulmage> | OK, thanks. |
| 15:40:44 | <Wygulmage> | That's exactly what I wanted to know. |
| 15:43:17 | × | Alleria quits (~Alleria@user/alleria) (Ping timeout: 248 seconds) |
| 15:43:52 | <Wygulmage> | So a polymorphic `data Baz ( a :: UnliftedType ) = MkBaz Int# a` will have an equivalent in-memory representation to `data BazBytes = MkMazBytes Int# ByteArray#` when `a` is instantiated to `ByteArray#` |
| 15:44:40 | <Wygulmage> | I was wondering whether the polymorphism would introduce an extra layer of indirection. |
| 15:45:41 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 15:46:11 | → | gorignak joins (~gorignak@user/gorignak) |
| 15:46:28 | → | Alleria joins (~Alleria@user/alleria) |
| 15:47:00 | × | Alleria_ quits (~Alleria@user/alleria) (Ping timeout: 276 seconds) |
| 15:47:27 | <Wygulmage> | It's nice to be able to have the `Baz` wrapper for `Array#`, `ByteArray#`, `MutableByteArray#`, etc., but at this low level, not if it creates an extra indirection. |
| 15:49:03 | <dolio> | It appears that if `type F :: UnliftedType` is declared, then `data G = G {-# unpack #-} !F` does not actually unpack F. |
| 15:49:49 | <dolio> | You can see this by messing around with -ddump-simpl. |
| 15:50:12 | × | euleritian quits (~euleritia@176.2.4.196) (Read error: Connection reset by peer) |
| 15:50:13 | <Wygulmage> | That is very good to know. |
| 15:50:30 | → | euleritian joins (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) |
| 15:50:51 | <dolio> | When F is not UnliftedType, a G value ends up looking like: `floobnar = Up.G 5# 6#` |
| 15:51:29 | <dolio> | But the UnliftedType version is: `floobnar = Up.G (Up.F 5# 6#)` |
| 15:51:33 | × | Alleria quits (~Alleria@user/alleria) (Ping timeout: 276 seconds) |
| 15:52:07 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 15:53:12 | <Wygulmage> | Huh. I wonder whether that's a bug or a feature. |
| 15:53:47 | <dolio> | I don't know. I guess they figured you wouldn't be unpacking unlifted data types into other types. |
| 15:54:08 | <dolio> | Certainly there's no reason you couldn't. |
| 15:54:52 | <Wygulmage> | I assumed that GHC would unpack anything of `BoxedRep r`, regardless of whether `r` was lifted or unlifted. |
| 15:55:04 | <Wygulmage> | I guess it operates at a less general level. |
| 15:55:52 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 15:56:23 | → | gorignak joins (~gorignak@user/gorignak) |
| 15:57:35 | → | Alleria joins (~Alleria@user/alleria) |
| 16:04:46 | × | Alleria quits (~Alleria@user/alleria) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 16:05:59 | → | Alleria joins (~Alleria@user/alleria) |
| 16:06:03 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 16:06:33 | → | gorignak joins (~gorignak@user/gorignak) |
| 16:16:19 | × | euleritian quits (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
| 16:16:53 | → | euleritian joins (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) |
| 16:17:32 | × | housemate quits (~housemate@2a04:9dc0:0:162::5d91:d7ed) (Quit: Nothing to see here. I wasn't there.) |
| 16:18:38 | <dolio> | You should probably check if UnliftedType omits other optimizations. E.G. does GHC still do constructed product returns for them? |
| 16:18:42 | → | housemate joins (~housemate@2a04:9dc0:0:162::5d91:d7ed) |
| 16:20:07 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2) |
| 16:21:31 | → | son0p joins (~ff@2800:e6:4001:6cc3:2748:5c2a:65d9:57ac) |
| 16:21:43 | × | housemate quits (~housemate@2a04:9dc0:0:162::5d91:d7ed) (Client Quit) |
| 16:22:52 | → | housemate joins (~housemate@2a04:9dc0:0:162::5d91:d7ed) |
| 16:25:30 | × | Alleria quits (~Alleria@user/alleria) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 16:26:54 | → | Leonard26 joins (~Leonard26@49.236.26.53) |
| 16:27:16 | × | euleritian quits (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
| 16:27:33 | → | euleritian joins (~euleritia@77.22.252.159) |
| 16:29:16 | × | housemate quits (~housemate@2a04:9dc0:0:162::5d91:d7ed) (Ping timeout: 244 seconds) |
| 16:29:17 | × | mari-estel quits (~mari-este@user/mari-estel) (Remote host closed the connection) |
| 16:32:13 | → | Alleria joins (~Alleria@user/alleria) |
| 16:33:15 | × | berberman quits (~berberman@user/berberman) (Quit: ZNC 1.8.2 - https://znc.in) |
| 16:34:21 | → | killerstorm joins (~killersto@224.225.60.94.rev.vodafone.pt) |
| 16:35:20 | → | berberman joins (~berberman@user/berberman) |
| 16:35:28 | <Leonard26> | Hello! =D How are you? |
| 16:35:28 | <Leonard26> | I am trying to follow the tutorial/blog on ReaderT https://tech.fpcomplete.com/blog/2017/06/readert-design-pattern/ |
| 16:35:29 | <Leonard26> | I was asking myself if given the following line `var <- newTVarIO (1 :: Int)` one could then use it in a different function outside of main? |
| 16:35:29 | <Leonard26> | Like so https://paste.tomsmeding.com/IyjbMmtV |
| 16:37:35 | → | alp joins (~alp@2001:861:e3d6:8f80:568b:9761:243e:95b5) |
| 16:37:36 | <ncf> | pass var as an argument |
| 16:39:47 | × | jespada quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Read error: Connection reset by peer) |
| 16:40:33 | <Leonard26> | You mean like so? https://paste.tomsmeding.com/5unyMRGn |
| 16:41:51 | → | jespada_ joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) |
| 16:43:23 | × | jespada_ quits (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Read error: Connection reset by peer) |
| 16:44:05 | <ncf> | well obviously you need to call newFunc from main |
| 16:44:46 | <Leonard26> | yes, right, sorry I forgot '=D |
| 16:46:42 | → | jespada joins (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) |
| 16:48:48 | → | housemate joins (~housemate@2a04:9dc0:0:162::5d91:d7ed) |
| 16:49:54 | × | Alleria quits (~Alleria@user/alleria) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 16:50:52 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 16:52:31 | × | housemate quits (~housemate@2a04:9dc0:0:162::5d91:d7ed) (Remote host closed the connection) |
| 16:52:49 | → | rachelambda joins (~rachelamb@cust-95-80-25-71.csbnet.se) |
| 16:54:14 | → | housemate joins (~housemate@2a04:9dc0:0:162::5d91:d7ed) |
| 17:06:04 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 17:10:11 | <zzz> | is there any potencial performance difference between using the State monad and threading manually like this?: https://paste.jrvieira.com/1731949754002 |
| 17:10:33 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f69701fb6560bc0f0be.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 17:11:16 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 17:14:14 | → | Alleria joins (~Alleria@user/alleria) |
| 17:14:15 | × | euleritian quits (~euleritia@77.22.252.159) (Read error: Connection reset by peer) |
| 17:18:49 | → | euleritian joins (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) |
| 17:22:30 | <zzz> | i guess i could create a new IntMap and update it each step instead of appending to a linked list and then using IntMap.fromList but other than that |
| 17:22:33 | × | Alleria quits (~Alleria@user/alleria) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 17:24:04 | <geekosaur> | if ghc's doing its thing correctly, the state monad should get optimized down to the manual version |
| 17:24:09 | <zzz> | and then again maybe not. i guess IntMap.fromList can be more performant than IntMap.insert every step |
| 17:24:40 | <geekosaur> | (but you'd need to inspect Core to find out) |
| 17:24:43 | × | Leonard26 quits (~Leonard26@49.236.26.53) (Quit: Client closed) |
| 17:24:59 | <geekosaur> | and yes, especially if it's going to be a large tree I'd `fromList` at the end |
| 17:25:25 | <zzz> | i actually prefer not using State in this particular instance |
| 17:25:27 | <zzz> | thanks |
| 17:26:09 | × | shapr quits (~user@2600:4040:5c49:5600:7905:5c67:d410:b5e3) (Ping timeout: 248 seconds) |
| 17:28:13 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 17:32:07 | × | alexherbo2 quits (~alexherbo@2a02-8440-3113-e8b3-4dc5-4d20-737c-18a7.rev.sfr.net) (Remote host closed the connection) |
| 17:33:55 | × | hellwolf quits (~user@04ed-dbc2-42ba-2a72-0f00-4d40-07d0-2001.sta.estpak.ee) (Remote host closed the connection) |
| 17:34:15 | → | hellwolf joins (~user@ce28-37de-4848-1507-0f00-4d40-07d0-2001.sta.estpak.ee) |
| 17:47:07 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f69701fb6560bc0f0be.dip0.t-ipconnect.de) |
| 17:48:07 | → | Alleria_ joins (~Alleria@user/alleria) |
| 17:49:25 | → | iteratee joins (~kyle@162.218.222.207) |
| 17:52:47 | × | killerstorm quits (~killersto@224.225.60.94.rev.vodafone.pt) (Quit: Client closed) |
| 17:52:58 | <iteratee> | Chased down an interesting bug recently. I was trying to set up direct QUIC access to a server I have running. |
| 17:53:26 | <iteratee> | My load balancer will answer requests via QUIC, but will only connect downstream via TCP. |
| 17:53:56 | × | Alleria_ quits (~Alleria@user/alleria) (Max SendQ exceeded) |
| 17:53:57 | × | euleritian quits (~euleritia@ip4d16fc9f.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 17:54:22 | → | euleritian joins (~euleritia@77.22.252.159) |
| 17:54:58 | <iteratee> | so I created a UDP load balancer that went directly to my webserver. This means that the webserver needs the correct certificates to answer with quic. |
| 17:55:50 | <iteratee> | I was getting certificate issues with the direct connection that I wasn't getting with the same certificate served by my reverse proxy. |
| 17:56:29 | → | Alleria joins (~Alleria@user/alleria) |
| 17:57:50 | → | ft joins (~ft@p4fc2a26f.dip0.t-ipconnect.de) |
| 17:58:18 | <iteratee> | it turned out that `credentialLoadX509` and `credentialLoadX509FromMemory` were returning the certificates in differing orders. |
| 17:59:03 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 17:59:24 | <iteratee> | with the root cause buried in the crypton-x509-store library. |
| 18:00:34 | × | Alleria quits (~Alleria@user/alleria) (Max SendQ exceeded) |
| 18:01:27 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 18:01:33 | × | euleritian quits (~euleritia@77.22.252.159) (Ping timeout: 276 seconds) |
| 18:02:25 | → | Alleria joins (~Alleria@user/alleria) |
| 18:02:41 | → | euleritian joins (~euleritia@77.22.252.159) |
| 18:03:04 | × | Square2 quits (~Square4@user/square) (Ping timeout: 260 seconds) |
| 18:03:05 | × | housemate quits (~housemate@2a04:9dc0:0:162::5d91:d7ed) (Quit: Nothing to see here. I wasn't there.) |
| 18:04:52 | × | Alleria quits (~Alleria@user/alleria) (Client Quit) |
| 18:05:59 | × | dpk quits (~dpk@jains.nonceword.org) (Ping timeout: 260 seconds) |
| 18:07:05 | → | housemate joins (~housemate@2a04:9dc0:0:162::5d91:d7ed) |
| 18:08:16 | × | kuribas quits (~user@ptr-17d51eowbvu84pzojhe.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
| 18:15:00 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 18:15:09 | × | Wygulmage quits (~k`@user/Wygulmage) (Quit: Client closed) |
| 18:17:32 | → | misterfish joins (~misterfis@84.53.85.146) |
| 18:17:49 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 260 seconds) |
| 18:20:41 | × | ystael quits (~ystael@user/ystael) (Read error: Connection reset by peer) |
| 18:31:10 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 18:31:12 | × | son0p quits (~ff@2800:e6:4001:6cc3:2748:5c2a:65d9:57ac) (Ping timeout: 244 seconds) |
| 18:31:17 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 18:31:54 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 18:32:50 | × | talismanick quits (~user@2601:644:937c:ed10::ae5) (Ping timeout: 248 seconds) |
| 18:33:38 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 18:35:59 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 252 seconds) |
| 18:36:23 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 18:36:29 | <briandaed> | iteratee: was it somehow related to https://github.com/haskell-tls/hs-certificate/issues/31 |
| 18:36:32 | <briandaed> | ? |
| 18:37:55 | × | euleritian quits (~euleritia@77.22.252.159) (Ping timeout: 264 seconds) |
| 18:38:49 | → | euleritian joins (~euleritia@dynamic-176-002-004-196.176.2.pool.telefonica.de) |
| 18:56:01 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 19:06:01 | → | Alleria joins (~Alleria@user/alleria) |
| 19:07:09 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 19:08:53 | → | stiell_ joins (~stiell@gateway/tor-sasl/stiell) |
| 19:13:45 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 19:19:55 | × | flounders quits (~flounders@173.246.200.74) (Quit: WeeChat 4.4.2) |
| 19:21:27 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds) |
| 19:28:31 | → | k` joins (~k`@152.7.255.193) |
| 19:28:31 | × | rachelambda quits (~rachelamb@cust-95-80-25-71.csbnet.se) (Read error: Connection reset by peer) |
| 19:30:50 | → | rachelambda joins (~rachelamb@cust-95-80-25-71.csbnet.se) |
| 19:31:50 | × | rachelambda quits (~rachelamb@cust-95-80-25-71.csbnet.se) (Read error: Connection reset by peer) |
| 19:32:36 | × | euleritian quits (~euleritia@dynamic-176-002-004-196.176.2.pool.telefonica.de) (Read error: Connection reset by peer) |
| 19:32:54 | → | euleritian joins (~euleritia@ip5f5ad3bc.dynamic.kabel-deutschland.de) |
| 19:34:15 | → | rachelambda joins (~rachelamb@cust-95-80-25-71.csbnet.se) |
| 19:39:29 | × | euleritian quits (~euleritia@ip5f5ad3bc.dynamic.kabel-deutschland.de) (Ping timeout: 248 seconds) |
| 19:40:20 | → | euleritian joins (~euleritia@dynamic-176-002-004-196.176.2.pool.telefonica.de) |
| 19:41:51 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 19:43:46 | → | Alleria_ joins (~Alleria@user/alleria) |
| 19:46:19 | × | Alleria quits (~Alleria@user/alleria) (Ping timeout: 260 seconds) |
| 19:47:54 | <SrPx> | quick question about how IO and laziness mix. consider the following Haskell program: |
| 19:47:58 | <SrPx> | gen = do print "A"; return 1 |
| 19:48:03 | <SrPx> | make = do x <- gen; y <- gen; z <- gen; return (x, y, z) |
| 19:48:06 | <SrPx> | main = do (x, y, z) <- make; print x |
| 19:48:20 | <SrPx> | obviously, it will print "A" 3 times, because we run all the lines of the "make" function |
| 19:48:46 | <SrPx> | yet, we only ever observe "x". as such, in a full lazy sense, it should only print "A" once |
| 19:48:56 | × | kaskal quits (~kaskal@2001:4bb8:2c3:1470:8b1d:2068:6ef2:d351) (Quit: ZNC - https://znc.in) |
| 19:48:57 | <SrPx> | I know that's not how IO works - |
| 19:49:40 | <SrPx> | that said, on my application, I do need the ability to do IO inside "pure" functions (because I'm using C FFI for performance), but I'd also like these IO's to only be executed when necessary, i.e., lazily |
| 19:50:15 | <SrPx> | is there any idiomatic way to modify the 'make' function so that "A" will be printed once if 'main' prints 'x', yet "A" will be printed 3 times if 'main' prints '(x,y,z)? |
| 19:50:18 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 19:52:06 | <haskellbridge> | <sm> unsafePerformIO, I think |
| 19:52:20 | <davean> | SrPx: what does C FFI have to do with pure functions? |
| 19:52:21 | <haskellbridge> | <sm> not idiomatic, but I think that'd be the simple way |
| 19:52:38 | → | kaskal joins (~kaskal@213-147-165-220.nat.highway.webapn.at) |
| 19:52:50 | <davean> | I'm lost as to the connection you're making |
| 19:53:29 | × | rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
| 19:53:43 | <geekosaur> | you can do pure FFI, if you know the C function you are calling has no side effects and in particular doesn't allocate |
| 19:53:44 | <SrPx> | davean: to be more specific, this is for an evaluator. the runtime is in C, including the "whnf-reduce" function. that function does, internally, effectiful things such as allocating memory and writing to the global heap. as such, whnf-reduce must be wrapped in IO - it isn't a pure function |
| 19:53:59 | <geekosaur> | ah |
| 19:54:00 | → | rvalue joins (~rvalue@user/rvalue) |
| 19:54:19 | <davean> | geekosaur: right, but see what he said "I do need the ability to do IO inside "pure" functions (because I'm using C FFI for performance)" |
| 19:54:43 | <SrPx> | the problem is that, now, the 'normal' function (which calls whnf-reduce layer by layer) is extremely eager. if I normalize a term and drop it, it will still fully normalize the term because the whole thing has to be wrapped in IO |
| 19:54:44 | <geekosaur> | right, but at that point I think I say "just do it in IO, you will be sad otherwise" |
| 19:55:07 | <davean> | I mean you can pass laziness through IO |
| 19:55:13 | → | troydm joins (~troydm@user/troydm) |
| 19:55:17 | <davean> | IO doesn't remove laziness |
| 19:55:30 | <SrPx> | so I can't interleave IO calls to happen only when Haskell's lazy evaluator reaches an expression? ): |
| 19:55:33 | <SrPx> | what will happen exactly? |
| 19:55:45 | <davean> | I mean that is what IO already does. |
| 19:56:15 | × | Angelz quits (Angelz@Angelz.oddprotocol.org) (Ping timeout: 246 seconds) |
| 19:56:31 | <mauke> | unsafeInterleaveIO exists |
| 19:56:48 | <SrPx> | no. it is true that you can pass IO around lazily. yet, within the context of the execution of IO monad, calls will not be evaluated lazily - Haskell will run the whole IO, even if some parts aren't visible (see my example) |
| 19:57:05 | <SrPx> | mauke: I've just learned about it, seems like what I need. although documentation isn't clear on how it could break things |
| 19:57:27 | <mauke> | are you familiar with getContents? |
| 19:57:47 | <SrPx> | interestingly, seems like there is a SO thread about exactly that: https://stackoverflow.com/questions/13263692/when-is-unsafeinterleaveio-unsafe |
| 19:57:50 | <SrPx> | mauke: no, what is that? |
| 19:59:29 | <mauke> | gives you stdin as a lazy string |
| 19:59:30 | <davean> | SrPx: It will run the whole IO, but IO can pass and produce lazy values just fine |
| 19:59:34 | <SrPx> | "In general, it is up to you to prove that your use of unsafeInterleaveIO is safe. If you call unsafeInterleaveIO x, then you have to prove that x can be called at any time and still produce the same output." |
| 19:59:59 | <SrPx> | ah, based on this I'm good to use it. reduce() will always return the same result, even though it mutates memory internally. ty guys |
| 20:00:02 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 20:00:40 | <davean> | SrPx: Then it might be pure and not involve IO at all? |
| 20:00:41 | <SrPx> | and it works! |
| 20:00:42 | → | caconym joins (~caconym@user/caconym) |
| 20:00:53 | <mauke> | is reduce a C function? |
| 20:01:08 | <SrPx> | davean: you mean in the sense I could wrap unsafePerformIO into the reduce() function I get from C? |
| 20:01:18 | <SrPx> | davean: that might be a better idea actually... |
| 20:01:29 | <mauke> | if so, you can just import it at a pure type |
| 20:01:56 | <SrPx> | mauke: makes sense |
| 20:02:06 | <mauke> | (of course, that won't work if it takes/returns pointers) |
| 20:02:25 | <SrPx> | so, as long as I guarantee reduce acts purely, it is ok to import it as a pure function, even thought it isn't |
| 20:02:38 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 20:02:41 | <davean> | C FFI doesn't mean you have to have IO |
| 20:02:52 | <mauke> | runST exists |
| 20:03:05 | <mauke> | so I figure if it is morally "like ST", then it should be OK |
| 20:04:46 | <davean> | Yah this sounds more ST than IO |
| 20:09:54 | → | Square joins (~Square@user/square) |
| 20:10:30 | × | kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 20:12:11 | <SrPx> | it works flawlessly guys. the interaction count decreases based on the terms I actually observe in Haskell. so basically Haskell-side laziness propagates to HVM in the sense if you discard an HVM term Haskell-side, you won't pay for it |
| 20:12:15 | <SrPx> | and that's extremely cool |
| 20:12:17 | <SrPx> | ty |
| 20:12:46 | <SrPx> | like mindblowingly cool |
| 20:13:41 | → | kaskal- joins (~kaskal@84-115-237-124.cable.dynamic.surfer.at) |
| 20:15:11 | × | kaskal quits (~kaskal@213-147-165-220.nat.highway.webapn.at) (Ping timeout: 265 seconds) |
| 20:17:20 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 20:19:54 | → | sprotte24 joins (~sprotte24@p200300d16f36e9004570e4f99d260ace.dip0.t-ipconnect.de) |
| 20:22:00 | × | kaskal- quits (~kaskal@84-115-237-124.cable.dynamic.surfer.at) (Quit: ZNC - https://znc.in) |
| 20:22:04 | <haskellbridge> | <sm> 😎 |
| 20:22:46 | → | kaskal joins (~kaskal@84-115-237-124.cable.dynamic.surfer.at) |
| 20:28:53 | <haskellbridge> | <hellwolf> cool |
| 20:31:24 | × | michalz quits (~michalz@185.246.207.197) (Remote host closed the connection) |
| 20:32:17 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
| 20:33:43 | × | briandaed quits (~root@user/briandaed) (Remote host closed the connection) |
| 20:33:54 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 20:34:42 | → | zmt01 joins (~zmt00@user/zmt00) |
| 20:36:16 | → | Angelz joins (Angelz@2605:6400:30:fc15:9bd1:2217:41cd:bb15) |
| 20:38:12 | × | zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 276 seconds) |
| 20:41:04 | → | mari-estel joins (~mari-este@user/mari-estel) |
| 20:44:59 | → | ystael joins (~ystael@user/ystael) |
| 20:45:47 | × | k` quits (~k`@152.7.255.193) (Quit: Client closed) |
| 20:46:09 | × | CrunchyFlakes quits (~CrunchyFl@31.19.233.78) (Quit: ZNC 1.8.2 - https://znc.in) |
| 20:54:12 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 21:08:34 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 21:13:09 | → | Alleria joins (~Alleria@user/alleria) |
| 21:15:09 | × | Alleria_ quits (~Alleria@user/alleria) (Ping timeout: 260 seconds) |
| 21:21:02 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds) |
| 21:22:33 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:22:36 | × | housemate quits (~housemate@2a04:9dc0:0:162::5d91:d7ed) (Quit: Nothing to see here. I wasn't there.) |
| 21:26:34 | → | jinsun_ joins (~jinsun@user/jinsun) |
| 21:26:34 | jinsun | is now known as Guest2352 |
| 21:26:34 | × | Guest2352 quits (~jinsun@user/jinsun) (Killed (molybdenum.libera.chat (Nickname regained by services))) |
| 21:26:34 | jinsun_ | is now known as jinsun |
| 21:31:33 | × | ystael quits (~ystael@user/ystael) (Read error: Connection reset by peer) |
| 21:31:58 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 21:34:54 | → | housemate joins (~housemate@2a04:9dc0:0:162::5d91:d7ed) |
| 21:40:48 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 21:42:09 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 21:55:49 | × | mari-estel quits (~mari-este@user/mari-estel) (Quit: <3) |
| 22:00:43 | → | mange joins (~user@user/mange) |
| 22:02:59 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 22:11:44 | × | housemate quits (~housemate@2a04:9dc0:0:162::5d91:d7ed) (Quit: Nothing to see here. I wasn't there.) |
| 22:18:12 | → | ystael joins (~ystael@user/ystael) |
| 22:31:48 | → | Everything joins (~Everythin@31.144.80.156) |
| 22:52:39 | × | Square quits (~Square@user/square) (Ping timeout: 252 seconds) |
| 22:59:31 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 264 seconds) |
| 23:02:46 | → | housemate joins (~housemate@2a04:9dc0:0:162::5d91:d7ed) |
| 23:19:04 | × | gabriel_sevecek quits (~gabriel@188-167-229-200.dynamic.chello.sk) (Ping timeout: 252 seconds) |
| 23:21:21 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f69701fb6560bc0f0be.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
| 23:23:00 | <iteratee> | briandead: Yes, it looks like that was fixed for reading from a file, but it was left unchanged for reading from a bytestring. |
| 23:25:23 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 23:28:20 | → | gabriel_sevecek joins (~gabriel@188-167-229-200.dynamic.chello.sk) |
| 23:35:47 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 23:52:35 | → | Alleria_ joins (~Alleria@user/alleria) |
| 23:53:01 | → | troojg joins (~troojg@user/troojg) |
| 23:56:50 | × | Alleria quits (~Alleria@user/alleria) (Ping timeout: 272 seconds) |
| 23:59:00 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 23:59:29 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
All times are in UTC on 2024-11-18.