2021-01-05 00:01:39 +0100 | jcowan | (sid325434@gateway/web/irccloud.com/x-xccxiqbedbcrqfvq) () |
2021-01-05 00:02:29 +0100 | chang | (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) |
2021-01-05 00:02:30 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-01-05 00:03:15 +0100 | carthia | (~carthia@gateway/tor-sasl/carthia) (Quit: carthia) |
2021-01-05 00:03:55 +0100 | juri_ | (~juri@178.63.35.222) (Ping timeout: 265 seconds) |
2021-01-05 00:03:57 +0100 | __monty__ | (~toonn@unaffiliated/toonn) (Quit: leaving) |
2021-01-05 00:04:41 +0100 | Major_Biscuit | (~Major_Bis@93-21-124.netrun.cytanet.com.cy) |
2021-01-05 00:06:21 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) (Remote host closed the connection) |
2021-01-05 00:09:14 +0100 | Gurkenglas | (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 265 seconds) |
2021-01-05 00:12:54 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:b151:c200:4f65:e713) |
2021-01-05 00:14:18 +0100 | dhil | (~dhil@78.156.97.38) (Ping timeout: 256 seconds) |
2021-01-05 00:14:47 +0100 | carlomagno | (~cararell@148.87.23.13) (Quit: Leaving.) |
2021-01-05 00:15:41 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2021-01-05 00:16:11 +0100 | LKoen | (~LKoen@174.175.9.109.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”) |
2021-01-05 00:16:22 +0100 | Tario | (~Tario@201.192.165.173) |
2021-01-05 00:16:24 +0100 | elliott_ | (~elliott@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
2021-01-05 00:17:27 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 265 seconds) |
2021-01-05 00:20:31 +0100 | juri_ | (~juri@178.63.35.222) |
2021-01-05 00:23:11 +0100 | Franciman | (~francesco@host-87-17-26-221.retail.telecomitalia.it) (Quit: Leaving) |
2021-01-05 00:23:44 +0100 | pera | (~pera@unaffiliated/pera) (Ping timeout: 265 seconds) |
2021-01-05 00:24:12 +0100 | jumper149 | (~jumper149@ip4d1622a9.dynamic.kabel-deutschland.de) |
2021-01-05 00:25:02 +0100 | Melanie | (~Melanie@192-0-134-138.cpe.teksavvy.com) |
2021-01-05 00:25:37 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) |
2021-01-05 00:25:50 +0100 | ADG1089__ | (~aditya@122.163.234.142) (Remote host closed the connection) |
2021-01-05 00:25:50 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:60a3:298c:ae57:512d) (Ping timeout: 264 seconds) |
2021-01-05 00:28:54 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
2021-01-05 00:28:56 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-01-05 00:30:13 +0100 | Melanie | (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 264 seconds) |
2021-01-05 00:30:32 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-01-05 00:30:42 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-01-05 00:30:53 +0100 | matryoshka | (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) |
2021-01-05 00:31:09 +0100 | todda7 | (~torstein@ppp-2-84-17-53.home.otenet.gr) |
2021-01-05 00:33:41 +0100 | chang | (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-01-05 00:34:36 +0100 | DirefulSalt | (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) |
2021-01-05 00:35:07 +0100 | shutdown_-h_now | (~arjan@2001:1c06:2d0b:2312:ea:479d:de22:4e6b) (Ping timeout: 272 seconds) |
2021-01-05 00:39:43 +0100 | Lorra | (~lorenzo@2001:a61:ba6:4501:e4b0:8d5e:9fde:f2ec) (Quit: Konversation terminated!) |
2021-01-05 00:40:33 +0100 | shutdown_-h_now | (~arjan@2001:1c06:2d0b:2312:1c6c:f94b:408f:edd0) |
2021-01-05 00:43:54 +0100 | Major_Biscuit | (~Major_Bis@93-21-124.netrun.cytanet.com.cy) (Quit: WeeChat 2.9) |
2021-01-05 00:44:30 +0100 | cmcma20 | (~cmcma20@l37-192-2-125.novotelecom.ru) (Quit: leaving) |
2021-01-05 00:45:13 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 264 seconds) |
2021-01-05 00:45:38 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection) |
2021-01-05 00:46:52 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2021-01-05 00:49:17 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:b151:c200:4f65:e713) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-01-05 00:51:32 +0100 | CMCDragonkai1 | (~Thunderbi@120.17.149.179) (Read error: Connection reset by peer) |
2021-01-05 00:55:06 +0100 | usr25 | (~usr25@unaffiliated/usr25) (Quit: Leaving) |
2021-01-05 00:55:12 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 260 seconds) |
2021-01-05 00:55:28 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-01-05 00:55:44 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 00:58:02 +0100 | tessier | (~treed@mail.copilotco.com) |
2021-01-05 00:58:02 +0100 | tessier | (~treed@mail.copilotco.com) (Changing host) |
2021-01-05 00:58:02 +0100 | tessier | (~treed@kernel-panic/copilotco) |
2021-01-05 01:00:09 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 260 seconds) |
2021-01-05 01:01:54 +0100 | dirediresalt | (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) |
2021-01-05 01:03:06 +0100 | DirefulSalt | (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Ping timeout: 272 seconds) |
2021-01-05 01:04:32 +0100 | Melanie | (~Melanie@192-0-134-138.cpe.teksavvy.com) |
2021-01-05 01:05:06 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 01:09:13 +0100 | Melanie | (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 264 seconds) |
2021-01-05 01:10:25 +0100 | natechan | (~natechan@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Quit: WeeChat 2.9) |
2021-01-05 01:10:25 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds) |
2021-01-05 01:11:44 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) |
2021-01-05 01:13:53 +0100 | sfvm | (~sfvm@37.228.215.77) |
2021-01-05 01:15:52 +0100 | natechan | (~natechan@108-233-125-227.lightspeed.sntcca.sbcglobal.net) |
2021-01-05 01:25:47 +0100 | jespada | (~jespada@90.254.245.49) (Ping timeout: 272 seconds) |
2021-01-05 01:26:27 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving) |
2021-01-05 01:27:58 +0100 | ph88 | (~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de) |
2021-01-05 01:29:23 +0100 | jespada | (~jespada@90.254.245.49) |
2021-01-05 01:33:03 +0100 | emptyflask | (~jon@66.64.40.21) |
2021-01-05 01:33:13 +0100 | ph88 | (~ph88@ip5f5af6cd.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds) |
2021-01-05 01:33:44 +0100 | ensyde | (~ensyde@2600:1702:2e30:1a40:9d3a:4059:c410:b901) |
2021-01-05 01:39:13 +0100 | madjestic | (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 264 seconds) |
2021-01-05 01:42:00 +0100 | thunderrd | (~thunderrd@183.182.111.131) (Ping timeout: 246 seconds) |
2021-01-05 01:44:47 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 01:47:23 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.) |
2021-01-05 01:48:34 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Ping timeout: 260 seconds) |
2021-01-05 01:48:50 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-01-05 01:49:41 +0100 | nictki | (~nictki@b2b-78-94-64-166.unitymedia.biz) |
2021-01-05 01:52:03 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
2021-01-05 01:53:01 +0100 | ulidtko | (~ulidtko@194.54.80.38) (Ping timeout: 246 seconds) |
2021-01-05 01:53:28 +0100 | SrPx | (sid108780@gateway/web/irccloud.com/x-jqknpexcrnufpwgi) (Ping timeout: 268 seconds) |
2021-01-05 01:55:15 +0100 | nictki | (~nictki@b2b-78-94-64-166.unitymedia.biz) (Quit: leaving) |
2021-01-05 01:56:03 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) |
2021-01-05 01:56:15 +0100 | SrPx | (sid108780@gateway/web/irccloud.com/x-ugcimtnskspafeof) |
2021-01-05 01:56:17 +0100 | nictki | (~nictki@b2b-78-94-64-166.unitymedia.biz) |
2021-01-05 01:56:37 +0100 | tama | (~tama@unaffiliated/tama00) |
2021-01-05 01:59:25 +0100 | tama00 | (~tama@unaffiliated/tama00) (Ping timeout: 240 seconds) |
2021-01-05 02:01:22 +0100 | nictki | (~nictki@b2b-78-94-64-166.unitymedia.biz) (Quit: leaving) |
2021-01-05 02:01:38 +0100 | nictki | (~nictki@b2b-78-94-64-166.unitymedia.biz) |
2021-01-05 02:01:43 +0100 | ohmysomu1huser | (~nickednam@37.120.211.197) |
2021-01-05 02:01:45 +0100 | ohmysomuchuser | (~nickednam@037008230157.dynamic-3-poz-k-1-2-0.vectranet.pl) (Ping timeout: 256 seconds) |
2021-01-05 02:03:37 +0100 | nictki | (~nictki@b2b-78-94-64-166.unitymedia.biz) (Client Quit) |
2021-01-05 02:03:57 +0100 | troydm | (~troydm@unaffiliated/troydm) (Ping timeout: 268 seconds) |
2021-01-05 02:09:21 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408) |
2021-01-05 02:11:08 +0100 | whataday | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2021-01-05 02:11:19 +0100 | Rudd0 | (~Rudd0@185.189.115.103) (Ping timeout: 260 seconds) |
2021-01-05 02:11:23 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 272 seconds) |
2021-01-05 02:12:15 +0100 | whataday | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2021-01-05 02:12:47 +0100 | ensyde | (~ensyde@2600:1702:2e30:1a40:9d3a:4059:c410:b901) () |
2021-01-05 02:18:58 +0100 | FrostyX | (~jkadlcik@78.80.183.78) (Remote host closed the connection) |
2021-01-05 02:19:03 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2021-01-05 02:19:19 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2021-01-05 02:21:13 +0100 | Tario | (~Tario@201.192.165.173) |
2021-01-05 02:28:12 +0100 | Melanie | (~Melanie@192-0-134-138.cpe.teksavvy.com) |
2021-01-05 02:28:22 +0100 | kyali_ | (~kyali@APN-123-249-162-gprs.simobil.net) |
2021-01-05 02:29:02 +0100 | dandels | (~dandels@unaffiliated/dandels) |
2021-01-05 02:29:34 +0100 | guest14 | guest15 |
2021-01-05 02:30:35 +0100 | MidAutumnHotaru | (~MidAutumn@154.91.197.93) (Quit: Quit 啾) |
2021-01-05 02:31:10 +0100 | kyali | (~kyali@APN-123-251-207-gprs.simobil.net) (Ping timeout: 246 seconds) |
2021-01-05 02:31:12 +0100 | MidAutumnHotaru | (~MidAutumn@154.91.197.93) |
2021-01-05 02:32:13 +0100 | columbarius1 | (~columbari@mue-88-130-54-155.dsl.tropolys.de) (Ping timeout: 246 seconds) |
2021-01-05 02:34:36 +0100 | columbarius1 | (~columbari@mue-88-130-54-222.dsl.tropolys.de) |
2021-01-05 02:34:39 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
2021-01-05 02:36:12 +0100 | spopejoy | (~stuart@ool-44c5f8c9.dyn.optonline.net) |
2021-01-05 02:39:03 +0100 | troydm | (~troydm@unaffiliated/troydm) |
2021-01-05 02:39:31 +0100 | nineonine | (~nineonine@50.216.62.2) (Remote host closed the connection) |
2021-01-05 02:40:03 +0100 | nineonine | (~nineonine@50.216.62.2) |
2021-01-05 02:40:20 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 02:40:39 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2021-01-05 02:44:52 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 260 seconds) |
2021-01-05 02:51:02 +0100 | Tario | (~Tario@201.192.165.173) |
2021-01-05 02:51:13 +0100 | jmchael | (~jmchael@81.174.205.210) (Ping timeout: 264 seconds) |
2021-01-05 02:51:30 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 02:51:44 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-01-05 02:52:06 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) |
2021-01-05 02:52:44 +0100 | crblmr | (~carbolyme@matrix.dropacid.net) (Ping timeout: 256 seconds) |
2021-01-05 02:54:11 +0100 | crblmr | (~carbolyme@137.117.174.36) |
2021-01-05 02:54:32 +0100 | <ezzieyguywuf> | do y'all have any experience with this program? https://hackage.haskell.org/package/cabal-bounds |
2021-01-05 02:54:37 +0100 | <ezzieyguywuf> | or do you just manage your bounds manually? |
2021-01-05 02:55:57 +0100 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds) |
2021-01-05 02:56:22 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
2021-01-05 02:57:31 +0100 | duckonomy | (~duckonomy@177.ip-144-217-84.net) (Quit: z.z) |
2021-01-05 02:58:11 +0100 | <Clint> | manual sounds better to me |
2021-01-05 02:59:22 +0100 | <ezzieyguywuf> | how do you choose when to not include any bounds? |
2021-01-05 02:59:25 +0100 | duckonomy | (~duckonomy@177.ip-144-217-84.net) |
2021-01-05 02:59:26 +0100 | <ezzieyguywuf> | or should every dep have a bound? |
2021-01-05 03:02:29 +0100 | <Clint> | i update lower bounds when i use a function that was introduced in whichever library version |
2021-01-05 03:02:42 +0100 | <Clint> | and i try to avoid upper bounds as much as possible |
2021-01-05 03:02:48 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 272 seconds) |
2021-01-05 03:05:26 +0100 | dfeuer | (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) (Ping timeout: 256 seconds) |
2021-01-05 03:05:53 +0100 | <ezzieyguywuf> | Clint: is that considered a best practice? |
2021-01-05 03:06:54 +0100 | <Clint> | not around here |
2021-01-05 03:07:07 +0100 | <ezzieyguywuf> | lol |
2021-01-05 03:07:16 +0100 | <ezzieyguywuf> | Clint: why? and where might it be considered as such? |
2021-01-05 03:09:12 +0100 | <maerwald> | ezzieyguywuf: PVP relies on upper bounds to make sense, like semver, but most ppl don't distinguish between "I know this doesn't work with version later than X" and "I know this works with version equal or lesser than X" |
2021-01-05 03:09:45 +0100 | <maerwald> | nor do they maintain their bounds in a timely manner, so you very often get upper bounds that are needlessly too tight |
2021-01-05 03:10:09 +0100 | <maerwald> | if you're developing an app, forget about upper bounds |
2021-01-05 03:10:29 +0100 | <maerwald> | if you're developing a library, it's a bit more delicate |
2021-01-05 03:11:18 +0100 | wei2912 | (~wei2912@unaffiliated/wei2912) |
2021-01-05 03:11:43 +0100 | <maerwald> | (I'd say ignoring upper bounds for libraries is fine, if you a) have nightly builds of your lib and b) are able to fix breakage with both a revbump and a code-fix in a very short time) |
2021-01-05 03:12:02 +0100 | <maerwald> | otherwise you're going to piss of hackage trustees and others |
2021-01-05 03:12:11 +0100 | <ezzieyguywuf> | maerwald: thank you for your thoughts |
2021-01-05 03:12:29 +0100 | <ezzieyguywuf> | I have yet to upload anything to hackage, but I am working on a library that will eventually go there |
2021-01-05 03:13:38 +0100 | ransom | (~c4264035@8.47.12.52) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-01-05 03:13:43 +0100 | <Clint> | ezzieyguywuf: getting it added to stackage will help you |
2021-01-05 03:13:59 +0100 | notzmv | (~user@unaffiliated/zmv) |
2021-01-05 03:14:53 +0100 | ransom | (~c4264035@8.47.12.52) |
2021-01-05 03:15:15 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 03:15:35 +0100 | <ezzieyguywuf> | Clint: "help me" how? |
2021-01-05 03:16:01 +0100 | <Clint> | ezzieyguywuf: alert you to impending upper-bounds problems |
2021-01-05 03:16:04 +0100 | nineonine | (~nineonine@50.216.62.2) (Ping timeout: 260 seconds) |
2021-01-05 03:16:21 +0100 | <ezzieyguywuf> | ah, I see. |
2021-01-05 03:19:48 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 268 seconds) |
2021-01-05 03:21:13 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-01-05 03:22:34 +0100 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) |
2021-01-05 03:24:29 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 03:26:11 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) (Remote host closed the connection) |
2021-01-05 03:26:52 +0100 | dandels | (~dandels@unaffiliated/dandels) (Ping timeout: 272 seconds) |
2021-01-05 03:27:13 +0100 | ohmysomu1huser | (~nickednam@37.120.211.197) (Ping timeout: 264 seconds) |
2021-01-05 03:27:50 +0100 | elfets | (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving) |
2021-01-05 03:28:41 +0100 | <ezzieyguywuf> | so if I have `config-schema ^>= 1.2.0.0`, and the version bumps to `1.3`, do I add `&& ^>= 1.3`? |
2021-01-05 03:30:46 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 256 seconds) |
2021-01-05 03:32:23 +0100 | <ezzieyguywuf> | what is this v3.4? of the docs? https://cabal.readthedocs.io/en/3.4/index.html |
2021-01-05 03:32:29 +0100 | <ezzieyguywuf> | I don't see v3.4 for cabal or cabal-install |
2021-01-05 03:33:40 +0100 | <sclv> | doc version is ahead of the released hackage version I think |
2021-01-05 03:35:12 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) |
2021-01-05 03:36:12 +0100 | <ezzieyguywuf> | should I use the latest doc version or the version corresponding to my cabal-install version? |
2021-01-05 03:36:39 +0100 | spopejoy | (~stuart@ool-44c5f8c9.dyn.optonline.net) (Quit: spopejoy) |
2021-01-05 03:36:47 +0100 | <sclv> | If you are using any cabal 3 use the latest |
2021-01-05 03:36:55 +0100 | <ezzieyguywuf> | ok |
2021-01-05 03:37:04 +0100 | spopejoy | (~stuart@ool-44c5f8c9.dyn.optonline.net) |
2021-01-05 03:39:44 +0100 | ebsen | (~ebsene@64-33-113-59-dynamic.midco.net) |
2021-01-05 03:40:36 +0100 | ebsen | (~ebsene@64-33-113-59-dynamic.midco.net) (Client Quit) |
2021-01-05 03:43:37 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:f5f0:2361:9049:5ed2) |
2021-01-05 03:43:47 +0100 | xff0x | (~fox@2001:1a81:5271:e800:63d8:c69:6df1:58cb) (Ping timeout: 260 seconds) |
2021-01-05 03:45:40 +0100 | xff0x | (~fox@2001:1a81:52a7:8200:12ff:8333:fcb3:6365) |
2021-01-05 03:48:34 +0100 | bollu5 | (~bollu@139.59.46.74) |
2021-01-05 03:48:42 +0100 | jedws | (~jedws@121.209.189.201) |
2021-01-05 03:49:06 +0100 | Jd007 | (~Jd007@d154-5-83-24.bchsia.telus.net) |
2021-01-05 03:49:21 +0100 | bollu | (~bollu@139.59.46.74) (Quit: Ping timeout (120 seconds)) |
2021-01-05 03:49:22 +0100 | bollu5 | bollu |
2021-01-05 03:49:28 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:418a) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
2021-01-05 03:51:44 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Read error: Connection reset by peer) |
2021-01-05 03:52:06 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) |
2021-01-05 03:52:14 +0100 | Aleksejs | (~Aleksejs@haskell.lv) (Ping timeout: 260 seconds) |
2021-01-05 03:52:24 +0100 | Aleksejs | (~Aleksejs@haskell.lv) |
2021-01-05 03:52:32 +0100 | geowiesnot | (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 265 seconds) |
2021-01-05 03:52:49 +0100 | luigy | (~luigy@104.236.106.229) (Ping timeout: 260 seconds) |
2021-01-05 03:52:56 +0100 | luigy | (~luigy@104.236.106.229) |
2021-01-05 03:53:58 +0100 | nshepperd25 | (~nshepperd@li364-218.members.linode.com) |
2021-01-05 03:53:59 +0100 | tureba | (~tureba@tureba.org) (Ping timeout: 265 seconds) |
2021-01-05 03:54:28 +0100 | crtschin | (~crtschin@104.131.9.149) (Ping timeout: 265 seconds) |
2021-01-05 03:54:34 +0100 | nshepperd2 | (~nshepperd@li364-218.members.linode.com) (Ping timeout: 260 seconds) |
2021-01-05 03:54:34 +0100 | eldritch | (~eldritch@unaffiliated/eldritch) (Ping timeout: 260 seconds) |
2021-01-05 03:54:34 +0100 | sarahzrf | (~sarahzrf_@sarahzrf.com) (Ping timeout: 260 seconds) |
2021-01-05 03:54:34 +0100 | nshepperd25 | nshepperd2 |
2021-01-05 03:54:41 +0100 | crtschin | (~crtschin@104.131.9.149) |
2021-01-05 03:54:48 +0100 | <sm[m]> | the tightness of upper bounds is a tradeoff between: |
2021-01-05 03:54:48 +0100 | <sm[m]> | avoiding compilation errors for installers (tight bounds) |
2021-01-05 03:54:48 +0100 | <sm[m]> | avoiding failures to find an install plan for installers and support/release/revision tasks for you the maintainer (loose bounds) |
2021-01-05 03:56:03 +0100 | <sm[m]> | a pragmatic compromise is to set tight upper bounds on deps which are likely to change their api soon, and loose/no upper bounds on core libs which are very unlikely to change |
2021-01-05 03:56:30 +0100 | sarahzrf | (~sarahzrf_@sarahzrf.com) |
2021-01-05 03:56:32 +0100 | <ezzieyguywuf> | that seems reasonable |
2021-01-05 03:56:42 +0100 | tureba | (~tureba@tureba.org) |
2021-01-05 03:56:52 +0100 | <ezzieyguywuf> | although if things are unlikely to change...what's the harm is setting the upper bound? |
2021-01-05 03:57:40 +0100 | <sm[m]> | ezzieyguywuf: well, a package might not change it's existing API but it might still be making regular releases (adding or changing things that don't affect you) |
2021-01-05 03:57:55 +0100 | <sm[m]> | eg you're using a tiny stable part of text, say |
2021-01-05 03:58:22 +0100 | <ezzieyguywuf> | if the api doesn't change, then the upper bound should allow for these small changes, right? |
2021-01-05 03:58:40 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
2021-01-05 03:58:56 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) |
2021-01-05 03:58:59 +0100 | <sm[m]> | sorry, if I speak more I'll get confused but I think you got it |
2021-01-05 03:59:03 +0100 | eldritch | (~eldritch@unaffiliated/eldritch) |
2021-01-05 03:59:13 +0100 | <sm[m]> | dinnertime! o/ |
2021-01-05 03:59:22 +0100 | <maerwald> | ezzieyguywuf: that's the problem... PVP is still not enough, you still have to know the maintainers philosophy :p |
2021-01-05 04:00:01 +0100 | <ephemient> | base bumps its version with every major GHC release, API compatible or not |
2021-01-05 04:00:07 +0100 | <ezzieyguywuf> | maerwald: hah, but isn't PVP supposed to "fix" the "everyone has their own philosophy" thing? |
2021-01-05 04:00:21 +0100 | <ezzieyguywuf> | hah, nvm |
2021-01-05 04:00:22 +0100 | <maerwald> | ezzieyguywuf: yeah, assuming everyone understands it |
2021-01-05 04:00:24 +0100 | ezzieyguywuf | throws book away |
2021-01-05 04:00:38 +0100 | ezzieyguywuf | picks up sledgehammer |
2021-01-05 04:00:57 +0100 | <ephemient> | also API stability in Haskell is surprisingly difficult |
2021-01-05 04:01:33 +0100 | <maerwald> | here's what I think: go got it right in the early days, when tools and versioning was insuffiecent to accomodate API breakage |
2021-01-05 04:01:48 +0100 | <ezzieyguywuf> | ephemient: do you care to expand upon that? |
2021-01-05 04:01:56 +0100 | <maerwald> | the result was: ppl never broke API and would create a new package instead (didn't happen as often as you might think) |
2021-01-05 04:02:10 +0100 | <ezzieyguywuf> | maerwald: how does go do it differently than cabal? |
2021-01-05 04:02:19 +0100 | <ezzieyguywuf> | or...I guess s/cabal/haskell/ |
2021-01-05 04:02:21 +0100 | howdoi | (uid224@gateway/web/irccloud.com/x-rxnglkkhuozkyxip) (Quit: Connection closed for inactivity) |
2021-01-05 04:02:50 +0100 | <maerwald> | I don't know what they do today, but back then maintainers would reject most PRs that aren't API-backwards compatible, because of PTSD breaking someone elses code |
2021-01-05 04:03:05 +0100 | <ezzieyguywuf> | i see |
2021-01-05 04:03:22 +0100 | <maerwald> | now you give ppl semver and tools, they start to think breaking API is a good thing, just because your tools support it |
2021-01-05 04:03:27 +0100 | <ezzieyguywuf> | Pretty Traumatizing Semantic Discovery |
2021-01-05 04:03:38 +0100 | <maerwald> | Breaking API is *never* good, even if it's necessary |
2021-01-05 04:04:19 +0100 | nineonine | (~nineonine@50.216.62.2) |
2021-01-05 04:04:35 +0100 | <maerwald> | you introduce bugs, work, confusion... but these days ppl don't consider it a trade-off anymore, it's just a version bump |
2021-01-05 04:05:11 +0100 | <ephemient> | your module re-exports instances from modules you import. this forms part of your API surface whether you intend for it or not |
2021-01-05 04:05:52 +0100 | <ezzieyguywuf> | why would you re-export them then? just let the user import from the other module |
2021-01-05 04:06:05 +0100 | <ephemient> | you can't not export them |
2021-01-05 04:06:14 +0100 | <ezzieyguywuf> | hm |
2021-01-05 04:06:20 +0100 | <ezzieyguywuf> | I'm pretty new, so I only kind of get it |
2021-01-05 04:06:22 +0100 | <ephemient> | that's just how Haskell modules work |
2021-01-05 04:06:24 +0100 | urodna | (~urodna@unaffiliated/urodna) (Quit: urodna) |
2021-01-05 04:06:34 +0100 | <ezzieyguywuf> | regarding breaking API, I tend to agree with maerwald |
2021-01-05 04:06:54 +0100 | plutoniix | (~q@184.82.195.99) |
2021-01-05 04:06:57 +0100 | xirhtogal | (~lagothrix@unaffiliated/lagothrix) |
2021-01-05 04:06:57 +0100 | lagothrix | Guest4525 |
2021-01-05 04:06:57 +0100 | Guest4525 | (~lagothrix@unaffiliated/lagothrix) (Killed (orwell.freenode.net (Nickname regained by services))) |
2021-01-05 04:06:57 +0100 | xirhtogal | lagothrix |
2021-01-05 04:07:16 +0100 | <ezzieyguywuf> | but also, that's sort of why 0.1.0.0 exists, right? i.e. don't go to 0.2 until you know you have a stable(ish) api |
2021-01-05 04:07:25 +0100 | <maerwald> | imagine gtk3 was just a version bump... |
2021-01-05 04:07:26 +0100 | <ezzieyguywuf> | and then take your time and get to 1.0 and then be good |
2021-01-05 04:07:36 +0100 | <maerwald> | no, instead it was a new package (goo) |
2021-01-05 04:08:32 +0100 | <maerwald> | Now, there is still API breakage inside gtk3/gtk2, but that usually follows deprecation phases of 1year + |
2021-01-05 04:08:43 +0100 | <maerwald> | haskellers have never heard of deprecation phases |
2021-01-05 04:09:37 +0100 | <boxscape> | ezzieyguywuf one pretty important aspect of class instances is that your program only has access to one instance with a particular instance head (modulo overlapping instances) so for example only one Ord instance for Int, otherwise IntSets could break. So to ensure, all instances are automatically imported when you type any kind of import statement |
2021-01-05 04:09:38 +0100 | <boxscape> | and automatically re-exported by any module |
2021-01-05 04:10:03 +0100 | <ezzieyguywuf> | maerwald: I feel like I saw a youtube vid of some prominent haskell dude that was like "we just break API and people are like 'dang, this sucks. ok i fixed my thing' and move about their business" |
2021-01-05 04:10:13 +0100 | <boxscape> | otherwise some module you import cold use one instance and you could import a different one from somewhere else |
2021-01-05 04:10:17 +0100 | <ezzieyguywuf> | i.e. he was saying it's part of the ethos of haskell |
2021-01-05 04:10:24 +0100 | <maerwald> | So the absence of tools dealing with API breakage improves maintainers awareness and cross-project communication. With PVP/semver, you don't have to think about your users. They'll be alright... probably |
2021-01-05 04:10:26 +0100 | adamwespiser | (~adamwespi@209.6.43.158) |
2021-01-05 04:13:22 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 04:13:44 +0100 | <maerwald> | different example: cli interfaces... you can't semver them (or version them at all sanely). So when was the last time curl broke a cli switch? It seems you don't need to break stuff all the time |
2021-01-05 04:14:04 +0100 | adamwesp_ | (~adamwespi@107.181.19.30) (Ping timeout: 246 seconds) |
2021-01-05 04:14:46 +0100 | adamwespiser | (~adamwespi@209.6.43.158) (Ping timeout: 246 seconds) |
2021-01-05 04:17:48 +0100 | drbean | (~drbean@TC210-63-209-140.static.apol.com.tw) |
2021-01-05 04:18:01 +0100 | andreas303 | (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection) |
2021-01-05 04:18:03 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 272 seconds) |
2021-01-05 04:18:18 +0100 | YangM_Special1 | (b786c5b2@183.134.197.178) |
2021-01-05 04:18:23 +0100 | <justsomeguy> | What do you think of the idea of the API informing it's consumers if there has been a change to its interface, some how? |
2021-01-05 04:20:48 +0100 | <maerwald> | deprecation warnings do that |
2021-01-05 04:21:13 +0100 | <maerwald> | but ofc that doesn't work for types you changed... |
2021-01-05 04:21:15 +0100 | andreas303 | (~andreas@gateway/tor-sasl/andreas303) |
2021-01-05 04:22:07 +0100 | thunderrd | (~thunderrd@183.182.111.131) |
2021-01-05 04:26:18 +0100 | <maerwald> | https://github.com/haskell/pvp/issues/10 may also be of interest |
2021-01-05 04:26:36 +0100 | <maerwald> | But it's only getting more complicated, not less |
2021-01-05 04:27:56 +0100 | <maerwald> | "and would have to introduce new names each time we want to change or introduce new semantics for existing entities. This tradeoff is obviously undesirable." |
2021-01-05 04:28:09 +0100 | <maerwald> | and so this is what C does since 30+ years :D |
2021-01-05 04:28:19 +0100 | <maerwald> | it isn't pretty, but does anyone care? |
2021-01-05 04:28:43 +0100 | bitmagie | (~Thunderbi@200116b806c8a5004c48e4557064fd0d.dip.versatel-1u1.de) |
2021-01-05 04:29:15 +0100 | bitmagie | (~Thunderbi@200116b806c8a5004c48e4557064fd0d.dip.versatel-1u1.de) (Client Quit) |
2021-01-05 04:30:49 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:418a) |
2021-01-05 04:32:11 +0100 | <maerwald> | At this point we shouldn't express API in terms of versions anymore, but maybe a Tree |
2021-01-05 04:32:29 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 04:34:29 +0100 | <justsomeguy> | That sounds interesting. A tree of what? Content addressable hashes of package build recipes or something? |
2021-01-05 04:34:55 +0100 | <maerwald> | code entities... I dunno |
2021-01-05 04:35:06 +0100 | <maerwald> | I'm just fantazising now |
2021-01-05 04:35:27 +0100 | <justsomeguy> | Well, me too. I do like to think about it. |
2021-01-05 04:35:36 +0100 | dmwit | (~dmwit@pool-108-18-106-204.washdc.fios.verizon.net) (Ping timeout: 240 seconds) |
2021-01-05 04:35:40 +0100 | <maerwald> | compare with swagger definitions |
2021-01-05 04:35:51 +0100 | <maerwald> | it's pretty hard to diff two of them reasonably |
2021-01-05 04:36:24 +0100 | <maerwald> | but that's actually useful and you could statically determine whether your own API broke |
2021-01-05 04:36:42 +0100 | <maerwald> | *consumer API |
2021-01-05 04:37:19 +0100 | <maerwald> | but you still can't automate *generation* of that completely, because of semantic changes of e.g. functions or instances |
2021-01-05 04:37:40 +0100 | <maerwald> | so you now require ppl to write an API tree? :o |
2021-01-05 04:37:44 +0100 | dmwit | (~dmwit@pool-108-18-106-204.washdc.fios.verizon.net) |
2021-01-05 04:37:48 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
2021-01-05 04:37:55 +0100 | <maerwald> | we can't even manage version bumps |
2021-01-05 04:38:02 +0100 | <maerwald> | gg |
2021-01-05 04:38:56 +0100 | tama | (~tama@unaffiliated/tama00) (Ping timeout: 240 seconds) |
2021-01-05 04:39:50 +0100 | geowiesnot | (~user@87-89-181-157.abo.bbox.fr) |
2021-01-05 04:42:26 +0100 | bitmagie | (~Thunderbi@200116b806c8a5004c48e4557064fd0d.dip.versatel-1u1.de) |
2021-01-05 04:50:21 +0100 | adamwespiser | (~adamwespi@209.6.43.158) |
2021-01-05 04:52:28 +0100 | <siraben> | Is abrar abbradar? |
2021-01-05 04:52:37 +0100 | djellemah | (~djellemah@2601:5c2:100:96c:e008:b638:39fe:6a54) (Ping timeout: 260 seconds) |
2021-01-05 04:52:51 +0100 | <siraben> | I managed to build Caramia using your fork but haven't been able to get the demos to work, any pointers? https://github.com/abbradar/caramia/tree/master/demos |
2021-01-05 04:53:55 +0100 | theDon | (~td@94.134.91.22) (Ping timeout: 265 seconds) |
2021-01-05 04:54:13 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving) |
2021-01-05 04:55:36 +0100 | theDon | (~td@94.134.91.206) |
2021-01-05 04:57:49 +0100 | adamwespiser | (~adamwespi@209.6.43.158) (Ping timeout: 246 seconds) |
2021-01-05 05:03:02 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-01-05 05:03:12 +0100 | Shiranai | (beed4728@gateway/web/cgi-irc/kiwiirc.com/ip.190.237.71.40) |
2021-01-05 05:03:45 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-01-05 05:03:47 +0100 | <Shiranai> | hello, how would you write a function `longerThan :: [a] -> Int -> Bool` that checks if a given list is longer than a given int |
2021-01-05 05:04:16 +0100 | <Shiranai> | the obvious way of using the length function and the comparing doesn't work because of infinite lists |
2021-01-05 05:04:33 +0100 | dandels | (~dandels@unaffiliated/dandels) |
2021-01-05 05:05:02 +0100 | <Shiranai> | I think ideally I would like something like Prolog's cut, no idea if there's something like that here or maybe some different technique |
2021-01-05 05:05:31 +0100 | drbean | (~drbean@TC210-63-209-140.static.apol.com.tw) (Ping timeout: 265 seconds) |
2021-01-05 05:06:04 +0100 | <dsal> | longerThan 0 _ = True; longerThan n [] = False; longerThan n (x:xs) = longerThan (n - 1) xs |
2021-01-05 05:06:21 +0100 | <dsal> | something like that would be a good start, except I put the args the other way. |
2021-01-05 05:06:56 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 272 seconds) |
2021-01-05 05:07:04 +0100 | <guest15> | dsal: how to get isNotSpace? by isSpace ? |
2021-01-05 05:07:28 +0100 | <dsal> | Shiranai: it's off by one and stuff, but it works. |
2021-01-05 05:07:33 +0100 | <dsal> | guest15: `not . isSpace` ? |
2021-01-05 05:07:34 +0100 | <guest15> | filter (not isSpace) " 3" is not what I expect |
2021-01-05 05:07:41 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2021-01-05 05:07:42 +0100 | <dsal> | filter (not . isSpace) |
2021-01-05 05:07:52 +0100 | <dsal> | > filter (not . isSpace) " 3" |
2021-01-05 05:07:53 +0100 | <guest15> | dsal: ok |
2021-01-05 05:07:54 +0100 | <lambdabot> | "3" |
2021-01-05 05:08:27 +0100 | Rudd0 | (~Rudd0@185.189.115.108) |
2021-01-05 05:08:34 +0100 | <Shiranai> | dsal: Thanks, why does it not end in an infinite loop? just from reading it I'd guess there would be an infinite loop of pattern matching |
2021-01-05 05:08:42 +0100 | <Shiranai> | oh wait |
2021-01-05 05:08:44 +0100 | <Shiranai> | nvm |
2021-01-05 05:08:46 +0100 | <Shiranai> | got it, thanks |
2021-01-05 05:09:34 +0100 | <siraben> | Shiranai: you always recurse on a "smaller" argument |
2021-01-05 05:09:55 +0100 | <dsal> | > let longerThan n = not . null . drop n in longerThan 4 "hello" |
2021-01-05 05:09:57 +0100 | <lambdabot> | True |
2021-01-05 05:09:59 +0100 | <dsal> | > let longerThan n = not . null . drop n in longerThan 4 "hell" |
2021-01-05 05:10:03 +0100 | <lambdabot> | False |
2021-01-05 05:10:26 +0100 | <boxscape> | (note that dsal's function isn't quite right, it'll evaluate to True for `longerThan 0 []`, even though the empty list isn't longer than 0) |
2021-01-05 05:10:38 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-01-05 05:10:41 +0100 | <Maxdamantus> | I don't think the "smaller argument" reasoning works there. |
2021-01-05 05:10:54 +0100 | <dsal> | Yeah, I was surprised it scaled. The `not . null . drop` thing works, though. |
2021-01-05 05:10:59 +0100 | <Maxdamantus> | oh, nvm, it does. |
2021-01-05 05:11:03 +0100 | YangM_Special1 | (b786c5b2@183.134.197.178) (Remote host closed the connection) |
2021-01-05 05:11:18 +0100 | <Maxdamantus> | referring to `x` becoming smaller, not `xs` |
2021-01-05 05:11:27 +0100 | <siraben> | Maxdamantus: yes |
2021-01-05 05:11:27 +0100 | <dsal> | er, scaled... I meant compiled. I should go to bed. |
2021-01-05 05:11:53 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 05:12:24 +0100 | <Shiranai> | me too, and yeah I noticed it needs some tweaking but the general idea works, thanks again! cya |
2021-01-05 05:12:32 +0100 | Shiranai | (beed4728@gateway/web/cgi-irc/kiwiirc.com/ip.190.237.71.40) (Quit: Connection closed) |
2021-01-05 05:12:51 +0100 | christo | (~chris@81.96.113.213) |
2021-01-05 05:16:24 +0100 | jedws | (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-01-05 05:17:41 +0100 | drbean | (~drbean@TC210-63-209-187.static.apol.com.tw) |
2021-01-05 05:19:34 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) (Remote host closed the connection) |
2021-01-05 05:21:30 +0100 | eacameron | (uid256985@gateway/web/irccloud.com/x-ibwftunwaaouzfew) (Quit: Connection closed for inactivity) |
2021-01-05 05:24:52 +0100 | adamwespiser | (~adamwespi@209.6.43.158) |
2021-01-05 05:27:47 +0100 | Tops2 | (~Tobias@dyndsl-095-033-022-235.ewe-ip-backbone.de) (Read error: Connection reset by peer) |
2021-01-05 05:32:07 +0100 | adamwespiser | (~adamwespi@209.6.43.158) (Ping timeout: 246 seconds) |
2021-01-05 05:32:37 +0100 | drbean | (~drbean@TC210-63-209-187.static.apol.com.tw) (Ping timeout: 264 seconds) |
2021-01-05 05:33:39 +0100 | drbean | (~drbean@TC210-63-209-211.static.apol.com.tw) |
2021-01-05 05:37:15 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) |
2021-01-05 05:38:38 +0100 | dftxbs3e | (~dftxbs3e@unaffiliated/dftxbs3e) (Remote host closed the connection) |
2021-01-05 05:40:19 +0100 | dftxbs3e | (~dftxbs3e@unaffiliated/dftxbs3e) |
2021-01-05 05:40:41 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed) |
2021-01-05 05:41:43 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) |
2021-01-05 05:43:22 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds) |
2021-01-05 05:46:12 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
2021-01-05 05:46:56 +0100 | StoneToad | (~StoneToad@104-192-232-50.ppp.storm.ca) (Ping timeout: 240 seconds) |
2021-01-05 05:47:55 +0100 | bitmagie1 | (~Thunderbi@200116b806f816004c48e4557064fd0d.dip.versatel-1u1.de) |
2021-01-05 05:48:06 +0100 | <guest15> | xsperry: dsal I wrote this for remove spaces in string we talked about yesterday, https://paste.ubuntu.com/p/JcyvdX8m38/ is there any easy way to do this? |
2021-01-05 05:48:34 +0100 | StoneToad | (~StoneToad@104-192-232-50.ppp.storm.ca) |
2021-01-05 05:48:38 +0100 | <guest15> | turn "{\"a\": \"b\", \"b\":[3, 2]}" to "{\"a\":\"b\",\"b\":[3,2]}" |
2021-01-05 05:50:16 +0100 | bitmagie | (~Thunderbi@200116b806c8a5004c48e4557064fd0d.dip.versatel-1u1.de) (Ping timeout: 268 seconds) |
2021-01-05 05:50:16 +0100 | bitmagie1 | bitmagie |
2021-01-05 05:51:43 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-01-05 05:51:59 +0100 | mizlan | (~michaella@c-67-169-7-31.hsd1.ca.comcast.net) |
2021-01-05 05:52:15 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) |
2021-01-05 05:53:07 +0100 | <mizlan> | how are some packages able to extend Prelude's modules, for example split extends Data.List.Split? |
2021-01-05 05:53:27 +0100 | <mizlan> | or rather defines that module, but its still a sub-module? of Data.List |
2021-01-05 05:54:13 +0100 | Tario | (~Tario@201.192.165.173) (Ping timeout: 264 seconds) |
2021-01-05 05:55:22 +0100 | <boxscape> | mizlan the common prefix is mostly for the benefit of the user, it doesn't really mean anything to ghc |
2021-01-05 05:56:35 +0100 | <boxscape> | mizlan it does mean that they both have the same folder structure (i.e. the file Split.hs is in the folder Data/List), but it doesn't clash in any way |
2021-01-05 05:56:54 +0100 | <boxscape> | s/folder/directory/g |
2021-01-05 05:58:01 +0100 | <mizlan> | ah haha |
2021-01-05 05:58:27 +0100 | <mizlan> | it makes it really confusing when distinguishing what is part of the "standard library" and what is an "external package" though imo |
2021-01-05 05:58:37 +0100 | <boxscape> | that's fair |
2021-01-05 05:58:56 +0100 | <mizlan> | thanks for answering, this is my first time ever using irc |
2021-01-05 05:59:02 +0100 | <boxscape> | welcome :) |
2021-01-05 05:59:14 +0100 | adamwespiser | (~adamwespi@209.6.43.158) |
2021-01-05 06:01:00 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:f5f0:2361:9049:5ed2) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-01-05 06:01:50 +0100 | <boxscape> | mizlan to be clear it would be a different matter if they had literally the same module name, i.e. both defined a module named "Data.List". It's not impossible, since there's an extension that allows you to specify which package you want to import from in an import statement, but I've never seen it being used in practice, since module names don't |
2021-01-05 06:01:51 +0100 | <boxscape> | tend to clash |
2021-01-05 06:02:08 +0100 | <mizlan> | gotcha, thanks so much |
2021-01-05 06:02:21 +0100 | <mizlan> | also why does it say theres like 1039 people when no one is talking |
2021-01-05 06:02:37 +0100 | <boxscape> | lot of people just have the channel open constantly in the background |
2021-01-05 06:03:16 +0100 | adamwespiser | (~adamwespi@209.6.43.158) (Ping timeout: 240 seconds) |
2021-01-05 06:03:20 +0100 | mizlan | (~michaella@c-67-169-7-31.hsd1.ca.comcast.net) (Quit: leaving) |
2021-01-05 06:03:21 +0100 | <boxscape> | and I think some tools that interface with IRC will keep you connected even when you're not using the tool (e.g. matrix, I think) |
2021-01-05 06:04:45 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed) |
2021-01-05 06:05:13 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) |
2021-01-05 06:07:36 +0100 | dandels | (~dandels@unaffiliated/dandels) (Ping timeout: 240 seconds) |
2021-01-05 06:07:57 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:f5f0:2361:9049:5ed2) |
2021-01-05 06:13:07 +0100 | nineonine | (~nineonine@50.216.62.2) (Ping timeout: 260 seconds) |
2021-01-05 06:13:49 +0100 | dandels | (~dandels@unaffiliated/dandels) |
2021-01-05 06:13:59 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-100-102.w86-212.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
2021-01-05 06:14:11 +0100 | <ephemient> | you have to stay connected to see history in your IRC client (yeah, there's a bot that logs this channel, but then you have to open a browser separately) |
2021-01-05 06:14:14 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 06:15:53 +0100 | jumper149 | (~jumper149@ip4d1622a9.dynamic.kabel-deutschland.de) (Quit: WeeChat 3.0) |
2021-01-05 06:18:03 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-01-05 06:18:57 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 260 seconds) |
2021-01-05 06:19:38 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 06:20:48 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:f5f0:2361:9049:5ed2) (Remote host closed the connection) |
2021-01-05 06:22:44 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
2021-01-05 06:24:41 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2021-01-05 06:26:12 +0100 | Sheilong | (uid293653@gateway/web/irccloud.com/x-qwdszzkqmmrcolkn) () |
2021-01-05 06:26:12 +0100 | oxide | (~lambda@unaffiliated/mclaren) |
2021-01-05 06:26:14 +0100 | bitmagie | (~Thunderbi@200116b806f816004c48e4557064fd0d.dip.versatel-1u1.de) (Quit: bitmagie) |
2021-01-05 06:27:11 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:418a) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
2021-01-05 06:27:24 +0100 | bgamari_ | (~bgamari@72.65.102.219) (Ping timeout: 258 seconds) |
2021-01-05 06:28:11 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-01-05 06:28:38 +0100 | nineonine | (~nineonine@50.216.62.2) |
2021-01-05 06:28:42 +0100 | drbean | (~drbean@TC210-63-209-211.static.apol.com.tw) (Ping timeout: 256 seconds) |
2021-01-05 06:29:49 +0100 | dansho | (~dansho@ec2-52-197-253-200.ap-northeast-1.compute.amazonaws.com) |
2021-01-05 06:31:41 +0100 | jedws | (~jedws@121.209.189.201) |
2021-01-05 06:37:18 +0100 | erickLan | (~quassel@201.108.251.199) |
2021-01-05 06:38:25 +0100 | bitmagie | (~Thunderbi@200116b806f816004c48e4557064fd0d.dip.versatel-1u1.de) |
2021-01-05 06:39:51 +0100 | jitwit | (~user@bras-base-mtrlpq4381w-grc-34-174-93-238-71.dsl.bell.ca) (Remote host closed the connection) |
2021-01-05 06:40:13 +0100 | jitwit | (~user@bras-base-mtrlpq4381w-grc-34-174-93-238-71.dsl.bell.ca) |
2021-01-05 06:43:14 +0100 | <ezzieyguywuf> | how do you all use ghcid with a project that has different components, and each one has its own test suite? |
2021-01-05 06:44:00 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:418a) |
2021-01-05 06:45:20 +0100 | <ezzieyguywuf> | hah, hey look at that, sm[m] is famous (to me): https://www.reddit.com/r/haskell/comments/djbo40/ghcid_for_multi_project_builds/f4nei9m/ |
2021-01-05 06:45:28 +0100 | chang | (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) |
2021-01-05 06:45:56 +0100 | Vulfe | (~vulfe@2600:1702:31b0:34e0:54f0:e9d4:232a:a299) (Remote host closed the connection) |
2021-01-05 06:46:21 +0100 | chang | (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit) |
2021-01-05 06:46:45 +0100 | drbean | (~drbean@TC210-63-209-35.static.apol.com.tw) |
2021-01-05 06:59:00 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 06:59:25 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-01-05 06:59:41 +0100 | Jd007 | (~Jd007@d154-5-83-24.bchsia.telus.net) (Quit: Jd007) |
2021-01-05 07:00:03 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-01-05 07:01:21 +0100 | Wuzzy | (~Wuzzy@p5790e09a.dip0.t-ipconnect.de) (Quit: Wuzzy) |
2021-01-05 07:01:33 +0100 | Varis | (~Tadas@unaffiliated/varis) |
2021-01-05 07:04:01 +0100 | erickLan | (~quassel@201.108.251.199) (Remote host closed the connection) |
2021-01-05 07:09:25 +0100 | geowiesnot | (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 240 seconds) |
2021-01-05 07:12:32 +0100 | knupfer | (~Thunderbi@i59F7FF49.versanet.de) |
2021-01-05 07:21:58 +0100 | geowiesnot | (~user@87-89-181-157.abo.bbox.fr) |
2021-01-05 07:22:44 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) (Remote host closed the connection) |
2021-01-05 07:25:04 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) |
2021-01-05 07:25:24 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2021-01-05 07:25:51 +0100 | orhan89 | (~orhan89@151.91.188.35.bc.googleusercontent.com) |
2021-01-05 07:33:13 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds) |
2021-01-05 07:35:52 +0100 | abhixec_ | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-01-05 07:38:02 +0100 | noecho | (~noecho@2a01:4f8:1c0c:80ee::4223) (Quit: ZNC - http://znc.in) |
2021-01-05 07:38:32 +0100 | noecho | (~noecho@2a01:4f8:1c0c:80ee::4223) |
2021-01-05 07:39:23 +0100 | jedws | (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-01-05 07:39:53 +0100 | abhixec_ | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Client Quit) |
2021-01-05 07:50:12 +0100 | texasmynsted | (~texasmyns@99.96.221.112) |
2021-01-05 07:52:25 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 264 seconds) |
2021-01-05 07:55:45 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed) |
2021-01-05 07:56:18 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) |
2021-01-05 07:57:24 +0100 | <dsal> | guest15: it'd probably be easier not to do that as a parser. |
2021-01-05 07:57:34 +0100 | <dsal> | I don't understand the full scope, though. |
2021-01-05 07:59:19 +0100 | phasespace | (~sar@89-162-33-21.fiber.signal.no) (Ping timeout: 256 seconds) |
2021-01-05 07:59:23 +0100 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) |
2021-01-05 08:00:25 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 08:02:57 +0100 | bitmagie | (~Thunderbi@200116b806f816004c48e4557064fd0d.dip.versatel-1u1.de) (Quit: bitmagie) |
2021-01-05 08:04:32 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2021-01-05 08:05:36 +0100 | adamwespiser | (~adamwespi@209.6.43.158) |
2021-01-05 08:05:45 +0100 | <dansho> | how can i measure the run time? at the bottom it says 'absolute running time: 2.18 sec', but the timer only counts 0.0001221s https://rextester.com/NBI81550 |
2021-01-05 08:05:56 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 268 seconds) |
2021-01-05 08:06:02 +0100 | spopejoy | (~stuart@ool-44c5f8c9.dyn.optonline.net) (Quit: spopejoy) |
2021-01-05 08:07:25 +0100 | emptyflask | (~jon@66.64.40.21) (Ping timeout: 264 seconds) |
2021-01-05 08:08:24 +0100 | mozzarella | (~sam@unaffiliated/sam113101) (Read error: Connection reset by peer) |
2021-01-05 08:13:20 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-01-05 08:14:27 +0100 | <siraben> | How do I send an email programmatically using Haskell? |
2021-01-05 08:15:25 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 08:16:44 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-01-05 08:19:43 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 258 seconds) |
2021-01-05 08:20:28 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-01-05 08:20:51 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-01-05 08:24:37 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
2021-01-05 08:25:58 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
2021-01-05 08:28:03 +0100 | _ht | (~quassel@82-169-194-8.biz.kpn.net) |
2021-01-05 08:29:23 +0100 | sfvm | (~sfvm@37.228.215.77) (Remote host closed the connection) |
2021-01-05 08:32:03 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Ping timeout: 240 seconds) |
2021-01-05 08:32:18 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-01-05 08:33:07 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-01-05 08:34:34 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2021-01-05 08:38:37 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 08:39:20 +0100 | phasespace | (~sar@80-89-47-117.inet.signal.no) |
2021-01-05 08:39:24 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed) |
2021-01-05 08:40:02 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) |
2021-01-05 08:40:11 +0100 | adamwespiser | (~adamwespi@209.6.43.158) (Ping timeout: 256 seconds) |
2021-01-05 08:40:20 +0100 | berberman_ | (~berberman@unaffiliated/berberman) |
2021-01-05 08:40:54 +0100 | mozzarella | (~sam@unaffiliated/sam113101) |
2021-01-05 08:41:05 +0100 | berberman | (~berberman@unaffiliated/berberman) (Ping timeout: 268 seconds) |
2021-01-05 08:41:36 +0100 | berberman_ | (~berberman@unaffiliated/berberman) (Max SendQ exceeded) |
2021-01-05 08:42:04 +0100 | berberman | (~berberman@unaffiliated/berberman) |
2021-01-05 08:43:15 +0100 | berberman | (~berberman@unaffiliated/berberman) (Max SendQ exceeded) |
2021-01-05 08:43:40 +0100 | berberman | (~berberman@unaffiliated/berberman) |
2021-01-05 08:45:08 +0100 | berberman | (~berberman@unaffiliated/berberman) (Max SendQ exceeded) |
2021-01-05 08:45:42 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-01-05 08:46:04 +0100 | berberman | (~berberman@unaffiliated/berberman) |
2021-01-05 08:46:59 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) |
2021-01-05 08:47:19 +0100 | berberman | (~berberman@unaffiliated/berberman) (Max SendQ exceeded) |
2021-01-05 08:47:20 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
2021-01-05 08:47:45 +0100 | berberman | (~berberman@unaffiliated/berberman) |
2021-01-05 08:50:18 +0100 | <[exa]> | siraben: there is a sendmail wrapper that's pretty easy to use |
2021-01-05 08:50:41 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) |
2021-01-05 08:51:02 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) (Remote host closed the connection) |
2021-01-05 08:51:15 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) |
2021-01-05 08:51:44 +0100 | <[exa]> | siraben: e.g. you can use Network.Mail.Mime to "assemble" the e-mail message and Network.Mail.SMTP to submit it to a MTA |
2021-01-05 08:52:50 +0100 | <[exa]> | (btw, highly recommend using just the `sendmail` interface, and letting the MTA do as much of the networking part as possible) |
2021-01-05 08:57:25 +0100 | Entertainment | (~entertain@104.246.132.210) (Ping timeout: 240 seconds) |
2021-01-05 08:59:22 +0100 | <siraben> | [exa]: I see, thanks |
2021-01-05 09:00:45 +0100 | rmk236 | (~lcampos@ip-37-201-210-153.hsi13.unitymediagroup.de) |
2021-01-05 09:01:23 +0100 | drbean | (~drbean@TC210-63-209-35.static.apol.com.tw) (Ping timeout: 265 seconds) |
2021-01-05 09:04:19 +0100 | <[exa]> | btw there are minor "fun" parts in sending the mail properly, like sorting out the Reply-To:, envelope MAIL FROM and From fields, and the same for the recipient list that may be completely different than RCPT TO :] |
2021-01-05 09:05:16 +0100 | rmk236 | (~lcampos@ip-37-201-210-153.hsi13.unitymediagroup.de) (Ping timeout: 246 seconds) |
2021-01-05 09:09:45 +0100 | rmk236 | (~lcampos@2a02:908:3616:b100:ad41:f5e6:8b3a:bfc3) |
2021-01-05 09:11:21 +0100 | dave_uy | (~david@108.61.193.26) (Ping timeout: 256 seconds) |
2021-01-05 09:12:32 +0100 | dequbed_ | dequbed |
2021-01-05 09:12:59 +0100 | byorgey | (~byorgey@155.138.238.211) (Ping timeout: 265 seconds) |
2021-01-05 09:13:05 +0100 | bcmiller | (~bm3719@66.42.95.185) (Ping timeout: 240 seconds) |
2021-01-05 09:18:02 +0100 | Sgeo | (~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer) |
2021-01-05 09:18:37 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) (Quit: Ping timeout (120 seconds)) |
2021-01-05 09:18:56 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) |
2021-01-05 09:20:20 +0100 | jedws | (~jedws@121.209.189.201) |
2021-01-05 09:21:59 +0100 | bitmagie | (~Thunderbi@200116b806f816000808b81f8138d763.dip.versatel-1u1.de) |
2021-01-05 09:22:24 +0100 | dave_uy | (~david@108.61.193.26) |
2021-01-05 09:24:30 +0100 | byorgey | (~byorgey@155.138.238.211) |
2021-01-05 09:26:26 +0100 | michalz | (~user@185.246.204.86) |
2021-01-05 09:27:47 +0100 | <maerwald> | mail sending is one of those things you don't want to actually understand :) ...I'd just shell out to something |
2021-01-05 09:28:41 +0100 | <maerwald> | [exa]: https://hub.darcs.net/simon/darcsden/browse/src/DarcsDen/Mail.hs here's an example |
2021-01-05 09:29:06 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) (Quit: Ping timeout (120 seconds)) |
2021-01-05 09:29:08 +0100 | <c_wraith> | If you want to deliver mail to anything other than your own mail server, I'd give up on running your own MTA anyway. |
2021-01-05 09:29:52 +0100 | <c_wraith> | the whole ecosystem is far too complex, and all the large providers are aggressive about blackholing unknown senders. |
2021-01-05 09:29:58 +0100 | bcmiller | (~bm3719@66.42.95.185) |
2021-01-05 09:30:09 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) |
2021-01-05 09:30:20 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 09:30:39 +0100 | <koz_> | I'd agree with c_wraith, as someone whose email is with a minor provider. |
2021-01-05 09:30:59 +0100 | <koz_> | The number of times I've had people have to excavate my emails out of their spam because, you know, exactly this? |
2021-01-05 09:31:43 +0100 | <dequbed> | It *is* possible but then you're looking at setting up SPF records, DKIM signing, tarpit handling, basically re-implementing a MTA. |
2021-01-05 09:32:49 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) (Client Quit) |
2021-01-05 09:33:13 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) |
2021-01-05 09:33:30 +0100 | bitmagie | (~Thunderbi@200116b806f816000808b81f8138d763.dip.versatel-1u1.de) (Quit: bitmagie) |
2021-01-05 09:34:34 +0100 | <[exa]> | maerwald: "you don't actually want to understand" -- I admined MTAs for like 8 years, that's why I recommend just piping to sendmail. :D |
2021-01-05 09:34:34 +0100 | Gurkenglas | (~Gurkengla@unaffiliated/gurkenglas) |
2021-01-05 09:36:09 +0100 | <[exa]> | c_wraith: anyway you don't need to run a whole MTA, but you usually want some simple thing to at least retry sending the mail to the actual "smarthost" MTA when there's a network error or something |
2021-01-05 09:36:57 +0100 | <[exa]> | I usually have a tiny exim that reliably sends all mail using a google SMTP or so |
2021-01-05 09:37:17 +0100 | <maerwald> | I wrote my BA about extending SMTP with anonymizing techniques. Not really something serious, more like a pre-pre-pre draft and implemented in some javascript MTA. |
2021-01-05 09:37:26 +0100 | <maerwald> | glad I never have to look at any of that stuff again |
2021-01-05 09:37:28 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) (Client Quit) |
2021-01-05 09:37:47 +0100 | <dequbed> | maerwald: What do you mean? UTF-7 is *fun* :P |
2021-01-05 09:37:54 +0100 | <[exa]> | yeah mail processing is a problem |
2021-01-05 09:38:24 +0100 | <maerwald> | the only reasonable way forward at that time was DarkMail afair, but you can't just replace email |
2021-01-05 09:38:26 +0100 | <[exa]> | also it's usually much easier to configure the outgoing SMTP stuff in the actual MTA than in haskell :] |
2021-01-05 09:39:00 +0100 | <maerwald> | software is like plastique in the ocean... the more trash you throw in, the more ppl will get it (or something) |
2021-01-05 09:39:34 +0100 | <[exa]> | lol |
2021-01-05 09:39:47 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Quit: mputz) |
2021-01-05 09:39:51 +0100 | <koz_> | maerwald: Please don't throw high-grade explosives in the ocean. |
2021-01-05 09:39:55 +0100 | <koz_> | Think of the fish. |
2021-01-05 09:40:35 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) |
2021-01-05 09:42:05 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) |
2021-01-05 09:42:43 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) (Client Quit) |
2021-01-05 09:44:18 +0100 | <idnar> | plastic is probably more harmful than plastique as far as oceans go |
2021-01-05 09:44:53 +0100 | jmchael | (~jmchael@81.174.205.210) |
2021-01-05 09:45:07 +0100 | <koz_> | idnar: Probably. |
2021-01-05 09:45:20 +0100 | <koz_> | But I still wouldn't recommend chucking high-grade explosives... anywhere? |
2021-01-05 09:45:42 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) |
2021-01-05 09:47:43 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) (Client Quit) |
2021-01-05 09:48:16 +0100 | kyali_ | (~kyali@APN-123-249-162-gprs.simobil.net) (Ping timeout: 265 seconds) |
2021-01-05 09:48:16 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-01-05 09:48:31 +0100 | kyali | (~kyali@APN-123-249-162-gprs.simobil.net) |
2021-01-05 09:48:45 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) |
2021-01-05 09:50:07 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2021-01-05 09:50:50 +0100 | christo | (~chris@81.96.113.213) |
2021-01-05 09:51:28 +0100 | dave_uy | (~david@108.61.193.26) (Ping timeout: 246 seconds) |
2021-01-05 09:51:47 +0100 | kritzefitz | (~kritzefit@p548c9398.dip0.t-ipconnect.de) |
2021-01-05 09:53:26 +0100 | bcmiller | (~bm3719@66.42.95.185) (Ping timeout: 264 seconds) |
2021-01-05 09:53:37 +0100 | byorgey | (~byorgey@155.138.238.211) (Ping timeout: 264 seconds) |
2021-01-05 09:53:37 +0100 | knupfer | (~Thunderbi@i59F7FF49.versanet.de) (Ping timeout: 264 seconds) |
2021-01-05 09:54:11 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) (Quit: Ping timeout (120 seconds)) |
2021-01-05 09:54:29 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) |
2021-01-05 09:54:34 +0100 | graf_blutwurst | (~user@2001:171b:226e:adc0:fdb7:5f6d:f86b:a30e) |
2021-01-05 09:55:39 +0100 | christo | (~chris@81.96.113.213) (Ping timeout: 260 seconds) |
2021-01-05 09:56:30 +0100 | lordyod | (~lordyod@c-67-169-144-132.hsd1.ca.comcast.net) (Client Quit) |
2021-01-05 09:58:53 +0100 | dave_uy | (~david@108.61.193.26) |
2021-01-05 10:00:02 +0100 | byorgey | (~byorgey@155.138.238.211) |
2021-01-05 10:01:24 +0100 | Forlorn | (~Forlorn@unaffiliated/forlorn) (Remote host closed the connection) |
2021-01-05 10:02:13 +0100 | heatsink_ | (~heatsink@2600:1700:bef1:5e10:90f:3153:5839:80c4) |
2021-01-05 10:05:28 +0100 | kritzefitz | (~kritzefit@p548c9398.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
2021-01-05 10:05:48 +0100 | kritzefitz | (~kritzefit@2003:5b:203b:200::10:49) |
2021-01-05 10:06:02 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:f187:6a02:e58f:90ce) (Ping timeout: 264 seconds) |
2021-01-05 10:07:19 +0100 | nineonine | (~nineonine@50.216.62.2) (Ping timeout: 260 seconds) |
2021-01-05 10:10:25 +0100 | nineonine | (~nineonine@50.216.62.2) |
2021-01-05 10:10:57 +0100 | bcmiller | (~bm3719@66.42.95.185) |
2021-01-05 10:11:06 +0100 | christo | (~chris@81.96.113.213) |
2021-01-05 10:14:37 +0100 | dandels | (~dandels@unaffiliated/dandels) (Ping timeout: 264 seconds) |
2021-01-05 10:14:38 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 10:15:15 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 272 seconds) |
2021-01-05 10:15:37 +0100 | nineonine | (~nineonine@50.216.62.2) (Ping timeout: 246 seconds) |
2021-01-05 10:15:51 +0100 | ph88 | (~ph88@2a02:8109:9e00:7e5c:3831:a625:e216:5736) |
2021-01-05 10:19:24 +0100 | pera | (~pera@unaffiliated/pera) |
2021-01-05 10:20:08 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Remote host closed the connection) |
2021-01-05 10:20:27 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) |
2021-01-05 10:21:21 +0100 | kuribas | (~user@ptr-25vy0i92z2b7cinncha.18120a2.ip6.access.telenet.be) |
2021-01-05 10:24:48 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Ping timeout: 260 seconds) |
2021-01-05 10:25:45 +0100 | dhouthoo | (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be) |
2021-01-05 10:26:01 +0100 | geowiesnot | (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 264 seconds) |
2021-01-05 10:26:41 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) (Remote host closed the connection) |
2021-01-05 10:27:16 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) |
2021-01-05 10:31:48 +0100 | wei2912 | (~wei2912@unaffiliated/wei2912) (Remote host closed the connection) |
2021-01-05 10:32:01 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 264 seconds) |
2021-01-05 10:32:19 +0100 | hnOsmium0001 | (uid453710@gateway/web/irccloud.com/x-flibwgaldygamqxl) (Quit: Connection closed for inactivity) |
2021-01-05 10:34:40 +0100 | LKoen | (~LKoen@174.175.9.109.rev.sfr.net) |
2021-01-05 10:35:40 +0100 | madjestic | (~Android@86-88-72-244.fixed.kpn.net) |
2021-01-05 10:36:09 +0100 | adamwespiser | (~adamwespi@209.6.43.158) |
2021-01-05 10:38:53 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) |
2021-01-05 10:38:57 +0100 | chele | (~chele@ip5b40237d.dynamic.kabel-deutschland.de) |
2021-01-05 10:41:01 +0100 | adamwespiser | (~adamwespi@209.6.43.158) (Ping timeout: 264 seconds) |
2021-01-05 10:42:30 +0100 | <merijn> | maerwald: The more I understand mail sending, the more I'm happy to pay someone to host my email for me ;) |
2021-01-05 10:43:30 +0100 | nineonine | (~nineonine@50.216.62.2) |
2021-01-05 10:45:49 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 264 seconds) |
2021-01-05 10:46:38 +0100 | xelxebar_ | (~xelxebar@gateway/tor-sasl/xelxebar) |
2021-01-05 10:46:43 +0100 | xelxebar | (~xelxebar@gateway/tor-sasl/xelxebar) (Ping timeout: 240 seconds) |
2021-01-05 10:48:36 +0100 | nineonine | (~nineonine@50.216.62.2) (Ping timeout: 240 seconds) |
2021-01-05 10:49:18 +0100 | delinka | (~delinka@217.146.82.202) (Ping timeout: 256 seconds) |
2021-01-05 10:56:17 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) |
2021-01-05 10:57:08 +0100 | ggVGc | reju_ice |
2021-01-05 10:58:23 +0100 | coot | (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) |
2021-01-05 10:58:32 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) |
2021-01-05 11:00:15 +0100 | tomboy64 | (~tomboy64@gateway/tor-sasl/tomboy64) (Remote host closed the connection) |
2021-01-05 11:00:47 +0100 | tomboy64 | (~tomboy64@gateway/tor-sasl/tomboy64) |
2021-01-05 11:01:21 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) |
2021-01-05 11:02:54 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 256 seconds) |
2021-01-05 11:06:23 +0100 | philopsos | (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 240 seconds) |
2021-01-05 11:06:26 +0100 | dansho | (~dansho@ec2-52-197-253-200.ap-northeast-1.compute.amazonaws.com) (Remote host closed the connection) |
2021-01-05 11:06:27 +0100 | dhil | (~dhil@78.156.97.38) |
2021-01-05 11:07:01 +0100 | <kritzefitz> | merijn, I never quite understood why so many people find email so complicated to host themselves, but I work with email at my dayjob, so I might be a bit biased. |
2021-01-05 11:07:57 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Remote host closed the connection) |
2021-01-05 11:08:16 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) |
2021-01-05 11:09:52 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-01-05 11:10:42 +0100 | EricFisher | (~EricFishe@185.163.110.125) |
2021-01-05 11:12:20 +0100 | heatsink_ | (~heatsink@2600:1700:bef1:5e10:90f:3153:5839:80c4) (Remote host closed the connection) |
2021-01-05 11:12:38 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Ping timeout: 260 seconds) |
2021-01-05 11:14:37 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds) |
2021-01-05 11:18:37 +0100 | oxide | (~lambda@unaffiliated/mclaren) (Ping timeout: 246 seconds) |
2021-01-05 11:19:24 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) |
2021-01-05 11:20:36 +0100 | oxide | (~lambda@unaffiliated/mclaren) |
2021-01-05 11:20:36 +0100 | guest15 | (~user@49.5.6.87) (Read error: Connection reset by peer) |
2021-01-05 11:20:48 +0100 | guest15 | (~user@49.5.6.87) |
2021-01-05 11:21:14 +0100 | fendor | (~fendor@178.115.131.182.wireless.dyn.drei.com) |
2021-01-05 11:22:52 +0100 | tasuki | (~tasuki@198.211.120.27) (Ping timeout: 260 seconds) |
2021-01-05 11:26:07 +0100 | qwerty | (~tema@217.118.92.215) |
2021-01-05 11:27:43 +0100 | thc202 | (~thc202@unaffiliated/thc202) |
2021-01-05 11:29:13 +0100 | qwerty | (~tema@217.118.92.215) (Client Quit) |
2021-01-05 11:29:36 +0100 | crblmr | (~carbolyme@137.117.174.36) (Ping timeout: 240 seconds) |
2021-01-05 11:31:01 +0100 | crblmr | (~carbolyme@matrix.dropacid.net) |
2021-01-05 11:31:12 +0100 | beaky | (~beaky@2a03:b0c0:0:1010::17cf:7003) (Read error: Connection reset by peer) |
2021-01-05 11:32:18 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Remote host closed the connection) |
2021-01-05 11:32:33 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) |
2021-01-05 11:32:39 +0100 | beaky | (~beaky@2a03:b0c0:0:1010::17cf:7003) |
2021-01-05 11:33:16 +0100 | theorbtwo | (~theorb@cpc81822-swin19-2-0-cust3.3-1.cable.virginm.net) (Ping timeout: 272 seconds) |
2021-01-05 11:34:47 +0100 | <kuribas> | Every time I think about how you would implement something in clojure or java, I find that I can do the same thing in haskell. |
2021-01-05 11:35:17 +0100 | <kuribas> | The reason for making things type safe, purely functional, etc... seems to be not the language, but the programmers choice. |
2021-01-05 11:35:44 +0100 | <kuribas> | Java style, you could just use a MVar or IORef, then mutate some structure everytime. |
2021-01-05 11:35:56 +0100 | <kuribas> | Clojure style is to leave a lot of functions partial. |
2021-01-05 11:36:14 +0100 | __monty__ | (~toonn@unaffiliated/toonn) |
2021-01-05 11:36:52 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Ping timeout: 260 seconds) |
2021-01-05 11:37:47 +0100 | tomsmeding | (~tomsmedin@tomsmeding.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-01-05 11:37:55 +0100 | <kuribas> | I just think "static types force you to program in one style" is positively false. |
2021-01-05 11:39:26 +0100 | <boxscape> | is that something that proponents or opponents of static types say? |
2021-01-05 11:40:09 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection) |
2021-01-05 11:40:47 +0100 | <kuribas> | it's what I hear my colleage say... |
2021-01-05 11:41:00 +0100 | <kuribas> | and what usually proponents say. |
2021-01-05 11:41:29 +0100 | <kuribas> | erm I mean opponents |
2021-01-05 11:43:25 +0100 | <boxscape> | I suppose the "dynamically typed languages are just statically typed languages with one type" thing also suggests that static types don't prevent you from being able to do anything you could do without them |
2021-01-05 11:43:33 +0100 | <boxscape> | (though there are edge cases) |
2021-01-05 11:44:56 +0100 | st8less | (~st8less@inet-167-224-197-181.isp.ozarksgo.net) (Quit: WeeChat 2.9) |
2021-01-05 11:45:50 +0100 | <lortabac> | the thing is, each language "pushes" you toward a certain style |
2021-01-05 11:46:08 +0100 | graf_blutwurst | (~user@2001:171b:226e:adc0:fdb7:5f6d:f86b:a30e) (Read error: Connection reset by peer) |
2021-01-05 11:46:18 +0100 | <lortabac> | if you go against a language's paradigm you may end up suffering a lot |
2021-01-05 11:46:19 +0100 | <kritzefitz> | But dynamic languages usually have more comfortable syntax than other language constructs for dealing with dynamic types. |
2021-01-05 11:46:34 +0100 | graf_blutwurst | (~user@2001:171b:226e:adc0:fdb7:5f6d:f86b:a30e) |
2021-01-05 11:47:05 +0100 | <kuribas> | lortabac: true, but sometimes you can learn from other approaches. |
2021-01-05 11:47:08 +0100 | reju_ice | ggVGc |
2021-01-05 11:47:40 +0100 | Melanie | (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 256 seconds) |
2021-01-05 11:47:55 +0100 | <kuribas> | I'd say clojure programmers should be more concerned about validation, modeling types, and haskell programmers about making things simple and expressive, rather than 100% type safe. |
2021-01-05 11:48:49 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) |
2021-01-05 11:52:51 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:418a) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
2021-01-05 11:53:00 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) |
2021-01-05 11:53:29 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 260 seconds) |
2021-01-05 11:53:57 +0100 | beaky | (~beaky@2a03:b0c0:0:1010::17cf:7003) (Read error: Connection reset by peer) |
2021-01-05 11:55:24 +0100 | beaky | (~beaky@2a03:b0c0:0:1010::17cf:7003) |
2021-01-05 11:57:51 +0100 | <lortabac> | I think the fact that Haskell does so many things at library level makes some simple tasks more difficult compared to other languages with more built-in functionalities |
2021-01-05 11:58:46 +0100 | <lortabac> | at the same time, this is probably one of the reasons why Haskell is still relevant >30 years after its conception |
2021-01-05 11:59:58 +0100 | <lortabac> | not relying too much on built-in functionality makes it more flexible than other languages |
2021-01-05 12:00:10 +0100 | adamwespiser | (~adamwespi@209.6.43.158) |
2021-01-05 12:00:26 +0100 | <kuribas> | still, haskell is bigger than say scheme... |
2021-01-05 12:00:46 +0100 | adamwesp_ | (~adamwespi@107.181.19.30) |
2021-01-05 12:01:40 +0100 | <kuribas> | With extensions haskell is probably even bigger than java. |
2021-01-05 12:01:57 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) |
2021-01-05 12:02:23 +0100 | <lortabac> | yes, but most of its extensions are about advanced stuff, it doesn't have for ex. a built-in unit test framework or JSON parser |
2021-01-05 12:03:04 +0100 | <kuribas> | which languages have those? |
2021-01-05 12:03:18 +0100 | <kritzefitz> | e.g. python |
2021-01-05 12:03:26 +0100 | <lortabac> | JSON is built-in in PHP and JavaScript |
2021-01-05 12:03:37 +0100 | <kuribas> | python just has a huge standard library |
2021-01-05 12:03:38 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 12:04:12 +0100 | <kuribas> | well JSON is basically javascript, so that's an unfair comparison :-) |
2021-01-05 12:04:28 +0100 | adamwespiser | (~adamwespi@209.6.43.158) (Ping timeout: 246 seconds) |
2021-01-05 12:04:35 +0100 | <kritzefitz> | I don't think I understand what you mean by “bigger”. |
2021-01-05 12:04:36 +0100 | <kuribas> | that's like saying, LISP has builtin SEXP parsing. |
2021-01-05 12:05:10 +0100 | <kuribas> | kritzefitz: I mean stuff that needs to be implemented in the compiler, instead of a (standard) library. |
2021-01-05 12:05:29 +0100 | <lortabac> | SWI Prolog has a command in the REPL that saves your queries in a file as unit tests, that would be a great thing to have |
2021-01-05 12:05:45 +0100 | <lortabac> | writing tests involves so much boilerplate |
2021-01-05 12:06:03 +0100 | <lortabac> | that's the kind of things I was thinking of |
2021-01-05 12:07:04 +0100 | <lortabac> | node.js has a built-in HTTP server, that's another example |
2021-01-05 12:07:57 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Read error: Connection reset by peer) |
2021-01-05 12:08:01 +0100 | so | (~so@unaffiliated/so) (Ping timeout: 264 seconds) |
2021-01-05 12:08:26 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) |
2021-01-05 12:09:23 +0100 | <__monty__> | kuribas: Hmm, surely some of GHC's extensions could be implemented by libraries using TH? |
2021-01-05 12:09:25 +0100 | <kritzefitz> | This doesn't seem like a useful measurement of usefulness to the programmer to me. Why should I care if some feature is implemented in the compiler or as a library? In the end I probably just care if and how I can use it. |
2021-01-05 12:09:31 +0100 | <kuribas> | I find writing tests in haskell is OK. |
2021-01-05 12:10:01 +0100 | <kuribas> | kritzefitz: because the more custom syntax, the harder it's to learn. |
2021-01-05 12:12:35 +0100 | <kuribas> | While for library you can just look at the types and documentation. |
2021-01-05 12:12:38 +0100 | <kritzefitz> | I'm not sure that's necessarily true. Sure, if the syntax is just necessary to appease some language-specific paradigm, its not useful that I have to learn it. But if the custom syntax helps me to more efficiently solve some problem I already had independently of syntax, then learning the syntax and solving the problem might be easier in combination than just learning standard syntax and learning a library that solves my problem. |
2021-01-05 12:13:10 +0100 | <kuribas> | also syntax tends to compose badly. |
2021-01-05 12:13:24 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
2021-01-05 12:13:27 +0100 | <kuribas> | Which is why lenses are so much supperior to record syntax in other languages. |
2021-01-05 12:13:47 +0100 | rayyyy | (~nanoz@gateway/tor-sasl/nanoz) |
2021-01-05 12:13:50 +0100 | beaky | (~beaky@2a03:b0c0:0:1010::17cf:7003) (Read error: Connection reset by peer) |
2021-01-05 12:13:51 +0100 | <kuribas> | lenses solve the problem of bad record syntax, but bring in so many more goodies. |
2021-01-05 12:13:56 +0100 | shf | (~sheaf@2a01:cb19:80cc:7e00:d481:af4c:bf9f:f9c) (Read error: Connection reset by peer) |
2021-01-05 12:14:40 +0100 | <kritzefitz> | Sure, but I found them harder to learn than record syntax in other languages and I have forgotten the specifics every time I use them. |
2021-01-05 12:16:20 +0100 | <kuribas> | For example bash does a lot of functionality using syntax, but I find it hard to remember and parse. |
2021-01-05 12:16:25 +0100 | jedws | (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-01-05 12:16:28 +0100 | beaky | (~beaky@2a03:b0c0:0:1010::17cf:7003) |
2021-01-05 12:16:33 +0100 | <kuribas> | In comparison to a well named function for example. |
2021-01-05 12:17:08 +0100 | <maerwald> | bash is such unix: uncomprehensible army swiss knife mess |
2021-01-05 12:17:36 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection) |
2021-01-05 12:17:36 +0100 | heatsink | (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds) |
2021-01-05 12:17:41 +0100 | <gentauro> | hmmm, so I'm generating F# code (based on a `domain`) with Haskell. It seems that 12.000 lines of code (mostly sum/records) is to much for Visual Studio to digest. Is there something that makes this "not performant" in FP languages or is it just that F# and it's ecosystem is "that good"? |
2021-01-05 12:17:55 +0100 | <kuribas> | in the same way I prefer lens functions over lens operators |
2021-01-05 12:17:56 +0100 | so | (~so@unaffiliated/so) |
2021-01-05 12:18:09 +0100 | <gentauro> | what if I generated Haskell code instead of F#, would that be a problem for example `emacs + LSP`? |
2021-01-05 12:18:12 +0100 | tasuki | (~tasuki@198.211.120.27) |
2021-01-05 12:18:34 +0100 | <kuribas> | gentauro: emacs has a problem with long lines |
2021-01-05 12:18:45 +0100 | <kuribas> | and LSP sucks in emacs |
2021-01-05 12:18:50 +0100 | gentauro | I think I understand why the F# peeps went with Type Providers … |
2021-01-05 12:19:04 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) |
2021-01-05 12:19:14 +0100 | <kuribas> | yeah, I don't see why type providers are so great. |
2021-01-05 12:19:14 +0100 | drbean | (~drbean@TC210-63-209-199.static.apol.com.tw) |
2021-01-05 12:19:17 +0100 | <gentauro> | kuribas: that's true (mostly for the terminal version) |
2021-01-05 12:19:39 +0100 | <gentauro> | kuribas: they aren't. They generate F# classes (not records) |
2021-01-05 12:20:00 +0100 | <gentauro> | so they introduce OO to your code-base which is far from what you want |
2021-01-05 12:20:20 +0100 | <kritzefitz> | kuribas, sure, I also find many of bash's features confusing just as I find obscure syntax in syntax-heavy languages like perl confusing. But for features I use often enough to always remember their semantics, I find custom syntax really useful. |
2021-01-05 12:21:30 +0100 | <kritzefitz> | And I think this is not a problem specific to syntax. For example, if I didn't know what a `foldr` is, because they come up so darn often, I probably struggle to remember what it is. |
2021-01-05 12:21:43 +0100 | gxt | (~gxt@gateway/tor-sasl/gxt) (Ping timeout: 240 seconds) |
2021-01-05 12:21:47 +0100 | <kuribas> | kritzefitz: yeah, I'll use (<$>) and ($) because they are ubiqutous, but I would never use (<%@=) |
2021-01-05 12:22:17 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection) |
2021-01-05 12:22:18 +0100 | <kuribas> | also, haskell operators are more regular than custom syntax, though they have some of the same problems. |
2021-01-05 12:22:57 +0100 | <kuribas> | kritzefitz: if foldr were named reduceRight, it would be more clear, no? |
2021-01-05 12:23:18 +0100 | <kuribas> | which is why descriptive names are important. |
2021-01-05 12:24:28 +0100 | <kritzefitz> | I guess it would be a bit more descriptive, but it also assumes that I know what “reduce” means in that context. If I didn't know that already, I'd probably guess that `reduce` has the type `(Num n) => n -> n` or similar. |
2021-01-05 12:24:36 +0100 | <maerwald> | kuribas: sometimes that's really hard :] |
2021-01-05 12:24:50 +0100 | <maerwald> | consider: `deleteFile` ...what does it do :> |
2021-01-05 12:25:29 +0100 | <kuribas> | kritzefitz: why would you want to guess the type? |
2021-01-05 12:26:04 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Remote host closed the connection) |
2021-01-05 12:26:11 +0100 | <kuribas> | maerwald: delete a file? |
2021-01-05 12:26:22 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) |
2021-01-05 12:26:36 +0100 | <kritzefitz> | Because the alternative would be to look it up. But I think at that point your argument becomes a lot weaker, because I can also look up most of the syntax I encounter. |
2021-01-05 12:26:55 +0100 | <maerwald> | kuribas: hehehe, what file? directory too? follows symlinks or not? |
2021-01-05 12:27:32 +0100 | gxt | (~gxt@gateway/tor-sasl/gxt) |
2021-01-05 12:27:33 +0100 | <kuribas> | kritzefitz: ? I get the type directly in the IDE or in emacs. Or in ghci. Looking up syntax requires already knowing what the syntax is meant to do. |
2021-01-05 12:27:50 +0100 | <maerwald> | deleteRegularFileNoFollowSymbolicLinks |
2021-01-05 12:27:56 +0100 | dirediresalt | (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Remote host closed the connection) |
2021-01-05 12:27:58 +0100 | <maerwald> | is a bit better |
2021-01-05 12:28:16 +0100 | dirediresalt | (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) |
2021-01-05 12:29:19 +0100 | <kuribas> | kritzefitz: how would you lookup ${foo%*abc}? |
2021-01-05 12:31:03 +0100 | <kritzefitz> | Yes, I agree, searching syntax is harder than searching identifiers. But for syntax you use so often that you always remember its semantics (because you relied on them just yesterday) having to look it up is basically irrelevant. |
2021-01-05 12:31:18 +0100 | tomsmeding | (~tomsmedin@tomsmeding.com) |
2021-01-05 12:33:33 +0100 | Deide | (~Deide@217.155.19.23) |
2021-01-05 12:33:42 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Remote host closed the connection) |
2021-01-05 12:33:57 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) |
2021-01-05 12:34:14 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 264 seconds) |
2021-01-05 12:35:20 +0100 | <__monty__> | I don't see how reduceRight is clearer than foldr, I think it's a terrible example of good naming. Spelling out right/left, ok, but that doesn't really help unless you're already familiar with both left and right folds. And I'm not convinced reduce is any clearer than fold. Maybe for people coming from languages that use "reduce" but it doesn't have a clear singular possible implementation. |
2021-01-05 12:36:06 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) |
2021-01-05 12:36:19 +0100 | <__monty__> | kritzefitz: Otoh for syntax/library functions you use so often you always remember their semantics is there even a difference except for syntax often being terser? |
2021-01-05 12:36:23 +0100 | rayyyy | (~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 240 seconds) |
2021-01-05 12:36:51 +0100 | <__monty__> | And libraries still have the advantage that they can be replaced when someone comes up with a better implementation or a different paradigm. |
2021-01-05 12:37:10 +0100 | jedws | (~jedws@121.209.189.201) |
2021-01-05 12:37:15 +0100 | <kuribas> | __monty__: most languages call it reduce, not fold... |
2021-01-05 12:37:18 +0100 | Melanie_ | (~Melanie@192-0-134-138.cpe.teksavvy.com) |
2021-01-05 12:37:46 +0100 | jedws | (~jedws@121.209.189.201) (Client Quit) |
2021-01-05 12:37:59 +0100 | <kuribas> | __monty__: the difference is composability. Syntax doesn't compose. |
2021-01-05 12:38:26 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Ping timeout: 264 seconds) |
2021-01-05 12:38:39 +0100 | <dequbed> | When I was learning haskell I did it by reading code; and spend some three days trying to figure out what `e@(Data a _)` does. However I learned about Hoogle and how to use it on the first or second day. |
2021-01-05 12:39:02 +0100 | <kritzefitz> | __monty__, not really. The syntax being terser is actually my main point. I agree that this might often not be such a big advantage over the disadvantage of having to remember additional syntax, that's why I'm hanging around in #haskell and not #perl (don't know if that channel actually exists). But I can understand why proponents of syntax-heavy language might consider this an advantage. |
2021-01-05 12:39:03 +0100 | rayyyy | (~nanoz@gateway/tor-sasl/nanoz) |
2021-01-05 12:40:06 +0100 | ulidtko | (~ulidtko@193.111.48.79) |
2021-01-05 12:40:31 +0100 | <__monty__> | Operators give you most of the benefits of syntax without all of the disadvantages then? |
2021-01-05 12:41:29 +0100 | <kritzefitz> | At least operators in Haskell combined with hoogle solve the problem of searchability, so I guess? |
2021-01-05 12:42:13 +0100 | ulidtko|k | (~ulidtko@194.54.80.38) |
2021-01-05 12:43:39 +0100 | <kuribas> | __monty__: operators can be less readable. But if you use them often that doesn't matter so much. |
2021-01-05 12:44:00 +0100 | <kritzefitz> | But OTOH operators in Haskell are usually restricted to two (maybe three) arguments. So syntax requirements that don't easily map into some form of binary tree aren't that easy to fulfill. |
2021-01-05 12:45:24 +0100 | Melanie_ | (~Melanie@192-0-134-138.cpe.teksavvy.com) (Ping timeout: 260 seconds) |
2021-01-05 12:45:28 +0100 | ulidtko | (~ulidtko@193.111.48.79) (Ping timeout: 272 seconds) |
2021-01-05 12:46:10 +0100 | <__monty__> | Now we're getting into agda's mixfix territory : ) |
2021-01-05 12:47:12 +0100 | <kuribas> | is "getLine >>= \name -> putStrLn ("hello" <> name)" really better than "getLine `bind` \name -> putStrLn ("hello" <> name)" ? |
2021-01-05 12:47:43 +0100 | Franciman | (~francesco@host-82-48-174-127.retail.telecomitalia.it) |
2021-01-05 12:48:25 +0100 | <kuribas> | personally I find the latter more readable. |
2021-01-05 12:48:33 +0100 | <boxscape> | I don't |
2021-01-05 12:49:36 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) |
2021-01-05 12:52:29 +0100 | <__monty__> | Me either. |
2021-01-05 12:53:19 +0100 | <__monty__> | It's the same reason (1 + 2 * 3) is easier to understand than (1 `plus` (2 `times` 3)). |
2021-01-05 12:53:29 +0100 | <__monty__> | Probably has to do with things like subitting. |
2021-01-05 12:55:20 +0100 | <boxscape> | if "bind" were the actual name of that function I think I might prefer `bindTo` so that "getLine `bindTo` \name -> ...` reads more naturally |
2021-01-05 12:55:48 +0100 | <dminuoso> | The human brain is quite good at pattern recognition, but for that to work right you need to train it a lot. |
2021-01-05 12:56:14 +0100 | <dminuoso> | >>= is only readable because an experienced haskeller has been exposed to that operator a lot to instantly recognize it |
2021-01-05 12:56:57 +0100 | <kritzefitz> | I don't find the name `bind` for the monadic operator not useful at all. I think I see why the name is fitting, but only because I already know what it does. But by that point I can remember >>= just as well as bind. |
2021-01-05 12:58:14 +0100 | <dminuoso> | kritzefitz: Having a alphanumeric name helps if you have a hard time remembering the meaning its corresponding operator. Say if we had `>=>` and `>>=` these look darn similar |
2021-01-05 12:58:37 +0100 | <dminuoso> | But if we used `bind` and (say) `kCompose` instead, it might be easier to recognize which is which |
2021-01-05 12:59:22 +0100 | <dminuoso> | On that note, the names `some` and `many` are really terrible... |
2021-01-05 12:59:45 +0100 | <dminuoso> | Because you can't differentiate them on account of the meaning of the word. |
2021-01-05 13:01:43 +0100 | <dminuoso> | At the same time, to someone who has no previous experience with regular languages or automata theory, a theoretical postfix + or * would be no better. |
2021-01-05 13:02:01 +0100 | <kritzefitz> | True. I think its a trade-off between the benefits of pattern recognition and descriptiveness. But I think that's not something that can be judged objectively. For me, personally, both >>= and >=> pass the threshold of familiarity, so I can recognize them as operators. But I can understand, why people might be confused by them. |
2021-01-05 13:09:46 +0100 | <idnar> | IDE-like features help me a lot with that; if I use >>= when I meant >=>, the types/type errors from HLS immediately tip me off |
2021-01-05 13:10:38 +0100 | <boxscape> | I think firacode ligatures help with that, >>= just looks very distinctive |
2021-01-05 13:11:14 +0100 | <boxscape> | https://i.imgur.com/K4e38DZ.png >>= vs >=> |
2021-01-05 13:12:01 +0100 | <merijn> | I mean, >>= and >=> already look very distinctive, tbh... |
2021-01-05 13:12:25 +0100 | <merijn> | If they don't I highly recommend curing yourself from "programmer's disease" and stop using a tiny 10pt font >.> |
2021-01-05 13:14:03 +0100 | <idnar> | it's not that they're indistinct, it's that I forget which is which |
2021-01-05 13:14:09 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) |
2021-01-05 13:16:01 +0100 | <idnar> | same with `some` and `many` |
2021-01-05 13:16:30 +0100 | <Ferdirand> | >=> looks more like something that can compose, the ends are fitting together |
2021-01-05 13:18:18 +0100 | <dminuoso> | Ferdirand: And I use the word "someone" to remember that some is one or more. |
2021-01-05 13:18:53 +0100 | <dminuoso> | The fact that we can come up with memory aids doesnt mean there's an obvious instant intuition here |
2021-01-05 13:18:57 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) (Ping timeout: 260 seconds) |
2021-01-05 13:19:01 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) |
2021-01-05 13:20:54 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) (Remote host closed the connection) |
2021-01-05 13:21:24 +0100 | <kuribas> | >=> = fish operator, >>= = aligator operator? |
2021-01-05 13:21:33 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2021-01-05 13:22:24 +0100 | <__monty__> | >>= = bind, no need to come up with a non-descriptive name imo. |
2021-01-05 13:22:41 +0100 | <dminuoso> | Hold on, how is "bind" descriptive? :> |
2021-01-05 13:22:48 +0100 | <Ferdirand> | dminuoso: i'm not claiming there is, i'm just sharing my own aid |
2021-01-05 13:22:56 +0100 | Gurkenglas | (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 240 seconds) |
2021-01-05 13:22:58 +0100 | <merijn> | "intuition" is verrated |
2021-01-05 13:23:09 +0100 | <merijn> | Memorability and consistency are better |
2021-01-05 13:23:14 +0100 | <__monty__> | It's only descriptive in so far as >>= and bind are the same thing. Neither actually tells me what they do. |
2021-01-05 13:23:15 +0100 | <dminuoso> | Ferdirand: To me, I dont have any intuition. It's just trained pattern recognition for them |
2021-01-05 13:23:28 +0100 | <dminuoso> | But then again I use =<< a lot |
2021-01-05 13:23:59 +0100 | <dminuoso> | __monty__: Sure, but when we have `fish` and `bind` you're back at the same spot. |
2021-01-05 13:24:05 +0100 | <dminuoso> | Which does what? |
2021-01-05 13:24:06 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 272 seconds) |
2021-01-05 13:24:33 +0100 | <dminuoso> | At the very least kCompose, or perhapse composeM is somewhat suggestive |
2021-01-05 13:24:35 +0100 | <__monty__> | I only meant that there's no need to introduce "alligator", three names for the same thing is more confusing than two names. |
2021-01-05 13:25:11 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection) |
2021-01-05 13:25:19 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 13:25:27 +0100 | EricFisher | (~EricFishe@185.163.110.125) (Remote host closed the connection) |
2021-01-05 13:25:44 +0100 | <dminuoso> | Ferdirand: But yeah, sometimes these visual memory aids help. In lens, I remember the parameter order by thinking of ^. where the left hand side is an eye, and the other side is where the monocole (the optic) goes. |
2021-01-05 13:26:01 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) (Ping timeout: 246 seconds) |
2021-01-05 13:26:09 +0100 | <dminuoso> | Which of course doesnt help if you're tempted to write .^, but my muscle memory here helps |
2021-01-05 13:26:10 +0100 | <__monty__> | Operators are always a balancing act. I don't subscribe to either of Java's everyNameShouldBeASentence or APL's symbol-vomit approaches. |
2021-01-05 13:27:32 +0100 | Entertainment | (~entertain@104.246.132.210) |
2021-01-05 13:28:25 +0100 | oxide | (~lambda@unaffiliated/mclaren) (Ping timeout: 264 seconds) |
2021-01-05 13:29:05 +0100 | <boxscape> | at least in Java you can use $ in names and use function.$(argument) to pretend you have an apply operator :) |
2021-01-05 13:30:04 +0100 | rmk236 | (~lcampos@2a02:908:3616:b100:ad41:f5e6:8b3a:bfc3) (Quit: Leaving.) |
2021-01-05 13:34:38 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Quit: Connection closed) |
2021-01-05 13:34:58 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) |
2021-01-05 13:35:44 +0100 | <kuribas> | __monty__: >=> is already established as the "fish operator", then why not "aligator" :) |
2021-01-05 13:35:58 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) |
2021-01-05 13:36:02 +0100 | <kuribas> | __monty__: but ok, tha alligator is going in the wrong direction |
2021-01-05 13:38:08 +0100 | geekosaur | (ac3a3bce@172.58.59.206) |
2021-01-05 13:39:49 +0100 | <dminuoso> | To me, an alligator would ratber be =>=>- |
2021-01-05 13:40:07 +0100 | <dminuoso> | Or maybe =<=<-? Not sure. |
2021-01-05 13:40:10 +0100 | <Clint> | :-O |
2021-01-05 13:40:28 +0100 | <boxscape> | in elementary school I learned that > and < are alligators eating the bigger number |
2021-01-05 13:40:37 +0100 | <tomsmeding> | % _ =>=>- _ = "alligator" |
2021-01-05 13:40:38 +0100 | <yahb> | tomsmeding: |
2021-01-05 13:41:25 +0100 | <boxscape> | % "cya" =>=>- "later" |
2021-01-05 13:41:25 +0100 | <yahb> | boxscape: "alligator" |
2021-01-05 13:43:40 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-01-05 13:44:08 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-01-05 13:46:22 +0100 | Saukk | (~Saukk@83-148-239-3.dynamic.lounea.fi) |
2021-01-05 13:46:44 +0100 | <boxscape> | % f 🐊 g = f >=> g |
2021-01-05 13:46:44 +0100 | <yahb> | boxscape: |
2021-01-05 13:47:10 +0100 | <dminuoso> | Wow, my font has a glyph for that. |
2021-01-05 13:47:16 +0100 | <dminuoso> | Was really worth every penny I paid. :D |
2021-01-05 13:47:21 +0100 | <boxscape> | nice! |
2021-01-05 13:47:55 +0100 | <kuribas> | http://kuribas.hcoop.net/alligator.png |
2021-01-05 13:48:18 +0100 | <boxscape> | hmm 404 |
2021-01-05 13:48:54 +0100 | <dminuoso> | Oh, I see now |
2021-01-05 13:51:04 +0100 | <hpc> | dminuoso: all 0 of them? dejavu has it too :P |
2021-01-05 13:52:44 +0100 | <dminuoso> | hpc: No I actually paid quite a bunch of pennies for this font. :) |
2021-01-05 13:53:16 +0100 | <boxscape> | which font are you using? |
2021-01-05 13:53:40 +0100 | <dminuoso> | https://fsd.it/shop/fonts/pragmatapro/ |
2021-01-05 13:53:46 +0100 | <boxscape> | I see |
2021-01-05 13:55:45 +0100 | LKoen | (~LKoen@174.175.9.109.rev.sfr.net) (Remote host closed the connection) |
2021-01-05 13:55:47 +0100 | Saukk | (~Saukk@83-148-239-3.dynamic.lounea.fi) (Remote host closed the connection) |
2021-01-05 13:56:06 +0100 | <tomsmeding> | kuribas++ |
2021-01-05 13:57:31 +0100 | darjeeling_ | (~darjeelin@122.245.218.97) (Ping timeout: 246 seconds) |
2021-01-05 14:00:13 +0100 | Vulfe | (~vulfe@2600:1702:31b0:34e0:54f0:e9d4:232a:a299) |
2021-01-05 14:00:14 +0100 | Melanie_ | (~Melanie@192-0-134-138.cpe.teksavvy.com) |
2021-01-05 14:04:50 +0100 | Vulfe | (~vulfe@2600:1702:31b0:34e0:54f0:e9d4:232a:a299) (Ping timeout: 264 seconds) |
2021-01-05 14:04:55 +0100 | ClaudiusMaximus | (~claude@196.67.6.51.dyn.plus.net) |
2021-01-05 14:04:55 +0100 | ClaudiusMaximus | (~claude@196.67.6.51.dyn.plus.net) (Changing host) |
2021-01-05 14:04:55 +0100 | ClaudiusMaximus | (~claude@unaffiliated/claudiusmaximus) |
2021-01-05 14:05:58 +0100 | <merijn> | If I ever ditch macOS, first thing I'm gonna do is buy Monaco :p |
2021-01-05 14:06:19 +0100 | <merijn> | <3 Monaco |
2021-01-05 14:07:22 +0100 | crblmr | (~carbolyme@matrix.dropacid.net) (Ping timeout: 260 seconds) |
2021-01-05 14:10:24 +0100 | solirc | (~solirc@185.163.110.125) |
2021-01-05 14:11:33 +0100 | dycan | (~dycan@2404:0:8229:2ab9:dc14:be76:1dfd:8878) |
2021-01-05 14:11:56 +0100 | crblmr | (~carbolyme@matrix.dropacid.net) |
2021-01-05 14:14:53 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) |
2021-01-05 14:15:47 +0100 | graf_blutwurst | (~user@2001:171b:226e:adc0:fdb7:5f6d:f86b:a30e) (Remote host closed the connection) |
2021-01-05 14:17:52 +0100 | vnz | (~vnz@unaffiliated/vnz) (Quit: ZNC - http://znc.in) |
2021-01-05 14:18:38 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) (Ping timeout: 264 seconds) |
2021-01-05 14:19:37 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) (Ping timeout: 260 seconds) |
2021-01-05 14:19:49 +0100 | vnz | (~vnz@2001:bc8:604:94f::1) |
2021-01-05 14:19:49 +0100 | vnz | (~vnz@2001:bc8:604:94f::1) (Changing host) |
2021-01-05 14:19:49 +0100 | vnz | (~vnz@unaffiliated/vnz) |
2021-01-05 14:20:25 +0100 | <__monty__> | Working with agda for a bit has made me give up on anything that isn't DejaVu. |
2021-01-05 14:20:49 +0100 | <dminuoso> | __monty__: Why is that? |
2021-01-05 14:21:05 +0100 | <boxscape> | Phil Wadler reccomends mononoki with Agda |
2021-01-05 14:21:22 +0100 | <boxscape> | FiraCode has worked okay for me although some symbols it uses aren't in it |
2021-01-05 14:21:33 +0100 | <merijn> | dminuoso: Agda has unicode sickness |
2021-01-05 14:21:52 +0100 | <[exa]> | merijn: what's Monaco? |
2021-01-05 14:21:56 +0100 | pera | (~pera@unaffiliated/pera) (Ping timeout: 240 seconds) |
2021-01-05 14:22:04 +0100 | <[exa]> | apart from the obvious state down there near mediterranean sea |
2021-01-05 14:22:15 +0100 | <merijn> | I still remember that moment where Ulf (I think?) was giving a lecture on Agda at OPLSS and none of the students could get his example to work |
2021-01-05 14:22:20 +0100 | <geekosaur> | apple's monospaced font |
2021-01-05 14:22:39 +0100 | <dminuoso> | merijn: Sure, but I was wondering why DejaVu in particular. |
2021-01-05 14:22:40 +0100 | <merijn> | Queue the cursed sentence "oh, yes, that's not an ascii pipe, but a unicode vertical bar..." |
2021-01-05 14:22:46 +0100 | <merijn> | geekosaur: Technically not Apple's |
2021-01-05 14:22:48 +0100 | <[exa]> | oh this |
2021-01-05 14:23:09 +0100 | <merijn> | Oh, wait, I guess it is |
2021-01-05 14:23:12 +0100 | <merijn> | heh |
2021-01-05 14:23:26 +0100 | <[exa]> | I hate that one for overslanted a/d/g :] |
2021-01-05 14:23:38 +0100 | <merijn> | [exa]: Slightly blurry due to magnification, but looks like: http://files.inconsistent.nl/irc-quotes.png |
2021-01-05 14:24:19 +0100 | <merijn> | I think Menlo is now the default monospace font for Apple, but I refuse to join the future! |
2021-01-05 14:24:28 +0100 | <boxscape> | | ⃒ ❘|¦ there are quite a few to choose from |
2021-01-05 14:24:48 +0100 | olban | (~olban@213.152.161.133) |
2021-01-05 14:25:01 +0100 | <[exa]> | merijn: that's the bold variant? |
2021-01-05 14:25:50 +0100 | pera | (~pera@unaffiliated/pera) |
2021-01-05 14:25:57 +0100 | <merijn> | No, that's regular |
2021-01-05 14:26:10 +0100 | <__monty__> | dminuoso: DejaVu has very good unicode coverage and is open. |
2021-01-05 14:26:28 +0100 | <__monty__> | And it doesn't harm my sensibilities. |
2021-01-05 14:26:32 +0100 | <merijn> | [exa]: The fact that it's kinda chunky is one of the reasons I like it :p |
2021-01-05 14:26:52 +0100 | <merijn> | __monty__: Adobe's Source Code Pro? :) |
2021-01-05 14:27:12 +0100 | jespada | (~jespada@90.254.245.49) (Ping timeout: 260 seconds) |
2021-01-05 14:27:17 +0100 | <merijn> | __monty__: That's free as in speech and as in beer! |
2021-01-05 14:27:20 +0100 | andi- | (~andi-@NixOS/user/andi-) (Ping timeout: 258 seconds) |
2021-01-05 14:27:25 +0100 | <__monty__> | Don't like it as much. And Adobe triggers my paranoia, as do the Noto fonts. |
2021-01-05 14:27:29 +0100 | <dminuoso> | __monty__: Is there general support for writing agda code with say a wacom or apple pencil? |
2021-01-05 14:27:45 +0100 | <merijn> | [exa]: But I also use 14-15 pt font size for my terminal, none of this 9-10pt courier new bollocks :p |
2021-01-05 14:27:52 +0100 | <__monty__> | Can't say I've seen that, no. |
2021-01-05 14:27:55 +0100 | <dminuoso> | It seems to me, that given a language in which you have to go _really_ crazy with weird looking characters, it's just easier to draw what you're having visually in mind. |
2021-01-05 14:28:00 +0100 | <[exa]> | merijn: did you try IBM plex? |
2021-01-05 14:28:23 +0100 | kyali_ | (~kyali@APN-123-251-234-gprs.simobil.net) |
2021-01-05 14:28:23 +0100 | <boxscape> | surely *someone* must have implemented graphics tablet support for emacs, doesn't everything exist for emacs? :) |
2021-01-05 14:28:28 +0100 | <__monty__> | merijn: My DejaVu looks superficially similar to that monaco sample, imo. |
2021-01-05 14:28:43 +0100 | <dycan> | hi, I nix-shell -p "haskell.packages.ghcjs.ghcWithPackages (p:[])". But error: https://justpaste.it/4zie8. In an issue it redirects me to, it says "cabal-version: >= ..." should be "cabal-version: ..." in the first line. How could I do that? |
2021-01-05 14:29:42 +0100 | Tario | (~Tario@201.192.165.173) |
2021-01-05 14:29:58 +0100 | <__monty__> | dminuoso: The "latex input mode" has pretty good mnemonics ime. |
2021-01-05 14:30:03 +0100 | jespada | (~jespada@90.254.245.49) |
2021-01-05 14:30:45 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) |
2021-01-05 14:30:52 +0100 | <merijn> | I hijacked the pidgin input of macos to enable latex input for me, yeah :p |
2021-01-05 14:30:57 +0100 | <dminuoso> | __monty__: Does it come with an interactive search/visualization to find the right mnemonic (or straight select the character you want, say via your favourite narrower)? |
2021-01-05 14:31:05 +0100 | <merijn> | dminuoso: Yes ;) |
2021-01-05 14:31:14 +0100 | <boxscape> | someone should make a coding UI that just operates on handwritten text, without ever displaying ASCII/unicode to the user |
2021-01-05 14:31:15 +0100 | urodna | (~urodna@unaffiliated/urodna) |
2021-01-05 14:31:17 +0100 | <merijn> | https://detexify.kirelabs.org/classify.html |
2021-01-05 14:31:23 +0100 | <boxscape> | (not me though) |
2021-01-05 14:31:28 +0100 | kyali | (~kyali@APN-123-249-162-gprs.simobil.net) (Ping timeout: 246 seconds) |
2021-01-05 14:31:48 +0100 | <dminuoso> | boxscape: Have you worked with Notability + math conversion? |
2021-01-05 14:31:54 +0100 | <boxscape> | I haven't |
2021-01-05 14:32:00 +0100 | <merijn> | Detexify = <3 |
2021-01-05 14:32:04 +0100 | huskyhaskell | (~david@h-191-51.A785.priv.bahnhof.se) |
2021-01-05 14:32:10 +0100 | Gurkenglas | (~Gurkengla@unaffiliated/gurkenglas) |
2021-01-05 14:32:53 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) |
2021-01-05 14:33:23 +0100 | <__monty__> | merijn: Tell me more about this pidgin input hack? I've thorougly enjoyed my compose key hack so far. |
2021-01-05 14:33:32 +0100 | <__monty__> | Maybe in -offtopic. |
2021-01-05 14:34:08 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) (Client Quit) |
2021-01-05 14:35:04 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 256 seconds) |
2021-01-05 14:35:28 +0100 | <merijn> | __monty__: I noticed my chinese colleagues had this keyboard mode switch where they'd type pidgin and select corresponding characters. I thought "heh, wonder if I can abuse that for LaTeX and unicode..." google around and someone had already figured out how to do that ;) |
2021-01-05 14:36:48 +0100 | <merijn> | __monty__: Basically, consists of registering a new input method (i.e. "copy a file") that shows up as a new keyboard/language in the input selection and using the regular "keyboard language switch" to toggle between them |
2021-01-05 14:38:52 +0100 | huskyhaskell | (~david@h-191-51.A785.priv.bahnhof.se) (Quit: leaving) |
2021-01-05 14:40:24 +0100 | darjeeling_ | (~darjeelin@122.245.218.97) |
2021-01-05 14:40:29 +0100 | <merijn> | hmm |
2021-01-05 14:41:19 +0100 | plutoniix | (~q@184.82.195.99) (Quit: Leaving) |
2021-01-05 14:41:28 +0100 | jduhamel | (~textual@bras-base-toroon4664w-grc-16-184-145-103-248.dsl.bell.ca) |
2021-01-05 14:41:44 +0100 | <__monty__> | Found this, https://github.com/clarkgrubb/latex-input I'll give it a shot. |
2021-01-05 14:42:11 +0100 | <merijn> | So, suppose I have an existentially quantified type where I don't know if it's an instance can I get access to the Eq instance if it exists |
2021-01-05 14:42:26 +0100 | <merijn> | __monty__: Looks overcomplicated, here's what I use: https://github.com/merijn/dotfiles/tree/master/install-osx/latex-input |
2021-01-05 14:42:47 +0100 | andi- | (~andi-@NixOS/user/andi-) |
2021-01-05 14:42:48 +0100 | jamm | (~jamm@unaffiliated/jamm) |
2021-01-05 14:43:03 +0100 | <merijn> | Ah, looks like the complicated mess is windows/linux |
2021-01-05 14:43:27 +0100 | da39a3ee5e6b4b0d | (~da39a3ee5@2403:6200:8876:12e2:f4f0:d2c0:3ecf:a408) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-01-05 14:43:41 +0100 | whataday | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2021-01-05 14:44:21 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2021-01-05 14:45:31 +0100 | drbean | (~drbean@TC210-63-209-199.static.apol.com.tw) (Ping timeout: 265 seconds) |
2021-01-05 14:46:01 +0100 | dycan | (~dycan@2404:0:8229:2ab9:dc14:be76:1dfd:8878) (Remote host closed the connection) |
2021-01-05 14:48:42 +0100 | <tomsmeding> | merijn: that sounds like a thing that only TH can do, but at the point where you have an existentially qualified type TH's time is over |
2021-01-05 14:48:59 +0100 | <tomsmeding> | also I love and use mononoki |
2021-01-05 14:49:15 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) |
2021-01-05 14:49:37 +0100 | <merijn> | tomsmeding: Basically, what I'm trying to do is "get a list of all EntityFields for a persistent entity" |
2021-01-05 14:50:07 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:8e09) |
2021-01-05 14:50:12 +0100 | <merijn> | I figured toPersistFields did that, but I actually think probably not, by the looks of it >.> |
2021-01-05 14:50:13 +0100 | <tomsmeding> | make a GADT like data MaybeEQ where YesEQ :: Eq a => a -> MaybeEQ ; NoEQ :: a -> MaybeEQ |
2021-01-05 14:50:26 +0100 | <tomsmeding> | and choose the right one upon construction? |
2021-01-05 14:51:11 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:8e09) (Client Quit) |
2021-01-05 14:51:17 +0100 | <merijn> | tomsmeding: That involves modifying the upstream persist code |
2021-01-05 14:51:24 +0100 | <tomsmeding> | ah |
2021-01-05 14:51:34 +0100 | <merijn> | Else I can just add an Eq constraint anyway |
2021-01-05 14:51:45 +0100 | <tomsmeding> | typeable? |
2021-01-05 14:52:43 +0100 | <merijn> | That also requires rewriting the current existential with a new constraint |
2021-01-05 14:53:03 +0100 | whataday | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2021-01-05 14:53:05 +0100 | <merijn> | Anyway, looks like this existential doesn't even have the right data anyway, so I need to go back to the drawing board |
2021-01-05 14:53:24 +0100 | <lortabac> | merijn: if you are crazy enough you can try https://hackage.haskell.org/package/constraints-emerge |
2021-01-05 14:53:40 +0100 | dycan | (~dycan@2404:0:8229:2ab9:dc14:be76:1dfd:8878) |
2021-01-05 14:54:38 +0100 | drewolson | (~drewolson@64.227.24.16) (Quit: The Lounge - https://thelounge.chat) |
2021-01-05 14:54:59 +0100 | drewolson | (~drewolson@64.227.24.16) |
2021-01-05 14:55:01 +0100 | <tomsmeding> | how can that even work without Typeable |
2021-01-05 14:55:06 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
2021-01-05 14:56:06 +0100 | bgamari | (~bgamari@72.65.105.91) |
2021-01-05 14:56:41 +0100 | Lorra | (~lorenzo@2001:a61:ba6:4501:a9e0:bf53:18b7:5b1f) |
2021-01-05 14:59:55 +0100 | <tomsmeding> | reading the plugin I am still severely confused |
2021-01-05 15:01:06 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0) |
2021-01-05 15:04:10 +0100 | Katsa | (b230f459@catv-178-48-244-89.catv.broadband.hu) |
2021-01-05 15:04:34 +0100 | jedws | (~jedws@121.209.189.201) |
2021-01-05 15:06:00 +0100 | chang | (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) |
2021-01-05 15:06:14 +0100 | chang | (~textual@host-173-230-65-85.njjcmar.clients.pavlovmedia.com) (Client Quit) |
2021-01-05 15:06:53 +0100 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) () |
2021-01-05 15:07:23 +0100 | hyperisco | (~hyperisco@d192-186-117-226.static.comm.cgocable.net) |
2021-01-05 15:07:51 +0100 | <Katsa> | Hey, can someone help me create a type that either holds an Int, a Bool or a Pair of these (pairs can be nested). type Val = Three Int Bool (Val, Val) throws error for having a cycle in the definition. Thanks ^^ |
2021-01-05 15:08:22 +0100 | <ski> | Katsa : i think you want `data', not `type' ? |
2021-01-05 15:08:32 +0100 | <merijn> | s/think/know ;) |
2021-01-05 15:08:35 +0100 | <geekosaur> | also you described an and, not an or |
2021-01-05 15:08:47 +0100 | <geekosaur> | in your attempt at a type |
2021-01-05 15:08:55 +0100 | <ski> | Katsa : what is `Three' ? |
2021-01-05 15:09:04 +0100 | <Katsa> | data Three a b c = A a | B b | C c deriving (Eq, Show) |
2021-01-05 15:09:09 +0100 | michalz` | (~user@185.246.204.79) |
2021-01-05 15:09:09 +0100 | <ski> | ok |
2021-01-05 15:09:42 +0100 | <ski> | you could also use `newtype' in place of `data', then. but you'll need a data constructor for your type `Val' |
2021-01-05 15:09:47 +0100 | djellemah | (~djellemah@2601:5c2:100:96c:e008:b638:39fe:6a54) |
2021-01-05 15:09:54 +0100 | <ski> | (in either case) |
2021-01-05 15:10:06 +0100 | <Katsa> | thanks, i'll look into it |
2021-01-05 15:10:39 +0100 | kyali_ | (~kyali@APN-123-251-234-gprs.simobil.net) (Ping timeout: 260 seconds) |
2021-01-05 15:10:50 +0100 | michalz | (~user@185.246.204.86) (Ping timeout: 264 seconds) |
2021-01-05 15:10:55 +0100 | <ski> | (also, it might be easier/nicer to skip `Three' altogether, and just use `data' directly, with three individual data constructors) |
2021-01-05 15:11:14 +0100 | <siraben> | How do I make GHC de-literate a literate haskell file? |
2021-01-05 15:11:54 +0100 | <geekosaur> | there's an executable `unlit` in the ghc lib directory that you can run. I don't think there's a way to get ghc to only run that without also parsing |
2021-01-05 15:12:03 +0100 | <carbolymer> | can I explicitly copy value in haskell? |
2021-01-05 15:12:17 +0100 | <kuribas> | Katsa: data Three = ThreeInt Int | ThreeBool Bool | ThreePair (Three, Three) |
2021-01-05 15:12:25 +0100 | <ski> | carbolymer : copy what kind of value ? |
2021-01-05 15:12:37 +0100 | <merijn> | Also, isn't this type just "these"? :p |
2021-01-05 15:12:45 +0100 | <ski> | s/Three/Val/ |
2021-01-05 15:12:55 +0100 | <merijn> | carbolymer: Why would you want/need that? |
2021-01-05 15:13:05 +0100 | <kuribas> | data Val = ValInt Int | ValBool Bool | ValPair Val Val |
2021-01-05 15:13:22 +0100 | <carbolymer> | ski, I have a type let's say, `data Foo = Foo Int` so I want to have a second, but different `Foo 1` |
2021-01-05 15:13:35 +0100 | <merijn> | carbolymer: Define "different" |
2021-01-05 15:13:41 +0100 | <ski> | a different type ? or a different value ? |
2021-01-05 15:13:47 +0100 | <merijn> | carbolymer: How would you tell them apart? |
2021-01-05 15:13:58 +0100 | <carbolymer> | hmm, bad example |
2021-01-05 15:14:55 +0100 | <__monty__> | carbolymer: Are you worried if you alter a list all your "references" to that list will be altered or something? |
2021-01-05 15:15:35 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) |
2021-01-05 15:17:13 +0100 | <carbolymer> | monty, merijn, ski, In my case I have a type: `data Foo (s :: Type) = Foo { foo :: Int} `, and I want to have `Foo String` from `Foo 1 :: Foo Bool` |
2021-01-05 15:17:17 +0100 | <carbolymer> | rn I'm using following trick: `convertFoo myfoo {foo'} = myfoo { foo = foo' }`, and it works, and I'm looking for a more generic solution without necessity to declare every field |
2021-01-05 15:18:13 +0100 | kritzefitz | (~kritzefit@2003:5b:203b:200::10:49) (Ping timeout: 260 seconds) |
2021-01-05 15:18:42 +0100 | <carbolymer> | point is: same type, same constructor, different phantom type |
2021-01-05 15:18:45 +0100 | <ski> | i don't think you can use `myfoo {...}' like that in a pattern |
2021-01-05 15:18:51 +0100 | <carbolymer> | well as I wrote it it sounds like Generics |
2021-01-05 15:19:05 +0100 | <kuribas> | carbolymer: make it a Functor? |
2021-01-05 15:19:23 +0100 | jamm | (~jamm@unaffiliated/jamm) (Remote host closed the connection) |
2021-01-05 15:19:26 +0100 | <carbolymer> | kuribas, there are multiple constructors with variable number of parameters |
2021-01-05 15:19:42 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 260 seconds) |
2021-01-05 15:19:48 +0100 | <ski> | what is the kind of your actual `Foo' ? |
2021-01-05 15:20:17 +0100 | <carbolymer> | so for Functor instance I'd have to explicitly pattern match every constructor.... so no benefit here ;) |
2021-01-05 15:20:17 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) (Ping timeout: 260 seconds) |
2021-01-05 15:20:26 +0100 | <carbolymer> | ski, Foo :: * -> * |
2021-01-05 15:20:29 +0100 | <ski> | not if you'd derive `Functor' |
2021-01-05 15:20:36 +0100 | <kuribas> | carbolymer: so "coerce" then? |
2021-01-05 15:20:48 +0100 | <carbolymer> | hmm |
2021-01-05 15:20:50 +0100 | jedws | (~jedws@121.209.189.201) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-01-05 15:20:53 +0100 | <lortabac> | carbolymer: if the only thing that changes is the phantom type, you can wrap it in a newtype and convert it with 'coerce' |
2021-01-05 15:21:19 +0100 | <carbolymer> | that might work, thanks |
2021-01-05 15:21:21 +0100 | <lortabac> | otherwise you can try RecordWildcards |
2021-01-05 15:21:38 +0100 | dhil | (~dhil@78.156.97.38) (Ping timeout: 264 seconds) |
2021-01-05 15:22:03 +0100 | <boxscape> | you don't need a newtype to use coerce here do you? |
2021-01-05 15:22:05 +0100 | <carbolymer> | lortabac, well, doesn't record wildcards requires to use specific constructor? |
2021-01-05 15:22:12 +0100 | <boxscape> | % (coerce (Foo 1:: Foo String)) :: Foo Int |
2021-01-05 15:22:13 +0100 | <yahb> | boxscape: Foo {foo = 1} |
2021-01-05 15:22:19 +0100 | jlamothe | (~jlamothe@198.251.55.207) (Quit: rebooting) |
2021-01-05 15:22:22 +0100 | <kuribas> | lortabac, carbolymer: you don't need a newtype to coerce a phantom type. |
2021-01-05 15:22:31 +0100 | <carbolymer> | right |
2021-01-05 15:23:21 +0100 | <lortabac> | oh somehow I thought it only worked with newtypes |
2021-01-05 15:23:23 +0100 | <Katsa> | ski got it to work, thanks again |
2021-01-05 15:23:32 +0100 | <kuribas> | lortabac: nope :) |
2021-01-05 15:23:38 +0100 | <lortabac> | good to know :) |
2021-01-05 15:24:41 +0100 | <ski> | Katsa : cheers :) |
2021-01-05 15:25:03 +0100 | <boxscape> | you can coerce any two typed that are representationally equal |
2021-01-05 15:25:07 +0100 | <boxscape> | s/typed/types |
2021-01-05 15:25:13 +0100 | <ski> | Katsa : ooc, what did you do ? |
2021-01-05 15:25:32 +0100 | <boxscape> | s/coerce/coerce between |
2021-01-05 15:26:03 +0100 | jamm | (~jamm@unaffiliated/jamm) |
2021-01-05 15:26:57 +0100 | dhil | (~dhil@78.156.97.38) |
2021-01-05 15:27:42 +0100 | <siraben> | How do I specify an out directory for GHC? |
2021-01-05 15:27:42 +0100 | <Katsa> | three individual data constructors |
2021-01-05 15:27:49 +0100 | christo | (~chris@81.96.113.213) |
2021-01-05 15:27:51 +0100 | <siraben> | `-o .` ? |
2021-01-05 15:28:30 +0100 | <siraben> | Ah, `-outputdir .` |
2021-01-05 15:28:43 +0100 | <siraben> | Hm, didn't work |
2021-01-05 15:28:58 +0100 | carlomagno | (~cararell@148.87.23.12) |
2021-01-05 15:29:10 +0100 | <dminuoso> | glguy: Hiya, thank you for the tip with config-schema/config-value. It looks like a fairly good fit, albeit with some rough edges. |
2021-01-05 15:29:42 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2021-01-05 15:29:44 +0100 | <ski> | Katsa : so, something like what kuribas suggested, above ? |
2021-01-05 15:30:35 +0100 | jamm | (~jamm@unaffiliated/jamm) (Ping timeout: 258 seconds) |
2021-01-05 15:30:38 +0100 | dycan | (~dycan@2404:0:8229:2ab9:dc14:be76:1dfd:8878) (Ping timeout: 264 seconds) |
2021-01-05 15:30:41 +0100 | <Katsa> | yeah pretty much |
2021-01-05 15:33:05 +0100 | <ski> | ok |
2021-01-05 15:33:48 +0100 | jsomedon | (~jsomedon@114.252.54.192) |
2021-01-05 15:36:29 +0100 | madjest16 | (~Android@89-200-4-148.mobile.kpn.net) |
2021-01-05 15:37:25 +0100 | madjestic | (~Android@86-88-72-244.fixed.kpn.net) (Ping timeout: 264 seconds) |
2021-01-05 15:39:37 +0100 | hake | (6e088244@110.8.130.68) |
2021-01-05 15:40:00 +0100 | <hake> | hi |
2021-01-05 15:40:05 +0100 | <ski> | lo |
2021-01-05 15:41:33 +0100 | robotmay | (~beepboop@2001:8b0:7af0:2580:695c:2c43:c9f4:f004) (Ping timeout: 260 seconds) |
2021-01-05 15:44:12 +0100 | robotmay | (~beepboop@2001:8b0:7af0:2580:e163:8dc0:987:5b1e) |
2021-01-05 15:44:20 +0100 | u0_a298 | (~user@47.206.148.226) |
2021-01-05 15:44:27 +0100 | christo | (~chris@81.96.113.213) |
2021-01-05 15:45:20 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2021-01-05 15:46:01 +0100 | argento | (~argent0@168.227.97.29) |
2021-01-05 15:46:21 +0100 | Sgeo | (~Sgeo@ool-18b98aa4.dyn.optonline.net) |
2021-01-05 15:46:51 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-01-05 15:48:19 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) |
2021-01-05 15:48:22 +0100 | rmk236 | (~lcampos@2a02:908:3616:b100:ad41:f5e6:8b3a:bfc3) |
2021-01-05 15:50:13 +0100 | p-core | (~Thunderbi@koleje-wifi-0045.koleje.cuni.cz) (Read error: Connection reset by peer) |
2021-01-05 15:50:25 +0100 | geekosaur | (ac3a3bce@172.58.59.206) (Remote host closed the connection) |
2021-01-05 15:50:27 +0100 | p-core | (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) |
2021-01-05 15:51:18 +0100 | jlamothe | (~jlamothe@198.251.55.207) |
2021-01-05 15:51:20 +0100 | s00pcan | (~chris@075-133-056-178.res.spectrum.com) (Ping timeout: 256 seconds) |
2021-01-05 15:52:52 +0100 | s00pcan | (~chris@107.181.165.217) |
2021-01-05 15:53:11 +0100 | u0_a298 | (~user@47.206.148.226) (Read error: Connection reset by peer) |
2021-01-05 15:53:47 +0100 | howdoi | (uid224@gateway/web/irccloud.com/x-tiblbupceujnheos) |
2021-01-05 15:54:10 +0100 | Jd007 | (~Jd007@d154-5-83-24.bchsia.telus.net) |
2021-01-05 16:00:53 +0100 | jsomedon | (~jsomedon@114.252.54.192) (Quit: jsomedon) |
2021-01-05 16:01:17 +0100 | stree_ | (~stree@50-108-97-132.adr01.mskg.mi.frontiernet.net) |
2021-01-05 16:01:23 +0100 | stree | (~stree@50-108-115-238.adr01.mskg.mi.frontiernet.net) (Ping timeout: 268 seconds) |
2021-01-05 16:03:00 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection) |
2021-01-05 16:03:40 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) |
2021-01-05 16:03:52 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 246 seconds) |
2021-01-05 16:07:26 +0100 | Vulfe | (~vulfe@2600:1702:31b0:34e0:54f0:e9d4:232a:a299) |
2021-01-05 16:08:39 +0100 | elfets | (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) |
2021-01-05 16:10:56 +0100 | erickLan | (~quassel@201.138.29.177) |
2021-01-05 16:11:13 +0100 | Vulfe | (~vulfe@2600:1702:31b0:34e0:54f0:e9d4:232a:a299) (Remote host closed the connection) |
2021-01-05 16:11:21 +0100 | Vulfe | (~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net) |
2021-01-05 16:11:40 +0100 | noop_noob | (31e4c3d3@49.228.195.211) |
2021-01-05 16:12:42 +0100 | <noop_noob> | Hi there. I'm kind of a haskell noob and I'm trying to code up something that does inputs and outputs, and I'm trying to put it into a monad. I suspect I'm making it harder than it needs to be. Can anybody help? Here's what I have right now: |
2021-01-05 16:12:48 +0100 | <noop_noob> | newtype InOutT i o m a = InOutT m (InOutTHelper i o m a) |
2021-01-05 16:12:52 +0100 | <noop_noob> | data InOutTHelper i o m a = In (i -> InOut i o m a) | Out o (InOut i o a) | InOutDone a |
2021-01-05 16:13:03 +0100 | erickLan | (~quassel@201.138.29.177) (Remote host closed the connection) |
2021-01-05 16:14:14 +0100 | <noop_noob> | InOutT should represent a computation that's done in a monad `m`, and on each step it might either consume `i` as input, produce `o` as output, or terminate, resulting in an `a`. |
2021-01-05 16:14:19 +0100 | <noop_noob> | Am I on the right path? |
2021-01-05 16:14:24 +0100 | <ski> | did you mean `.. = InOutT (m (InOutTHelper i o m a))' and `.. | Out o (InOut i o m a) | ..' ? |
2021-01-05 16:14:25 +0100 | <dminuoso> | noop_noob: Congratulations, you're reinventing pipes/conduits! :) |
2021-01-05 16:14:37 +0100 | <noop_noob> | Oh wait, I missed a parenthesis |
2021-01-05 16:14:52 +0100 | <noop_noob> | newtype InOutT i o m a = InOutT (m (InOutTHelper i o m a)) |
2021-01-05 16:15:05 +0100 | <noop_noob> | Oh. pipes/conduits... what are those? |
2021-01-05 16:15:07 +0100 | <ski> | (i guess you probably also meant `InOutT', rather than `InOut' ?) |
2021-01-05 16:15:14 +0100 | <noop_noob> | Oh yup |
2021-01-05 16:15:15 +0100 | <dminuoso> | noop_noob: Note, you probably dont want to wrap everything inside m |
2021-01-05 16:15:41 +0100 | <noop_noob> | I feel like I don't understand something in haskell until I try to reinvent it in a completely different context lol |
2021-01-05 16:16:07 +0100 | <noop_noob> | IO being a monad didn't make sense to me until I tried to think of an alternative way to represent it and got to the exact same point... |
2021-01-05 16:16:20 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) |
2021-01-05 16:16:28 +0100 | <noop_noob> | dminuoso, what do you mean by that? |
2021-01-05 16:16:41 +0100 | <noop_noob> | ski, thx lol |
2021-01-05 16:17:16 +0100 | <dminuoso> | noop_noob: So you could refactor this into: |
2021-01-05 16:17:17 +0100 | Lorra | (~lorenzo@2001:a61:ba6:4501:a9e0:bf53:18b7:5b1f) (Quit: Konversation terminated!) |
2021-01-05 16:17:27 +0100 | <noop_noob> | something something Fix? |
2021-01-05 16:17:36 +0100 | phasespace | (~sar@80-89-47-117.inet.signal.no) (Ping timeout: 240 seconds) |
2021-01-05 16:17:49 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) |
2021-01-05 16:18:34 +0100 | <dminuoso> | data InOutT i o m a = In (i -> InOutT i o m a) | Out o (InOutT i o m a) | Done a | ActionM m (InOutT i o m a) |
2021-01-05 16:18:48 +0100 | <noop_noob> | ActionM? |
2021-01-05 16:18:49 +0100 | <noop_noob> | oh |
2021-01-05 16:18:51 +0100 | <dminuoso> | Sure |
2021-01-05 16:18:53 +0100 | <noop_noob> | Ohhhhh |
2021-01-05 16:18:59 +0100 | <dminuoso> | This lets you have purely monadic pieces, and non-monadic components |
2021-01-05 16:19:11 +0100 | <dminuoso> | Ah wait |
2021-01-05 16:19:14 +0100 | <dminuoso> | I missed some parens there |
2021-01-05 16:19:20 +0100 | <dminuoso> | data InOutT i o m a = In (i -> InOutT i o m a) | Out o (InOutT i o m a) | Done a | ActionM (m (InOutT i o m a)) |
2021-01-05 16:19:21 +0100 | <noop_noob> | lol |
2021-01-05 16:19:22 +0100 | <dminuoso> | There |
2021-01-05 16:19:49 +0100 | <noop_noob> | Thx |
2021-01-05 16:20:50 +0100 | noop_noob | (31e4c3d3@49.228.195.211) (Remote host closed the connection) |
2021-01-05 16:21:02 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) (Ping timeout: 264 seconds) |
2021-01-05 16:21:43 +0100 | tomboy64 | (~tomboy64@gateway/tor-sasl/tomboy64) (Ping timeout: 240 seconds) |
2021-01-05 16:23:22 +0100 | tomboy64 | (~tomboy64@gateway/tor-sasl/tomboy64) |
2021-01-05 16:23:29 +0100 | fendor_ | (~fendor@91.141.3.164.wireless.dyn.drei.com) |
2021-01-05 16:23:46 +0100 | erickLan | (~quassel@201.138.29.177) |
2021-01-05 16:23:47 +0100 | hake | (6e088244@110.8.130.68) (Remote host closed the connection) |
2021-01-05 16:25:33 +0100 | erickLan | (~quassel@201.138.29.177) (Remote host closed the connection) |
2021-01-05 16:25:54 +0100 | fendor | (~fendor@178.115.131.182.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
2021-01-05 16:26:35 +0100 | erickLan | (~quassel@201.138.29.177) |
2021-01-05 16:27:21 +0100 | erickLan | (~quassel@201.138.29.177) (Remote host closed the connection) |
2021-01-05 16:28:11 +0100 | <Katsa> | If u guys have time, I could use some help with the unpack function. data List a b |
2021-01-05 16:28:22 +0100 | <Katsa> | unpack :: List a b -> ([a], [b]) |
2021-01-05 16:28:32 +0100 | erickLan | (~quassel@201.138.29.177) |
2021-01-05 16:28:36 +0100 | phasespace | (~sar@89-162-33-21.fiber.signal.no) |
2021-01-05 16:28:46 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection) |
2021-01-05 16:29:26 +0100 | <kuribas> | Katsa: what's List? |
2021-01-05 16:29:27 +0100 | <ski> | where is this `List' from, how's it defined ? |
2021-01-05 16:29:29 +0100 | erickLan | (~quassel@201.138.29.177) (Remote host closed the connection) |
2021-01-05 16:29:56 +0100 | erickLan | (~quassel@201.138.29.177) |
2021-01-05 16:30:41 +0100 | <Katsa> | List a b = Nil | Cons a b (List a b) |
2021-01-05 16:31:03 +0100 | <Katsa> | (data in the front) |
2021-01-05 16:31:10 +0100 | <ski> | ok, so a `List a b' contain the same number of `a's as `b's |
2021-01-05 16:31:17 +0100 | <Katsa> | yes |
2021-01-05 16:31:40 +0100 | <ski> | how far have you got, with `unpack' ? |
2021-01-05 16:32:47 +0100 | erickLan | (~quassel@201.138.29.177) (Read error: Connection reset by peer) |
2021-01-05 16:33:28 +0100 | <Katsa> | getting weird errors, in my mind it was like: "if Nil, then return ([], []), else get recursive result and append a and b to each list" |
2021-01-05 16:33:28 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) |
2021-01-05 16:33:59 +0100 | <ski> | you should be able to do a straight-forward recursion, but you'll probably need to use `where' or `let'-`in' for the recursive call |
2021-01-05 16:34:11 +0100 | <ski> | sounds like a plan |
2021-01-05 16:34:12 +0100 | <Katsa> | wait |
2021-01-05 16:35:05 +0100 | <Katsa> | It works without the "unpack :: List a b -> ([a], [b])" |
2021-01-05 16:35:36 +0100 | <ski> | ask in the interactor what it thinks the type of `unpack' is ? |
2021-01-05 16:36:31 +0100 | <ski> | (type in `:t unpack') |
2021-01-05 16:36:33 +0100 | <Katsa> | kinda ugly "Monad f => List a1 a2 -> f ([a1], [a2])" |
2021-01-05 16:36:43 +0100 | <ski> | oh |
2021-01-05 16:36:52 +0100 | <ski> | you typed in `return' in your code ? |
2021-01-05 16:37:18 +0100 | <Katsa> | uhh yeah |
2021-01-05 16:37:19 +0100 | <ski> | (and possibly used `do' in the recursive case ?) |
2021-01-05 16:37:24 +0100 | <ski> | it ought to be just |
2021-01-05 16:37:30 +0100 | <ski> | unpack Nil = ([],[]) |
2021-01-05 16:37:53 +0100 | <Katsa> | oh got it |
2021-01-05 16:37:55 +0100 | <Katsa> | ty |
2021-01-05 16:37:56 +0100 | <ski> | (and then something slightly more involved in the recursive case) |
2021-01-05 16:38:44 +0100 | <ski> | there's no reason to use monadic things here, like `return', or `do'-notation |
2021-01-05 16:39:27 +0100 | <ski> | Katsa : btw, an alternative version that you could play with would be `data SwapList a b = Nil | Cons a (SwapList b a)' |
2021-01-05 16:39:44 +0100 | sqrt2 | (~ben@unaffiliated/sqrt2) (Ping timeout: 256 seconds) |
2021-01-05 16:39:52 +0100 | sqrt2_ | (~ben@unaffiliated/sqrt2) |
2021-01-05 16:40:02 +0100 | <ski> | (how does that differ from your `List a b' .. can you still define a version of `unpack' for it ?) |
2021-01-05 16:41:00 +0100 | <Katsa> | uhh no idea, this was in last weeks exam, the data structure was given |
2021-01-05 16:41:09 +0100 | <ski> | ok |
2021-01-05 16:41:30 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-6-52.w83-200.abo.wanadoo.fr) |
2021-01-05 16:41:31 +0100 | <Katsa> | gotta go, thanks for the help again |
2021-01-05 16:41:32 +0100 | zfnmxt | (~zfnmxt@unaffiliated/zfnmxt) (Quit: Bye!) |
2021-01-05 16:41:36 +0100 | <Katsa> | have a nice day |
2021-01-05 16:41:39 +0100 | <ski> | no worry. have fun ! |
2021-01-05 16:41:40 +0100 | Katsa | (b230f459@catv-178-48-244-89.catv.broadband.hu) (Remote host closed the connection) |
2021-01-05 16:42:17 +0100 | erickLan | (~quassel@201.138.29.177) |
2021-01-05 16:42:23 +0100 | <[exa]> | "an educative reason to remove `return`" |
2021-01-05 16:42:55 +0100 | ADG1089__ | (~aditya@223.236.177.109) |
2021-01-05 16:43:26 +0100 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) |
2021-01-05 16:44:03 +0100 | nrdmn9 | (~nrdmn@95.129.53.118) (Quit: Ping timeout (120 seconds)) |
2021-01-05 16:44:05 +0100 | <[exa]> | (also kinda wondering who could have scheduled an exam to the "last week" from now) |
2021-01-05 16:44:25 +0100 | nrdmn9 | (~nrdmn@95.129.53.118) |
2021-01-05 16:44:33 +0100 | <johnnyboy[m]> | how does an expression of the form `[(v1 : v2, xs2) | (v1, xs1) <- p xs, (v2, xs2) <- q xs1]` evaluate? |
2021-01-05 16:44:33 +0100 | madjest16 | (~Android@89-200-4-148.mobile.kpn.net) (Read error: Connection reset by peer) |
2021-01-05 16:44:40 +0100 | xwvvvvwx | (xwvvvvwx@gateway/vpn/mullvad/xwvvvvwx) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-01-05 16:44:44 +0100 | <dminuoso> | @undo [(v1 : v2, xs2) | (v1, xs1) <- p xs, (v2, xs2) <- q xs1] |
2021-01-05 16:44:44 +0100 | <lambdabot> | concatMap (\ (v1, xs1) -> concatMap (\ (v2, xs2) -> [(v1 : v2, xs2)]) (q xs1)) (p xs) |
2021-01-05 16:44:47 +0100 | <dminuoso> | johnnyboy[m]: ^- |
2021-01-05 16:44:47 +0100 | zfnmxt | (~zfnmxt@unaffiliated/zfnmxt) |
2021-01-05 16:44:51 +0100 | xwvvvvwx | (xwvvvvwx@gateway/vpn/mullvad/xwvvvvwx) |
2021-01-05 16:45:21 +0100 | <johnnyboy[m]> | ah, thanks! |
2021-01-05 16:45:41 +0100 | <ski> | johnnyboy[m] : select each possible combination of a pair `(v1, xs1)' from `p xs', and a pair `(v2, xs2)' from `q xs1', and collect a list of all `(v1 : v2, xs2)', one for each combination |
2021-01-05 16:45:42 +0100 | coot | (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2021-01-05 16:45:56 +0100 | darjeeling_ | (~darjeelin@122.245.218.97) (Ping timeout: 240 seconds) |
2021-01-05 16:45:56 +0100 | seliopou | (seliopou@entropy.tmok.com) (Ping timeout: 240 seconds) |
2021-01-05 16:46:10 +0100 | <dminuoso> | If Im inside a MonadReader context, is there a sneaky way to gain non-monadic access to the environment in a where binding? |
2021-01-05 16:46:39 +0100 | <dminuoso> | i.e. `f :: ReaderT Env IO (); f = ... where env :: Env; env = ???` |
2021-01-05 16:46:59 +0100 | <[exa]> | dminuoso: eta-expand the whole definition to bind the `r` ? |
2021-01-05 16:47:05 +0100 | ADG1089__ | (~aditya@223.236.177.109) (Remote host closed the connection) |
2021-01-05 16:47:12 +0100 | seliopou | (seliopou@entropy.tmok.com) |
2021-01-05 16:47:15 +0100 | <[exa]> | or `env` in your case |
2021-01-05 16:47:32 +0100 | <dminuoso> | [exa]: What do you mean by eta-expand here? |
2021-01-05 16:47:56 +0100 | Saukk | (~Saukk@83-148-239-3.dynamic.lounea.fi) |
2021-01-05 16:48:11 +0100 | <dminuoso> | Ah hold on! What I ask for cant exist |
2021-01-05 16:48:13 +0100 | <dminuoso> | because of |
2021-01-05 16:48:16 +0100 | <dminuoso> | % :t local |
2021-01-05 16:48:16 +0100 | <yahb> | dminuoso: MonadReader r m => (r -> r) -> m a -> m a |
2021-01-05 16:48:44 +0100 | <[exa]> | oh it's readerT, not sure if it will work. I meant something roughly like `f env = (..original..) env` no where needed |
2021-01-05 16:49:15 +0100 | <dminuoso> | Im beginning to wonder whether implicit params are just better than ReaderT.. |
2021-01-05 16:49:57 +0100 | <[exa]> | grabbing it "purely" in a where clause sounds completely against the whole idea |
2021-01-05 16:50:09 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
2021-01-05 16:50:43 +0100 | <[exa]> | ...depends on how often you need the params |
2021-01-05 16:51:10 +0100 | <dminuoso> | Well Im in a function where I need this in a lot of where bindings |
2021-01-05 16:51:23 +0100 | <ski> | @type askFor |
2021-01-05 16:51:25 +0100 | <lambdabot> | MonadReader r m => ((?ask::r) => a) -> m a |
2021-01-05 16:51:33 +0100 | emptyflask | (~jon@136.49.71.178) |
2021-01-05 16:51:50 +0100 | <dminuoso> | What magic is this? Hoogle knows not of it. |
2021-01-05 16:51:58 +0100 | ski | just defined it |
2021-01-05 16:52:20 +0100 | <ski> | askFor :: MonadReader r m => ((?ask :: r) => a) -> m a; askFor a = do r <- ask; let ?ask = r in return a |
2021-01-05 16:52:52 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-01-05 16:53:27 +0100 | <ski> | perhaps having `((?ask :: r) => m a) -> m a' would be more useful, maybe ? |
2021-01-05 16:53:32 +0100 | erickLan | (~quassel@201.138.29.177) (Remote host closed the connection) |
2021-01-05 16:55:01 +0100 | Vulfe | (~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net) (Remote host closed the connection) |
2021-01-05 16:55:23 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Ping timeout: 240 seconds) |
2021-01-05 16:55:33 +0100 | Vulfe | (~vulfe@2600:1702:31b0:34e0:54f0:e9d4:232a:a299) |
2021-01-05 16:55:44 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) |
2021-01-05 16:56:32 +0100 | argento | (~argent0@168.227.97.29) (Ping timeout: 260 seconds) |
2021-01-05 16:56:40 +0100 | kyali | (~kyali@APN-123-251-234-gprs.simobil.net) |
2021-01-05 16:57:10 +0100 | Vulfe | (~vulfe@2600:1702:31b0:34e0:54f0:e9d4:232a:a299) (Remote host closed the connection) |
2021-01-05 16:57:11 +0100 | <ski> | f :: ReaderT Env IO (); f = askFor (...) where env :: (?ask :: Env) => Env; env = ?ask -- ought to be possible, with the suggested change above (removing `return' from the definition) |
2021-01-05 16:57:16 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
2021-01-05 16:57:24 +0100 | Vulfe | (~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net) |
2021-01-05 16:57:31 +0100 | <kuribas> | how do you parse a GADT expression? Do you have to have write a separate parser for each type? |
2021-01-05 16:57:48 +0100 | <kuribas> | for example Parser (Expr Int) , Parser (Expr Bool) |
2021-01-05 16:58:44 +0100 | <ski> | iirc, last time i did it, i did that, and also parsed into an existential |
2021-01-05 16:59:12 +0100 | <kuribas> | ski: or would it be easier to parse into a Dynamic, and let the Dynamic take care of the types? |
2021-01-05 16:59:14 +0100 | darjeeling_ | (~darjeelin@122.245.218.97) |
2021-01-05 16:59:23 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2021-01-05 16:59:44 +0100 | <ski> | maybe ? |
2021-01-05 17:00:25 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-01-05 17:00:37 +0100 | <glguy> | A Dynamic would loose more information than defining: data AnExpr where AnExpr :: Expr a -> AnExpr |
2021-01-05 17:02:21 +0100 | <kuribas> | ah, so you parse into an existential, then you recover the types from the constructors? |
2021-01-05 17:02:33 +0100 | ADG1089__ | (~aditya@223.236.177.109) |
2021-01-05 17:02:48 +0100 | erickLan | (~quassel@201.138.29.177) |
2021-01-05 17:02:50 +0100 | <ski> | you could add a `Typeable a' constraint, or perhaps some other constraint(s), in the existential |
2021-01-05 17:02:58 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-6-52.w83-200.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-01-05 17:03:12 +0100 | argento | (~argent0@168.227.96.26) |
2021-01-05 17:03:15 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0) |
2021-01-05 17:03:19 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-6-52.w83-200.abo.wanadoo.fr) |
2021-01-05 17:03:28 +0100 | <ski> | (or perhaps a singleton GADT that directly describes the types that you allow) |
2021-01-05 17:03:30 +0100 | <glguy> | I think it's often easier to parse an typecheck separately, but that would depend on your grammar |
2021-01-05 17:03:55 +0100 | <glguy> | If pattern matching on the constructors of your GADT fully determines the type then that will be enough |
2021-01-05 17:04:08 +0100 | <kuribas> | glguy: so you have a separate untyped structure? |
2021-01-05 17:04:37 +0100 | <kuribas> | parsing into a GADT sounds like type-checking |
2021-01-05 17:04:40 +0100 | <glguy> | well a "less typed" structure, at least |
2021-01-05 17:05:22 +0100 | <merijn> | parsing into a GADT is an exercise in pain and frustration |
2021-01-05 17:05:24 +0100 | <glguy> | Depends on how complicated your typing is |
2021-01-05 17:05:44 +0100 | <merijn> | kuribas: My recommended anaswer to "how do you parse a GADT?" is "don't" |
2021-01-05 17:06:05 +0100 | <merijn> | kuribas: Unless you like singletons hell and/or CPS encoding your entire parser somehow |
2021-01-05 17:07:04 +0100 | <kuribas> | merijn: what if you want to store an expression? |
2021-01-05 17:07:10 +0100 | <kuribas> | and retrieve it... |
2021-01-05 17:07:28 +0100 | <merijn> | kuribas: I've pretty much given up on the idea of using GADTs for stuff like ASTs |
2021-01-05 17:07:47 +0100 | <merijn> | kuribas: It's a nice toy example and works well if your input is "haskell source" |
2021-01-05 17:07:49 +0100 | Vulfe | (~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net) (Remote host closed the connection) |
2021-01-05 17:08:05 +0100 | <merijn> | Parsing it from unstructured input (i.e. Text/ByteString) is a fool's errand |
2021-01-05 17:09:20 +0100 | ADG1089_ | (~aditya@223.236.177.109) |
2021-01-05 17:09:42 +0100 | ADG1089__ | (~aditya@223.236.177.109) (Read error: Connection reset by peer) |
2021-01-05 17:11:10 +0100 | <jonathanx> | I am writing an event sourced web app, where I want to create an in-memory cache as a naive performance optimization (that will be replaced with something bigger once needed). |
2021-01-05 17:11:10 +0100 | <jonathanx> | The cache is meant to contain the relevant event stream. |
2021-01-05 17:11:10 +0100 | <jonathanx> | The idea is that I want each query request to start by updating the in-memory cache, and then compute/return the query answer. |
2021-01-05 17:11:10 +0100 | <jonathanx> | To avoid duplicate db calls, I want to make it possible for requests to "piggy-back" on requests that has been done recently: |
2021-01-05 17:11:11 +0100 | <jonathanx> | Let's say we have 5 requests that occur almost immediately. |
2021-01-05 17:11:15 +0100 | <jonathanx> | The first request would then start a cache synchronization, fetching any new events and appending them to the in-memory event stream, returning once the cache is updated. |
2021-01-05 17:11:18 +0100 | <jonathanx> | I would like the 4 other requests to wait for the first request's cache synchronization, and then use the recently refreshed value as the basis for their operation. |
2021-01-05 17:11:20 +0100 | Vulfe | (~vulfe@75-28-176-196.lightspeed.evtnil.sbcglobal.net) |
2021-01-05 17:11:24 +0100 | <jonathanx> | if there's a request after the cache is synchronized and the 5 preceding ones have returned, the cache should be re-synchronized (i.e. the cache goes stale immediately after "activating" all "registered callbacks") |
2021-01-05 17:11:34 +0100 | <jonathanx> | Any ideas as to what to look into? I've been looking into forkIO/MVar, but feel a bit lost. |
2021-01-05 17:12:48 +0100 | Franciman | (~francesco@host-82-48-174-127.retail.telecomitalia.it) (Quit: Leaving) |
2021-01-05 17:13:03 +0100 | <merijn> | kuribas: To get a sensible parser you'd like the parser's return type to...depend on the input data. So to do it nicely/properly you need dependent types and that's always where the sadness begins ;) |
2021-01-05 17:13:35 +0100 | <kuribas> | merijn: and if I write: parseExprDyn :: Parser Dynamic |
2021-01-05 17:14:08 +0100 | <merijn> | kuribas: How is that different from having an untyped "Expr" type? |
2021-01-05 17:14:14 +0100 | michalz` | (~user@185.246.204.79) (Remote host closed the connection) |
2021-01-05 17:14:26 +0100 | <kuribas> | merijn: well, less boilerplate? |
2021-01-05 17:14:29 +0100 | <merijn> | And then just writing typechecking as "Expr -> GADTExpr a" |
2021-01-05 17:14:40 +0100 | <merijn> | eh |
2021-01-05 17:14:53 +0100 | <merijn> | "Expr -> Maybe (GADTExpr a)", of course |
2021-01-05 17:15:04 +0100 | <merijn> | Less boilerplate how? |
2021-01-05 17:15:08 +0100 | <merijn> | What boilerplate? |
2021-01-05 17:15:34 +0100 | <kuribas> | merijn: I don't need to write an existential wrapper. |
2021-01-05 17:15:47 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 17:15:53 +0100 | <kuribas> | and I can use this trick for subexpressions. |
2021-01-05 17:16:10 +0100 | <merijn> | Dynamic *is* an existential wrapper |
2021-01-05 17:16:18 +0100 | <kuribas> | jonathanx: put the cache in the MVar? |
2021-01-05 17:16:28 +0100 | pavonia | (~user@unaffiliated/siracusa) (Quit: Bye!) |
2021-01-05 17:17:16 +0100 | <kuribas> | merijn: then it should work no? |
2021-01-05 17:17:17 +0100 | <merijn> | kuribas: Anyway, you'll always need an existential wrapper OR rank2 eliminator when (trying to) work with GADTs parsed from runtime data |
2021-01-05 17:17:23 +0100 | <glguy> | kuribas, using Dynamic will just make extra work. It's much better than the existential wrapper |
2021-01-05 17:17:41 +0100 | <glguy> | so you'll have more cases to check and will get no check that you've checked them all |
2021-01-05 17:17:58 +0100 | <glguy> | delete "It's much better than the existential wrapper" |
2021-01-05 17:18:03 +0100 | <merijn> | kuribas: Well, suppose you've parsed a Dynamic, what are you gonna do with it then? |
2021-01-05 17:18:26 +0100 | <merijn> | How are you gonna put it into your AST? |
2021-01-05 17:19:18 +0100 | <kuribas> | merijn: maybe (Left TypeError) (Right) (fromDynamic parsedDynamic) :: Either TypeError (Expr Int) |
2021-01-05 17:19:22 +0100 | <kuribas> | for example |
2021-01-05 17:19:45 +0100 | <kuribas> | I suppose the existential does the same though... |
2021-01-05 17:19:47 +0100 | <merijn> | kuribas: How's that different from just parsing "Expr Int" directly? |
2021-01-05 17:20:06 +0100 | <kuribas> | merijn: then I don't have to have different parsers for each type. |
2021-01-05 17:20:13 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 258 seconds) |
2021-01-05 17:20:27 +0100 | <merijn> | kuribas: Eh, how so? |
2021-01-05 17:20:27 +0100 | <glguy> | The best way to learn that this is a bad idea might just be to do it |
2021-01-05 17:20:40 +0100 | <kuribas> | glguy: yeah, I should try a small toy example. |
2021-01-05 17:20:50 +0100 | ADG1089_ | (~aditya@223.236.177.109) (Remote host closed the connection) |
2021-01-05 17:21:11 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-01-05 17:21:29 +0100 | petersen | (~petersen@redhat/juhp) |
2021-01-05 17:21:31 +0100 | <kuribas> | jonathanx: the MVar will block others from reading/writing. |
2021-01-05 17:21:49 +0100 | <jonathanx> | kuribas: I guess I could make each request use readMVar to wait for the cache to appear, and use "takeMVar ... synchronize ... putMVar" to do the synmchronization. But is there a good way to know if someone else is currently synchronizing? |
2021-01-05 17:22:21 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2021-01-05 17:22:33 +0100 | <kuribas> | jonathanx: what do you need to synchronise? The MVar will be accessed sequentially. |
2021-01-05 17:24:26 +0100 | <kuribas> | glguy: I wonder how aeson-gadt-th does this... |
2021-01-05 17:25:04 +0100 | <jonathanx> | kuribas: sorry, I think we have a case of name shadowing here. I mean synchronize as in "update the in-memory event stream so it's up to date with the db" |
2021-01-05 17:25:25 +0100 | boxscape | (4ff0ba59@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.89) (Ping timeout: 246 seconds) |
2021-01-05 17:25:38 +0100 | <merijn> | jonathanx: tryTakeMVar? :p |
2021-01-05 17:25:43 +0100 | <merijn> | But that's racy |
2021-01-05 17:26:25 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 17:26:26 +0100 | <jonathanx> | if we have 5 close-to-simultaneous queries, I only want to do this once, forcing the first query to do the legwork, while the remaining 4 get to piggy back |
2021-01-05 17:26:37 +0100 | Neo--- | (~neo@BSN-143-24-54.dynamic.siol.net) (Ping timeout: 264 seconds) |
2021-01-05 17:26:52 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) (Ping timeout: 260 seconds) |
2021-01-05 17:27:11 +0100 | <jonathanx> | if I do it fully sequentially, then each request would need to go check the db for updates, even if there's already a "cache-synchronization" in progress |
2021-01-05 17:27:28 +0100 | <merijn> | oh, wait, I think I have something like this somewhere |
2021-01-05 17:28:58 +0100 | ADG1089__ | (~aditya@223.236.177.109) |
2021-01-05 17:29:48 +0100 | <kuribas> | jonathanx: you want to check if a similar cache request is in progress? |
2021-01-05 17:29:51 +0100 | <merijn> | ah, not quite |
2021-01-05 17:30:04 +0100 | <kuribas> | jonathanx: you could store for each query an MVar where you put the result. |
2021-01-05 17:30:20 +0100 | ADG1089__ | (~aditya@223.236.177.109) (Client Quit) |
2021-01-05 17:30:24 +0100 | <kuribas> | then if the query is similar, you wait on that MVar. |
2021-01-05 17:30:32 +0100 | <jonathanx> | kuribas: yep, and if there is, I want them to wait for it to finish and then use it's value |
2021-01-05 17:30:34 +0100 | <merijn> | jonathanx: https://github.com/merijn/broadcast-chan/blob/master/broadcast-chan-tests/BroadcastChan/Test.hs#L1… |
2021-01-05 17:30:36 +0100 | Neo--- | (~neo@BSN-143-26-67.dynamic.siol.net) |
2021-01-05 17:30:53 +0100 | <shinobi> | Haskell does not seem to need tail recursive functions like Scala. Is overflow usually an issue? |
2021-01-05 17:31:03 +0100 | <merijn> | shinobi: The question is flawed |
2021-01-05 17:31:18 +0100 | <merijn> | shinobi: GHC doesn't have a function call stack, therefore you cannot overflow the call stack |
2021-01-05 17:33:01 +0100 | <MrMuffles[m]> | What do you mean it doesn't have a call stack? |
2021-01-05 17:33:02 +0100 | madjestic | (~Android@86-88-72-244.fixed.kpn.net) |
2021-01-05 17:33:20 +0100 | <merijn> | MrMuffles[m]: Eh...literally "it doesn't have a call stack"? |
2021-01-05 17:33:24 +0100 | plutoniix | (~q@ppp-49-237-20-247.revip6.asianet.co.th) |
2021-01-05 17:33:50 +0100 | <MrMuffles[m]> | Can you link me to something more useful |
2021-01-05 17:34:03 +0100 | <merijn> | @where stg |
2021-01-05 17:34:03 +0100 | <lambdabot> | http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.53.3729 |
2021-01-05 17:34:09 +0100 | ADG1089__ | (~aditya@223.236.177.109) |
2021-01-05 17:34:20 +0100 | <merijn> | MrMuffles[m]: It's a bit long, but that's about as explicit as you can get ;) |
2021-01-05 17:35:11 +0100 | <merijn> | MrMuffles[m]: It basically explains how you can compile a lazy functional language (a super simplified one in their example) to something you can actually run on your CPU |
2021-01-05 17:36:04 +0100 | <merijn> | MrMuffles[m]: It's pretty readable, you don't really need much more knowledge than pattern matching, function application and lambdas to follow it. (Some familiarity with C and/or assembly helps) |
2021-01-05 17:36:33 +0100 | <MrMuffles[m]> | Oh interesting, sounds good |
2021-01-05 17:36:52 +0100 | <merijn> | MrMuffles[m]: The short ELI5 is "call stacks are for losers that care about "returning" to earlier calls" |
2021-01-05 17:37:47 +0100 | erickLan | (~quassel@201.138.29.177) (Remote host closed the connection) |
2021-01-05 17:38:06 +0100 | madjest67 | (~Android@89-200-2-185.mobile.kpn.net) |
2021-01-05 17:38:17 +0100 | spopejoy | (~stuart@ool-44c5f8c9.dyn.optonline.net) |
2021-01-05 17:38:27 +0100 | <dolio> | Another angle is that every call in a Haskell program is a tail call, so naturally you don't use stack for those. |
2021-01-05 17:38:27 +0100 | madjest67 | (~Android@89-200-2-185.mobile.kpn.net) (Read error: Connection reset by peer) |
2021-01-05 17:38:35 +0100 | madjestic | (~Android@86-88-72-244.fixed.kpn.net) (Read error: Connection reset by peer) |
2021-01-05 17:39:21 +0100 | <dolio> | Like `E1 : E2` is a tail call to the (:) constuctor with two closures that have just been built. |
2021-01-05 17:40:08 +0100 | <merijn> | MrMuffles[m]: Basically, since there's no statements the only thing you do with functions is "use their result as argument to other functions". So, rather than bothering to return, just pass "the next function" along the code |
2021-01-05 17:41:32 +0100 | <MrMuffles[m]> | Interesting. I feel like I've seen stack traces in haskell though |
2021-01-05 17:41:59 +0100 | <merijn> | MrMuffles[m]: "f x = 2 + x*x" instead of "callling *, returning, then calling +" you can also do "call * and tell it to call '(2+)' with its result" |
2021-01-05 17:42:35 +0100 | <merijn> | (this is also called "continuation passing style" (CPS), because you're, well, passing where to continue. |
2021-01-05 17:42:56 +0100 | <merijn> | Which means you assembly "call" instructions just become jumps |
2021-01-05 17:42:59 +0100 | codedmart_ | codedmart |
2021-01-05 17:43:00 +0100 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection) |
2021-01-05 17:43:19 +0100 | <glguy> | MrMuffles[m]: maybe you saw http://hackage.haskell.org/package/base-4.14.1.0/docs/GHC-Stack.html "Access to GHC's call-stack simulation" |
2021-01-05 17:43:20 +0100 | Saukk | (~Saukk@83-148-239-3.dynamic.lounea.fi) (Remote host closed the connection) |
2021-01-05 17:43:22 +0100 | kritzefitz | (~kritzefit@212.86.56.80) |
2021-01-05 17:43:24 +0100 | <merijn> | MrMuffles[m]: Yeah, you can get stack traces, but those are more like "logical stack traces", rather than something existing in the implementation |
2021-01-05 17:43:49 +0100 | <dolio> | Building bigger continuations in CPS is equivalent to using stack, though. |
2021-01-05 17:43:51 +0100 | Melanie_ | Melanie |
2021-01-05 17:44:08 +0100 | <idnar> | > last (scanl (+) 0 [1..1000000]) |
2021-01-05 17:44:11 +0100 | <lambdabot> | 500000500000 |
2021-01-05 17:44:37 +0100 | <merijn> | idnar: Thoroughly beaten by GHC's optimiser ;) |
2021-01-05 17:44:44 +0100 | <MrMuffles[m]> | Ok this makes sense I think, trippy |
2021-01-05 17:45:04 +0100 | <MrMuffles[m]> | Do other functional languages do this? Clojure? |
2021-01-05 17:45:05 +0100 | <merijn> | MrMuffles[m]: There is still a stack, but it's not for function calls. It's for patterns! |
2021-01-05 17:45:27 +0100 | <idnar> | merijn: yup :( |
2021-01-05 17:45:40 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 272 seconds) |
2021-01-05 17:46:11 +0100 | <merijn> | MrMuffles[m]: Consider this: "case f x of Nothing -> foo; Just v -> bar v' you need to remember that branch for when 'f x' is done computing, but while computing 'f x' you can (and probably will!) encounter other pattern matches |
2021-01-05 17:46:45 +0100 | nineonine | (~nineonine@S01061cabc0b095f3.vf.shawcable.net) |
2021-01-05 17:47:08 +0100 | sshine | 's BSc project was a compiler for a reversible functional language where, every time you pattern match, you have to un-pattern match, too. |
2021-01-05 17:47:11 +0100 | <merijn> | Although I think the pattern stack is allowed to grow arbitrarily big these days? |
2021-01-05 17:47:39 +0100 | <dolio> | I think it's not arbitrarily big, but might as well be. |
2021-01-05 17:47:43 +0100 | <glguy> | Use all the RAM o/ |
2021-01-05 17:47:52 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) |
2021-01-05 17:47:52 +0100 | <dolio> | Like 80% of total RAM or something. |
2021-01-05 17:47:59 +0100 | nineonine | (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection) |
2021-01-05 17:48:27 +0100 | ADG1089__ | (~aditya@223.236.177.109) (Quit: Konversation terminated!) |
2021-01-05 17:48:33 +0100 | <sshine> | dolio, isn't actual memory use while pattern matching a function of code size rather than recursion depth? |
2021-01-05 17:48:34 +0100 | <merijn> | MrMuffles[m]: Anyways, the paper I linked earlier goes into this stuff in far more detail and I highly recommend it for anyone remotely interested in things like "how does Haskell get compiled?" |
2021-01-05 17:48:42 +0100 | nineonine | (~nineonine@S01061cabc0b095f3.vf.shawcable.net) |
2021-01-05 17:48:43 +0100 | tanuki_ | (~quassel@173.168.154.189) (Ping timeout: 256 seconds) |
2021-01-05 17:49:30 +0100 | <MrMuffles[m]> | Thanks it looks worth the read, never realized this about haskell |
2021-01-05 17:50:33 +0100 | ADG1089__ | (~aditya@223.236.177.109) |
2021-01-05 17:50:57 +0100 | ADG1089__ | (~aditya@223.236.177.109) (Remote host closed the connection) |
2021-01-05 17:51:30 +0100 | ADG1089__ | (~aditya@223.236.177.109) |
2021-01-05 17:51:45 +0100 | <merijn> | MrMuffles[m]: Well, technically this "just" a GHC thing as it's a detail of how GHC implements/compiles Haskell and not fundamentally part of the language spec. The language spec allows all sorts of dumb implementations :p |
2021-01-05 17:51:47 +0100 | tanuki | (~quassel@173.168.154.189) |
2021-01-05 17:51:58 +0100 | <merijn> | Hell, the spec doesn't even require laziness |
2021-01-05 17:52:31 +0100 | <tomsmeding> | it doesn't? |
2021-01-05 17:52:31 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 272 seconds) |
2021-01-05 17:53:16 +0100 | <merijn> | tomsmeding: No. It requires "non-strictness" i.e. "if it works lazily, it should work". |
2021-01-05 17:53:24 +0100 | geekosaur | (42d52137@66.213.33.55) |
2021-01-05 17:53:36 +0100 | <tomsmeding> | I see |
2021-01-05 17:53:40 +0100 | dfeuer | (~dfeuer@pool-108-18-223-60.washdc.fios.verizon.net) |
2021-01-05 17:53:47 +0100 | <merijn> | tomsmeding: If it required laziness then something like the strictness analyzer making things like "tight sums" strict would violate the report |
2021-01-05 17:54:10 +0100 | <tomsmeding> | though I'd imagine it's kind of hard to design an implementation that doesn't do full laziness, but does fulfill that requirement |
2021-01-05 17:54:17 +0100 | hekkaidekapus] | (~tchouri@gateway/tor-sasl/hekkaidekapus) |
2021-01-05 17:54:23 +0100 | nineonine | (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 256 seconds) |
2021-01-05 17:54:26 +0100 | <merijn> | tomsmeding: GHC makes things selectively strict |
2021-01-05 17:54:43 +0100 | hekkaidekapus[ | (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds) |
2021-01-05 17:55:13 +0100 | <tomsmeding> | also, isn't this a definitional issue? doesn't the report then effectively say "semantically, the implementation is indistinguishable from lazy" |
2021-01-05 17:55:46 +0100 | Guest62909 | melkornms |
2021-01-05 17:56:01 +0100 | <tomsmeding> | because if so, I would definitely say the spec requires laziness: that you can do optimisations is immaterial, the spec defines the semantics |
2021-01-05 17:56:23 +0100 | <tomsmeding> | but arguing over terminology is not a great use of everyone's time :) |
2021-01-05 17:56:30 +0100 | <merijn> | tomsmeding: Right, but my point was that that admits many dumb implementations including "try everything strict first with a timeout" |
2021-01-05 17:56:38 +0100 | <dolio> | sshine: No, I don't think so. |
2021-01-05 17:56:38 +0100 | <tomsmeding> | lol |
2021-01-05 17:56:51 +0100 | <merijn> | tomsmeding: So a Haskell implementation is perfectly *allowed* to have a call stack |
2021-01-05 17:57:02 +0100 | <merijn> | tomsmeding: Not having one is an artifact of GHC, not Haskell |
2021-01-05 17:57:30 +0100 | <tomsmeding> | that timeout implementation would be absolutely amazing |
2021-01-05 17:57:31 +0100 | ADG1089__ | (~aditya@223.236.177.109) (Remote host closed the connection) |
2021-01-05 17:57:50 +0100 | <dolio> | There was a research thing that did a smarter version of that. |
2021-01-05 17:57:55 +0100 | <tomsmeding> | but yes I agree about the distinction about call stacks |
2021-01-05 17:58:15 +0100 | <merijn> | Ha! Yet another one of my stupid ideas vindicated! |
2021-01-05 17:58:36 +0100 | <tomsmeding> | dolio: execute strict and lazy concurrently, throwing away strict in case of an exception? |
2021-01-05 17:58:42 +0100 | <merijn> | tomsmeding: I just brought that up because it's a natural Haskell version of my favourite thought experiment |
2021-01-05 17:58:46 +0100 | ADG1089__ | (~aditya@223.236.177.109) |
2021-01-05 17:58:57 +0100 | <merijn> | tomsmeding: The "maximally malicious compiler" |
2021-01-05 17:59:04 +0100 | kyali | (~kyali@APN-123-251-234-gprs.simobil.net) (Ping timeout: 256 seconds) |
2021-01-05 17:59:16 +0100 | hnOsmium0001 | (uid453710@gateway/web/irccloud.com/x-flblofqkdcnkmtsc) |
2021-01-05 17:59:34 +0100 | <dolio> | No. On every function call you try reducing the arguments, in case they're like an accumulator parameter where that's a good thing to do. But you provide a way to bail out if it takes too long. |
2021-01-05 17:59:38 +0100 | danza | (~francesco@151.53.94.29) |
2021-01-05 17:59:54 +0100 | <tomsmeding> | dolio: funny |
2021-01-05 18:00:00 +0100 | <melkornms> | hey guys, I'm pretty new to Haskell, can you help me understand this piece of code? I put the question at the end of the code import Data.Char |
2021-01-05 18:00:02 +0100 | <melkornms> | import Data.Monoid |
2021-01-05 18:00:04 +0100 | <melkornms> | isForbidden = getAny . foldMap (Any .) [isLower, isDigit] |
2021-01-05 18:00:06 +0100 | <melkornms> | main :: IO () |
2021-01-05 18:00:06 +0100 | <merijn> | Which someone proposed as thought experiment for crypto-code written in C. The maximally malicious compiler being a compiler that complies to the letter of the spec, while being actively malicious in its interpretation |
2021-01-05 18:00:08 +0100 | <dolio> | And you also keep track of which things you've already done that to, to avoid wasting asymptotic amounts of time. |
2021-01-05 18:00:08 +0100 | <melkornms> | main = do |
2021-01-05 18:00:10 +0100 | <melkornms> | print $ isForbidden 'A' |
2021-01-05 18:00:12 +0100 | <melkornms> | print $ isForbidden 'a' |
2021-01-05 18:00:14 +0100 | <melkornms> | print $ isForbidden '1' |
2021-01-05 18:00:16 +0100 | kritzefitz_ | (~kritzefit@212.86.56.80) |
2021-01-05 18:00:16 +0100 | <melkornms> | -- Given that: |
2021-01-05 18:00:17 +0100 | <tomsmeding> | melkornms: please use a pastebin, IRC does not support multiline messages |
2021-01-05 18:00:18 +0100 | <melkornms> | -- foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m |
2021-01-05 18:00:20 +0100 | <melkornms> | -- How is it that the isForbidden works? I would assume the [isLower, isDigit] are wrapped in Any, but actually it receives 'A' / 'a' / '1', calls isLower / isDigit and then wraps in Any. I just don't see how that is? |
2021-01-05 18:00:22 +0100 | <melkornms> | SORRY, I meant to post a link :( |
2021-01-05 18:00:24 +0100 | <tomsmeding> | @where paste |
2021-01-05 18:00:24 +0100 | <lambdabot> | Help us help you: please paste full code, input and/or output at eg https://paste.tomsmeding.com |
2021-01-05 18:00:24 +0100 | <melkornms> | https://repl.it/@MelkorNemesis/Monoids#main.hs |
2021-01-05 18:00:29 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:7d59) |
2021-01-05 18:00:30 +0100 | <tomsmeding> | ah |
2021-01-05 18:00:41 +0100 | <melkornms> | my bad, had something different in the clipboard |
2021-01-05 18:00:59 +0100 | <dolio> | It has some advantages. Like foldl and similar just do the thing people want. |
2021-01-05 18:01:03 +0100 | <merijn> | melkornms: The missing piece you should look at is: What is the Monoid instance of Any? |
2021-01-05 18:01:04 +0100 | <tomsmeding> | merijn: like gcc? |
2021-01-05 18:01:14 +0100 | <merijn> | :t foldMap |
2021-01-05 18:01:15 +0100 | <lambdabot> | (Foldable t, Monoid m) => (a -> m) -> t a -> m |
2021-01-05 18:01:33 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:7d59) (Client Quit) |
2021-01-05 18:01:41 +0100 | <dsal> | > let isForbidden = getAny . foldMap (Any .) [isLower, isDigit] in map isForbidden "Aa1" |
2021-01-05 18:01:43 +0100 | <lambdabot> | [False,True,True] |
2021-01-05 18:01:45 +0100 | <merijn> | melkornms: 'foldMap f' is just "mconcat . map f" |
2021-01-05 18:02:07 +0100 | kritzefitz_ | (~kritzefit@212.86.56.80) (Remote host closed the connection) |
2021-01-05 18:02:09 +0100 | s00pcan | (~chris@107.181.165.217) (Ping timeout: 260 seconds) |
2021-01-05 18:02:29 +0100 | <ezzieyguywuf> | is it possible to do something in, say, ~/.cabal/config such that cabal-install never installs missing packages, but rather just complains about it? |
2021-01-05 18:02:32 +0100 | <merijn> | oh, I guess it's actually two monoids |
2021-01-05 18:02:39 +0100 | <tomsmeding> | also ((->) r) |
2021-01-05 18:02:51 +0100 | <tomsmeding> | tricky code |
2021-01-05 18:02:57 +0100 | <merijn> | melkornms: You need to look at "instance Monoid Any" and "instance Monoid r => Monoid (a -> r)" :) |
2021-01-05 18:02:58 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-6-52.w83-200.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-01-05 18:02:59 +0100 | <dolio> | I think it's a lot more complicated, though. |
2021-01-05 18:03:18 +0100 | <melkornms> | merijn: thanks mate |
2021-01-05 18:03:20 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-6-52.w83-200.abo.wanadoo.fr) |
2021-01-05 18:03:44 +0100 | s00pcan | (~chris@075-133-056-178.res.spectrum.com) |
2021-01-05 18:03:45 +0100 | <tomsmeding> | @type \x -> any ($ x) [isLower, isDigit] |
2021-01-05 18:03:45 +0100 | <merijn> | "Monoid r => Monoid (a -> r)" is the best monoid instance ever |
2021-01-05 18:03:46 +0100 | <lambdabot> | Char -> Bool |
2021-01-05 18:03:49 +0100 | livvy | (~livvy@gateway/tor-sasl/livvy) |
2021-01-05 18:03:51 +0100 | <tomsmeding> | whats wrong with a bit of pointedness |
2021-01-05 18:03:53 +0100 | Cale | (~cale@cpef48e38ee8583-cm0c473de9d680.cpe.net.cable.rogers.com) (Read error: Connection reset by peer) |
2021-01-05 18:03:55 +0100 | crblmr | (~carbolyme@matrix.dropacid.net) (Ping timeout: 246 seconds) |
2021-01-05 18:04:06 +0100 | <merijn> | tomsmeding: That doesn't generalise to multiple arguments :p |
2021-01-05 18:04:09 +0100 | <tomsmeding> | it's shorter too! |
2021-01-05 18:04:11 +0100 | <dsal> | :t (Any . isDigit) <> (Any . isLower) |
2021-01-05 18:04:12 +0100 | <lambdabot> | Char -> Any |
2021-01-05 18:04:35 +0100 | <dsal> | :> ((Any . isDigit) <> (Any . isLower)) 'a' |
2021-01-05 18:04:40 +0100 | <dsal> | > ((Any . isDigit) <> (Any . isLower)) 'a' |
2021-01-05 18:04:42 +0100 | <lambdabot> | Any {getAny = True} |
2021-01-05 18:04:44 +0100 | crblmr | (~carbolyme@matrix.dropacid.net) |
2021-01-05 18:04:48 +0100 | <dolio> | Oh, by the way, the other thing that uses stack in GHC's evaluation model is updates for lazily evaluated thunks. So ironically, tail recursion can use a lot of stack by producing an accumulated value with a bunch of updates. |
2021-01-05 18:05:11 +0100 | <dolio> | If you aren't careful enough. |
2021-01-05 18:05:52 +0100 | <tomsmeding> | ezzieyguywuf: make ~/.cabal non-writable? |
2021-01-05 18:06:10 +0100 | <tomsmeding> | or probably a particular subdirectory |
2021-01-05 18:07:36 +0100 | <melkornms> | thanks guys, it'll take me some time to digest |
2021-01-05 18:08:07 +0100 | argento | (~argent0@168.227.96.26) (Ping timeout: 246 seconds) |
2021-01-05 18:08:20 +0100 | <tomsmeding> | melkornms: the Monoid instance of (a -> r) takes quite a bit of Haskell experience to fully appreciate |
2021-01-05 18:08:23 +0100 | <ezzieyguywuf> | tomsmeding: yea, that was my thought too, just wasn't sure if there was a config for it. |
2021-01-05 18:08:33 +0100 | <tomsmeding> | whether then at some point you _stop_ appreciating it again, depends on the person |
2021-01-05 18:09:25 +0100 | <melkornms> | tomsmeding: how can I check the implementation for "instance Monoid Any"? |
2021-01-05 18:09:43 +0100 | <merijn> | melkornms: Hackage has a link to the source |
2021-01-05 18:10:08 +0100 | <merijn> | melkornms: https://hackage.haskell.org/package/base-4.14.1.0/docs/Data-Monoid.html#t:Any |
2021-01-05 18:10:23 +0100 | <merijn> | See the "source" link next to "Monoid Any" |
2021-01-05 18:10:55 +0100 | <melkornms> | merijn: beautiful, thanks |
2021-01-05 18:11:27 +0100 | <merijn> | melkornms: I guess you'll also want the Semigroup instance now that "mappend = (Semigroup.<>) |
2021-01-05 18:11:30 +0100 | <merijn> | " |
2021-01-05 18:13:18 +0100 | ADG1089__ | (~aditya@223.236.177.109) (Remote host closed the connection) |
2021-01-05 18:14:33 +0100 | YR9PdkmvPz | (~Thunderbi@p200300ef9713f485f93cae4d2b099a66.dip0.t-ipconnect.de) |
2021-01-05 18:15:37 +0100 | ADG1089__ | (~aditya@223.236.177.109) |
2021-01-05 18:15:51 +0100 | chele | (~chele@ip5b40237d.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
2021-01-05 18:15:58 +0100 | <tomsmeding> | ezzieyguywuf: potentially relevant: https://github.com/haskell/cabal/issues/6515 |
2021-01-05 18:16:21 +0100 | <tomsmeding> | hm, not really |
2021-01-05 18:16:47 +0100 | <kuribas> | is there a idiom for (if test then someFun else id) $ ... |
2021-01-05 18:16:48 +0100 | <kuribas> | ? |
2021-01-05 18:17:12 +0100 | ADG1089__ | (~aditya@223.236.177.109) (Client Quit) |
2021-01-05 18:17:53 +0100 | <merijn> | kuribas: How often do you need/use it? |
2021-01-05 18:18:19 +0100 | <kuribas> | merijn: it occurs sometimes... With my new database library it would be common way to modify a query. |
2021-01-05 18:18:21 +0100 | lidenbrock | (bd21e75d@189.33.231.93) |
2021-01-05 18:18:31 +0100 | <jared-w> | The bool function? It's vaguely controversial because its order is bool else then test |
2021-01-05 18:19:43 +0100 | <kuribas> | :t bool |
2021-01-05 18:19:45 +0100 | <lambdabot> | a -> a -> Bool -> a |
2021-01-05 18:19:52 +0100 | <jared-w> | http://hackage.haskell.org/package/overhang-1.0.0/docs/Overhang.html maybe this concept? |
2021-01-05 18:19:53 +0100 | <ezzieyguywuf> | tomsmeding: it does seem relevant, thanks. |
2021-01-05 18:20:33 +0100 | YR9PdkmvPz | (~Thunderbi@p200300ef9713f485f93cae4d2b099a66.dip0.t-ipconnect.de) (Quit: YR9PdkmvPz) |
2021-01-05 18:20:38 +0100 | <merijn> | kuribas: You could use Endo and my personal favourite unnamed "mif" (i.e. "Monoid a => Bool -> a -> a") but might not be worth the effort |
2021-01-05 18:20:54 +0100 | madjestic | (~Android@86-88-72-244.fixed.kpn.net) |
2021-01-05 18:21:17 +0100 | <kuribas> | I have that one, but called whenMono :-) |
2021-01-05 18:21:20 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) |
2021-01-05 18:22:59 +0100 | Forlorn | (~Forlorn@unaffiliated/forlorn) |
2021-01-05 18:25:02 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-01-05 18:25:32 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-01-05 18:26:24 +0100 | <jared-w> | merijn: read that as milf at first and had to do a second take |
2021-01-05 18:26:46 +0100 | nineonine | (~nineonine@S01061cabc0b095f3.vf.shawcable.net) |
2021-01-05 18:27:38 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Remote host closed the connection) |
2021-01-05 18:27:54 +0100 | lidenbrock | (bd21e75d@189.33.231.93) (Remote host closed the connection) |
2021-01-05 18:27:59 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) |
2021-01-05 18:28:31 +0100 | nineonine | (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection) |
2021-01-05 18:29:22 +0100 | nineonine | (~nineonine@S01061cabc0b095f3.vf.shawcable.net) |
2021-01-05 18:30:35 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 256 seconds) |
2021-01-05 18:32:28 +0100 | v_m_v | (~vm_v@2a02:aa12:3200:6480:14d3:e041:99da:4fe5) (Ping timeout: 260 seconds) |
2021-01-05 18:32:55 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection) |
2021-01-05 18:33:13 +0100 | <tomsmeding> | merijn: that function is only to be used in the event that one is miffed |
2021-01-05 18:33:36 +0100 | nineonine | (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Ping timeout: 240 seconds) |
2021-01-05 18:39:45 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) |
2021-01-05 18:39:53 +0100 | ADG1089__ | (~aditya@223.236.177.109) |
2021-01-05 18:39:56 +0100 | argento | (~argent0@168.227.96.26) |
2021-01-05 18:40:04 +0100 | crblmr | (~carbolyme@matrix.dropacid.net) (Remote host closed the connection) |
2021-01-05 18:42:10 +0100 | christo | (~chris@81.96.113.213) |
2021-01-05 18:42:16 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-01-05 18:42:57 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-01-05 18:43:45 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 240 seconds) |
2021-01-05 18:47:04 +0100 | <kuribas> | Couldn't match expected type ‘Scientific’ with actual type ‘scientific-0.3.6.2:Data.Scientific.Scientific’ |
2021-01-05 18:47:05 +0100 | <kuribas> | what? |
2021-01-05 18:47:24 +0100 | <kuribas> | I did :set -package scientific-0.3.6.2 |
2021-01-05 18:47:34 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) (Remote host closed the connection) |
2021-01-05 18:47:39 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 260 seconds) |
2021-01-05 18:47:42 +0100 | <geekosaur> | wrong version of the package, usually, or same version but different abi hash |
2021-01-05 18:48:25 +0100 | <kuribas> | so if I want to experiment I need to make a .cabal file? |
2021-01-05 18:48:48 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) |
2021-01-05 18:49:02 +0100 | <geekosaur> | probably |
2021-01-05 18:49:04 +0100 | <c_wraith> | well, it's a very easy solution. |
2021-01-05 18:49:11 +0100 | <geekosaur> | at least, that's the safe way\ |
2021-01-05 18:49:41 +0100 | <c_wraith> | you could fix it other ways, but they take a lot more work. (cabal is really good now) |
2021-01-05 18:49:44 +0100 | <merijn> | ugh |
2021-01-05 18:49:59 +0100 | <merijn> | Persistent stopped generating show instances for Unique? >.> |
2021-01-05 18:50:30 +0100 | LKoen | (~LKoen@174.175.9.109.rev.sfr.net) |
2021-01-05 18:50:52 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) |
2021-01-05 18:50:59 +0100 | <c_wraith> | sounds like a victim of the "Show should generate valid code" brigade |
2021-01-05 18:51:44 +0100 | <merijn> | Rats |
2021-01-05 18:51:53 +0100 | <merijn> | I used that to pretty print errors in places |
2021-01-05 18:51:54 +0100 | ADG1089__ | (~aditya@223.236.177.109) (Remote host closed the connection) |
2021-01-05 18:52:16 +0100 | <merijn> | Now I have to figure out how to make it derive those instances again |
2021-01-05 18:52:36 +0100 | <merijn> | c_wraith: But it had derived Show instances anyway... |
2021-01-05 18:52:52 +0100 | <monochrom> | kuribas: https://cabal.readthedocs.io/en/3.4/cabal-commands.html#cabal-v2-run then look for "also supports running script files", this is the least-scaffolding way to use cabal-install |
2021-01-05 18:55:52 +0100 | kyali | (~kyali@37.166.193.18) |
2021-01-05 18:57:07 +0100 | <kuribas> | monochrom: but then how do I use it with flycheck on emacs? |
2021-01-05 18:57:24 +0100 | <monochrom> | I don't know. |
2021-01-05 18:59:17 +0100 | <kuribas> | I don't think there is another way to tell flycheck to use a package than using cabal... |
2021-01-05 18:59:26 +0100 | <kuribas> | with v1 it would just pick up a global package |
2021-01-05 19:00:16 +0100 | danso | (~dan@23-233-111-39.cpe.pppoe.ca) (Quit: WeeChat 3.0) |
2021-01-05 19:00:18 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 19:02:42 +0100 | nineonine | (~nineonine@S01061cabc0b095f3.vf.shawcable.net) |
2021-01-05 19:04:10 +0100 | L29Ah | (~L29Ah@unaffiliated/l29ah) (Read error: Connection reset by peer) |
2021-01-05 19:07:47 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 260 seconds) |
2021-01-05 19:11:20 +0100 | geekosaur | (42d52137@66.213.33.55) (Ping timeout: 245 seconds) |
2021-01-05 19:11:29 +0100 | <merijn> | Thank god for standalone deriving... |
2021-01-05 19:12:01 +0100 | <koz_> | Friends don't let friends drink and derive. |
2021-01-05 19:13:39 +0100 | Ariakenom | (~Ariakenom@2001:9b1:efb:fc00:e95c:b04f:cb75:a96) |
2021-01-05 19:14:09 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving) |
2021-01-05 19:14:19 +0100 | <Uniaika> | thank fuck for deriving strategies |
2021-01-05 19:14:20 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 272 seconds) |
2021-01-05 19:14:57 +0100 | <koz_> | Uniaika: The only correct way to mix alcohol and derivation. |
2021-01-05 19:16:15 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 19:16:34 +0100 | Sheilong | (uid293653@gateway/web/irccloud.com/x-sukkcsrudpgtylmw) |
2021-01-05 19:16:56 +0100 | <kuribas> | glguy: getExpr :: SomeExpr -> Expr a; getExpr (SomeExpr exp) = exp => couldn't match type a1 with a |
2021-01-05 19:17:16 +0100 | <merijn> | kuribas: Yes, you can't do that |
2021-01-05 19:17:26 +0100 | <koz_> | kuribas: You can't leak out of a GADT like that. |
2021-01-05 19:17:28 +0100 | <merijn> | kuribas: You can never "unpack" an existential like that |
2021-01-05 19:17:41 +0100 | <koz_> | The 'internal' type of the expression can't be used outside of the GADT's 'scope'. |
2021-01-05 19:17:48 +0100 | <merijn> | kuribas: You need "SomeExpr -> (forall a . Expr a -> c) -> c" |
2021-01-05 19:17:50 +0100 | <koz_> | You have to either repack it, or turn it into something that isn't that. |
2021-01-05 19:17:59 +0100 | <koz_> | Or do that. |
2021-01-05 19:18:13 +0100 | <kuribas> | so parsing a GADT amounts to CPS styling everything? |
2021-01-05 19:18:18 +0100 | <merijn> | kuribas: Yes |
2021-01-05 19:18:25 +0100 | <merijn> | kuribas: That's what I was saying earlier |
2021-01-05 19:18:27 +0100 | <glguy> | kuribas: or asking for a specific type |
2021-01-05 19:18:39 +0100 | <glguy> | it doesn't make sense to unpack the expression to a type the *caller* gets to pick |
2021-01-05 19:19:12 +0100 | <Uniaika> | koz_: haha |
2021-01-05 19:19:53 +0100 | <glguy> | kuribas: your getExpr means I can do: getExpr :: SomeExpr -> Expr GlguysType |
2021-01-05 19:20:00 +0100 | <glguy> | does your GADT support GlguysType? |
2021-01-05 19:21:22 +0100 | Franciman | (~francesco@host-82-48-174-127.retail.telecomitalia.it) |
2021-01-05 19:21:29 +0100 | <kuribas> | it doesn't :) |
2021-01-05 19:22:45 +0100 | <dminuoso> | falsifian: Looks like quantified constraints to me |
2021-01-05 19:23:26 +0100 | <dminuoso> | https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/quantified_constraints.html |
2021-01-05 19:25:10 +0100 | stree | (~stree@50-108-70-224.adr01.mskg.mi.frontiernet.net) |
2021-01-05 19:25:26 +0100 | L29Ah_ | (~L29Ah@46.138.243.239) |
2021-01-05 19:26:07 +0100 | stree_ | (~stree@50-108-97-132.adr01.mskg.mi.frontiernet.net) (Ping timeout: 268 seconds) |
2021-01-05 19:26:37 +0100 | geekosaur | (42d52137@66.213.33.55) |
2021-01-05 19:30:03 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 272 seconds) |
2021-01-05 19:32:53 +0100 | dhil | (~dhil@78.156.97.38) (Quit: Leaving) |
2021-01-05 19:34:28 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) (Remote host closed the connection) |
2021-01-05 19:36:05 +0100 | eacameron | (uid256985@gateway/web/irccloud.com/x-sggmrofinlhiriab) |
2021-01-05 19:36:57 +0100 | kyali | (~kyali@37.166.193.18) (Ping timeout: 260 seconds) |
2021-01-05 19:37:57 +0100 | Ko60 | (d4ee8a9a@212-238-138-154.ip.xs4all.nl) |
2021-01-05 19:38:01 +0100 | mirrorbird | (~psutcliff@2a00:801:42b:8314:3772:eb7f:91f1:698c) |
2021-01-05 19:40:27 +0100 | Tops2 | (~Tobias@dyndsl-095-033-094-030.ewe-ip-backbone.de) |
2021-01-05 19:41:00 +0100 | Lord_of_Life | (~Lord@unaffiliated/lord-of-life/x-0885362) (Read error: Connection reset by peer) |
2021-01-05 19:41:57 +0100 | Lord_of_Life | (~Lord@unaffiliated/lord-of-life/x-0885362) |
2021-01-05 19:43:39 +0100 | L29Ah_ | (~L29Ah@46.138.243.239) (Quit: Gateway shutdown) |
2021-01-05 19:45:00 +0100 | L29Ah | (~L29Ah@unaffiliated/l29ah) |
2021-01-05 19:45:22 +0100 | jfe | (~user@pool-71-184-149-134.bstnma.fios.verizon.net) |
2021-01-05 19:46:05 +0100 | nineonine | (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection) |
2021-01-05 19:46:43 +0100 | nineonine | (~nineonine@50.216.62.2) |
2021-01-05 19:47:26 +0100 | jamm | (~jamm@unaffiliated/jamm) |
2021-01-05 19:48:49 +0100 | bitmagie | (~Thunderbi@i59F53551.versanet.de) |
2021-01-05 19:51:48 +0100 | jamm | (~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds) |
2021-01-05 19:52:38 +0100 | <falsifian> | Thanks dminuoso. I figured it out a few minutes after asking. |
2021-01-05 19:54:59 +0100 | Lord_of_Life_ | (~Lord@unaffiliated/lord-of-life/x-0885362) |
2021-01-05 19:56:27 +0100 | u0_a298 | (~user@47.206.148.226) |
2021-01-05 19:56:37 +0100 | Lord_of_Life | (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 246 seconds) |
2021-01-05 19:56:37 +0100 | Lord_of_Life_ | Lord_of_Life |
2021-01-05 19:57:59 +0100 | dhouthoo | (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9) |
2021-01-05 20:01:24 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 20:02:42 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-01-05 20:02:46 +0100 | <kuribas> | merijn: so you end up not using GADTs at all? |
2021-01-05 20:02:53 +0100 | nhs_ | (~nhs@c-67-180-177-103.hsd1.ca.comcast.net) (Remote host closed the connection) |
2021-01-05 20:02:56 +0100 | andreas303 | (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection) |
2021-01-05 20:02:58 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-6-52.w83-200.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-01-05 20:03:14 +0100 | <kuribas> | funny because I would say an AST is the best example for GADTs |
2021-01-05 20:03:20 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-6-52.w83-200.abo.wanadoo.fr) |
2021-01-05 20:03:21 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-01-05 20:03:34 +0100 | berberman_ | (~berberman@unaffiliated/berberman) |
2021-01-05 20:03:43 +0100 | kyali | (~kyali@37.166.130.114) |
2021-01-05 20:04:13 +0100 | Ko60 | (d4ee8a9a@212-238-138-154.ip.xs4all.nl) (Remote host closed the connection) |
2021-01-05 20:04:22 +0100 | berberman | (~berberman@unaffiliated/berberman) (Ping timeout: 260 seconds) |
2021-01-05 20:06:09 +0100 | andreas303 | (~andreas@gateway/tor-sasl/andreas303) |
2021-01-05 20:08:45 +0100 | bitmagie | (~Thunderbi@i59F53551.versanet.de) (Ping timeout: 240 seconds) |
2021-01-05 20:08:51 +0100 | <kuribas> | I wonder how aeson-gadt-th solves this... |
2021-01-05 20:09:02 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 264 seconds) |
2021-01-05 20:09:34 +0100 | argento | (~argent0@168.227.96.26) (Ping timeout: 246 seconds) |
2021-01-05 20:09:56 +0100 | kyali | (~kyali@37.166.130.114) (Ping timeout: 240 seconds) |
2021-01-05 20:10:37 +0100 | <tomsmeding> | kuribas: you can work with existentials in two ways: CPS-ing everything, or using datatypes that wrap the existential |
2021-01-05 20:10:48 +0100 | <tomsmeding> | consider: data Some f = forall a. Some (f a) |
2021-01-05 20:11:11 +0100 | <tomsmeding> | then your parser might be: parse :: String -> Maybe (Some Expr) |
2021-01-05 20:11:27 +0100 | <tomsmeding> | or, in CPS style, it might be: parse :: String -> (forall a. Maybe (Expr a) -> r) -> r |
2021-01-05 20:11:44 +0100 | <kuribas> | tomsmeding: that doesn't solve subexpressions |
2021-01-05 20:11:52 +0100 | <kuribas> | say ID :: Expr a -> Expr a |
2021-01-05 20:12:02 +0100 | <kuribas> | how do you parse that? |
2021-01-05 20:12:31 +0100 | <tomsmeding> | is the type of the subexpression unambiguous without looking at the rest? |
2021-01-05 20:12:38 +0100 | <tomsmeding> | if so, dynamic type checking |
2021-01-05 20:12:53 +0100 | <kuribas> | no, I could have Bottom :: Expr a |
2021-01-05 20:12:56 +0100 | <tomsmeding> | if not, no idea, I think you have to make an untyped copy of the Expr type, or do Dynamic hackery |
2021-01-05 20:13:06 +0100 | <tomsmeding> | oh but that particular one works fine |
2021-01-05 20:13:28 +0100 | bitmagie | (~Thunderbi@200116b80605280078abfa9c48cb4ecd.dip.versatel-1u1.de) |
2021-01-05 20:13:29 +0100 | <tomsmeding> | okay, refinement: is the polytype of the subexpression unambiguous without looking at the rest? |
2021-01-05 20:13:47 +0100 | <kuribas> | I don't know what you mean |
2021-01-05 20:14:14 +0100 | <tomsmeding> | your Bottom has type ∀a. a, which is completely valid, unambiguous polymorphic type (polytype) |
2021-01-05 20:14:45 +0100 | coot | (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) |
2021-01-05 20:15:03 +0100 | <tomsmeding> | so your parser that parses Bottom really has type Parser (Expr a), since the 'a' can really be chosen by the caller |
2021-01-05 20:15:21 +0100 | <tomsmeding> | even GlguysType |
2021-01-05 20:15:25 +0100 | notzmv | (~user@unaffiliated/zmv) (Remote host closed the connection) |
2021-01-05 20:16:09 +0100 | <tomsmeding> | hm, though that wouldn't work well with your ID |
2021-01-05 20:16:27 +0100 | <tomsmeding> | personally I would do runtime type checking I think |
2021-01-05 20:17:00 +0100 | <tomsmeding> | add singleton representations of the type to the constructors of your GADT, and return 'Some Expr' from your parsers |
2021-01-05 20:17:12 +0100 | argento | (~argent0@168.227.96.26) |
2021-01-05 20:18:33 +0100 | <tomsmeding> | then if you want to parse something like Greater :: Expr Int -> Expr Int -> Expr Bool, you'd parse two expressions, check using pattern matching that the singletons in those parsed expressions are really the singleton for Int (thereby getting GADT evidence that the existential type of them is Int), and then put them in Greater |
2021-01-05 20:18:53 +0100 | <tomsmeding> | but this is parsing and type-checking in one |
2021-01-05 20:19:12 +0100 | <tomsmeding> | if you want to separate the stages completely, I think you'll have to go with some untyped intermediate expresssion type |
2021-01-05 20:20:32 +0100 | <tomsmeding> | do I make sense? :') |
2021-01-05 20:23:09 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2021-01-05 20:24:39 +0100 | <kuribas> | yeah, but it sounds complicated |
2021-01-05 20:25:08 +0100 | <jfe> | hi all |
2021-01-05 20:25:36 +0100 | <jfe> | i'm working through a haskell tutorial and was just wondering what you all like about haskell (not that it will change my mind about learning it) |
2021-01-05 20:27:10 +0100 | <jfe> | so far i really like the functor concept. i'm not sure if it comes from category theory (never studied it) but it's nice to have a name for something that i've seen or done in other languages but never had a name for. |
2021-01-05 20:27:38 +0100 | <tomsmeding> | kuribas: how are you envisioning doing type checking now then, assuming parsing is somehow magically done? :p |
2021-01-05 20:27:45 +0100 | <tomsmeding> | type checking is complicated |
2021-01-05 20:28:19 +0100 | <__monty__> | jfe: It challenged me to think of problems in a different way than I used to and I liked it : ) |
2021-01-05 20:29:04 +0100 | <tomsmeding> | jfe: same as __monty__, it invites a different way of thinking about problems that is sometimes closer to my mental model of the problem |
2021-01-05 20:29:48 +0100 | <aplainzetakind> | jfe: I like the expressiveness of the type system. Also laziness. |
2021-01-05 20:29:50 +0100 | <tomsmeding> | also jfe: haskell's Functor is different from, and AFAIK unrelated to, category theory's functor concept; and both are unrelated to what C++ calls a functor :) |
2021-01-05 20:31:08 +0100 | <kuribas> | tomsmeding: by singleton, do you mean a dependent type? |
2021-01-05 20:31:12 +0100 | <hyperisco> | f maps objects and fmap maps morphisms, together you have a functor |
2021-01-05 20:31:28 +0100 | <jfe> | i like the laziness too. it's cool how it enables the definition of control flow structures using plain functions. in other languages, you need lambda everywhere to do the late-binding |
2021-01-05 20:31:45 +0100 | <jfe> | to delay evaluation, i mean. |
2021-01-05 20:31:45 +0100 | <tomsmeding> | kuribas: data MyType a where TInt :: MyType Int ; TBool :: MyType Bool ; TPair :: MyType a -> MyType b -> MyType (a, b) |
2021-01-05 20:31:51 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:507b) |
2021-01-05 20:31:51 +0100 | <__monty__> | I learned haskell right after prolog so my initial reaction was "What's so different about this?" But then someone wanted to use it for a course project and I was like "Why not?" And then I just ran with it. |
2021-01-05 20:32:03 +0100 | <kuribas> | tomsmeding: indeed |
2021-01-05 20:32:22 +0100 | <tomsmeding> | kuribas: not sure I'd call that a "dependent type", but as long as we both know what we're talking about :) |
2021-01-05 20:32:52 +0100 | <hyperisco> | Haskell's Functor (in base) just isn't as general as it could be |
2021-01-05 20:32:57 +0100 | <monochrom> | I like the parameteric polymorphism as a very constraining tool when I give students homework. |
2021-01-05 20:33:12 +0100 | darjeeling_ | (~darjeelin@122.245.218.97) (Ping timeout: 256 seconds) |
2021-01-05 20:33:18 +0100 | tomsmeding | . o O ( Theorems for Free! ) |
2021-01-05 20:34:26 +0100 | <monochrom> | For example when the question is "implement BST insert for data BST a = Nil | Node a (BST a) (BST a)", my test cases can just test for BST Integer, but students aren't allowed to write code tailor-made to Integer. |
2021-01-05 20:34:27 +0100 | Lycurgus | (~niemand@cpe-45-46-139-165.buffalo.res.rr.com) |
2021-01-05 20:34:36 +0100 | <monochrom> | In Scheme, the teacher cannot do this. |
2021-01-05 20:34:51 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) |
2021-01-05 20:36:18 +0100 | <Lycurgus> | https://www.youtube.com/watch?v=QpDTcefoWEQ issat general enuf? |
2021-01-05 20:36:19 +0100 | <monochrom> | In Scheme, if the homework question is "write this function: if the parameter is not a list, do X; if the parameter is a list, recurse elementwise, and do Y to combine their answers" |
2021-01-05 20:36:42 +0100 | <monochrom> | and if your examples have integers for the non-list case |
2021-01-05 20:37:32 +0100 | <hyperisco> | jfe, I like how Haskell makes formal reasoning easier while still being a practical programming tool |
2021-01-05 20:37:37 +0100 | <monochrom> | you can bet that students are not going to simply "if list? x then recursive case else base case". They have to overcommit to integers, "if integer? x then base case else recursive case". |
2021-01-05 20:38:00 +0100 | <monochrom> | In Haskell, students don't have that freedom. |
2021-01-05 20:39:18 +0100 | <glguy> | class MonochromsTypes a where homework :: a -> Result :nod: |
2021-01-05 20:39:43 +0100 | <__monty__> | monochrom: Your students sound like spec fuzzers. |
2021-01-05 20:39:44 +0100 | <glguy> | instance MonochromsTypes a => MonochromsTypes [a]; instance MonochromsTypes Integer |
2021-01-05 20:39:57 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) (Ping timeout: 260 seconds) |
2021-01-05 20:40:11 +0100 | <glguy> | *but it worked for the examples* |
2021-01-05 20:41:34 +0100 | <glguy> | __monty__: I'd expect if you give a bunch of people the same spec (any group, any spec) you're likely to get a couple different interpretations, even if they aren't trying to be clever |
2021-01-05 20:41:35 +0100 | jfe | (~user@pool-71-184-149-134.bstnma.fios.verizon.net) (Remote host closed the connection) |
2021-01-05 20:41:48 +0100 | jfe | (~user@pool-71-184-149-134.bstnma.fios.verizon.net) |
2021-01-05 20:43:51 +0100 | <idnar> | monochrom: it's also easier to write correct code since there are fewer incorrect implementations that will compile |
2021-01-05 20:44:12 +0100 | Wamanuz2 | (~wamanuz@78-70-34-81-no84.tbcn.telia.com) (Quit: Konversation terminated!) |
2021-01-05 20:44:46 +0100 | <merijn> | idnar: It's not easier to write correct code, it's just harder to write incorrec tcode ;) |
2021-01-05 20:44:55 +0100 | <merijn> | @quote everything.is.hard |
2021-01-05 20:44:55 +0100 | <lambdabot> | roconnor says: writing incorrect programs in Haskell is hard. but writing correct programs is hard in every langauge. therefore, writing code in Haskell is hard. <EvanR> everything is hard in |
2021-01-05 20:44:55 +0100 | <lambdabot> | haskell ;) <kmc> that's a pretty good summary |
2021-01-05 20:44:59 +0100 | <monochrom> | They are equivalent. |
2021-01-05 20:46:13 +0100 | Wamanuz | (~wamanuz@78-70-34-81-no84.tbcn.telia.com) |
2021-01-05 20:46:35 +0100 | cheater1 | (~user@unaffiliated/cheater) |
2021-01-05 20:47:29 +0100 | glguy | remembers the past when people said quotable things :) |
2021-01-05 20:48:01 +0100 | <merijn> | glguy: Well, be funnier then! :p |
2021-01-05 20:48:05 +0100 | cheater | (~user@unaffiliated/cheater) (Ping timeout: 240 seconds) |
2021-01-05 20:48:10 +0100 | cheater1 | cheater |
2021-01-05 20:48:38 +0100 | <glguy> | merijn: this is as funny as I get; I'm not holding back! |
2021-01-05 20:48:53 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-01-05 20:49:15 +0100 | <hyperisco> | I think finding the correct program you actually want is the hard bit |
2021-01-05 20:49:55 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-01-05 20:50:10 +0100 | darjeeling_ | (~darjeelin@122.245.218.97) |
2021-01-05 20:50:36 +0100 | <hyperisco> | if it was all just retroactively convincing the compiler, there wouldn't be much purpose |
2021-01-05 20:52:01 +0100 | <argento> | but is an incorrect program code? |
2021-01-05 20:52:12 +0100 | <idnar> | I wrote some code in Python where I had two parameters swapped; it didn't fail at runtime because the concrete types still lined up. When I ported it to Haskell, I accidentally introduced the same bug; but this time it was a type error because of polymorphism. |
2021-01-05 20:52:38 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) |
2021-01-05 20:53:15 +0100 | <hyperisco> | argento, that is possible, ideally |
2021-01-05 20:56:58 +0100 | madjestic | (~Android@86-88-72-244.fixed.kpn.net) (Quit: -a- Connection Timed Out) |
2021-01-05 20:57:00 +0100 | <jfe> | i also like the haskell programs can be compiled. |
2021-01-05 20:58:43 +0100 | rayyyy | (~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 240 seconds) |
2021-01-05 20:59:17 +0100 | <jfe> | i'm sort of "over" using scripting languages now, except for cases where they offer the most direct solution. better to use go or haskell and get type safety and faster execution. |
2021-01-05 20:59:46 +0100 | evanjs | (~evanjs@075-129-098-007.res.spectrum.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-01-05 21:00:59 +0100 | madjestic | (~Android@86-88-72-244.fixed.kpn.net) |
2021-01-05 21:02:02 +0100 | evanjs | (~evanjs@075-129-098-007.res.spectrum.com) |
2021-01-05 21:02:55 +0100 | christo | (~chris@81.96.113.213) |
2021-01-05 21:02:57 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-6-52.w83-200.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-01-05 21:03:19 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-6-52.w83-200.abo.wanadoo.fr) |
2021-01-05 21:03:49 +0100 | jneira | (5127ac9c@gateway/web/cgi-irc/kiwiirc.com/ip.81.39.172.156) (Ping timeout: 246 seconds) |
2021-01-05 21:03:59 +0100 | christo | (~chris@81.96.113.213) (Read error: Connection reset by peer) |
2021-01-05 21:04:00 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal) |
2021-01-05 21:04:13 +0100 | aidecoe_ | aidecoe |
2021-01-05 21:04:22 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-01-05 21:04:36 +0100 | christo | (~chris@81.96.113.213) |
2021-01-05 21:05:24 +0100 | terrorjack | (~terrorjac@static.23.111.201.195.clients.your-server.de) (Ping timeout: 268 seconds) |
2021-01-05 21:08:56 +0100 | Wamanuz2 | (~wamanuz@78-70-34-81-no84.tbcn.telia.com) |
2021-01-05 21:09:13 +0100 | christo | (~chris@81.96.113.213) (Ping timeout: 264 seconds) |
2021-01-05 21:10:36 +0100 | Rudd0 | (~Rudd0@185.189.115.108) (Ping timeout: 240 seconds) |
2021-01-05 21:11:37 +0100 | jfe | (~user@pool-71-184-149-134.bstnma.fios.verizon.net) (Quit: ERC (IRC client for Emacs 27.1)) |
2021-01-05 21:11:44 +0100 | Wamanuz | (~wamanuz@78-70-34-81-no84.tbcn.telia.com) (Ping timeout: 256 seconds) |
2021-01-05 21:12:02 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) |
2021-01-05 21:12:35 +0100 | terrorjack | (~terrorjac@static.23.111.201.195.clients.your-server.de) |
2021-01-05 21:16:40 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection) |
2021-01-05 21:17:12 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) (Ping timeout: 272 seconds) |
2021-01-05 21:17:18 +0100 | Tesseraction | (~Tesseract@unaffiliated/tesseraction) (Remote host closed the connection) |
2021-01-05 21:17:49 +0100 | bitmagie | (~Thunderbi@200116b80605280078abfa9c48cb4ecd.dip.versatel-1u1.de) (Quit: bitmagie) |
2021-01-05 21:19:40 +0100 | geekosaur | (42d52137@66.213.33.55) (Ping timeout: 245 seconds) |
2021-01-05 21:20:04 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 256 seconds) |
2021-01-05 21:20:27 +0100 | <koz_> | @pl \acc (x, y) -> HM.insert x y acc |
2021-01-05 21:20:27 +0100 | <lambdabot> | (`ap` snd) . (. fst) . flip (flip . HM.insert) |
2021-01-05 21:20:32 +0100 | <koz_> | .... OK then. |
2021-01-05 21:21:57 +0100 | Lycurgus | (~niemand@cpe-45-46-139-165.buffalo.res.rr.com) ("Deus Ex") |
2021-01-05 21:22:13 +0100 | xff0x | (~fox@2001:1a81:52a7:8200:12ff:8333:fcb3:6365) (Ping timeout: 260 seconds) |
2021-01-05 21:22:14 +0100 | MidAutumnHotaru | (~MidAutumn@154.91.197.93) (Quit: Quit 啾) |
2021-01-05 21:22:51 +0100 | xff0x | (~fox@2001:1a81:52a7:8200:c9d3:4e06:9d3c:df41) |
2021-01-05 21:22:52 +0100 | <sm[m]> | jfe: haskell isn't too bad as a scripting language either |
2021-01-05 21:22:53 +0100 | <monochrom> | HM.fromList |
2021-01-05 21:22:57 +0100 | pthariensflame | (~pthariens@2600:6c52:7280:100:d1bf:7ea:2ee2:f0ba) |
2021-01-05 21:23:09 +0100 | <koz_> | monochrom: ... I feel real smart right now. |
2021-01-05 21:23:15 +0100 | <monochrom> | haha |
2021-01-05 21:23:28 +0100 | <glguy> | flip (uncurry insert) :: Ord k => Map k a -> (k, a) -> Map k a |
2021-01-05 21:23:37 +0100 | <glguy> | I'm not saying do that, but it's not as bad as lambdabot guessed |
2021-01-05 21:23:46 +0100 | taurux | (~taurux@net-93-144-87-101.cust.vodafonedsl.it) |
2021-01-05 21:24:05 +0100 | pthariensflame | (~pthariens@2600:6c52:7280:100:d1bf:7ea:2ee2:f0ba) (Client Quit) |
2021-01-05 21:24:57 +0100 | pavonia | (~user@unaffiliated/siracusa) |
2021-01-05 21:26:02 +0100 | MidAutumnHotaru | (~MidAutumn@154.91.197.93) |
2021-01-05 21:28:19 +0100 | Tesseraction | (~Tesseract@unaffiliated/tesseraction) |
2021-01-05 21:30:31 +0100 | <tomsmeding> | lambdabot isn't perfect? :o |
2021-01-05 21:32:08 +0100 | Franciman | (~francesco@host-82-48-174-127.retail.telecomitalia.it) (Quit: Leaving) |
2021-01-05 21:35:40 +0100 | geekosaur | (42d52137@66.213.33.55) |
2021-01-05 21:36:21 +0100 | electricityZZZZ | (~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net) (Read error: Connection reset by peer) |
2021-01-05 21:39:23 +0100 | MidAutumnHotaru | (~MidAutumn@154.91.197.93) (Quit: Quit 啾) |
2021-01-05 21:39:58 +0100 | MidAutumnHotaru | (~MidAutumn@154.91.197.93) |
2021-01-05 21:40:17 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 21:40:36 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
2021-01-05 21:47:31 +0100 | <kuribas> | tomsmeding, merijn, glguy: I have something that seems to work... https://gist.github.com/kuribas/e97f408cff059896d3df5e9975229294 |
2021-01-05 21:47:48 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-01-05 21:48:45 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) (Ping timeout: 272 seconds) |
2021-01-05 21:48:57 +0100 | dandels | (~dandels@unaffiliated/dandels) |
2021-01-05 21:49:10 +0100 | bitmagie | (~Thunderbi@200116b80605280008c19424c544e900.dip.versatel-1u1.de) |
2021-01-05 21:49:31 +0100 | <kuribas> | no singletons, CPS style, etc ... :-) |
2021-01-05 21:49:57 +0100 | bitmagie | (~Thunderbi@200116b80605280008c19424c544e900.dip.versatel-1u1.de) (Client Quit) |
2021-01-05 21:50:22 +0100 | <kuribas> | it'll default Expr a to Expr Int though... |
2021-01-05 21:50:48 +0100 | <tomsmeding> | and it'll parse ID (ID (ID (ID ... (ID x) ...))) two times |
2021-01-05 21:50:57 +0100 | <tomsmeding> | neat though, what is Parser? |
2021-01-05 21:51:35 +0100 | <kuribas> | tomsmeding: Aeson parser |
2021-01-05 21:51:46 +0100 | Franciman | (~francesco@host-82-48-174-127.retail.telecomitalia.it) |
2021-01-05 21:51:47 +0100 | <tomsmeding> | ah |
2021-01-05 21:52:31 +0100 | <kuribas> | I don't see the problem with ID? |
2021-01-05 21:52:38 +0100 | <tomsmeding> | I think this works in a reasonable manner because you have only two types |
2021-01-05 21:53:01 +0100 | <tomsmeding> | replace x with "kaas" |
2021-01-05 21:53:04 +0100 | <merijn> | Also, you're still implementing a parser per possible type |
2021-01-05 21:53:19 +0100 | <tomsmeding> | the parseExpr @Int will traverse the whole thing, fail, and parseExpr @Text will try again |
2021-01-05 21:53:40 +0100 | <tomsmeding> | my "singletons" idea would allow you to not make a separate parser for each type :p |
2021-01-05 21:53:43 +0100 | <kuribas> | ah right |
2021-01-05 21:53:58 +0100 | <tomsmeding> | but, if it works, it works! :) |
2021-01-05 21:54:09 +0100 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) |
2021-01-05 21:54:48 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Read error: Connection reset by peer) |
2021-01-05 21:55:00 +0100 | <kuribas> | merijn: true, but they don't overlap much |
2021-01-05 21:55:22 +0100 | <kuribas> | merijn: it looks linear, not exponential |
2021-01-05 21:56:48 +0100 | <kuribas> | I think aeson-gadt-th does something like this. |
2021-01-05 21:57:00 +0100 | <kuribas> | however it failed with an error on my Expr type. |
2021-01-05 21:57:32 +0100 | fradet | (~pi@216.252.75.247) |
2021-01-05 21:58:16 +0100 | <kuribas> | merijn: for example parseExp @Int only parses the Plus constructor, then calls the polymorphic one. |
2021-01-05 22:01:01 +0100 | <kuribas> | tomsmeding: for my usecase I don't expect deeply nested polymorphism. |
2021-01-05 22:01:36 +0100 | <tomsmeding> | it _is_ nice and compact |
2021-01-05 22:02:58 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-6-52.w83-200.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-01-05 22:03:21 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-6-52.w83-200.abo.wanadoo.fr) |
2021-01-05 22:03:31 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) |
2021-01-05 22:05:35 +0100 | knupfer | (~Thunderbi@200116b8241228009cdcb3fffe910848.dip.versatel-1u1.de) |
2021-01-05 22:05:37 +0100 | knupfer | (~Thunderbi@200116b8241228009cdcb3fffe910848.dip.versatel-1u1.de) (Client Quit) |
2021-01-05 22:05:59 +0100 | knupfer | (~Thunderbi@200116b8241228003936c8de4da397ac.dip.versatel-1u1.de) |
2021-01-05 22:06:08 +0100 | dycan | (~dycan@101-137-241-111.mobile.dynamic.aptg.com.tw) |
2021-01-05 22:06:15 +0100 | kuribas | (~user@ptr-25vy0i92z2b7cinncha.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3)) |
2021-01-05 22:07:53 +0100 | dycan | (~dycan@101-137-241-111.mobile.dynamic.aptg.com.tw) (Remote host closed the connection) |
2021-01-05 22:12:31 +0100 | _ht | (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
2021-01-05 22:12:47 +0100 | bitmagie | (~Thunderbi@200116b80605280008c19424c544e900.dip.versatel-1u1.de) |
2021-01-05 22:14:04 +0100 | Tops2 | (~Tobias@dyndsl-095-033-094-030.ewe-ip-backbone.de) (Read error: Connection reset by peer) |
2021-01-05 22:14:25 +0100 | Guest73365 | (~textual@mskresolve-a.mskcc.org) (Quit: Textual IRC Client: www.textualapp.com) |
2021-01-05 22:16:06 +0100 | rmk236 | (~lcampos@2a02:908:3616:b100:ad41:f5e6:8b3a:bfc3) (Quit: Leaving.) |
2021-01-05 22:20:05 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) (Remote host closed the connection) |
2021-01-05 22:23:13 +0100 | cgadski | (~cgadski@a95-95-106-208.cpe.netcabo.pt) |
2021-01-05 22:24:29 +0100 | christo | (~chris@81.96.113.213) |
2021-01-05 22:25:41 +0100 | kyali | (~kyali@APN-123-251-234-gprs.simobil.net) |
2021-01-05 22:26:12 +0100 | kritzefitz | (~kritzefit@212.86.56.80) (Remote host closed the connection) |
2021-01-05 22:26:57 +0100 | <dfeuer> | chessai: I'd love your opinion on touch vs touchless in https://gitlab.haskell.org/ghc/ghc/-/merge_requests/4681 |
2021-01-05 22:27:19 +0100 | Vindaloo | (~Vindaloo@70.129.133.37.dynamic.jazztel.es) |
2021-01-05 22:27:22 +0100 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection) |
2021-01-05 22:27:33 +0100 | <Vindaloo> | hi ^^ |
2021-01-05 22:28:00 +0100 | arahael | (~arahael@194-193-194-178.tpgi.com.au) (Ping timeout: 256 seconds) |
2021-01-05 22:30:12 +0100 | Deide | (~Deide@217.155.19.23) (Quit: Seeee yaaaa) |
2021-01-05 22:30:27 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:507b) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
2021-01-05 22:30:39 +0100 | coot | (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2021-01-05 22:33:36 +0100 | jonn | (~sweater@206.81.18.26) |
2021-01-05 22:35:00 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:507b) |
2021-01-05 22:37:17 +0100 | knupfer | (~Thunderbi@200116b8241228003936c8de4da397ac.dip.versatel-1u1.de) (Ping timeout: 268 seconds) |
2021-01-05 22:37:17 +0100 | xff0x | (~fox@2001:1a81:52a7:8200:c9d3:4e06:9d3c:df41) (Ping timeout: 268 seconds) |
2021-01-05 22:38:03 +0100 | xff0x | (~fox@2001:1a81:52a7:8200:f535:aeb9:901:74c1) |
2021-01-05 22:38:19 +0100 | Jesin | (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) |
2021-01-05 22:39:12 +0100 | kyali | (~kyali@APN-123-251-234-gprs.simobil.net) (Remote host closed the connection) |
2021-01-05 22:39:40 +0100 | Cheery_ | (~cheery@7-239-179-185.static.tentacle.fi) (Quit: leaving) |
2021-01-05 22:41:56 +0100 | u0_a298 | (~user@47.206.148.226) (Read error: Connection reset by peer) |
2021-01-05 22:42:15 +0100 | u0_a298 | (~user@47.206.148.226) |
2021-01-05 22:44:35 +0100 | mpereira | (~mpereira@2a02:810d:f40:d96:5cc6:836f:afa7:e837) |
2021-01-05 22:44:35 +0100 | u0_a298 | (~user@47.206.148.226) (Read error: Connection reset by peer) |
2021-01-05 22:45:18 +0100 | u0_a298 | (~user@47.206.148.226) |
2021-01-05 22:49:41 +0100 | jneira | (5127ac9c@gateway/web/cgi-irc/kiwiirc.com/ip.81.39.172.156) |
2021-01-05 22:50:25 +0100 | geekosaur | (42d52137@66.213.33.55) (Remote host closed the connection) |
2021-01-05 22:50:34 +0100 | <dmj`> | An exact implementation of the Haskell2010 BNF in happy results in 30 reduce / reduce conflicts. |
2021-01-05 22:51:05 +0100 | <dmj`> | maybe this explains why GHC's Parser.y is a complete garbage fire |
2021-01-05 22:51:09 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
2021-01-05 22:51:15 +0100 | dandels | (~dandels@unaffiliated/dandels) (Ping timeout: 256 seconds) |
2021-01-05 22:52:20 +0100 | <dfeuer> | dmj`: yeah, the Haskell designers seem to have taken the view that "if we can parse it, we can add it", without enough consideration of "if it's hard to parse, it'll be hard for users to parse, and hard to extend the syntax". |
2021-01-05 22:52:41 +0100 | <merijn> | BNFs aren't full grammars, though |
2021-01-05 22:53:06 +0100 | <merijn> | And I don't know many people who bother to rewrite their BNF with extra complications just to make that work |
2021-01-05 22:53:29 +0100 | <merijn> | Does happy not have a GLR mode? |
2021-01-05 22:53:41 +0100 | <dmj`> | dfeuer: sad, imo the singular reason why we don't see more Haskell dialects is because of the poor specification that is the Haskell language, and the resulting /spaghetti/ code that ensues from it. |
2021-01-05 22:53:48 +0100 | <[exa]> | like, even bison has something like %expect_conflicts 30 |
2021-01-05 22:53:59 +0100 | <dmj`> | [exa]: purescript its like 90 |
2021-01-05 22:54:09 +0100 | <dmj`> | GHC I think is 200 ? |
2021-01-05 22:54:15 +0100 | <[exa]> | wait wait |
2021-01-05 22:54:32 +0100 | <dmj`> | %expect 236 -- shift/reduce conflicts |
2021-01-05 22:54:39 +0100 | <dmj`> | [exa]: yes |
2021-01-05 22:55:14 +0100 | <[exa]> | how does lack of (likely redundant) smiting in parsers correspond to spaghetti code? |
2021-01-05 22:55:25 +0100 | <merijn> | [exa]: It doesn't really |
2021-01-05 22:55:30 +0100 | <dmj`> | GHC attempts to thread the lexer inside of the parser, its super complicated, its usage is /advanced/ to say the least. |
2021-01-05 22:57:00 +0100 | <monochrom> | Isn't Haskll2010 BNF deliberately ambiguous but only because of unknown-at-CFG-time user-defined operator precedence? |
2021-01-05 22:57:48 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:507b) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
2021-01-05 22:57:48 +0100 | <[exa]> | anyway |
2021-01-05 22:58:00 +0100 | <monochrom> | And GHC's could be a mess just because of multitudes of slightly conflicting extensions. |
2021-01-05 22:58:17 +0100 | <[exa]> | given the number of language extensions that might be higher than the number of s/r conflicts, I guess the stats is still very good |
2021-01-05 22:58:21 +0100 | <dmj`> | monochrom: possible, yea. Definitely the latter (conflicting extension hell) |
2021-01-05 22:58:46 +0100 | <[exa]> | dmj`: if in doubt, compare with PHP |
2021-01-05 22:59:25 +0100 | <dmj`> | monochrom: I think GHCs approach for this (at least in the lexer) is to layer it with new "modes", and detect based on a single character which new mode to enter. GHC definitely does this for multiline nested comments. |
2021-01-05 22:59:36 +0100 | <dmj`> | where each mode is a new extension |
2021-01-05 22:59:46 +0100 | <dmj`> | The parser you can barely make heads or tails of whats going on |
2021-01-05 23:00:03 +0100 | stree | (~stree@50-108-70-224.adr01.mskg.mi.frontiernet.net) (Quit: Caught exception) |
2021-01-05 23:00:08 +0100 | roconnor | (~roconnor@host-184-164-7-193.dyn.295.ca) |
2021-01-05 23:00:20 +0100 | stree | (~stree@50-108-70-224.adr01.mskg.mi.frontiernet.net) |
2021-01-05 23:00:43 +0100 | Rudd0 | (~Rudd0@185.189.115.108) |
2021-01-05 23:00:54 +0100 | <dmj`> | [exa]: no excuse in 2020 to have a bad spec, swift unfortunately is like this too, they only cared about the IR and LLVM backend, frontend was an after thought and its not a clean parse either, very bespoke hand rolled C++ disaster |
2021-01-05 23:02:47 +0100 | chenshen | (~chenshen@2620:10d:c090:400::5:507b) |
2021-01-05 23:02:54 +0100 | <dmj`> | there should be child seizure warnings when reading GHC's Parser.y |
2021-01-05 23:02:57 +0100 | LKoen | (~LKoen@174.175.9.109.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”) |
2021-01-05 23:03:41 +0100 | <monochrom> | heh |
2021-01-05 23:03:43 +0100 | mirrorbird | (~psutcliff@2a00:801:42b:8314:3772:eb7f:91f1:698c) (Ping timeout: 260 seconds) |
2021-01-05 23:04:23 +0100 | livvy | (~livvy@gateway/tor-sasl/livvy) (Ping timeout: 240 seconds) |
2021-01-05 23:04:57 +0100 | <monochrom> | True of every piece of software that has accumulated decades of incrementally adding features. |
2021-01-05 23:06:22 +0100 | Tops2 | (~Tobias@dyndsl-095-033-094-030.ewe-ip-backbone.de) |
2021-01-05 23:06:45 +0100 | <[exa]> | dmj`: many people tried to do better and failed, question is why? |
2021-01-05 23:07:17 +0100 | <[exa]> | (including the as-far-as-I-know-unfinished "write you a haskell" effort) |
2021-01-05 23:08:50 +0100 | <dmj`> | [exa]: he quit the effort right at the desugaring part, which would have implied an AST, and a working parser (which is probably the exact reason he gave up on the effort) |
2021-01-05 23:09:28 +0100 | <dmj`> | people hate working on compiler frontends, death by a thousand paper cuts, but if you're going to create a language for other people, frontend is just as important as backend |
2021-01-05 23:10:27 +0100 | <[exa]> | perhaps we don't have a sufficient model for extensible parsers/minilanguages/sublanguages yet? |
2021-01-05 23:10:42 +0100 | <[exa]> | a "monad jump" for parsers I'd say |
2021-01-05 23:11:21 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) (Remote host closed the connection) |
2021-01-05 23:11:24 +0100 | theorbtwo | (~theorb@cpc81822-swin19-2-0-cust3.3-1.cable.virginm.net) |
2021-01-05 23:13:17 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-01-05 23:14:39 +0100 | __monty__ | (~toonn@unaffiliated/toonn) (Quit: leaving) |
2021-01-05 23:15:55 +0100 | <dmj`> | I bet parsing ocaml isn't this bad |
2021-01-05 23:16:56 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-01-05 23:17:01 +0100 | hyperisco | (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 264 seconds) |
2021-01-05 23:17:34 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2021-01-05 23:19:20 +0100 | philopsos | (~caecilius@gateway/tor-sasl/caecilius) |
2021-01-05 23:22:45 +0100 | usr25 | (~usr25@unaffiliated/usr25) |
2021-01-05 23:22:55 +0100 | christo | (~chris@81.96.113.213) (Remote host closed the connection) |
2021-01-05 23:23:56 +0100 | notzmv | (~user@unaffiliated/zmv) |
2021-01-05 23:26:08 +0100 | <[exa]> | dmj`: are you ready to open the ocaml source? |
2021-01-05 23:26:11 +0100 | <[exa]> | :] |
2021-01-05 23:27:56 +0100 | <monochrom> | Is there a seizure warning or something? parent guidance required? |
2021-01-05 23:28:25 +0100 | <monochrom> | There will be m4, IIRC. Probably a different evil in its own right. |
2021-01-05 23:30:16 +0100 | Franciman | (~francesco@host-82-48-174-127.retail.telecomitalia.it) (Quit: Leaving) |
2021-01-05 23:31:42 +0100 | <[exa]> | ok let's find out |
2021-01-05 23:31:58 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.) |
2021-01-05 23:32:49 +0100 | [exa] | clicks ocaml/yacc directory |
2021-01-05 23:32:58 +0100 | <[exa]> | oh noes all files are *.c |
2021-01-05 23:35:54 +0100 | u0_a298 | (~user@47.206.148.226) (Ping timeout: 272 seconds) |
2021-01-05 23:36:29 +0100 | geowiesnot | (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) |
2021-01-05 23:37:00 +0100 | <dmj`> | ocaml has libraries like menhir |
2021-01-05 23:40:09 +0100 | <dmj`> | and the language itself probably isn't as ambiguous |
2021-01-05 23:40:14 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:dfd:1630:16ef:2f33) |
2021-01-05 23:40:18 +0100 | <dmj`> | [exa]: C is just for speed probably |
2021-01-05 23:40:36 +0100 | <dmj`> | monochrom: This Parser is rated TV-MA |
2021-01-05 23:40:57 +0100 | <dmj`> | at least TV-14 |
2021-01-05 23:43:24 +0100 | bitmapper | (uid464869@gateway/web/irccloud.com/x-naqbxzlsevlmbjnm) (Quit: Connection closed for inactivity) |
2021-01-05 23:43:54 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-01-05 23:45:16 +0100 | <jackdk> | Package maintenance question: Does there exist a tool to check whether the upper bounds of a cabal file are excluding newer versions that are on hackage? |
2021-01-05 23:45:43 +0100 | <monochrom> | "This program contains C code. Parental discretion is advised." |
2021-01-05 23:46:10 +0100 | <dmj`> | @package bumper |
2021-01-05 23:46:10 +0100 | <lambdabot> | https://hackage.haskell.org/package/bumper |
2021-01-05 23:46:14 +0100 | <dmj`> | @jackdk ^ ? |
2021-01-05 23:46:15 +0100 | <lambdabot> | Unknown command, try @list |
2021-01-05 23:46:28 +0100 | <monochrom> | "Parents, talk to your children about qbits and C before it's too late." |
2021-01-05 23:46:34 +0100 | <monochrom> | err qubits! |
2021-01-05 23:47:59 +0100 | <monochrom> | jackdk: Also, "cabal oudated" |
2021-01-05 23:48:56 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-01-05 23:49:51 +0100 | <jackdk> | monochrom: thanks, that's exactly what I want. dmj`: thanks for the suggestion though |
2021-01-05 23:50:05 +0100 | zaquest | (~notzaques@5.128.210.178) (Quit: Leaving) |
2021-01-05 23:50:15 +0100 | olban | (~olban@213.152.161.133) (Ping timeout: 256 seconds) |
2021-01-05 23:50:21 +0100 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds) |
2021-01-05 23:50:23 +0100 | mirrorbird | (~psutcliff@m83-187-174-153.cust.tele2.se) |
2021-01-05 23:50:26 +0100 | <dmj`> | never knew about 'cabal outdated' |
2021-01-05 23:50:36 +0100 | <dmj`> | I thought monochrom was literally saying that cabal was outdated |
2021-01-05 23:50:37 +0100 | <sm[m]> | Also, some thing with a RSS feed you can subscribe to, maybe at packdeps.haskellers.com |
2021-01-05 23:51:09 +0100 | <dmj`> | but I knew monochrom wouldn't touch stack with a 10ft pole |
2021-01-05 23:52:21 +0100 | ransom | (~c4264035@8.47.12.52) (Read error: Connection reset by peer) |
2021-01-05 23:52:26 +0100 | <jackdk> | Yeah, we're moving away from stack but the LTS system did give us a nice package update story. `cabal outdated` seems like a better replacement |
2021-01-05 23:53:27 +0100 | <monochrom> | heh |
2021-01-05 23:56:28 +0100 | usr256 | (~usr25@unaffiliated/usr25) |
2021-01-05 23:59:29 +0100 | ezrakilty | (~ezrakilty@75-172-99-84.tukw.qwest.net) |
2021-01-05 23:59:51 +0100 | usr25 | (~usr25@unaffiliated/usr25) (Ping timeout: 272 seconds) |