Logs on 2025-03-05 (liberachat/#haskell)
| 00:03:03 | → | alfiee joins (~alfiee@user/alfiee) |
| 00:03:49 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 00:07:19 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds) |
| 00:10:16 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 00:14:36 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:16:21 | × | cyphase quits (~cyphase@user/cyphase) (Ping timeout: 248 seconds) |
| 00:19:14 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 00:26:22 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 00:29:59 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:34:37 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 00:39:11 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 00:39:22 | <jle`> | does anyone know how duped TChans get GC'd? AFAICT from looking at the source (https://hackage.haskell.org/package/stm-2.5.3.1/docs/src/Control.Concurrent.STM.TChan.html#dupTChan) it adds the new reader hole to the shared write list, but when that new TChan gets GC'd doesn't the unused hole remain in the list? |
| 00:39:55 | <jle`> | but simon states that the TChan does clean up itself (https://github.com/haskell/stm/issues/21) |
| 00:40:10 | × | LainExperiments quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 00:40:38 | <jle`> | or maybe i am misunderstanding what 'write' is used for |
| 00:45:21 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:46:34 | × | xff0x quits (~xff0x@2405:6580:b080:900:9c0d:a18a:824d:47d5) (Ping timeout: 260 seconds) |
| 00:48:09 | × | sprotte24 quits (~sprotte24@p200300d16f1cc100391369cbcf60a0c3.dip0.t-ipconnect.de) (Quit: Leaving) |
| 00:48:09 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f62f42219c1fddec46c.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 00:49:47 | → | alfiee joins (~alfiee@user/alfiee) |
| 00:50:17 | ← | yegorc parts (~yegorc@user/yegorc) (Leaving) |
| 00:50:23 | → | LainExperiments joins (~LainExper@user/LainExperiments) |
| 00:50:33 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 00:52:43 | <jle`> | oh okay the write hole doesn't reference the duped chans, maybe that's it |
| 00:54:04 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 00:55:14 | <jle`> | okay so i think the implementation is basically that each of the readers are climbing up a tvar-linked list essentially, so if one of the readers gets GC'd then it'd just stop reading the list and everytthing upstream of the remaining readers gets gc'd |
| 01:00:44 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:01:33 | → | myxos joins (~myxos@syn-065-028-251-121.res.spectrum.com) |
| 01:05:04 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 01:16:05 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:23:18 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 01:23:18 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds) |
| 01:33:06 | → | j1n37 joins (~j1n37@user/j1n37) |
| 01:34:09 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:35:03 | × | poscat quits (~poscat@user/poscat) (Ping timeout: 252 seconds) |
| 01:35:16 | → | cyphase joins (~cyphase@user/cyphase) |
| 01:35:51 | → | alfiee joins (~alfiee@user/alfiee) |
| 01:39:06 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 01:39:30 | × | cyphase quits (~cyphase@user/cyphase) (Ping timeout: 248 seconds) |
| 01:39:56 | → | poscat joins (~poscat@user/poscat) |
| 01:40:33 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 265 seconds) |
| 01:46:51 | → | xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 01:47:13 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds) |
| 01:49:32 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:51:23 | × | LainExperiments quits (~LainExper@user/LainExperiments) (Quit: Client closed) |
| 01:53:50 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 01:54:03 | → | fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi) |
| 01:54:16 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
| 02:00:39 | × | fp quits (~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Ping timeout: 260 seconds) |
| 02:04:55 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:09:08 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 02:20:17 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:21:36 | → | alfiee joins (~alfiee@user/alfiee) |
| 02:24:14 | × | euphores quits (~SASL_euph@user/euphores) (Read error: Connection reset by peer) |
| 02:24:37 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 02:25:48 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds) |
| 02:32:20 | → | euphores joins (~SASL_euph@user/euphores) |
| 02:32:21 | × | notdabs quits (~Owner@2600:1700:69cf:9000:3d02:fb32:31ee:6acc) (Read error: Connection reset by peer) |
| 02:32:27 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Quit: ljdarj) |
| 02:34:25 | → | hexreel joins (~hexreel@user/hexreel) |
| 02:35:40 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:40:21 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 02:42:13 | ← | hexreel parts (~hexreel@user/hexreel) () |
| 02:51:02 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:51:29 | → | Square joins (~Square@user/square) |
| 02:55:20 | × | Square2 quits (~Square4@user/square) (Ping timeout: 244 seconds) |
| 02:55:21 | → | LainExperiments joins (~LainExper@user/LainExperiments) |
| 02:56:04 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 03:05:40 | × | LainExperiments quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds) |
| 03:06:11 | × | tromp quits (~textual@2a02:a210:cba:8500:4189:9487:9abd:f78) (Ping timeout: 244 seconds) |
| 03:06:36 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:07:29 | → | tavare joins (~tavare@150.129.88.189) |
| 03:07:29 | × | tavare quits (~tavare@150.129.88.189) (Changing host) |
| 03:07:29 | → | tavare joins (~tavare@user/tavare) |
| 03:07:40 | → | alfiee joins (~alfiee@user/alfiee) |
| 03:07:58 | × | anjii quits (~user@177.47.220.78) (Quit: goodnight) |
| 03:11:08 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 03:12:12 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds) |
| 03:16:51 | → | cyphase joins (~cyphase@user/cyphase) |
| 03:21:59 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:23:41 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 03:26:20 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 03:27:24 | × | tavare quits (~tavare@user/tavare) (Ping timeout: 272 seconds) |
| 03:28:29 | × | _xor quits (~xor@ip-66-42-132-175.dynamic.fuse.net) (Read error: Connection reset by peer) |
| 03:28:47 | → | tavare joins (~tavare@user/tavare) |
| 03:31:14 | × | ystael quits (~ystael@user/ystael) (Ping timeout: 265 seconds) |
| 03:34:03 | → | _xor joins (~xor@ip-66-42-132-175.dynamic.fuse.net) |
| 03:37:20 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:41:59 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 03:43:47 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 03:45:32 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 03:47:48 | → | bilegeek joins (~bilegeek@108.sub-174-228-98.myvzw.com) |
| 03:49:02 | → | ystael joins (~ystael@user/ystael) |
| 03:52:44 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:53:24 | → | alfiee joins (~alfiee@user/alfiee) |
| 03:54:44 | × | messewix quits (~jmc@user/messewix) (Quit: Konversation terminated!) |
| 03:54:49 | × | ystael quits (~ystael@user/ystael) (Ping timeout: 260 seconds) |
| 03:57:44 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds) |
| 03:59:11 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 04:03:16 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 04:04:06 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
| 04:10:47 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:15:17 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 04:26:09 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:30:46 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 04:39:08 | → | alfiee joins (~alfiee@user/alfiee) |
| 04:41:32 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:43:36 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 04:45:48 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 04:47:48 | → | Guest42 joins (~Guest42@220-233-36-23.ip4.exetel.com.au) |
| 04:50:20 | × | aforemny quits (~aforemny@i577BEE31.versanet.de) (Ping timeout: 244 seconds) |
| 04:51:18 | → | aforemny joins (~aforemny@2001:9e8:6ce5:d00:19b4:f9fd:f481:8f07) |
| 04:53:13 | × | Guest42 quits (~Guest42@220-233-36-23.ip4.exetel.com.au) (Quit: Client closed) |
| 04:56:55 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:01:12 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 05:01:14 | × | j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer) |
| 05:04:33 | → | j1n37 joins (~j1n37@user/j1n37) |
| 05:06:22 | × | j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer) |
| 05:07:11 | → | j1n37 joins (~j1n37@user/j1n37) |
| 05:07:45 | × | hgolden quits (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Remote host closed the connection) |
| 05:08:41 | × | j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer) |
| 05:10:12 | → | hgolden joins (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) |
| 05:12:17 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:12:52 | → | j1n37 joins (~j1n37@user/j1n37) |
| 05:14:38 | × | j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer) |
| 05:16:35 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 05:17:44 | → | j1n37 joins (~j1n37@user/j1n37) |
| 05:18:47 | × | j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer) |
| 05:23:22 | → | j1n37 joins (~j1n37@user/j1n37) |
| 05:26:12 | → | alfiee joins (~alfiee@user/alfiee) |
| 05:27:39 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:28:25 | × | jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.5.2) |
| 05:28:27 | jmcantrell_ | is now known as jmcantrell |
| 05:30:38 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 05:32:22 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 05:35:06 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 05:38:17 | → | Square2 joins (~Square4@user/square) |
| 05:39:23 | → | michalz joins (~michalz@185.246.207.222) |
| 05:40:07 | × | tavare quits (~tavare@user/tavare) (Remote host closed the connection) |
| 05:41:02 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:41:45 | × | Square quits (~Square@user/square) (Ping timeout: 276 seconds) |
| 05:45:25 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 05:47:39 | → | takuan joins (~takuan@d8D86B601.access.telenet.be) |
| 05:56:26 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:00:08 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection) |
| 06:00:49 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 06:11:49 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:11:55 | → | alfiee joins (~alfiee@user/alfiee) |
| 06:16:11 | <c_wraith> | anyone know why hsc2hs would be genrating blank files on windows? |
| 06:16:19 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 06:16:22 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 06:21:52 | <c_wraith> | or even where to find its log when run by cabal? |
| 06:22:49 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 06:26:15 | × | bilegeek quits (~bilegeek@108.sub-174-228-98.myvzw.com) (Quit: Leaving) |
| 06:27:12 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:32:15 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 06:32:48 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 06:42:35 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:45:37 | → | CiaoSen joins (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) |
| 06:49:10 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 06:51:59 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds) |
| 06:57:59 | → | alfiee joins (~alfiee@user/alfiee) |
| 07:00:37 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:03:00 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 276 seconds) |
| 07:05:36 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 07:11:22 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds) |
| 07:11:38 | × | sam113101 quits (~sam@modemcable220.199-203-24.mc.videotron.ca) (Ping timeout: 265 seconds) |
| 07:12:09 | <kilolympus> | c_wraith, are you able to run e.g. cabal exec -- hsc2hs ? |
| 07:12:16 | <kilolympus> | maybe that can help debug stuff |
| 07:12:20 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 07:15:59 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:20:10 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 07:20:54 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds) |
| 07:26:13 | × | CiaoSen quits (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 248 seconds) |
| 07:28:00 | → | CiaoSen joins (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) |
| 07:30:02 | → | sam113101 joins (~sam@modemcable220.199-203-24.mc.videotron.ca) |
| 07:31:22 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:33:44 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 07:35:53 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 07:38:51 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 252 seconds) |
| 07:40:50 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 07:42:01 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:43:24 | → | alfiee joins (~alfiee@user/alfiee) |
| 07:46:51 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 07:48:06 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds) |
| 07:51:00 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 07:51:41 | × | j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 244 seconds) |
| 07:52:40 | → | j1n37 joins (~j1n37@user/j1n37) |
| 07:53:34 | × | ft quits (~ft@p3e9bc68d.dip0.t-ipconnect.de) (Quit: leaving) |
| 07:54:27 | × | zungi quits (~tory@user/andrewchawk) (Remote host closed the connection) |
| 07:56:09 | → | zungi joins (~tory@user/andrewchawk) |
| 07:57:24 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 08:00:00 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 08:00:53 | → | caconym joins (~caconym@user/caconym) |
| 08:01:58 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 08:10:51 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 08:22:17 | → | zmt01 joins (~zmt00@user/zmt00) |
| 08:22:38 | → | evgeny joins (~Shaeto@94.25.234.254) |
| 08:24:29 | × | zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 268 seconds) |
| 08:30:08 | → | alfiee joins (~alfiee@user/alfiee) |
| 08:34:33 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds) |
| 08:40:17 | → | merijn joins (~merijn@77.242.116.146) |
| 08:41:07 | × | kmein quits (~weechat@user/kmein) (Quit: ciao kakao) |
| 08:43:11 | → | kmein joins (~weechat@user/kmein) |
| 08:44:05 | × | CiaoSen quits (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) (Ping timeout: 244 seconds) |
| 08:45:59 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 08:46:08 | → | CiaoSen joins (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) |
| 08:55:41 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 08:56:31 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 09:11:15 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds) |
| 09:12:08 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f53f42219c1fddec46c.dip0.t-ipconnect.de) |
| 09:15:34 | → | merijn joins (~merijn@77.242.116.146) |
| 09:16:33 | → | alfiee joins (~alfiee@user/alfiee) |
| 09:20:33 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 09:20:48 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 272 seconds) |
| 09:22:25 | × | mceresa quits (~mceresa@user/mceresa) (Ping timeout: 248 seconds) |
| 09:22:35 | → | mceresa joins (~mceresa@user/mceresa) |
| 09:29:50 | → | merijn joins (~merijn@77.242.116.146) |
| 09:35:51 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 09:36:39 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 09:40:23 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 245 seconds) |
| 09:41:17 | → | __monty__ joins (~toonn@user/toonn) |
| 09:44:17 | × | yuuta quits (~YuutaW@2404:f4c0:f9c3:502::100:17b7) (Ping timeout: 248 seconds) |
| 09:45:27 | → | chele joins (~chele@user/chele) |
| 09:47:35 | → | YuutaW joins (~YuutaW@2404:f4c0:f9c3:502::100:17b7) |
| 09:50:03 | × | xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 252 seconds) |
| 09:53:47 | → | merijn joins (~merijn@77.242.116.146) |
| 10:02:16 | → | alfiee joins (~alfiee@user/alfiee) |
| 10:03:36 | → | tabaqui1 joins (~root@87.200.129.102) |
| 10:03:50 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 10:06:38 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 10:18:23 | → | Digitteknohippie joins (~user@user/digit) |
| 10:19:28 | × | Digit quits (~user@user/digit) (Ping timeout: 252 seconds) |
| 10:22:22 | × | anpad quits (~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in) |
| 10:22:33 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds) |
| 10:23:30 | × | Digitteknohippie quits (~user@user/digit) (Ping timeout: 272 seconds) |
| 10:23:47 | → | anpad joins (~pandeyan@user/anpad) |
| 10:24:44 | × | econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 10:32:50 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 10:33:39 | × | cyphase quits (~cyphase@user/cyphase) (Remote host closed the connection) |
| 10:34:48 | → | euouae joins (~euouae@user/euouae) |
| 10:35:01 | <euouae> | Hello, what does `class (Stream s, MonadPlus m) => MonadParsec e s m | m -> e s where ` mean? In particular the | character there. |
| 10:35:15 | → | merijn joins (~merijn@77.242.116.146) |
| 10:35:24 | <tomsmeding> | euouae: https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/functional_dependencies.html#extension-FunctionalDependencies |
| 10:40:00 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds) |
| 10:41:26 | → | cyphase joins (~cyphase@user/cyphase) |
| 10:42:18 | → | ubert joins (~Thunderbi@2a02:8109:ab8a:5a00:42eb:c7e6:6d02:7a65) |
| 10:42:19 | × | euouae quits (~euouae@user/euouae) (Read error: Connection reset by peer) |
| 10:42:57 | × | Square2 quits (~Square4@user/square) (Remote host closed the connection) |
| 10:43:33 | → | Square2 joins (~Square4@user/square) |
| 10:45:19 | → | euouae joins (~euouae@user/euouae) |
| 10:45:32 | → | xff0x joins (~xff0x@2405:6580:b080:900:65a4:3374:7c1f:492b) |
| 10:46:28 | <euouae> | It seems that functional dependencies are hints to the type system? |
| 10:47:10 | <euouae> | and perhaps constraint in terms of what new instances can be added |
| 10:47:44 | <euouae> | so in the case of MonadParsec, e,s are uniquely determined by m? |
| 10:48:08 | × | cyphase quits (~cyphase@user/cyphase) (Quit: cyphase.com) |
| 10:49:00 | → | alfiee joins (~alfiee@user/alfiee) |
| 10:49:13 | <mauke> | yes |
| 10:49:21 | → | merijn joins (~merijn@77.242.116.146) |
| 10:50:35 | <euouae> | great thank you |
| 10:51:42 | × | Square2 quits (~Square4@user/square) (Ping timeout: 244 seconds) |
| 10:53:39 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds) |
| 10:54:11 | → | cyphase joins (~cyphase@user/cyphase) |
| 11:03:52 | × | cyphase quits (~cyphase@user/cyphase) (Quit: cyphase.com) |
| 11:05:26 | → | Digit joins (~user@user/digit) |
| 11:06:39 | × | Digit quits (~user@user/digit) (Remote host closed the connection) |
| 11:06:57 | × | xff0x quits (~xff0x@2405:6580:b080:900:65a4:3374:7c1f:492b) (Ping timeout: 248 seconds) |
| 11:07:51 | → | cyphase joins (~cyphase@user/cyphase) |
| 11:08:59 | × | CiaoSen quits (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 260 seconds) |
| 11:09:21 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 276 seconds) |
| 11:09:33 | → | CiaoSen joins (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) |
| 11:09:39 | → | digitteknohippie joins (~user@user/digit) |
| 11:11:14 | × | zmt01 quits (~zmt00@user/zmt00) (Ping timeout: 248 seconds) |
| 11:11:44 | × | cyphase quits (~cyphase@user/cyphase) (Client Quit) |
| 11:13:28 | digitteknohippie | is now known as Digit |
| 11:14:25 | → | cyphase joins (~cyphase@user/cyphase) |
| 11:15:26 | × | cyphase quits (~cyphase@user/cyphase) (Client Quit) |
| 11:20:29 | → | cyphase joins (~cyphase@user/cyphase) |
| 11:21:25 | × | cyphase quits (~cyphase@user/cyphase) (Client Quit) |
| 11:21:47 | → | iteratee_ joins (~kyle@162.218.222.207) |
| 11:22:25 | × | iteratee quits (~kyle@162.218.222.207) (Read error: Connection reset by peer) |
| 11:25:12 | → | cyphase joins (~cyphase@user/cyphase) |
| 11:26:45 | → | califax_ joins (~califax@user/califx) |
| 11:27:12 | × | califax quits (~califax@user/califx) (Ping timeout: 264 seconds) |
| 11:27:59 | califax_ | is now known as califax |
| 11:31:19 | → | merijn joins (~merijn@77.242.116.146) |
| 11:32:48 | × | cyphase quits (~cyphase@user/cyphase) (Quit: cyphase.com) |
| 11:34:24 | → | alfiee joins (~alfiee@user/alfiee) |
| 11:38:52 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds) |
| 11:39:09 | → | cyphase joins (~cyphase@user/cyphase) |
| 11:47:40 | absence_ | is now known as absence |
| 11:49:28 | → | fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi) |
| 11:55:33 | × | CiaoSen quits (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) (Ping timeout: 244 seconds) |
| 12:09:09 | → | xff0x joins (~xff0x@2405:6580:b080:900:1bc3:e66f:477:1057) |
| 12:17:29 | → | ystael joins (~ystael@user/ystael) |
| 12:20:29 | → | alfiee joins (~alfiee@user/alfiee) |
| 12:23:22 | × | Googulator quits (~Googulato@80-95-93-248.pool.digikabel.hu) (Quit: Client closed) |
| 12:23:54 | → | Googulator joins (~Googulato@80-95-93-248.pool.digikabel.hu) |
| 12:24:36 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 12:30:32 | × | hughjfchen quits (~hughjfche@vmi2417424.contaboserver.net) (Ping timeout: 268 seconds) |
| 12:32:12 | → | jespada joins (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) |
| 12:46:13 | × | eL_Bart0 quits (eL_Bart0@dietunichtguten.org) (Ping timeout: 245 seconds) |
| 13:02:28 | × | gentauro quits (~gentauro@user/gentauro) (Ping timeout: 272 seconds) |
| 13:02:43 | → | gentauro joins (~gentauro@user/gentauro) |
| 13:03:07 | → | Square2 joins (~Square4@user/square) |
| 13:04:15 | × | mange quits (~user@user/mange) (Quit: Zzz...) |
| 13:06:53 | → | alfiee joins (~alfiee@user/alfiee) |
| 13:09:51 | → | zmt00 joins (~zmt00@user/zmt00) |
| 13:11:04 | → | forell_ joins (~forell@host-178-216-90-220.sta.tvknaszapraca.pl) |
| 13:11:19 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds) |
| 13:11:26 | × | forell quits (~forell@user/forell) (Ping timeout: 252 seconds) |
| 13:22:03 | × | fp quits (~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Ping timeout: 245 seconds) |
| 13:35:33 | × | Googulator quits (~Googulato@80-95-93-248.pool.digikabel.hu) (Quit: Client closed) |
| 13:35:58 | → | Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) |
| 13:36:24 | × | evgeny quits (~Shaeto@94.25.234.254) (Ping timeout: 260 seconds) |
| 13:38:03 | → | evgeny joins (~Shaeto@94.25.234.181) |
| 13:38:06 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 13:42:12 | × | zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds) |
| 13:47:21 | → | zungi joins (~tory@user/andrewchawk) |
| 13:52:18 | → | alfiee joins (~alfiee@user/alfiee) |
| 13:56:40 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 13:57:12 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds) |
| 14:02:36 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds) |
| 14:08:15 | <euouae> | I have just been studying the Reader (and will soon study the ReaderT too) monad. I know it's defined through ReaderT, but could I just define it as function composition (from left with `withReader` and from right with `mapReader`)? |
| 14:08:47 | <euouae> | I think I've seen this pattern before in the lexical environment, where a lexical environment E : V -> R is just an evaluation map from the variables to their values. |
| 14:08:51 | <tomsmeding> | of course, you can also define Reader directly as `newtype Reader r a = Reader (r -> a)` |
| 14:09:18 | <euouae> | Oh, that's slick right |
| 14:09:43 | <euouae> | so when people say the reader monad is useful, do they mean ReaderT? |
| 14:09:47 | <euouae> | for the most part? |
| 14:10:00 | <tomsmeding> | usually, but not necessarily |
| 14:10:20 | <mauke> | > join (+) 3 |
| 14:10:21 | <lambdabot> | 6 |
| 14:10:33 | <tomsmeding> | _just_ a Reader is not particularly useful, the cost of the monadic syntax is higher than what it gives you |
| 14:10:41 | <tomsmeding> | disregarding pointfree tricks |
| 14:10:44 | <euouae> | > :t join |
| 14:10:46 | <lambdabot> | <hint>:1:1: error: parse error on input ‘:’ |
| 14:10:46 | tomsmeding | looks askance at mauke |
| 14:10:50 | <tomsmeding> | :t join |
| 14:10:51 | <lambdabot> | Monad m => m (m a) -> m a |
| 14:11:16 | <euouae> | ah what, I didn't realize you used the -> monad instance to diagonalize + |
| 14:11:21 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 14:11:21 | <tomsmeding> | % :t join @((->) r) |
| 14:11:21 | <yahb2> | <interactive>:1:13: error: [GHC-76037] ; Not in scope: type variable ‘r’ |
| 14:11:25 | <tomsmeding> | % :t join @((->) Int) |
| 14:11:25 | <yahb2> | join @((->) Int) ; :: Monad ((->) Int) => (Int -> (Int -> a)) -> Int -> a |
| 14:12:19 | <euouae> | tomsmeding: and is there a difference between mapReader and >>=? |
| 14:12:27 | <euouae> | In using one or the other I mea |
| 14:12:54 | <mauke> | :t mapReader |
| 14:12:55 | <lambdabot> | (a -> b) -> Reader r a -> Reader r b |
| 14:13:10 | <mauke> | oh, that's fmap |
| 14:13:17 | <mauke> | >>= is fmap + join |
| 14:13:29 | <euouae> | Ah yeah I forgot to say that I was using pure . too |
| 14:13:39 | <euouae> | Right, so mapReader is just a specialized fmap? |
| 14:13:41 | <mauke> | join undoes pure |
| 14:13:47 | <mauke> | yeah |
| 14:13:56 | <euouae> | Right! thank you |
| 14:14:03 | <mauke> | > ((!!) =<< show) 0 |
| 14:14:05 | <lambdabot> | '0' |
| 14:14:37 | euouae | shies away from the brain teasers and goes back into his studies |
| 14:15:35 | <mauke> | :-) |
| 14:18:05 | <tomsmeding> | ((!!) =<< show) 0 = (\r -> (!!) (show r) r) 0 = show 0 !! 0 |
| 14:21:09 | <mauke> | (=<<): the other S |
| 14:24:14 | × | Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed) |
| 14:24:28 | → | Googulator joins (~Googulato@80-95-93-248.pool.digikabel.hu) |
| 14:35:10 | × | ystael quits (~ystael@user/ystael) (Quit: Lost terminal) |
| 14:38:02 | → | alfiee joins (~alfiee@user/alfiee) |
| 14:42:22 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 14:46:18 | → | gmg joins (~user@user/gehmehgeh) |
| 14:49:23 | → | CiaoSen joins (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) |
| 14:55:11 | → | ystael joins (~ystael@user/ystael) |
| 14:56:21 | <haskellbridge> | <mauke> E |
| 14:59:19 | → | fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi) |
| 15:05:23 | × | Googulator quits (~Googulato@80-95-93-248.pool.digikabel.hu) (Quit: Client closed) |
| 15:05:47 | → | Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) |
| 15:07:23 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 15:09:25 | × | vulpine quits (xfnw@user/meow/xfnw) (Quit: Connection reset by purr) |
| 15:09:54 | → | vulpine joins (xfnw@user/meow/xfnw) |
| 15:13:50 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 15:21:21 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 268 seconds) |
| 15:23:07 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 15:25:26 | → | alfiee joins (~alfiee@user/alfiee) |
| 15:29:40 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds) |
| 15:30:01 | → | lucasEsc joins (~lucasEsc@181.110.191.164) |
| 15:30:34 | × | jespada quits (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) (Quit: My Mac has gone to sleep. ZZZzzz…) |
| 15:35:52 | × | son0p quits (~ff@2800:e6:4000:d723:c181:4205:f2b1:437a) (Ping timeout: 244 seconds) |
| 15:37:43 | × | sabathan quits (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Read error: Connection reset by peer) |
| 15:38:41 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
| 15:39:03 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 15:40:47 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit) |
| 15:41:08 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 15:41:48 | → | sabathan joins (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) |
| 15:44:38 | → | jespada joins (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) |
| 15:45:13 | → | notdabs joins (~Owner@2600:1700:69cf:9000:d900:e64:5cae:a17e) |
| 15:45:45 | × | evgeny quits (~Shaeto@94.25.234.181) (Quit: WeeChat 4.1.1) |
| 15:50:46 | × | lucasEsc quits (~lucasEsc@181.110.191.164) (Quit: Client closed) |
| 15:52:37 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 15:57:44 | → | euphores joins (~SASL_euph@user/euphores) |
| 16:02:28 | → | hughjfchen joins (~hughjfche@vmi2417424.contaboserver.net) |
| 16:04:08 | × | iteratee_ quits (~kyle@162.218.222.207) (Ping timeout: 252 seconds) |
| 16:06:12 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds) |
| 16:11:30 | → | alfiee joins (~alfiee@user/alfiee) |
| 16:13:18 | × | Square2 quits (~Square4@user/square) (Ping timeout: 245 seconds) |
| 16:15:39 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 16:15:52 | × | jespada quits (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) (Quit: My Mac has gone to sleep. ZZZzzz…) |
| 16:16:14 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 268 seconds) |
| 16:17:28 | × | acidjnk_new quits (~acidjnk@p200300d6e7283f53f42219c1fddec46c.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 16:18:09 | → | merijn joins (~merijn@77.242.116.146) |
| 16:18:34 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 16:18:45 | → | wildtrees joins (~user@pool-108-26-34-85.syrcny.east.verizon.net) |
| 16:28:19 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection) |
| 16:31:24 | <kaol> | One day I'll understand what ScopedTypeVariables and TypeApplications do together. I had yet more ambiguous type variable stuff with variable names GHC generated from thin air and I followed a SO answer and added a "forall a." to the top level function signature and then used @a at the offending place. The error went away but my confusion didn't. |
| 16:33:44 | <tomsmeding> | kaol: type parameters are, in a certain sense, just additional arguments to your function |
| 16:33:52 | <tomsmeding> | :t map |
| 16:33:53 | <lambdabot> | (a -> b) -> [a] -> [b] |
| 16:34:09 | <tomsmeding> | in that view, `map` has 4 arguments: `a`, `b`, a function of type `a -> b`, and a list `[a]` |
| 16:34:47 | <tomsmeding> | there are two differences between normal arguments and type arguments: 1. GHC automatically infers type arguments, and 2. you can't pattern-match on them |
| 16:35:08 | <tomsmeding> | but you can _pass_ them manually! |
| 16:35:18 | <tomsmeding> | % :set -XTypeApplications |
| 16:35:18 | <yahb2> | <no output> |
| 16:35:22 | <tomsmeding> | % :set -fprint-explicit-foralls |
| 16:35:22 | <yahb2> | <no output> |
| 16:35:25 | <tomsmeding> | % :t map |
| 16:35:25 | <yahb2> | map :: forall a b. (a -> b) -> [a] -> [b] |
| 16:35:47 | <tomsmeding> | with -fprint-explicit-foralls, GHC also prints those additional "arguments" even if it normally wouldn't |
| 16:35:50 | <tomsmeding> | % :t map @Int |
| 16:35:50 | <yahb2> | map @Int :: forall b. (Int -> b) -> [Int] -> [b] |
| 16:35:55 | <tomsmeding> | % :t map @Int @Float |
| 16:35:55 | <yahb2> | map @Int @Float :: (Int -> Float) -> [Int] -> [Float] |
| 16:36:10 | <tomsmeding> | you can see me passing types to the `a` and `b` type arguments of `map` |
| 16:36:45 | <kaol> | So my forall made the "a" visible inside the function body and @a used it? |
| 16:36:55 | <int-e> | With ScopedTypeVariables, the `forall a.` in the function's type signature binds the `a` type variable to that type in the function implementation |
| 16:36:58 | <tomsmeding> | so if you find yourself in a position where GHC somehow does not have enough information to automatically infer what type argument to pass somewhere, you can pass it manually |
| 16:37:31 | <tomsmeding> | now, what happens if you are yourself writing a polymorphic function, and you find yourself in that same situation? You will have to pass types with @ that mention the type arguments of _your_ function |
| 16:37:41 | <tomsmeding> | normally, in Haskell2010, there's no way to refer to those type arguments |
| 16:38:10 | <tomsmeding> | ScopedTypeVariables changes that, but only if you bind your type arguments explicitly using `forall` in the type signature |
| 16:38:31 | <tomsmeding> | does that help? :) |
| 16:38:57 | <tomsmeding> | kaol: so yes, the forall made the "a" visible inside the function body; that @a used it, yes |
| 16:40:02 | <kaol> | I think I understand. This is one of those things you'd have to ask me again in a week. |
| 16:40:19 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds) |
| 16:42:13 | <kaol> | Another related thing I'm curious about: Why's ScopedTypeVariables the extension that makes something like let a :: Int = read "123" work? |
| 16:42:49 | <tomsmeding> | hysterical raisins |
| 16:43:16 | <tomsmeding> | the features are connected though: you can write `map (f :: a -> b) (x :: [a]) = ...` and then use `a` and `b` in the function body of `map` |
| 16:43:29 | <tomsmeding> | those type ascriptions bound `a` and `b` just like a `forall` would |
| 16:43:37 | <tomsmeding> | but this is enabled only with ScopedTypeVariables, again |
| 16:43:54 | <tomsmeding> | `let a :: Int = ...` is just a special case of this |
| 16:44:43 | → | ft joins (~ft@p3e9bc68d.dip0.t-ipconnect.de) |
| 16:44:50 | <dminuoso> | Everything about ScopedTypeVariables is a bit smelly. |
| 16:45:14 | <kaol> | What's the difference between ScopedTypeVariables forall and RankNTypes forall? |
| 16:45:25 | <dminuoso> | It would have been more consistent to allow `let a :: Int = ...` even without the extension. |
| 16:45:25 | <tomsmeding> | completely unrelated |
| 16:45:29 | <tomsmeding> | they just happen to share the same keyword |
| 16:45:47 | <kaol> | Apply directly to the forehead. |
| 16:46:16 | <tomsmeding> | (there's a decent reason they share the same keyword: the `forall` of ScopedTypeVariables makes sense because it could have been there anyway. ScopedTypeVariables just gives an additional meaning to a forall in that specific position.) |
| 16:46:17 | <dminuoso> | kaol: The underlying problem is that when Haskell was invented, it was deemed to be more useful to have variables not be inscope (so you could never refer to an outer type variable in another type signature) |
| 16:46:47 | <dminuoso> | kaol: There's nothing about forall, except that the authors trying to increase compatibility with a bunch of hackage libraries. |
| 16:46:59 | → | __jmcantrell__ joins (~weechat@user/jmcantrell) |
| 16:47:07 | jmcantrell | is now known as Guest5227 |
| 16:47:08 | __jmcantrell__ | is now known as jmcantrell |
| 16:47:17 | <dminuoso> | Say if you enabled `ScopedTypeVariables` in your cabal file project wide, and suddenly `a` was captured and brought into scope, it could perhaps cause some issues or compilation errors. |
| 16:47:49 | <tomsmeding> | well, they could have used a different keyword so that existing uses even with ExplicitForall didn't change meaning |
| 16:47:49 | <dminuoso> | Tying this into an ExplicitForall is one of the stranger parts that seems to have no fundamentally good reason behind it |
| 16:48:09 | <tomsmeding> | it could even be useful to be able to mark _some_ type variables as being in scope, and others not |
| 16:48:16 | <dminuoso> | Personally, I would prefer if ScopedTypeVariables just brought them into scope, even without forall. |
| 16:48:18 | <tomsmeding> | the new -XTypeAbstractions allows you to do the latter, at least |
| 16:48:18 | <dminuoso> | Done! |
| 16:49:06 | → | srazkvt joins (~sarah@user/srazkvt) |
| 16:50:07 | → | jespada joins (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) |
| 16:50:57 | <kaol> | Perhaps the GHC error message could suggest ScopedTypeVariables in the ambiguous type variable error. It sure is mystifying to see GHC conjure up new names when the source code clearly has the same text at both sites but it isn't so because it requires ScopedTypeVariables to really be so. |
| 16:51:51 | <dminuoso> | kaol: What do you mean by new names? |
| 16:51:56 | <tomsmeding> | kaol: if you get an ambiguous type variable error, then there are multiple instantiations of a type variable that could in principle result in a well-typed result |
| 16:52:13 | <tomsmeding> | and that GHC has no good reason to prefer one particular instantiation over another |
| 16:52:29 | <tomsmeding> | if you have type families in the picture, then non-injective type families can result in this |
| 16:52:39 | <tomsmeding> | GHC doesn't just complain willy-nilly ;) |
| 16:53:59 | × | j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 252 seconds) |
| 16:54:06 | <dminuoso> | kaol: Note, that you cannot "just use the type variables you wrote" in GHC. There's a very subtle type machinery going on, if GHC did not alpha-rename, you would inevitably get errors like `cannot you unify a with a` errors, which is even *less* helpful. |
| 16:54:07 | <kaol> | dminuoso: If I have "MyTypeClass a =>" in the function signature I'd expect the same "a" to mean the same thing in the body. Instead I see it come up with "a0" or something on its own. Or that's the naive understanding of it at least. |
| 16:54:15 | <dminuoso> | ^- see previous message |
| 16:54:27 | <dminuoso> | Or rather, its not exactly alpha renaming either |
| 16:54:34 | <dminuoso> | It's following generalization rules |
| 16:54:44 | <kaol> | I think I'm starting to understand but I'm saying that GHC could offer more help in its error message. |
| 16:54:49 | → | j1n37 joins (~j1n37@user/j1n37) |
| 16:54:49 | <tomsmeding> | kaol: do you have a code snippet so that we're talking about the same thing? |
| 16:54:53 | <dminuoso> | Take a look at Hindley Milner to get a better understanding |
| 16:54:58 | <kaol> | It's generally pretty good about suggesting extensions to make code work. |
| 16:55:04 | <dminuoso> | kaol: I dont think there's much we can do in a HM type of inference. |
| 16:55:23 | <dminuoso> | kaol: GHC tries its best to give you context |
| 16:55:25 | <dminuoso> | e.g. it might say |
| 16:55:37 | <dminuoso> | Ambiguous type variable `a0' arising from a use of `show' prevents the constraint `(Show a0)' from being solved. Relevant bindings include xs :: [a0] (bound at l.hs:13:9) |
| 16:55:56 | <dminuoso> | So if you read the entirety, then `a0` is a type that GHC has in its inference at *that* particular point. |
| 16:55:58 | × | tomsmeding quits (~tomsmedin@static.21.109.88.23.clients.your-server.de) (Quit: ZNC 1.9.1 - https://znc.in) |
| 16:56:31 | → | iteratee joins (~kyle@208.97.58.241) |
| 16:56:46 | <dminuoso> | kaol: Whats happening roughly is, that GHC has no idea what the type is here. It just makes one up, calls it a0, in hopes of later finding out more. |
| 16:56:54 | → | alfiee joins (~alfiee@user/alfiee) |
| 16:59:36 | → | tomsmeding joins (~tomsmedin@static.21.109.88.23.clients.your-server.de) |
| 17:00:45 | <tomsmeding> | kaol: and if what dminuoso just said sounds stupid in your case, then we'd need to look at the code to see what's actually happening ;) |
| 17:01:09 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds) |
| 17:03:27 | <dminuoso> | kaol: Another thing is, with "in the body" - GHC has to figure out whether that's actually the case! It does not know. |
| 17:03:31 | × | CiaoSen quits (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 252 seconds) |
| 17:04:45 | <euouae> | I keep forgetting this, but it just occurred to me and I'll note it: Although studying "the type system" of Haskell as a total is kind of a tall order and perhaps not fruitful, it seems that the HN inference rules are important and simpler to study |
| 17:05:21 | <dminuoso> | kaol: When the type checker goes through your binding, it takes the function signature as some assertion. Say `f :: MyTypeClass a => T a; f = T 1`. Now, to type check this it has to go into the AST and assign a type to stuff. For instance, what is the type of `1`? GHC does not know, it's `Num a0 => a0` |
| 17:05:38 | <dminuoso> | So it builds up a bunch of things like |
| 17:05:57 | <dminuoso> | f :: MyTypeClass a => T a |
| 17:06:02 | <dminuoso> | 1 :: Num a0 => a0 |
| 17:06:12 | <dminuoso> | T :: ...something sensible here... |
| 17:06:30 | <dminuoso> | And then it unifies according to HM rules. |
| 17:06:55 | <dminuoso> | Which requires giving `1` that type here |
| 17:07:25 | <dminuoso> | Remember, GHC does not just take your type signatures for granted, it actually type checks whether what you just claimed is actually true. |
| 17:08:13 | <dminuoso> | Now it is true, that we are very liberal with polymorphism, and the way typeclasses interact here with the type checker - as a consequence - leads to worse diagnostics |
| 17:08:30 | <dminuoso> | We pay that price to get more expressiveness |
| 17:09:15 | <euouae> | It could *still* provide better diagnostics. |
| 17:09:24 | <dminuoso> | In this particular case, Im not sure how. |
| 17:09:39 | <dminuoso> | GHC cannot, ahead of time, know that a0 will be the same as a from the outer type signature. |
| 17:09:40 | <euouae> | For example, it could explain to the user that "hey this is part of HM type system in case you're curious what's going on" |
| 17:09:46 | <dminuoso> | It would require type checking to know that, the very thing that failed. |
| 17:10:00 | <euouae> | I mean in a vague way, it could point the user to things that the user can study to become better acquiainted with what's going on |
| 17:10:04 | <dminuoso> | Well, the dignostic tells you how and why it came up with a0 in trivial cases. |
| 17:10:16 | <euouae> | It's not that the errors are entirely unparseable, it's just that they require more expertise to understand. Right? |
| 17:10:45 | <dminuoso> | Ambiguous type variable `a0' arising from a use of `show' prevents the constraint `(Show a0)' from being solved. Relevant bindings include xs :: [a0] (bound at l.hs:13:9) |
| 17:10:47 | <dminuoso> | Probable fix: use a type annotation to specify what `a0' should be. |
| 17:10:50 | <dminuoso> | These potential instances exist: |
| 17:10:53 | <dminuoso> | .... |
| 17:11:08 | <dminuoso> | If you think this can be reworded to be more explicit, feel free to make a pull request. |
| 17:11:16 | <tomsmeding> | I don't think it's a good idea for EVERY type error to point to hindley-milner. If you google for "type checking haskell" you already get a bunch of resources |
| 17:11:27 | <tomsmeding> | the diagnostics are _already_ epics with how long they are |
| 17:11:36 | <dminuoso> | You just have to spend the time to read them. |
| 17:11:53 | <euouae> | tomsmeding: why not? in any case, it's not evident that it is type checking at all. could always have a -verbose flag that experts can turn off |
| 17:12:15 | <tomsmeding> | euouae: "it's not evident that it is type checking at all" -- what else would it be? |
| 17:12:19 | <dminuoso> | I dont think the diagnostic here is overly erbose, or lacking details. |
| 17:12:36 | <dminuoso> | It's telling you precisly what happened, where it happened, and comes with sensible suggestions |
| 17:12:41 | <euouae> | I don't know what the number of unsuspecting victims falling onto Haskell is. I'm sure a lot who come into Haskell from universities are taught well and they don't suffer the confusion that a complete outsider would. |
| 17:12:41 | <tomsmeding> | I think pointing to hindley-milner is the job of a haskell tutorial, not GHC type errors |
| 17:12:47 | <dminuoso> | Of course, if you employ type level trickery or generally not have any type signatures... well yes. |
| 17:12:49 | <dminuoso> | We cant help you. |
| 17:13:03 | <dminuoso> | Like if servant blows up, you are on your own. |
| 17:13:10 | <tomsmeding> | I'm not saying GHC type errors are not unclear sometimes! |
| 17:13:22 | <dminuoso> | But thats not an issue of GHC, but rather a servant design problem. |
| 17:13:39 | <dminuoso> | (If you insist on employing this type machinery, your users will have to suffer) |
| 17:13:54 | <tomsmeding> | but GHC Haskell's type system is large enough and supports enough trickeries that there is just a lot of freedom in how to write your code -- and that means that the diagnostics cannot point you to "the" fix, because there are many things you might have meant |
| 17:14:00 | <dminuoso> | optics is one of the few libraries that manages to hide type trickery behind simple user facing type errors |
| 17:14:42 | <euouae> | tomsmeding: yeah but you could mention a few basic ones that newbies would make |
| 17:15:00 | <euouae> | perhaps by annotating types and/or functions so that the compiler can make the suggestion when a certain pattern is matched. IDK. |
| 17:15:12 | <euouae> | type error pattern |
| 17:15:20 | <euouae> | I'm sort of coming up with this as I go. I haven't thought of it too much. |
| 17:15:38 | <tomsmeding> | many people have suggested such things, and if you have a good idea, please do suggest it! |
| 17:15:40 | <dminuoso> | type error slicing is perhaps one of those things that could be a helpful thing. |
| 17:15:57 | <tomsmeding> | I just suspect that if you think more carefully about how that feature would look, exactly, it will turn out to be difficult to make precise |
| 17:15:58 | <dminuoso> | But it is so easy to invoke an idea if you dont have to actually design and/or implement it in the scope of GHCs type checker. |
| 17:16:26 | <dminuoso> | I keep mentioning type error slicers in hopes of some PhD student being forced to implement it, so I can benefit from their sweat, blood and tears. |
| 17:16:33 | <dminuoso> | Because I dont know how to do it myself. |
| 17:16:39 | <euouae> | For example say you try to return from a do block with `123 :: Int`. It will tell you that Int mismatches m Int. But does it suggest `pure 123` in its place? |
| 17:17:11 | <tomsmeding> | dminuoso: is type error slicing this idea where you get just the inconsistent path of constraints between two things that the user specified? |
| 17:17:24 | <tomsmeding> | instead of only the wrong position, or the whole function, that is? |
| 17:18:12 | × | zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds) |
| 17:18:59 | <tomsmeding> | euouae: assuming that the 123 was indeed of type Int, and there was a `Monad m` constraint in scope -- that could be a helpful hint, yes |
| 17:19:20 | <tomsmeding> | (if you just write "123", then it could be that there is a Num instance for `m Int`!) |
| 17:19:47 | <tomsmeding> | > 123 :: Data.Monoid.Sum Int |
| 17:19:48 | <lambdabot> | Sum {getSum = 123} |
| 17:19:53 | <kaol> | I should look into making a self contained example of the thing I ran into. But I'm afraid it's not today. |
| 17:19:57 | <tomsmeding> | here, that's an 123 of type `m Int`, just not a monad m |
| 17:21:22 | <euouae> | tomsmeding: https://link.springer.com/chapter/10.1007/978-3-642-32037-8_1 by looking at this I think type error slicing is about determining all the parts of the source code that contribute to type errors |
| 17:21:52 | <tomsmeding> | right |
| 17:22:05 | <euouae> | I think it was introduced here <https://www.sciencedirect.com/science/article/pii/S016764230400005X> |
| 17:22:37 | <euouae> | oh no, it seems that it's something different: |
| 17:22:45 | × | srazkvt quits (~sarah@user/srazkvt) (Quit: Konversation terminated!) |
| 17:22:55 | <tomsmeding> | nah looks similar |
| 17:22:59 | <euouae> | a slice is a set of program points. the type error slice is all the program points that contributed to the type error. |
| 17:23:33 | → | srazkvt joins (~sarah@user/srazkvt) |
| 17:23:35 | <tomsmeding> | strip away as many parts of your function as possible so that the result still exhibits the type error |
| 17:23:50 | <tomsmeding> | may be helpful to see what exactly the reasoning is that the compiler is doing |
| 17:24:09 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 17:24:18 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection) |
| 17:27:07 | <euouae> | yeah I had more of a heuristics approach for certain common errors that newbies do |
| 17:27:45 | <tomsmeding> | euouae: here's motivation for learning more haskell: learn enough so that you can add this in GHC yourself :) |
| 17:29:10 | <euouae> | tomsmeding: hey you know what, I'm trying. :) so far I'm just trying to mostly do stuff I've done before in other programming languages |
| 17:29:29 | <tomsmeding> | sounds like a decent way :) |
| 17:29:52 | <tomsmeding> | don't fall in the trap of wanting to write code that looks as closely as possible like the code you're used to in other langauges |
| 17:30:20 | <euouae> | oh like iterative and such? |
| 17:30:29 | <tomsmeding> | yes |
| 17:30:51 | <tomsmeding> | you _can_, but you'll hate haskell because you don't get to see the kinds of code where it shines |
| 17:31:09 | <tomsmeding> | part of the fun is learning how to solve the same problem, but in a different way |
| 17:33:45 | <tomsmeding> | that doesn't mean that you need to go all recursion schemes and "I don't use recursion, I must use foldr/scanr etc." |
| 17:34:27 | <tomsmeding> | heck, if you want to write `while :: (a -> Bool) -> (a -> a) -> a -> a` that implements a poor man's while loop, please do! |
| 17:34:35 | <tomsmeding> | just avoid writing everything in IO |
| 17:34:52 | <kaol> | fix is lovely. |
| 17:35:18 | <tomsmeding> | (part of the point of writing that `while`, and programming with it, is that you realise it's really not that different from the fancy combinators you've been avoiding) |
| 17:35:57 | → | zungi joins (~tory@user/andrewchawk) |
| 17:37:01 | <srazkvt> | say i want to build a small git forge in haskell, should i go with gitlib to have the entire thing in a single thing, or should i have the git handling seperated from web part, maybe in go or c ? |
| 17:37:52 | <srazkvt> | i see gitlib hasn't had an update on hackage since 2023 |
| 17:43:45 | <srazkvt> | nvm, 2021 |
| 17:43:53 | <dminuoso> | tomsmeding: Not sure what you mean by inconsistent path of constraints. |
| 17:44:28 | <tomsmeding> | dminuoso: subset of the constraints, that will necessarily form some kind of tree structure (I guess not just path), that exhibit the constradiction |
| 17:44:59 | <dminuoso> | What's the adjective "inconsistent" doing there? |
| 17:46:38 | <tomsmeding> | Well, there was a type error, right? |
| 17:46:53 | <tomsmeding> | If the constraints were all consistent with each other, there would be no type error. |
| 17:46:58 | → | alfiee joins (~alfiee@user/alfiee) |
| 17:47:17 | → | son0p joins (~ff@2800:e6:4000:d723:c181:4205:f2b1:437a) |
| 17:47:28 | <dminuoso> | Oh okay. Then yeah, though "constraints" probably does not mean typeclass type of constraints here. |
| 17:48:00 | <dminuoso> | If we assume the type checker to be following its judgements, then every part that was plugged into a premise of a judgement could be part of a type error slice. |
| 17:48:21 | <tomsmeding> | Ah indeed, I was thinking of the constraint-solving approach to type checkinf |
| 17:48:26 | <tomsmeding> | *checking |
| 17:48:26 | <davean> | srazkvt: I wrote an implimentation of git in Haskell which is rather fast. For my use cases it beats the official git implimentation |
| 17:49:09 | → | acidjnk_new joins (~acidjnk@p200300d6e7283f5311bd92edfda65283.dip0.t-ipconnect.de) |
| 17:50:20 | <dminuoso> | tomsmeding: https://www.macs.hw.ac.uk/~fairouz/forest/papers/conference-publications/lsfa14.pdf is a nice practical read into the subject, along with some of the theory. |
| 17:51:01 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 17:51:32 | <tomsmeding> | "incorrect type information" in the abstract sounds like a bug -- they're overselling a little bit there |
| 17:51:54 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 17:52:01 | <srazkvt> | davean: oh interesting, is it public ? i'd like to have a look at it if so |
| 17:52:35 | <davean> | Yah its on hackage. 'miss' I have plenty of complaints about it, and wanted to take it further but it did what I needed |
| 17:52:46 | <dminuoso> | tomsmeding: Well, it depends on how you look at it. |
| 17:53:05 | <dminuoso> | tomsmeding: When GHC blows up in line #a while the actual error is line #b ... |
| 17:53:19 | <tomsmeding> | the claims that GHC makes are still correct, even if unhelpful |
| 17:53:33 | <davean> | The actual error is both places |
| 17:53:35 | <tomsmeding> | anyway this is arguing semantics |
| 17:53:56 | <davean> | The error is them not matching |
| 17:53:57 | <dminuoso> | It may also relate to some SML implementations, I am not sure. |
| 17:54:20 | <davean> | You can pick a location you can make more minimal changes in terms of code to bring into alignment |
| 17:55:04 | <dminuoso> | So if we take the usual approach of "add type signatures to constrain the type checker", the type error slicers would tell you *precisely* the places that actually would have any impact on that process. |
| 17:55:17 | <dminuoso> | To the point that this could even be a guided process |
| 17:55:25 | <tomsmeding> | right |
| 17:55:59 | <tomsmeding> | that paper looks more technical, especially in presentation (guys, you don't explain something by first giving 200 definitions), than I'm willing to read right now :) |
| 17:56:10 | <tomsmeding> | but I have a rough idea from the discussion here and that's good enough for me now |
| 17:59:14 | <tomsmeding> | (a more charitable take is that this is an implementation paper that assumes you already know how slicing works in principle -- which is fair) |
| 18:11:31 | × | srazkvt quits (~sarah@user/srazkvt) (Quit: Konversation terminated!) |
| 18:12:21 | × | fp quits (~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Ping timeout: 265 seconds) |
| 18:13:10 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 18:15:24 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 18:20:55 | → | vgtw_ joins (~vgtw@user/vgtw) |
| 18:21:04 | × | vgtw quits (~vgtw@user/vgtw) (Ping timeout: 260 seconds) |
| 18:27:01 | → | bilegeek joins (~bilegeek@2600:1008:b050:b561:2843:58a0:b048:fc36) |
| 18:28:14 | × | vgtw_ quits (~vgtw@user/vgtw) (Ping timeout: 252 seconds) |
| 18:33:01 | → | alfiee joins (~alfiee@user/alfiee) |
| 18:35:43 | → | vgtw joins (~vgtw@user/vgtw) |
| 18:37:03 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds) |
| 18:37:52 | × | Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed) |
| 18:38:15 | → | Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) |
| 18:39:11 | × | jespada quits (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) (Quit: My Mac has gone to sleep. ZZZzzz…) |
| 18:39:58 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds) |
| 18:40:15 | × | fun-safe-math quits (~fun-safe-@2601:1c2:1b7f:801f:26d6:a094:aa3b:66cd) (Quit: No Ping reply in 180 seconds.) |
| 18:41:30 | → | fun-safe-math joins (~fun-safe-@2601:1c2:1b7f:801f:e1d3:88d5:3ff2:2f10) |
| 18:46:43 | → | p3n joins (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) |
| 18:47:49 | × | ubert quits (~Thunderbi@2a02:8109:ab8a:5a00:42eb:c7e6:6d02:7a65) (Quit: ubert) |
| 18:48:54 | × | jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 276 seconds) |
| 18:49:13 | × | Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed) |
| 18:49:39 | → | Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) |
| 18:55:00 | × | _xor quits (~xor@ip-66-42-132-175.dynamic.fuse.net) (Ping timeout: 252 seconds) |
| 18:55:12 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 19:02:39 | → | _xor joins (~xor@ip-66-42-132-175.dynamic.fuse.net) |
| 19:03:32 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 19:07:06 | → | weary-traveler joins (~user@user/user363627) |
| 19:08:40 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 19:09:39 | → | bilegeek_ joins (~bilegeek@2600:1008:b09d:26e1:5113:f5a5:f05a:228d) |
| 19:11:19 | → | bilegeek__ joins (~bilegeek@2600:1008:b06f:f975:a471:7a4:18e0:46c) |
| 19:12:03 | × | bilegeek quits (~bilegeek@2600:1008:b050:b561:2843:58a0:b048:fc36) (Ping timeout: 245 seconds) |
| 19:13:36 | → | jespada joins (~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy) |
| 19:14:09 | × | bilegeek_ quits (~bilegeek@2600:1008:b09d:26e1:5113:f5a5:f05a:228d) (Ping timeout: 260 seconds) |
| 19:14:28 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Read error: Connection reset by peer) |
| 19:14:39 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 19:16:12 | × | bilegeek__ quits (~bilegeek@2600:1008:b06f:f975:a471:7a4:18e0:46c) (Ping timeout: 276 seconds) |
| 19:16:20 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Quit: leaving) |
| 19:16:48 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 19:17:19 | → | jmcantrell joins (~weechat@user/jmcantrell) |
| 19:18:45 | → | alfiee joins (~alfiee@user/alfiee) |
| 19:19:05 | <TheHoodedClaw> | I have a fairly large library written that does a lot of unrelated things and I've never uploaded to hackage before, can anyone advise me on whether it's any good, whether it needs to be broken up, which parts are most useful or whatever its https://github.com/ibrettyoudid/SwissArmyKnife |
| 19:20:23 | × | hgolden quits (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Remote host closed the connection) |
| 19:23:04 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds) |
| 19:23:20 | → | hgolden joins (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) |
| 19:24:20 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Quit: peterbecich) |
| 19:24:52 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 19:29:34 | → | j0lol joins (~j0lol@132.145.17.236) |
| 19:29:58 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 19:40:28 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 19:45:12 | × | zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds) |
| 19:55:11 | → | fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi) |
| 20:00:01 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 20:00:44 | → | caconym joins (~caconym@user/caconym) |
| 20:02:01 | × | sabathan quits (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Read error: Connection reset by peer) |
| 20:05:09 | → | alfiee joins (~alfiee@user/alfiee) |
| 20:05:31 | → | sabathan joins (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) |
| 20:05:34 | → | SlackCoder joins (~SlackCode@64-94-63-8.ip.weststar.net.ky) |
| 20:10:06 | × | olivial quits (~benjaminl@user/benjaminl) (Read error: Connection reset by peer) |
| 20:10:09 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 276 seconds) |
| 20:10:21 | → | olivial joins (~benjaminl@user/benjaminl) |
| 20:11:15 | → | zungi joins (~tory@user/andrewchawk) |
| 20:11:52 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en) |
| 20:14:00 | × | jespada quits (~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…) |
| 20:14:10 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 20:14:45 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 20:15:54 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds) |
| 20:15:54 | ljdarj1 | is now known as ljdarj |
| 20:18:36 | × | jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 252 seconds) |
| 20:23:57 | → | sprotte24 joins (~sprotte24@p200300d16f145200a11093ba77855b13.dip0.t-ipconnect.de) |
| 20:24:48 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds) |
| 20:26:29 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 20:27:47 | <haskellbridge> | <Liamzee> hello |
| 20:27:57 | <haskellbridge> | <Liamzee> why am i getting an error that the RTS doesn't support multiple OS threads? |
| 20:28:05 | <haskellbridge> | <Liamzee> it's telling me to use ghc -threaded when linking |
| 20:28:34 | <haskellbridge> | <Liamzee> GHC options on my program: -Wall -rtsopts -with-rtsopts="-threaded" -threaded |
| 20:28:40 | <haskellbridge> | <Liamzee> M2 OSX |
| 20:29:10 | <monochrom> | Oh, -threaded is a compile-time flag, not runtime. |
| 20:29:20 | × | fp quits (~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Remote host closed the connection) |
| 20:29:44 | <monochrom> | more precisely, link-time. When generating an exe, choose which RTS to include in the exe. |
| 20:30:50 | <tomsmeding> | Liamzee: remove that `-with-rtsopts="-threaded"` |
| 20:30:58 | <tomsmeding> | also the `-rtsopts` is unnecessary for just -N |
| 20:32:14 | × | zungi quits (~tory@user/andrewchawk) (Remote host closed the connection) |
| 20:32:35 | → | zungi joins (~tory@user/andrewchawk) |
| 20:33:10 | <monochrom> | Although, I get 0 error messages when I try verbatim `ghc -Wall -rtsopts -with-rtsopts="-threaded" -threaded c.hs` where c.hs is just "main = putStrLn"hi"" |
| 20:33:41 | <monochrom> | Also, running the exe has no error, it just says hi. |
| 20:34:02 | <tomsmeding> | Liamzee: the -threaded must be on the _executable_, not on a library that happens to be a dependency of the executable -- just in case that is the problem |
| 20:34:26 | <haskellbridge> | <Liamzee> brick-tetris: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException: |
| 20:34:26 | <haskellbridge> | user error (RTS doesn't support multiple OS threads (use ghc -threaded when linking)) |
| 20:34:48 | <tomsmeding> | post your cabal file? |
| 20:35:08 | <tomsmeding> | or the place where you're passing that -threaded |
| 20:35:23 | <int-e> | what is the -with-rtsopts="-threaded" for? |
| 20:35:30 | <tomsmeding> | being useless |
| 20:35:37 | <monochrom> | misunderstanding |
| 20:35:43 | <int-e> | I'm surprised the program doesn't choke on it tbh |
| 20:36:13 | <haskellbridge> | <Liamzee> okay, it seems to have been a problem with ghc-options in cabal, I have to set +RTS, then put in threaded and -N4 options |
| 20:36:39 | <tomsmeding> | Liamzee: that sounds highly suspicious and likely wrong; could you post your cabal file? |
| 20:37:09 | <monochrom> | Interesting. `./c +RTS -threaded` does not error out. Nor any prefix of "threaded". But `./c +RTS -dreaded` is an error. |
| 20:37:33 | <monochrom> | What magic is this that -thre is OK but -dreaded is not? :) |
| 20:38:59 | <tomsmeding> | monochrom: you now have files `hreaded`, `hre`, etc. in the current directory |
| 20:39:09 | <tomsmeding> | > -t[<file>] One-line GC statistics (if <file> omitted, uses stderr) |
| 20:39:22 | <monochrom> | OMG yes that's true. |
| 20:39:24 | <tomsmeding> | Liamzee: that goes for you too |
| 20:39:54 | <monochrom> | This is what's wrong with single letter options! |
| 20:39:57 | <tomsmeding> | nice bait-and-switch :p |
| 20:40:15 | <tomsmeding> | this is what's wrong with single-letter options _that take an argument that is attached to the option_ |
| 20:40:18 | <int-e> | tomsmeding: lol, thanks |
| 20:42:10 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 20:42:20 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 20:52:13 | → | alfiee joins (~alfiee@user/alfiee) |
| 20:56:38 | <mauke> | gcc -o2 main.c |
| 20:56:49 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds) |
| 20:56:59 | → | superlink joins (~kontsikou@adsl-192.79.107.136.tellas.gr) |
| 20:57:26 | → | superlink29 joins (~superlink@adsl-192.79.107.136.tellas.gr) |
| 20:57:55 | × | superlink29 quits (~superlink@adsl-192.79.107.136.tellas.gr) (Client Quit) |
| 20:57:55 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 20:58:48 | <monochrom> | oh heh |
| 21:02:26 | <int-e> | mauke: but "everyone" knows about -o :-) |
| 21:02:39 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 21:13:18 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 21:17:57 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 21:18:43 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 21:23:45 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 21:28:40 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 21:33:11 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 21:33:58 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 21:36:37 | × | michalz quits (~michalz@185.246.207.222) (Remote host closed the connection) |
| 21:36:40 | <monochrom> | Actually took me a minute or two to see it is not -O2 it is -o exename. |
| 21:37:45 | <monochrom> | Oooohhhh great trick question to put on exam! "John typed in `gcc -o2 main.c`, then can't find a.out, why?" |
| 21:37:57 | → | alfiee joins (~alfiee@user/alfiee) |
| 21:42:11 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds) |
| 21:44:02 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 21:47:42 | → | jmcantrell joins (~weechat@user/jmcantrell) |
| 21:48:23 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 21:50:48 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 21:53:18 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds) |
| 21:53:18 | ljdarj1 | is now known as ljdarj |
| 21:53:54 | <mauke> | worse is when you intend to use -o, but forget the argument: gcc -o *.c |
| 21:57:40 | <haskellbridge> | <Liamzee> or rather it was an issue requiring cabal clean, sigh |
| 21:57:51 | <haskellbridge> | <Liamzee> also, just curious, why don't Haskellers building frameworks use sum types more? |
| 21:58:34 | <haskellbridge> | <Liamzee> I'm looking at Brick, the interface could have been smoothed out by using a sum type with variants, possibly wrapping subtypes |
| 21:59:26 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 21:59:36 | <haskellbridge> | <Liamzee> tbh at the very least, it'd create an issue with record field exceptions, unfortunately :( |
| 22:00:28 | <haskellbridge> | <sm> Liamzee which Brick api could have used a sum type ? |
| 22:03:28 | → | jespada joins (~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy) |
| 22:04:01 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 22:04:24 | × | jespada quits (~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy) (Client Quit) |
| 22:05:37 | × | takuan quits (~takuan@d8D86B601.access.telenet.be) (Remote host closed the connection) |
| 22:06:06 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 22:06:48 | <haskellbridge> | <Liamzee> there are multiple default mains |
| 22:07:23 | <haskellbridge> | <Liamzee> erm, multiple ways to call into brick, alterantive is to have one way, but have the variation be contained in the App API |
| 22:07:34 | <haskellbridge> | <Liamzee> erm, App type API |
| 22:08:25 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:09:40 | <haskellbridge> | <Liamzee> probably my mistake, just thinking about it as a design space |
| 22:10:06 | <haskellbridge> | <sm> https://hackage.haskell.org/package/brick-2.8.2/docs/Brick-Main.html#v:defaultMain and friends eh |
| 22:10:48 | <haskellbridge> | <sm> generally I think haskell frameworks use sum types plenty |
| 22:11:49 | <haskellbridge> | <sm> he probably thought separate main functions for separate use cases was easier to use |
| 22:13:00 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 22:14:08 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 245 seconds) |
| 22:15:43 | → | mange joins (~user@user/mange) |
| 22:19:56 | → | fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi) |
| 22:20:29 | → | visilii_ joins (~visilii@85.172.77.105) |
| 22:23:47 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:24:10 | × | visilii quits (~visilii@213.24.126.217) (Ping timeout: 265 seconds) |
| 22:24:41 | → | alfiee joins (~alfiee@user/alfiee) |
| 22:26:23 | × | Pozyomka quits (~pyon@user/pyon) (Quit: WeeChat 4.5.2) |
| 22:26:42 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Quit: leaving) |
| 22:27:05 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 22:28:46 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 252 seconds) |
| 22:29:19 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds) |
| 22:30:33 | <haskellbridge> | <Bowuigi> Implementation-wise it makes sense. Most of those are defined in terms of each other, so it's just abstracting boilerplate |
| 22:30:35 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 22:31:41 | → | chewybread joins (~chewybrea@user/chewybread) |
| 22:39:59 | × | Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed) |
| 22:40:14 | → | Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) |
| 22:41:30 | <monochrom> | I made the 'gcc -o main.c' mistake once. |
| 22:41:50 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:42:14 | <monochrom> | Actually it was more like "gcc main.c -o main.c', the 2nd ".c" was because tab-completion. |
| 22:43:06 | <monochrom> | Eventually, my solution was to write a short Makefile (or even, short shell script). |
| 22:44:09 | × | Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Client Quit) |
| 22:44:23 | → | Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) |
| 22:45:34 | <monochrom> | I haven't used or looked at any frameworks. But I'm happy that in unix, Handler is a sum type: Default, Ignore, Catch, CatchOnce, etc. |
| 22:45:58 | × | fp quits (~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Ping timeout: 268 seconds) |
| 22:46:11 | × | Ranhir quits (~Ranhir@157.97.53.139) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/) |
| 22:46:48 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 22:46:50 | <jackdk> | monochrom: for single-file C programs, `make foo` often gets you there because of the enormous pile of implicit rules |
| 22:47:35 | <monochrom> | In general, you have to ask yourself the open-vs-closed question: Can the user add more cases? Then it pretty much determines whether it's a sum type or a polymorphic type. |
| 22:47:54 | × | chewybread quits (~chewybrea@user/chewybread) (Remote host closed the connection) |
| 22:48:28 | <monochrom> | But I want -O2 and I am too "lazy" (read on) to enter "CFLAGS=-O2 make foo" so I write a full-blown Makefile haha. |
| 22:48:43 | → | chewybread joins (~chewybrea@user/chewybread) |
| 22:48:56 | <monochrom> | 5 seconds of "CFLAGS=-O2" can be saved by 5 minutes of writing an overblown Makefile :) |
| 22:52:10 | × | troydm quits (~troydm@user/troydm) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset) |
| 22:52:31 | → | bilegeek joins (~bilegeek@2600:1008:b017:2c77:ca70:bd87:7736:a8da) |
| 22:53:00 | → | pavonia joins (~user@user/siracusa) |
| 22:54:48 | × | tabaqui1 quits (~root@87.200.129.102) (Ping timeout: 252 seconds) |
| 22:57:14 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:02:02 | × | chewybread quits (~chewybrea@user/chewybread) (Remote host closed the connection) |
| 23:02:14 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 23:02:16 | → | chewybread joins (~chewybrea@2601:984:201:3890:e8b7:6266:44dc:64) |
| 23:02:16 | × | chewybread quits (~chewybrea@2601:984:201:3890:e8b7:6266:44dc:64) (Changing host) |
| 23:02:16 | → | chewybread joins (~chewybrea@user/chewybread) |
| 23:03:40 | × | byte quits (~mu@user/byte) (Quit: Leaving) |
| 23:06:34 | → | fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi) |
| 23:06:52 | → | user363627 joins (~user@user/user363627) |
| 23:07:17 | × | chewybread quits (~chewybrea@user/chewybread) (Remote host closed the connection) |
| 23:07:38 | → | chewybread joins (~chewybrea@2601:984:201:3890:e8b7:6266:44dc:64) |
| 23:07:39 | × | chewybread quits (~chewybrea@2601:984:201:3890:e8b7:6266:44dc:64) (Changing host) |
| 23:07:39 | → | chewybread joins (~chewybrea@user/chewybread) |
| 23:10:05 | → | alfiee joins (~alfiee@user/alfiee) |
| 23:11:30 | × | weary-traveler quits (~user@user/user363627) (Ping timeout: 276 seconds) |
| 23:12:03 | → | byte joins (~mu@user/byte) |
| 23:12:18 | × | chewybread quits (~chewybrea@user/chewybread) (Remote host closed the connection) |
| 23:12:37 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:12:44 | → | chewybread joins (~chewybrea@user/chewybread) |
| 23:13:21 | × | zlqrvx quits (~zlqrvx@user/zlqrvx) (Quit: %quit%) |
| 23:14:57 | × | alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds) |
| 23:17:25 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 23:20:38 | <haskellbridge> | <Liamzee> tbh i feel like the problem with Haskell frameworks is that, while yeah, you can get Brick to just work with simpleMain or some other thing, the problem is that the distance between "default options" and "write my own options" is too big |
| 23:21:02 | <haskellbridge> | <Liamzee> I DON'T want to add vty to imports list in order to forge an attr map thing |
| 23:21:35 | <haskellbridge> | <Liamzee> it's like at this point I want objects and sum types, i.e, it's nice to be able to customize |
| 23:21:57 | <haskellbridge> | <Liamzee> but it's also nice to just stick to defaults |
| 23:23:27 | <haskellbridge> | <sm> I don't quite understand |
| 23:24:08 | <haskellbridge> | <sm> are you saying, too many things require adding a package and a bunch of imports, and you'd rather have a richer standard library built in or near by ? |
| 23:26:42 | × | xacktm quits (xacktm@user/xacktm) (Quit: fBNC - https://bnc4free.com) |
| 23:27:19 | <haskellbridge> | <Liamzee> https://hackage.haskell.org/package/brick-2.8.2/docs/Brick-Main.html |
| 23:27:43 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 23:27:59 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:28:22 | <haskellbridge> | <Liamzee> the only two things i really need are app draw and app handle event |
| 23:29:01 | <haskellbridge> | <Liamzee> app choose cursor got a lambda, namely: _ _ -> Nothing |
| 23:30:01 | <haskellbridge> | <Liamzee> what i mean is that framework interfaces should be built more around defaults, then the option to overwrite the defaults |
| 23:30:10 | <haskellbridge> | <sm> many frameworks provide a defaultConfig, maybe brick could use more of that |
| 23:30:42 | × | j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer) |
| 23:30:48 | <haskellbridge> | <sm> but I don't see where it's needed, since it provided simple entry points instead |
| 23:31:43 | <haskellbridge> | <sm> but it sounds like they weren't quite ergonomic for you |
| 23:32:28 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 23:33:52 | → | j1n37 joins (~j1n37@user/j1n37) |
| 23:34:41 | × | chewybread quits (~chewybrea@user/chewybread) (Ping timeout: 248 seconds) |
| 23:35:32 | <haskellbridge> | <Liamzee> well, here's a problem with forging an attrmap via vty, i had it set to ^>= 6.3 |
| 23:36:14 | <haskellbridge> | <Liamzee> brick had it set to ^>= 6.0 |
| 23:36:53 | <haskellbridge> | <Liamzee> cabal crashed, had to change vty requirements |
| 23:37:01 | <haskellbridge> | <Liamzee> erm, cabal wouldn't let me compile |
| 23:39:04 | <haskellbridge> | <Liamzee> sorry for whinging |
| 23:41:34 | <haskellbridge> | <sm> it's ok to complain, what what are you complaining about :) |
| 23:41:40 | <haskellbridge> | <sm> but what |
| 23:42:04 | <haskellbridge> | <sm> ergonomics of developing with haskell in general ? |
| 23:42:16 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 23:43:21 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:43:26 | <haskellbridge> | <Liamzee> I mean that frameworks often are, Haskellers are used to it, pick it up quickly, but aren't the most user friendly |
| 23:43:41 | <haskellbridge> | <Liamzee> with a framework the first step i try to get to is "runs with user-modifiable defaults" |
| 23:43:54 | <haskellbridge> | <Liamzee> like, with Monomer, I tried to figure out the minimum program that would run under it |
| 23:44:29 | <haskellbridge> | <Liamzee> then the next step is to start modifying the minimum program to do what i need |
| 23:47:57 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 23:50:01 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 23:50:58 | → | chewybread joins (~chewybrea@user/chewybread) |
| 23:51:47 | → | xacktm joins (xacktm@user/xacktm) |
| 23:52:01 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 23:52:34 | → | krei-se- joins (~krei-se@p3ee0fd57.dip0.t-ipconnect.de) |
| 23:53:02 | <haskellbridge> | <Liamzee> monomer has a similar problem in that they've chosen not to package fonts with the program |
| 23:53:12 | <monochrom> | I am not convinced that it is not also the same issue with all frameworks for all domains in all languages. |
| 23:53:45 | × | krei-se quits (~krei-se@p200300f1cf3232002411defffe902013.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 23:54:24 | × | Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed) |
| 23:54:41 | → | Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) |
| 23:54:57 | <haskellbridge> | <sm> so, libs and tools aren't always usable ? I think noone will disagree with you |
| 23:55:24 | × | chewybread quits (~chewybrea@user/chewybread) (Ping timeout: 252 seconds) |
| 23:55:28 | → | alfiee joins (~alfiee@user/alfiee) |
| 23:55:52 | <haskellbridge> | <sm> that's normal with free things developed in someone's spare time.. but also there's a culture/norms of UX that are weaker or different in haskell compared to other ecosystems |
| 23:55:59 | <haskellbridge> | <sm> eg, ruby |
| 23:56:25 | <haskellbridge> | <sm> it's hard to fix that retroactively |
| 23:58:43 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
All times are in UTC on 2025-03-05.