Logs on 2022-06-19 (liberachat/#haskell)
| 00:01:03 | × | stefan-_ quits (~cri@42dots.de) (Ping timeout: 256 seconds) |
| 00:01:16 | → | causal joins (~user@50.35.83.177) |
| 00:02:45 | × | juri_ quits (~juri@79.140.114.143) (Ping timeout: 256 seconds) |
| 00:04:32 | → | sebastiandb joins (~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) |
| 00:05:07 | → | stefan-_ joins (~cri@42dots.de) |
| 00:06:20 | <sebastiandb> | I've been trying to add a dependency to my Stack project (Data.Text), but although the guide online (https://docs.haskellstack.org/en/v1.5.0/GUIDE/) says to modify the *.cabal file, that's modified every time I run 'stack build'. How do I properly add a dependency in this case, then? Using stack.yaml? |
| 00:07:45 | <dsal> | sebastiandb: Do you have a package.yaml? |
| 00:07:59 | <sebastiandb> | Yes. |
| 00:08:05 | <dsal> | @where paste |
| 00:08:05 | <lambdabot> | Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com |
| 00:08:41 | <dsal> | Things may sometimes get strange if you edit the cabal file *and* use hpack. |
| 00:08:58 | <sebastiandb> | So, that's the file I have to edit, then? I haven't changed it from the default after running stack new [projectname]. |
| 00:09:33 | × | machinedgod quits (~machinedg@66.244.246.252) (Ping timeout: 256 seconds) |
| 00:09:55 | <sebastiandb> | I appreciate the prompt answer, BTW |
| 00:09:59 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 00:11:02 | <dsal> | Yeah, it depends on what your template did and stuff, but there might be dependencies already. You can just add `text` there. |
| 00:11:56 | → | perdent joins (~perdent@124.188.208.163) |
| 00:13:29 | <sebastiandb> | How do I add it? I've added a bullet point listing "text" there, but it doesn't work. I'll just copy/paste my file like you suggested. |
| 00:14:57 | <sebastiandb> | https://paste.tomsmeding.com/e0WauBNe |
| 00:15:12 | × | kannon quits (~NK@c-73-170-170-57.hsd1.ca.comcast.net) (Quit: Lost terminal) |
| 00:15:18 | <sebastiandb> | The module is called fizz buzz, because it's a basic fizz buzz program so I can learn how Stack works. |
| 00:15:48 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 00:15:53 | × | quarkyalice quits (~quarkyali@user/quarkyalice) (Quit: quarkyalice) |
| 00:18:41 | <dsal> | sebastiandb: below the "- base" line, just add a line that says "- text" |
| 00:19:20 | <dsal> | You added it as a dependency to your exe, but perhaps you need it in your lib? Or tests? |
| 00:19:38 | <dsal> | If you do it at the top, it should be available everywhere. |
| 00:20:29 | <sebastiandb> | That makes sense. Thanks for clarifying the distinction. I've added it and it works. Thanks for the help! |
| 00:20:51 | <dsal> | Woo. It'll all downhill from there. |
| 00:25:12 | <sebastiandb> | By compiling using stack build, it installed the executable at [project root]/.stack-work/install/x86_64-linux-tinfo6/8b5312344a6ad4cb9963965e9b12e5e7971068b57c3e3847d5dba4265a79f112/9.0.2/bin. Is there a way to also have a temporary copy at the root of the project directory, so I don't have to refer to this to run the executable? |
| 00:26:56 | × | Axman6 quits (~Axman6@user/axman6) (Ping timeout: 252 seconds) |
| 00:27:36 | <sebastiandb> | dsal: Forgot to mention your name, my bad |
| 00:28:31 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 00:28:31 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 00:28:31 | → | wroathe joins (~wroathe@user/wroathe) |
| 00:28:41 | <dsal> | sebastiandb: stack exec fizzbuzz |
| 00:28:57 | <dsal> | stack install will put it in ~/.local/bin |
| 00:29:05 | <dsal> | stack test will run your unit tests |
| 00:29:16 | <dsal> | `stack test --file-watch` will run the tests on every change. :) |
| 00:29:31 | → | acarrico joins (~acarrico@dhcp-68-142-48-19.greenmountainaccess.net) |
| 00:30:26 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Remote host closed the connection) |
| 00:30:36 | <sebastiandb> | Thanks! That's useful to know. Better than relying on Makefiles to do that, haha. |
| 00:33:10 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
| 00:34:21 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 00:43:59 | × | gurkenglas quits (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 246 seconds) |
| 00:46:23 | × | natechan quits (~nate@98.45.169.16) (Ping timeout: 244 seconds) |
| 00:49:03 | → | natechan joins (~nate@98.45.169.16) |
| 00:54:32 | → | jao joins (~jao@211.68.17.95.dynamic.jazztel.es) |
| 00:59:44 | → | Infinite joins (~Infinite@49.39.121.77) |
| 01:07:19 | → | quarkyalice joins (~quarkyali@user/quarkyalice) |
| 01:12:50 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 01:14:28 | × | quarkyalice quits (~quarkyali@user/quarkyalice) (Quit: quarkyalice) |
| 01:16:34 | × | Typedfern quits (~Typedfern@202.red-83-37-35.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 01:16:36 | → | quarkyalice joins (~quarkyali@user/quarkyalice) |
| 01:16:38 | → | leeb joins (~leeb@KD106155002213.au-net.ne.jp) |
| 01:17:05 | → | Typedfern joins (~Typedfern@202.red-83-37-35.dynamicip.rima-tde.net) |
| 01:18:57 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 01:19:36 | → | Guest48 joins (~Guest48@2601:283:4602:3820:bd97:9401:9c23:cecb) |
| 01:19:53 | × | jao quits (~jao@211.68.17.95.dynamic.jazztel.es) (Remote host closed the connection) |
| 01:22:02 | × | waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 244 seconds) |
| 01:23:29 | → | jao joins (~jao@211.68.17.95.dynamic.jazztel.es) |
| 01:24:09 | × | Guest48 quits (~Guest48@2601:283:4602:3820:bd97:9401:9c23:cecb) (Client Quit) |
| 01:26:37 | × | mixfix41 quits (~sdenynine@user/mixfix41) (Ping timeout: 256 seconds) |
| 01:29:20 | × | quarkyalice quits (~quarkyali@user/quarkyalice) (Quit: quarkyalice) |
| 01:30:50 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) |
| 01:32:59 | → | quarkyalice joins (~quarkyali@user/quarkyalice) |
| 01:35:21 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Ping timeout: 248 seconds) |
| 01:37:44 | × | quarkyalice quits (~quarkyali@user/quarkyalice) (Client Quit) |
| 01:38:30 | × | sebastiandb quits (~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) (Ping timeout: 240 seconds) |
| 01:46:40 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) |
| 01:48:12 | × | Me-me quits (~me-me@tunnel690570-pt.tunnel.tserv12.mia1.ipv6.he.net) (Changing host) |
| 01:48:12 | → | Me-me joins (~me-me@user/me-me) |
| 01:53:46 | × | perdent quits (~perdent@124.188.208.163) (Quit: Client closed) |
| 01:54:08 | × | Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
| 02:00:13 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5) |
| 02:00:42 | → | Axman6 joins (~Axman6@user/axman6) |
| 02:00:52 | → | Axma98290 joins (~Axman6@user/axman6) |
| 02:02:10 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
| 02:05:34 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds) |
| 02:07:30 | × | td_ quits (~td@94.134.91.116) (Ping timeout: 240 seconds) |
| 02:08:11 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 02:09:40 | → | td_ joins (~td@muedsl-82-207-238-050.citykom.de) |
| 02:14:00 | × | Axman6 quits (~Axman6@user/axman6) (Killed (NickServ (GHOST command used by Axma98290))) |
| 02:14:06 | Axma98290 | is now known as Axman6 |
| 02:18:11 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 02:19:19 | → | kannon joins (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
| 02:22:08 | → | nate4 joins (~nate@98.45.169.16) |
| 02:24:03 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 02:24:45 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Client Quit) |
| 02:29:31 | → | liz joins (~liz@cpc84585-newc17-2-0-cust60.16-2.cable.virginm.net) |
| 02:30:28 | × | even4void quits (even4void@came.here.for-some.fun) (Quit: fBNC - https://bnc4free.com) |
| 02:30:39 | × | andreas303 quits (andreas303@ip227.orange.bnc4free.com) (Quit: fBNC - https://bnc4free.com) |
| 02:30:39 | × | xacktm quits (xacktm@user/xacktm) (Quit: fBNC - https://bnc4free.com) |
| 02:31:53 | × | kannon quits (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Quit: leaving) |
| 02:33:12 | → | kannon joins (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
| 02:35:30 | × | kannon quits (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Client Quit) |
| 02:35:41 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:35:41 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 02:35:41 | finn_elija | is now known as FinnElija |
| 02:35:42 | → | kannon joins (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
| 02:37:12 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds) |
| 02:39:28 | × | Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection) |
| 02:48:04 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds) |
| 02:50:29 | → | even4void joins (even4void@came.here.for-some.fun) |
| 02:53:58 | → | andreas303 joins (andreas303@ip227.orange.bnc4free.com) |
| 02:55:16 | → | xacktm joins (xacktm@user/xacktm) |
| 02:56:38 | → | sebastiandb joins (~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) |
| 02:56:55 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 02:56:57 | × | kannon quits (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Quit: leaving) |
| 02:58:40 | × | liz quits (~liz@cpc84585-newc17-2-0-cust60.16-2.cable.virginm.net) (Quit: leaving) |
| 03:04:13 | × | sebastiandb quits (~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) (Quit: Leaving) |
| 03:07:42 | → | nate4 joins (~nate@98.45.169.16) |
| 03:10:18 | → | luke-clifton[m] joins (~luke-clif@2001:470:69fc:105::2:3122) |
| 03:14:51 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 03:16:30 | × | bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 240 seconds) |
| 03:18:50 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 03:18:50 | × | machinedgod quits (~machinedg@66.244.246.252) (Ping timeout: 240 seconds) |
| 03:21:11 | → | img joins (~img@user/img) |
| 03:26:31 | → | kimjetwav joins (~user@2607:fea8:2340:da00:c6e9:fbcb:640d:f8d) |
| 03:39:01 | × | dmj` quits (sid72307@id-72307.hampstead.irccloud.com) () |
| 03:39:41 | → | dmj` joins (sid72307@id-72307.hampstead.irccloud.com) |
| 03:44:53 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 03:47:02 | → | nate4 joins (~nate@98.45.169.16) |
| 03:48:50 | × | zebrag quits (~chris@user/zebrag) (Remote host closed the connection) |
| 03:54:46 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 04:03:37 | × | mvk quits (~mvk@2607:fea8:5ce3:8500::4588) (Ping timeout: 248 seconds) |
| 04:08:12 | → | img joins (~img@user/img) |
| 04:08:21 | × | Volt_ quits (~Volt_@c-68-49-170-216.hsd1.mi.comcast.net) (Quit: ) |
| 04:11:37 | × | jao quits (~jao@211.68.17.95.dynamic.jazztel.es) (Ping timeout: 248 seconds) |
| 04:12:15 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 04:20:35 | → | yauhsien joins (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) |
| 04:24:50 | × | yauhsien quits (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
| 04:45:31 | × | vglfr quits (~vglfr@coupling.penchant.volia.net) (Ping timeout: 256 seconds) |
| 04:55:08 | → | raym joins (~raym@user/raym) |
| 04:55:54 | × | Natch quits (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Remote host closed the connection) |
| 04:56:16 | × | szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 04:57:34 | → | yauhsien joins (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) |
| 05:01:17 | → | Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) |
| 05:01:40 | → | vglfr joins (~vglfr@88.155.15.21) |
| 05:11:11 | → | benin0 joins (~benin@183.82.205.9) |
| 05:11:41 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 05:20:57 | × | yauhsien quits (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Ping timeout: 248 seconds) |
| 05:35:53 | × | leeb quits (~leeb@KD106155002213.au-net.ne.jp) (Ping timeout: 248 seconds) |
| 05:37:56 | → | leeb joins (~leeb@KD106155000043.au-net.ne.jp) |
| 05:45:43 | × | cosimone quits (~user@2001:b07:ae5:db26:57c7:21a5:6e1c:6b81) (Remote host closed the connection) |
| 05:48:41 | × | vglfr quits (~vglfr@88.155.15.21) (Ping timeout: 248 seconds) |
| 05:53:07 | → | cosimone joins (~user@93-44-186-171.ip98.fastwebnet.it) |
| 05:55:43 | <lisbeths> | In theory is it possible to take haskell and port it to a different core than the core of ghc |
| 05:55:51 | → | dsrt^ joins (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) |
| 05:57:04 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 05:59:13 | <dsal> | There used to be more than one haskell implementation, but haskell is pretty much GHC these days. |
| 06:01:24 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 06:02:10 | × | benin0 quits (~benin@183.82.205.9) (Ping timeout: 240 seconds) |
| 06:02:32 | → | benin0 joins (~benin@183.82.204.151) |
| 06:02:35 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 06:11:04 | × | natechan quits (~nate@98.45.169.16) (Ping timeout: 248 seconds) |
| 06:13:12 | × | kitty1 quits (~kitty@096-039-147-043.res.spectrum.com) (Ping timeout: 248 seconds) |
| 06:15:12 | → | frost joins (~frost@user/frost) |
| 06:16:27 | → | kitty1 joins (~kitty@096-039-147-043.res.spectrum.com) |
| 06:21:01 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Remote host closed the connection) |
| 06:22:44 | → | kitty2 joins (~kitty@096-039-147-043.res.spectrum.com) |
| 06:22:49 | × | kitty1 quits (~kitty@096-039-147-043.res.spectrum.com) (Ping timeout: 248 seconds) |
| 06:25:31 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 06:28:10 | → | nate4 joins (~nate@98.45.169.16) |
| 06:32:37 | × | dsrt^ quits (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 256 seconds) |
| 06:34:40 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:35:23 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 246 seconds) |
| 06:44:14 | → | gmg joins (~user@user/gehmehgeh) |
| 06:46:35 | → | coot joins (~coot@213.134.190.95) |
| 06:51:41 | → | soulomoon joins (~soulomoon@103.156.242.114) |
| 06:53:59 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 06:54:10 | → | dsrt^ joins (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) |
| 07:03:13 | → | kuribas joins (~user@ptr-17d51eou2t4ghz8c28s.18120a2.ip6.access.telenet.be) |
| 07:04:47 | × | dsrt^ quits (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 246 seconds) |
| 07:05:39 | × | soulomoon quits (~soulomoon@103.156.242.114) (Quit: Client closed) |
| 07:15:55 | → | yauhsien joins (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) |
| 07:21:25 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) |
| 07:25:45 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Ping timeout: 248 seconds) |
| 07:26:34 | <jchia[m]> | Can the dependency version bounds on the hackage page for a package differ from the cabal file in the downloaded package tarball? |
| 07:27:21 | <sclv> | yes. the raw downloaded tarball doesn’t contain revisions |
| 07:27:43 | <jchia[m]> | I'm seeing different upper bounds for bytestring in the nanovg package. |
| 07:29:03 | <jchia[m]> | sclv: cabal files can have dependency version bounds. Are we talking about the same thing? |
| 07:41:41 | × | benin0 quits (~benin@183.82.204.151) (Quit: Ping timeout (120 seconds)) |
| 07:42:01 | → | benin0 joins (~benin@183.82.205.9) |
| 07:43:15 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
| 07:45:53 | → | quarkyalice joins (~quarkyali@user/quarkyalice) |
| 07:55:51 | × | quarkyalice quits (~quarkyali@user/quarkyalice) (Quit: quarkyalice) |
| 07:57:00 | → | dsrt^ joins (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) |
| 07:58:05 | → | abccgr joins (abccgr@117.194.188.23) |
| 07:59:11 | <kuribas> | https://twitter.com/jdegoes/status/1471147030680645638 |
| 08:00:03 | <kuribas> | I rather disagree, you get a lot of bang for buck, for a relatively little effort (depending on the problem). |
| 08:01:04 | <kuribas> | "The pedagogical and boilerplate overhead of HKD is significant. You can't even compare two 'Person f' for equality unless you know a LOT!" |
| 08:01:22 | <kuribas> | Erm, the hkd approach reduces boilerplate. |
| 08:01:54 | <kuribas> | And I can write "deriving instance Eq (Person Identity)" |
| 08:02:01 | × | leeb quits (~leeb@KD106155000043.au-net.ne.jp) (Ping timeout: 248 seconds) |
| 08:02:38 | → | arthurs115 joins (~arthurs11@78.196.67.166) |
| 08:02:56 | → | benin06 joins (~benin@183.82.204.151) |
| 08:03:32 | <kuribas> | What do you guys think about hkd? |
| 08:04:00 | × | frost quits (~frost@user/frost) (Quit: Client closed) |
| 08:04:59 | × | benin0 quits (~benin@183.82.205.9) (Ping timeout: 256 seconds) |
| 08:04:59 | benin06 | is now known as benin0 |
| 08:09:36 | ← | abccgr parts (abccgr@117.194.188.23) () |
| 08:12:00 | → | Guest64 joins (~Guest64@2401:4900:1cc8:c493:1996:37e1:9729:88af) |
| 08:16:51 | <jackdk> | I think to really get value out of hkd you want a team that's comfortable with rank2 version of traversable |
| 08:17:15 | <jackdk> | Similarly, to not have to write a zillion deriving instances, you have to be able to come up with something like `deriving instance (forall a . Eq a => Eq (f a)) => Eq (Person f)` |
| 08:19:30 | → | vglfr joins (~vglfr@coupling.penchant.volia.net) |
| 08:20:28 | <jackdk> | So I think there's a valley before you get all the payoff, and I think if I was leading an industrial team I'd probably teach higher-payoff things first |
| 08:22:06 | <kuribas> | jackdk: this? https://hackage.haskell.org/package/hkd-0.1/docs/Data-HKD.html#v:gftraverse |
| 08:22:21 | <kuribas> | jackdk: what are higher-payoff things? |
| 08:23:30 | <jackdk> | kuribas: https://hackage.haskell.org/package/hkd-0.1/docs/Data-HKD.html#v:ftraverse is the interface, you've linked the generic-deriving helper |
| 08:23:30 | <kuribas> | also, "deriving instance Eq (Person Identity)", is the same for the alternative (separate data definitions). |
| 08:24:20 | <kuribas> | rank2 traverse is not that scary, is it? |
| 08:24:28 | <jackdk> | For example, if I could choose between a team fluent in servant or a team fluent in hkd, I'd probably pick servant |
| 08:24:50 | <jackdk> | If I could choose between fluency in lens or fluency in hkd, I'd probably pick lens |
| 08:25:26 | <kuribas> | But the useful subset of lens is pretty small. |
| 08:25:40 | <kuribas> | most of the "scary" lens stuff is extra fluff. |
| 08:26:35 | <kuribas> | basic lenses or optics (view, over, toListOff, traverseOf, ...) are not that hard, or are they? |
| 08:26:43 | <jackdk> | "rank2 traverse is not that scary" - not _that_ scary in itself , but you also have to be comfortable with functor composition to understand how it works |
| 08:26:46 | <kuribas> | I mean, ideally you'd know both. |
| 08:26:58 | <kuribas> | hmm, good point. |
| 08:27:48 | <jackdk> | kuribas: ideally you'd know everything, yes, but the question is: how much do you need to teach someone before he or she becomes productive? |
| 08:27:50 | <kuribas> | I think these things are easier explained using examples, than by analysing the type. |
| 08:28:22 | <kuribas> | jackdk: well, I have been "simplifying" my code by removing transformers, and using IO, IORefs and exceptions. |
| 08:28:45 | <jackdk> | I personally would not go that direction but ok |
| 08:28:58 | <kuribas> | But I found the hkd records to be simplifying the code a lot. |
| 08:29:25 | <kuribas> | jackdk: maybe clojure *is* a better language for average developers after all... |
| 08:30:08 | <kuribas> | as, instead of using hkd records, you just use hashmaps everywhere! |
| 08:30:46 | <jackdk> | I think that's swinging too far, the type-checker does _so_ much |
| 08:31:25 | <kuribas> | true, but how can you encode "record variants", in an easy, but type-safe way? |
| 08:32:23 | <jackdk> | newtypes and a few type variables in a template record |
| 08:32:38 | <kuribas> | what's a "template record"? |
| 08:32:56 | <kuribas> | you mean TH to generate records? |
| 08:34:00 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 08:34:19 | <jackdk> | data `Person timestamp = { name :: Text, updatedAt :: timestamp, createdAt :: timestamp }; newtype NewPerson = NewPerson (Person ()); newtype StoredPerson = StoredPerson (Person UTCTime)`. Or perhaps `type` |
| 08:35:10 | × | Guest64 quits (~Guest64@2401:4900:1cc8:c493:1996:37e1:9729:88af) (Quit: Guest64) |
| 08:36:39 | <kuribas> | that's less flexible than a hkd type variable. |
| 08:37:51 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 08:38:16 | → | Tuplanolla joins (~Tuplanoll@91-159-68-181.elisa-laajakaista.fi) |
| 08:42:10 | <jackdk> | yes |
| 08:42:23 | <jackdk> | I was never arguing otherwise |
| 08:43:41 | <kuribas> | then I could argue that the clojure approach is superior, as it gives you more flexibility. |
| 08:44:28 | <kuribas> | For example, I could make a hashmap that describes how to parse each field. |
| 08:44:36 | → | _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl) |
| 08:52:01 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
| 08:54:04 | <kuribas> | jackdk: do you have experience with teaching this? |
| 08:54:10 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 08:56:25 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds) |
| 08:57:58 | <jackdk> | You could, but then I would say that giving up type safety entirely is the greater loss |
| 08:58:23 | <kuribas> | yeah, opinions differ on that part. |
| 08:58:47 | <kuribas> | But personally I prefer type safety over conciseness. |
| 08:58:57 | <jackdk> | I've taught FP for a few years now. |
| 08:59:27 | <jackdk> | All else being equal, I'd like more type safety, but as an extreme example I don't find singletons often justify their weight in Haskell |
| 08:59:44 | <kuribas> | ah, I agree there. |
| 09:00:18 | × | flo[m] quits (~flosansps@2001:470:69fc:105::1:c22d) (Quit: You have been kicked for being idle) |
| 09:00:50 | <kuribas> | Though I am not sure that's because the problem is inherently hard, or the library is overengineered. |
| 09:01:04 | → | flo[m] joins (~flosansps@2001:470:69fc:105::1:c22d) |
| 09:01:31 | <kuribas> | As a workaround, you can usually make a GADT to link type level and value level. |
| 09:01:35 | <tomsmeding> | I suspect the general problem that singletons is trying to solve is inherently hard |
| 09:01:39 | × | arthurs115 quits (~arthurs11@78.196.67.166) (Ping timeout: 256 seconds) |
| 09:01:44 | <tomsmeding> | making your own singletons for particular types is really not so hard |
| 09:01:50 | <tomsmeding> | yeah |
| 09:03:21 | × | Tuplanolla quits (~Tuplanoll@91-159-68-181.elisa-laajakaista.fi) (Ping timeout: 248 seconds) |
| 09:04:04 | → | arthurs115 joins (~arthurs11@78.196.67.166) |
| 09:04:44 | <kuribas> | wouldn't a simple macro to "unlift" data be useful? |
| 09:05:51 | <kuribas> | MyData Foo = MkFoo | MkBar; instance UnLift 'MkFoo Foo; instance UnLift 'MkBar Foo |
| 09:07:33 | → | coco joins (~coco@212-51-146-199.fiber7.init7.net) |
| 09:08:41 | × | dsrt^ quits (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 246 seconds) |
| 09:08:55 | <coco> | Does the cabal executable provide a command or flag to list the specification version that it supports? I can't find any |
| 09:09:22 | ← | flo[m] parts (~flosansps@2001:470:69fc:105::1:c22d) () |
| 09:09:23 | <jchia[m]> | I'm getting an error from allocaBytesAligned. How can I track down the caller that is calling it with invalid alignment? "allocaBytesAligned: invalid argument (alignment (=24) must be a power of two!)" |
| 09:09:31 | <jchia[m]> | IDK which library is doing this |
| 09:13:41 | → | coot joins (~coot@213.134.190.95) |
| 09:13:42 | → | dsrt^ joins (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) |
| 09:14:11 | <turlando> | I'm having an hard time trying to typecheck the following expression. I have to benchmark a function encrypt :: MonadRandom m => Curve -> PublicPoint -> Integer -> m (Maybe (Point, Point)) and I'm using Gauge as bench library. I'm doing something like bench "encrypt" $ whnf (encrypt curve public) clearText, but GHC says «Ambiguous type variable ‘m0’ arising from a use of ‘encrypt’ prevents the constraint ‘(MonadRandom m0)’ from being solved. |
| 09:14:11 | <turlando> | Probable fix: use a type annotation to specify what ‘m0’ should be.» The only issue is that I'm not sure what exactly should I annotate and how |
| 09:19:02 | → | Tuplanolla joins (~Tuplanoll@91-159-69-97.elisa-laajakaista.fi) |
| 09:19:32 | <maerwald[m]> | encrypt @IO |
| 09:23:34 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) |
| 09:25:27 | × | dsrt^ quits (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 256 seconds) |
| 09:27:42 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Ping timeout: 244 seconds) |
| 09:27:59 | → | perdent joins (~perdent@124.188.208.163) |
| 09:31:06 | → | zeenk joins (~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) |
| 09:32:22 | × | arthurs115 quits (~arthurs11@78.196.67.166) (Quit: arthurs115) |
| 09:32:30 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 09:32:36 | → | arthurs115 joins (~arthurs11@78.196.67.166) |
| 09:33:57 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 09:43:59 | → | dsrt^ joins (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) |
| 09:46:19 | × | yauhsien quits (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 09:47:39 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 09:49:17 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 246 seconds) |
| 09:50:41 | × | Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Ping timeout: 246 seconds) |
| 09:51:31 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 09:52:15 | → | yauhsien joins (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) |
| 09:55:10 | × | dsrt^ quits (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 240 seconds) |
| 09:57:13 | × | yauhsien quits (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Ping timeout: 248 seconds) |
| 10:00:53 | → | Flonk joins (~Flonk@134.255.252.174) |
| 10:01:07 | → | Kevin578 joins (~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net) |
| 10:03:06 | → | gurkenglas joins (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) |
| 10:04:59 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 10:06:58 | → | dsrt^ joins (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) |
| 10:07:24 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 10:08:20 | → | yauhsien joins (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) |
| 10:10:36 | → | Ether17 joins (~Ether17@2401:f40:100c:b164:1ac0:4dff:fe69:b9d5) |
| 10:14:54 | juri__ | is now known as juri_ |
| 10:17:04 | × | noteness quits (~noteness@user/noteness) (Ping timeout: 240 seconds) |
| 10:17:33 | → | noteness joins (~noteness@user/noteness) |
| 10:18:01 | × | dsrt^ quits (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 248 seconds) |
| 10:18:03 | × | Ether17 quits (~Ether17@2401:f40:100c:b164:1ac0:4dff:fe69:b9d5) (Quit: Client closed) |
| 10:18:34 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds) |
| 10:18:52 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 10:24:00 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 10:25:04 | × | yauhsien quits (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 10:25:22 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 10:30:19 | → | yauhsien joins (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) |
| 10:35:17 | × | Flonk quits (~Flonk@134.255.252.174) (Read error: Connection reset by peer) |
| 10:35:51 | → | Flonk joins (~Flonk@134.255.252.174) |
| 10:38:01 | × | kuribas quits (~user@ptr-17d51eou2t4ghz8c28s.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
| 10:40:49 | × | coco quits (~coco@212-51-146-199.fiber7.init7.net) (Ping timeout: 256 seconds) |
| 10:53:26 | → | odnes joins (~odnes@5-203-174-51.pat.nym.cosmote.net) |
| 10:54:09 | → | coco joins (~coco@212-51-146-199.fiber7.init7.net) |
| 10:58:59 | → | __monty__ joins (~toonn@user/toonn) |
| 11:02:05 | × | perdent quits (~perdent@124.188.208.163) (Quit: Client closed) |
| 11:02:50 | × | HotblackDesiato quits (~HotblackD@gateway/tor-sasl/hotblackdesiato) (Remote host closed the connection) |
| 11:08:01 | × | raym quits (~raym@user/raym) (Ping timeout: 256 seconds) |
| 11:08:06 | → | HotblackDesiato joins (~HotblackD@gateway/tor-sasl/hotblackdesiato) |
| 11:14:57 | → | nate4 joins (~nate@98.45.169.16) |
| 11:17:51 | → | jao joins (~jao@211.68.17.95.dynamic.jazztel.es) |
| 11:19:21 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 11:20:02 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 11:22:21 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 11:24:14 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 11:24:24 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) |
| 11:25:35 | × | jao quits (~jao@211.68.17.95.dynamic.jazztel.es) (Ping timeout: 256 seconds) |
| 11:30:02 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Ping timeout: 255 seconds) |
| 11:34:08 | → | bontaq joins (~user@ool-45779fe5.dyn.optonline.net) |
| 11:35:05 | → | Topsi joins (~Topsi@dyndsl-095-033-092-199.ewe-ip-backbone.de) |
| 11:49:27 | → | dsrt^ joins (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) |
| 11:53:12 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 11:53:48 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 11:56:48 | → | dimsuz joins (~dimsuz@185.17.131.99) |
| 11:59:04 | <Infinite> | What does simply {} mean? |
| 11:59:04 | <Infinite> | For example in this snippet: |
| 11:59:05 | <Infinite> | instance Diagnostic PsMessage where |
| 11:59:05 | <Infinite> | diagnosticReason = \case |
| 11:59:06 | <Infinite> | PSErrParse{} -> ErrorWithoutFlag |
| 12:00:06 | <hpc> | it's pattern matching on a record and saying it doesn't care about the fields |
| 12:00:11 | × | dsrt^ quits (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 246 seconds) |
| 12:00:22 | <hpc> | it's like saying \case PSErrParse _ _ _ _ _ _ ... -> ErrorWithoutFlag |
| 12:00:32 | <hpc> | however many fields that constructor has |
| 12:01:42 | × | dimsuz quits (~dimsuz@185.17.131.99) (Quit: Client closed) |
| 12:02:07 | → | dsrt^ joins (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) |
| 12:02:26 | → | waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 12:05:17 | × | myme1 quits (~myme@2a01:799:d5a:cd00:f2f:d1a:66d5:4462) (Ping timeout: 244 seconds) |
| 12:06:07 | → | myme1 joins (~myme@2a01:799:d5a:cd00:3de4:f2de:722d:a4ae) |
| 12:14:58 | → | Midjak joins (~Midjak@82.66.147.146) |
| 12:15:06 | × | dsrt^ quits (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 244 seconds) |
| 12:15:32 | → | nate4 joins (~nate@98.45.169.16) |
| 12:16:00 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 12:20:08 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 246 seconds) |
| 12:30:58 | → | Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net) |
| 12:31:49 | <Axman6> | Infinite: see https://stackoverflow.com/questions/38052553/haskell-record-pattern-matching |
| 12:32:30 | → | dsrt^ joins (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) |
| 12:33:46 | × | henninb quits (~henninb@97-116-138-116.mpls.qwest.net) (Ping timeout: 272 seconds) |
| 12:35:27 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 12:36:51 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 12:42:46 | × | benin0 quits (~benin@183.82.204.151) (Quit: The Lounge - https://thelounge.chat) |
| 12:42:58 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 12:48:04 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 12:49:18 | → | odnes_ joins (~odnes@5-203-186-208.pat.nym.cosmote.net) |
| 12:50:33 | × | odnes quits (~odnes@5-203-174-51.pat.nym.cosmote.net) (Ping timeout: 248 seconds) |
| 12:54:05 | tristanC_ | is now known as tristanC |
| 12:55:32 | × | Axman6 quits (~Axman6@user/axman6) (Remote host closed the connection) |
| 12:55:46 | → | Axman6 joins (~Axman6@user/axman6) |
| 13:04:24 | → | Everything joins (~Everythin@37.115.210.35) |
| 13:04:40 | → | uberrice joins (~uberrice@77-58-67-184.dclient.hispeed.ch) |
| 13:06:35 | <uberrice> | Hi there, quick question: I have fun01 :: a->b->a, and now I want to make fun02 :: a -> [b] -> a that takes an array of b and applies fun01 to a one after another. I assume I have to use foldl, but I'm getting a bit confused with syntax |
| 13:07:03 | <tomsmeding> | :t foldl' |
| 13:07:05 | <lambdabot> | Foldable t => (b -> a -> b) -> b -> t a -> b |
| 13:07:29 | <tomsmeding> | (when you think you want foldl, you almost always want foldl'; if you really need foldl you would know) |
| 13:07:36 | × | waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 248 seconds) |
| 13:08:04 | <tomsmeding> | :t foldl' :: (a -> b -> a) -> a -> [b] -> a |
| 13:08:05 | <lambdabot> | (a -> b -> a) -> a -> [b] -> a |
| 13:08:51 | <tomsmeding> | uberrice: I switched 'a' and 'b', because they're just names, and I instantiated 't a' to '[a]'; [] is an instance of Foldable |
| 13:09:29 | <tomsmeding> | does that help? |
| 13:11:38 | <uberrice> | Theoretically, yes. I'm still in the process of learning functional programming so it's somewhat confusing. From looking at the type notation, foldl' needs an (a->b->a) that would be fun01 in my case (?), then a then b to yield a. Can i write this as: fun02 a b = foldl' fun01 a b? ghci somehow says foldl' isn't found, would that be foldl1? |
| 13:12:09 | <geekosaur> | @index foldl' |
| 13:12:09 | <lambdabot> | Data.Foldable, Data.List, GHC.OldList, Data.ByteString.Lazy.Char8, Data.ByteString.Lazy, Data.ByteString.Char8, Data.ByteString, Data.IntMap.Strict, Data.IntMap.Lazy, Data.IntMap, Data.IntSet, Data. |
| 13:12:09 | <lambdabot> | Map.Lazy, Data.Map.Strict, Data.Map, Data.Set |
| 13:12:38 | × | dsrt^ quits (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 246 seconds) |
| 13:12:45 | <tomsmeding> | uberrice: import Data.List |
| 13:12:59 | <tomsmeding> | and yes, that's precisely how you can write it |
| 13:13:10 | <tomsmeding> | you can also abbreviate that as `fun02 = foldl' fun01` |
| 13:13:12 | <tomsmeding> | :) |
| 13:13:34 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 13:15:16 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 13:16:48 | <uberrice> | hmm, yeah, then I understand the concept I guess - my actual implemented solution doesn't work though. Weird |
| 13:17:24 | × | arthurs115 quits (~arthurs11@78.196.67.166) (Quit: arthurs115) |
| 13:17:37 | → | arthurs115 joins (~arthurs11@78.196.67.166) |
| 13:18:22 | <uberrice> | Doesn't work as in seemingly doesn't apply the arguments b to a. I'm sure that's PEBCAK though |
| 13:19:51 | <geekosaur> | @where paste |
| 13:19:52 | <lambdabot> | Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com |
| 13:21:14 | × | Everything quits (~Everythin@37.115.210.35) (Quit: leaving) |
| 13:22:58 | → | raym joins (~raym@user/raym) |
| 13:23:29 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds) |
| 13:26:12 | <uberrice> | yup, PEBCAK, fun02 works correctly, fun01 doesn't. Thanks for the help! |
| 13:26:48 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) |
| 13:28:10 | × | finsternis quits (~X@23.226.237.192) (Ping timeout: 240 seconds) |
| 13:28:51 | → | finsternis joins (~X@23.226.237.192) |
| 13:30:22 | → | acetakwas joins (~acetakwas@f240139.upc-f.chello.nl) |
| 13:31:05 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:7587:2ca7:7a17:98c6) (Ping timeout: 255 seconds) |
| 13:31:28 | → | dsrt^ joins (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) |
| 13:40:14 | → | MajorBiscuit joins (~MajorBisc@86-88-79-148.fixed.kpn.net) |
| 13:41:48 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 13:42:56 | × | xff0x quits (~xff0x@2405:6580:b080:900:1201:81ba:ce69:9f85) (Ping timeout: 244 seconds) |
| 13:47:18 | → | xff0x joins (~xff0x@2405:6580:b080:900:5dff:6ec3:2660:4e43) |
| 13:55:23 | <maerwald[m]> | Is there an alternative for tasty with less dependencies? |
| 13:57:47 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 246 seconds) |
| 14:00:56 | × | dsrt^ quits (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Ping timeout: 246 seconds) |
| 14:00:59 | <maerwald[m]> | Or maybe just use QuickCheck/HUnit directly. But then I still need an alternative for tasty-bench |
| 14:07:20 | <tomsmeding> | use criterion directly? |
| 14:07:23 | <maerwald[m]> | Or... put benchmarks into a separste package. |
| 14:07:48 | <maerwald[m]> | tomsmeding: tasty-bench doesn't use criterion |
| 14:08:05 | <tomsmeding> | ah! |
| 14:08:14 | <maerwald[m]> | It's already supposed to be more lightweight |
| 14:08:32 | <maerwald[m]> | But tasty pulls in shenanigans like optparse-applicative |
| 14:08:33 | <tomsmeding> | The benchmarks are probably already in a different component, which shields the dependencies of you main library from those of the test suite already |
| 14:09:14 | <maerwald[m]> | On windows this caused `cabal build` to fail, even of benchmarks are not selected for build |
| 14:09:30 | <tomsmeding> | if has(windows): buildable = false |
| 14:09:34 | <tomsmeding> | I forget the syntax |
| 14:09:41 | <maerwald[m]> | tomsmeding: that's what I did |
| 14:09:44 | <tomsmeding> | :p |
| 14:09:49 | <tomsmeding> | but yeah not satisfying |
| 14:09:50 | <maerwald[m]> | But it's ugly |
| 14:10:25 | <tomsmeding> | same effect but somewhat less ugly cabal file, perhaps: an automatic cabal flag that disables the benchmark suite |
| 14:10:37 | <tomsmeding> | if you don't want to refactor your test code |
| 14:11:03 | → | dsrt^ joins (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) |
| 14:11:05 | <maerwald[m]> | tomsmeding: except this is a core package and I'm worried about unforeseen side effects lol |
| 14:11:13 | <tomsmeding> | ah :p |
| 14:11:59 | → | pleo joins (~pleo@user/pleo) |
| 14:12:05 | <maerwald[m]> | There should be s way to easily inline library code for such use cases |
| 14:12:45 | <maerwald[m]> | Like, vendor the crsp, but only the codepaths you actually use |
| 14:13:12 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 14:18:49 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 14:20:35 | <hololeap> | is there a quick reference for CPP macros I can use with GHC, for instance, checking the minimum version of a dependency |
| 14:22:23 | <geekosaur[m]> | https://downloads.haskell.org/ghc/9.2.1/docs/html/users_guide/phases.html?highlight=__glasgow_haskell__#options-affecting-the-c-pre-processor |
| 14:23:03 | <geekosaur[m]> | but that's only the ghc ones, cabal defines some more |
| 14:23:11 | <maerwald[m]> | https://guide.aelve.com/haskell/cpp-vww0qd72 |
| 14:23:25 | <maerwald[m]> | MIN_VERSION_bytestring(0,10,4) |
| 14:23:34 | <hololeap> | ok, thanks |
| 14:24:33 | <geekosaur[m]> | https://cabal.readthedocs.io/en/3.6/cabal-package.html#conditional-compilation |
| 14:26:46 | × | cawfee quits (~root@2406:3003:2077:2758::babe) (Quit: WeeChat 3.4.1) |
| 14:26:54 | → | cawfee joins (~root@2406:3003:2077:2758::babe) |
| 14:32:32 | × | dsrt^ quits (~dsrt@50-207-196-30-static.hfc.comcastbusiness.net) (Remote host closed the connection) |
| 14:40:29 | → | odnes__ joins (~odnes@5-203-186-208.pat.nym.cosmote.net) |
| 14:43:05 | × | odnes_ quits (~odnes@5-203-186-208.pat.nym.cosmote.net) (Ping timeout: 248 seconds) |
| 14:44:12 | → | haskell_apprenti joins (~haskell_a@2603-7000-9900-04ba-b9ff-6cab-6298-12c0.res6.spectrum.com) |
| 14:46:20 | <haskell_apprenti> | basic question: If I want to extract a type from parent type (not sure if that's correct terminology) ie |
| 14:46:20 | <haskell_apprenti> | data DatabaseItem = DbString String, and I have x = DatabaseItem "example", and I want to write a function with signature f :: DatabaseItem -> String, how do I do that? |
| 14:46:23 | → | nate4 joins (~nate@98.45.169.16) |
| 14:48:18 | → | gmg joins (~user@user/gehmehgeh) |
| 14:49:22 | <geekosaur> | f (DatabaseItem s) = s |
| 14:49:29 | × | raym quits (~raym@user/raym) (Ping timeout: 248 seconds) |
| 14:49:53 | <haskell_apprenti> | ah ok and that takes advantage of pattern matching |
| 14:49:57 | <haskell_apprenti> | cool thanks |
| 14:50:24 | <haskell_apprenti> | ah follow up |
| 14:50:37 | <haskell_apprenti> | what if this is the datatype |
| 14:50:38 | <haskell_apprenti> | data DatabaseItem = DbString String |
| 14:50:38 | <haskell_apprenti> | | DbNumber Integer |
| 14:50:59 | <haskell_apprenti> | and I want to write a function to extract String in one instance, Integer in another. Do I need to write a separate function for each? |
| 14:51:17 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 14:51:38 | <haskell_apprenti> | what would the type signature of that function be? because we're not sure what the inner type to be extracted will be |
| 14:51:38 | <geekosaur[m]> | ah, sorry, what I sent you before was wrong because I used the type name instead of the data constructor: f (DbString s) = s |
| 14:51:56 | <geekosaur[m]> | and if you want the second one, you can't write it because your function has to have a single type |
| 14:52:53 | <geekosaur[m]> | it can't be Integer in one case and String in another. it could be Either String Integer though |
| 14:53:01 | <geekosaur[m]> | that's not really recommended |
| 14:53:48 | <geekosaur[m]> | on the other hand, writing separate functions, both would be partial (would have to error out if the constructor of the value was wrong) |
| 14:54:37 | <geekosaur[m]> | f (DbString s) = Left s; f (DbNumber n) = Right n |
| 14:54:57 | <geekosaur[m]> | but this is no different from the original, really, so we wouldn't bother |
| 14:56:03 | <haskell_apprenti> | hm not sure I follow - so recommended to write separate functions? I'm a little confused by your usage of Left and Right |
| 14:56:23 | <geekosaur[m]> | @src Either |
| 14:56:23 | <lambdabot> | Source not found. This mission is too important for me to allow you to jeopardize it. |
| 14:56:29 | <geekosaur[m]> | bah |
| 14:56:45 | <geekosaur[m]> | data Either a b = Left a | Right b |
| 14:56:55 | <geekosaur[m]> | so the type of f in that case is Either String Integer |
| 14:57:55 | <haskell_apprenti> | ah I see. but you mentioned that's not really recommended |
| 14:58:15 | <geekosaur[m]> | writing separate functions would otherwise be necessary, but you need to decide what to do if handed the wrong kind of DatabaseItem |
| 14:58:40 | <haskell_apprenti> | aha |
| 14:58:47 | <geekosaur[m]> | not recommended because it's no different from just using the DatabaseItem, which is already effectively Either String Integer |
| 14:59:03 | <geekosaur[m]> | so you gain nothing from that function |
| 14:59:41 | <haskell_apprenti> | right so would also be DatabaseItem return type |
| 15:00:54 | <haskell_apprenti> | thanks for the information |
| 15:01:54 | <geekosaur[m]> | "effectively". DatabaseItem is more specific, but it behaves in all ways like Either String Integer |
| 15:02:09 | × | odnes__ quits (~odnes@5-203-186-208.pat.nym.cosmote.net) (Ping timeout: 276 seconds) |
| 15:04:59 | → | odnes joins (~odnes@5-203-186-208.pat.nym.cosmote.net) |
| 15:05:17 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 15:06:02 | × | haskell_apprenti quits (~haskell_a@2603-7000-9900-04ba-b9ff-6cab-6298-12c0.res6.spectrum.com) (Quit: Client closed) |
| 15:16:08 | × | Infinite quits (~Infinite@49.39.121.77) (Quit: Client closed) |
| 15:17:42 | → | Infinite joins (~Infinite@49.39.121.77) |
| 15:17:51 | → | arjun joins (~arjun@user/arjun) |
| 15:18:07 | → | coot joins (~coot@213.134.190.95) |
| 15:21:10 | × | stefan-_ quits (~cri@42dots.de) (Ping timeout: 240 seconds) |
| 15:25:33 | → | stefan-_ joins (~cri@42dots.de) |
| 15:26:25 | × | arthurs115 quits (~arthurs11@78.196.67.166) (Ping timeout: 256 seconds) |
| 15:28:25 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 15:37:34 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 15:42:36 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 15:46:40 | × | kimjetwav quits (~user@2607:fea8:2340:da00:c6e9:fbcb:640d:f8d) (Remote host closed the connection) |
| 15:46:45 | × | zeenk quits (~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) (Quit: Konversation terminated!) |
| 15:47:34 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 240 seconds) |
| 15:48:04 | × | califax quits (~califax@user/califx) (Ping timeout: 240 seconds) |
| 15:48:29 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 15:48:34 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds) |
| 15:48:51 | → | califax joins (~califax@user/califx) |
| 15:49:25 | → | raym joins (~raym@user/raym) |
| 15:49:34 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds) |
| 15:50:22 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 15:53:13 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 15:55:18 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 15:57:48 | × | Infinite quits (~Infinite@49.39.121.77) (Ping timeout: 252 seconds) |
| 16:01:10 | × | pleo quits (~pleo@user/pleo) (Ping timeout: 240 seconds) |
| 16:01:12 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 16:01:26 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
| 16:05:01 | → | coltenwebb[m] joins (~coltenweb@2001:470:69fc:105::2:17c7) |
| 16:06:33 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 16:06:33 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 16:06:33 | → | wroathe joins (~wroathe@user/wroathe) |
| 16:07:26 | × | MajorBiscuit quits (~MajorBisc@86-88-79-148.fixed.kpn.net) (Quit: WeeChat 3.5) |
| 16:12:54 | → | jao joins (~jao@211.68.17.95.dynamic.jazztel.es) |
| 16:14:06 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 16:16:49 | <hololeap> | any way to write `(m a -> n b) -> ParsecT s u m a -> ParsecT s u n b` |
| 16:17:47 | × | machinedgod quits (~machinedg@66.244.246.252) (Ping timeout: 246 seconds) |
| 16:19:17 | <geekosaur> | iirc that's only possible for a small subset of monads |
| 16:20:17 | <[exa]> | you'd alternatively need something like `polyjoin :: m (n a) -> n a` |
| 16:20:23 | <[exa]> | not sure if that's got a name |
| 16:22:45 | <hololeap> | class Foo t where foo :: (m a -> n b) -> t m a -> t n b |
| 16:23:04 | <hololeap> | not sure what that's called either. isn't there some concept of a "functor over monads" or something |
| 16:24:51 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 16:26:24 | → | sebastiandb joins (~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) |
| 16:27:21 | <hololeap> | foonctor |
| 16:28:10 | × | wroathe quits (~wroathe@user/wroathe) (Quit: leaving) |
| 16:30:02 | <c_wraith> | hololeap: it'd be hoist from mmorph, if Parsec had an instance for MFunctor |
| 16:30:13 | <c_wraith> | well. hoist is a bit more specific than that |
| 16:32:32 | × | yauhsien quits (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 16:33:29 | <uberrice> | Uh, simple question, but gooogle doesn't help. Can anyone link me to a description what Dyadic is in haskell? |
| 16:36:34 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 16:37:19 | <hololeap> | I'll probably just switch from parsec to megaparsec, cuz, yeah, having MonadParsec would be really nice |
| 16:37:28 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 16:37:28 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 16:37:28 | → | wroathe joins (~wroathe@user/wroathe) |
| 16:38:34 | <c_wraith> | uberrice: it doesn't have any special haskell meaning |
| 16:39:28 | geekosaur | wonders if someone was confused by monadic/dyadic as used in apl |
| 16:39:58 | <uberrice> | it just randomly comes up in some (lecture) code like a type, but it doesn't seem to have any meaning, which confuses me |
| 16:40:40 | <geekosaur> | can you show some of that context? |
| 16:41:07 | <geekosaur> | (without context I'd go with the APL meaning: an operator that takes 2 parameters) |
| 16:41:14 | × | coco quits (~coco@212-51-146-199.fiber7.init7.net) (Ping timeout: 246 seconds) |
| 16:41:47 | <EvanR> | i.e. a rank 2 tensor? |
| 16:42:01 | → | alp__ joins (~alp@user/alp) |
| 16:42:19 | <uberrice> | yes, that's probably what it is. The context it always crops up: make your own 'expression handler' in haskell; with data Expr = Const Value | Var String | Dyadic Opr Expr Expr ; |
| 16:42:54 | <c_wraith> | ah. that *is* the definition |
| 16:43:08 | <c_wraith> | and it's definitely coming from someone using apl-like meanings |
| 16:43:19 | → | kimjetwav joins (~user@2607:fea8:2340:da00:a3ad:b89c:e37:6b8f) |
| 16:43:28 | <c_wraith> | in apl, "dyadic" means an operation that takes two arguments |
| 16:43:34 | → | yauhsien joins (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) |
| 16:43:38 | → | sonny joins (~sonny@bras-base-toroon0812w-grc-01-142-114-220-108.dsl.bell.ca) |
| 16:43:48 | <EvanR> | arity 2 |
| 16:43:50 | <uberrice> | https://paste.tomsmeding.com/x4rw4VgT (which then the task is to evaluate) |
| 16:44:07 | <uberrice> | (expressions in) |
| 16:44:44 | <geekosaur> | right, that's basically the APL meaning, an operator with 2 arguments (left and right) |
| 16:44:48 | <c_wraith> | It'd be more common in haskell to name that constructor something like Binary or BinOp |
| 16:44:52 | <uberrice> | so is there any programmatic meaning to putting Dyadic there - if you just erased the Dyadic there, am I correct in my assumption the program wouldn't care? |
| 16:45:01 | <c_wraith> | well, you need a constructor name |
| 16:45:16 | <uberrice> | aaah ok. I just got it. Man. |
| 16:45:29 | <uberrice> | Dyadic, with parameters of Opr, Expr and Expr |
| 16:45:41 | <uberrice> | as like Var, with Parameter String |
| 16:45:45 | <uberrice> | man that took way too long. |
| 16:45:47 | <__monty__> | Dyadic is just math-speak, not APL-speak in particular, https://en.wikipedia.org/wiki/Dyadic |
| 16:46:06 | → | liz joins (~liz@cpc84585-newc17-2-0-cust60.16-2.cable.virginm.net) |
| 16:46:14 | <uberrice> | thanks! |
| 16:46:17 | <__monty__> | uberrice: It's often called `BinOp` for binary operator. Just a name though. |
| 16:47:00 | <uberrice> | i was too caught up in thinking in imperative-like languages so I got confused thinking `Dyadic` was some predefined thing for some reason |
| 16:47:39 | <EvanR> | even the base types like Bool, Int, String etc are defined somewhere |
| 16:48:22 | <EvanR> | so predefined, yes, built into the language no |
| 16:48:25 | × | yauhsien quits (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Ping timeout: 248 seconds) |
| 16:48:25 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 248 seconds) |
| 16:49:59 | → | econo joins (uid147250@user/econo) |
| 16:51:25 | × | Kevin578 quits (~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net) (Ping timeout: 256 seconds) |
| 16:54:04 | <c_wraith> | Bool is a weird case, as guards generate code that depends on Bool. So.. it's sort of part of the language in a way something like String isn't |
| 16:54:36 | <sebastiandb> | This isn't related to what you guys are talking about, but how do you write guards on one line? This doesn't work in ghci: `let { myAbs n | n < 0 = -n; | otherwise = n } in myAbs -1`. It's not that important since you can just use if-else, but it's probably good to know. |
| 16:54:50 | <geekosaur> | just leave out the semicolons |
| 16:55:00 | <monochrom> | String literals generate code that depends on String, too. |
| 16:55:25 | <monochrom> | or depends on [Char]. |
| 16:55:33 | <geekosaur> | > let foo a | a == 5 = 6 | a == 4 = 2 | otherwise = a - 3 in map foo [3..6] |
| 16:55:35 | <lambdabot> | [0,2,6,3] |
| 16:55:49 | → | coco joins (~coco@212-51-146-199.fiber7.init7.net) |
| 16:55:52 | <sebastiandb> | geekosaur: Thanks! Didn't realize it was that simple. |
| 16:59:09 | <sonny> | How does Haskell guarantee safety if a programmer uses bytestring or string? |
| 16:59:41 | <monochrom> | I think it doesn't. |
| 17:00:19 | × | arjun quits (~arjun@user/arjun) (Quit: tip toe-ing my way outta here) |
| 17:00:26 | → | nate4 joins (~nate@98.45.169.16) |
| 17:00:29 | <sonny> | hmm |
| 17:00:33 | <geekosaur> | define safety |
| 17:00:48 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 17:01:33 | <sonny> | A bytestring or string can be used as an escape hatch for other things. I was wondering how to deal with that problem so I figured maybe Haskell solved it already. |
| 17:01:36 | <c_wraith> | you can still write stringly-typed code in Haskell. it's just a lot of work |
| 17:01:57 | <geekosaur> | you can't e.g. abuse badly written printf escapes to smash the stack |
| 17:02:06 | <monochrom> | How do I use string as an escape hatch? |
| 17:02:23 | <geekosaur> | the worst that can happen with Text.Printf is a runtime type assertion |
| 17:02:49 | <sonny> | oh ok |
| 17:04:02 | <geekosaur> | most other such abuses aren't so much about string as about overflowing a stack-allocated variable, but in Haskell they're all on the heap and counted instead of using fixed buffers with NULs at the end |
| 17:04:04 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 17:05:01 | <c_wraith> | think of it this way: strings aren't a security issue in Java. C just makes some special choices to enable problems. |
| 17:05:17 | <EvanR> | think of a string as a type you can send anything, but not necessarily get it back. You lose information |
| 17:05:22 | × | fryguybo1 quits (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) (Quit: leaving) |
| 17:05:26 | <sonny> | I see |
| 17:05:42 | <EvanR> | a parser makes that process well defined |
| 17:05:44 | <monochrom> | Someone needs to start studying and demonstrating heap smashing... |
| 17:06:02 | <c_wraith> | (and then C calls most of them undefined behavior, so you can't even count on understanding the hardware to know what will happen...) |
| 17:06:21 | → | stackdroid18 joins (14094@user/stackdroid) |
| 17:06:21 | <monochrom> | The profit is huge since everyone puts all their eggs on the heap >:) |
| 17:06:51 | <geekosaur> | easy, just make the runtime mis-count the size of something it's allocating… |
| 17:08:11 | → | Infinite joins (~Infinite@49.39.117.70) |
| 17:08:24 | <monochrom> | Is Naur still around? He could give a talk on "the trillion dollar mistake: putting both return addresses and local arrays on the stack" >:) |
| 17:10:30 | <EvanR> | oh they said safety and yall heard security xD |
| 17:10:45 | <monochrom> | No, I heard safety. |
| 17:10:47 | <EvanR> | i.e. protecting it from yourself or from a deviant other |
| 17:10:57 | <geekosaur> | there aren't that many things that qualify for "escape hatch for oother things" |
| 17:11:02 | <monochrom> | But they also said "escape hatch". |
| 17:11:33 | <EvanR> | I interpreted escape hatch like, get out of this language and user another, like, eval or SQL or something xD |
| 17:11:48 | <monochrom> | And I did ask for an example, so it is not like I was assuming anything. |
| 17:11:55 | <geekosaur> | no escape hatch will let you escape C that way |
| 17:12:16 | → | quarkyalice joins (~quarkyali@user/quarkyalice) |
| 17:12:31 | <geekosaur> | (not even to SQL unless you plan to make the C API calls to the SQL-evaluating engine) |
| 17:12:50 | <geekosaur> | (which naturally differ for every database interface) |
| 17:12:55 | <monochrom> | The SQL engine is probably written in C, too. |
| 17:13:13 | <geekosaur> | but is usually in a different process (granting sqlite) |
| 17:13:24 | <EvanR> | printf is an example of another language |
| 17:13:31 | <monochrom> | haha |
| 17:15:20 | <EvanR> | encoding important well typed information into a String, then sending that string to another process, now it has to be verified all over again in the parser. But in haskell you can actually perform this within the same program in a well typed way, so you know the parser will succeed |
| 17:15:50 | <EvanR> | i.e. yeah what c_wraith said about being a lot of work |
| 17:16:26 | → | AlexZenon joins (~alzenon@94.233.240.20) |
| 17:16:45 | → | AlexNoo joins (~AlexNoo@94.233.240.20) |
| 17:17:18 | → | yauhsien joins (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) |
| 17:17:25 | → | fryguybob joins (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) |
| 17:18:52 | × | ddb1 quits (~ddb@2607:5300:203:9993::196) (Remote host closed the connection) |
| 17:19:11 | <EvanR> | (I wonder what use case that would be necessary for, as opposed to just not using a string for that at all) |
| 17:19:17 | → | ddb joins (~ddb@ipv6two.tilde.club) |
| 17:19:57 | → | Alex_test joins (~al_test@94.233.240.20) |
| 17:21:37 | × | quarkyalice quits (~quarkyali@user/quarkyalice) (Quit: quarkyalice) |
| 17:22:11 | → | quarkyalice joins (~quarkyali@user/quarkyalice) |
| 17:37:23 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:40:08 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 17:44:07 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 17:44:22 | → | Kevin578 joins (~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net) |
| 17:53:55 | → | simeon joins (~pi@dslb-088-069-178-224.088.069.pools.vodafone-ip.de) |
| 17:56:09 | × | vglfr quits (~vglfr@coupling.penchant.volia.net) (Ping timeout: 248 seconds) |
| 18:01:07 | × | elkcl quits (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Ping timeout: 256 seconds) |
| 18:01:42 | → | elkcl joins (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) |
| 18:04:31 | × | Kevin578 quits (~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net) (Ping timeout: 256 seconds) |
| 18:05:18 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 18:11:37 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds) |
| 18:12:17 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 18:16:52 | × | sonny quits (~sonny@bras-base-toroon0812w-grc-01-142-114-220-108.dsl.bell.ca) (Quit: Client closed) |
| 18:24:55 | × | quarkyalice quits (~quarkyali@user/quarkyalice) (Quit: quarkyalice) |
| 18:24:56 | × | yauhsien quits (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Read error: Connection reset by peer) |
| 18:25:59 | → | quarkyalice joins (~quarkyali@user/quarkyalice) |
| 18:28:08 | × | Infinite quits (~Infinite@49.39.117.70) (Ping timeout: 252 seconds) |
| 18:34:41 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 18:35:21 | × | machinedgod quits (~machinedg@66.244.246.252) (Ping timeout: 276 seconds) |
| 18:35:45 | → | nate4 joins (~nate@98.45.169.16) |
| 18:38:34 | × | mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in) |
| 18:40:12 | → | mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) |
| 18:40:35 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 246 seconds) |
| 18:50:00 | × | quarkyalice quits (~quarkyali@user/quarkyalice) (Quit: quarkyalice) |
| 18:56:38 | × | dtman34 quits (~dtman34@2601:446:4400:2ad9:dddf:8180:d61b:8240) (Quit: ZNC 1.7.2+deb3 - https://znc.in) |
| 18:56:44 | → | yauhsien joins (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) |
| 18:56:59 | → | dtman34 joins (~dtman34@2601:446:4400:2ad9:1078:b9d6:ea9f:9bfa) |
| 18:57:28 | → | quarkyalice joins (~quarkyali@user/quarkyalice) |
| 19:01:11 | × | yauhsien quits (~yauhsien@61-231-58-85.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 19:04:15 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 19:11:52 | → | shapr joins (~user@2600:4040:2d31:7100:677f:8b5d:34bb:4aea) |
| 19:17:26 | → | zeenk joins (~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) |
| 19:18:12 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 19:18:26 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:20:43 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:21c1:4642:3625:e265) |
| 19:20:46 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 19:22:20 | → | nate4 joins (~nate@98.45.169.16) |
| 19:22:35 | <sebastiandb> | Is there a good way in Haskell to represent a matrix of any size? Something you could use to represent any of Tic-Tac-Toe, Sudoku, or the snake game? Because I feel like just using a type synonym for a list of lists is a little hackish. |
| 19:23:26 | <sebastiandb> | Oh, Data.Matrix. Sorry, I should have looked this up first. |
| 19:23:43 | <[exa]> | there are actual matrix types, also Vector (which you can "fold" yourself), and regular arrays (e.g. repa) |
| 19:23:47 | <geekosaur> | or Data.Vector |
| 19:23:53 | → | coot joins (~coot@213.134.190.95) |
| 19:23:57 | <geekosaur> | ohh sorry, I'm slow |
| 19:24:08 | <[exa]> | tbh Matrix has a lot of math connotation usually so I'd support Data.Vector, yes. |
| 19:24:27 | <geekosaur> | lists are probably the wrong type here, although for tic-tac-toe it would be good enough |
| 19:26:08 | <sebastiandb> | Thanks for the recommendation for Data.Vector, then! |
| 19:26:49 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds) |
| 19:27:19 | <[exa]> | btw is there some kinda True Functional Representation of a zippable matrix? |
| 19:27:36 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 19:29:25 | × | lagash_ quits (lagash@lagash.shelltalk.net) (Remote host closed the connection) |
| 19:29:37 | × | zeenk quits (~zeenk@2a02:2f04:a013:9000:e45d:7fb3:ec71:e806) (Ping timeout: 244 seconds) |
| 19:29:46 | → | zeenk joins (~zeenk@188.26.144.225) |
| 19:30:21 | → | lagash joins (lagash@lagash.shelltalk.net) |
| 19:31:34 | <EvanR> | IntMaps are your friend |
| 19:31:57 | <EvanR> | (though Int isn't "true functional" data) |
| 19:32:47 | <EvanR> | IntMaps were great in the last advent of code which called for a lot of "grids" |
| 19:34:06 | <[exa]> | hmm yeah, and the thing is a tree and you can have some sane spatial ordering of the ints. great |
| 19:34:09 | <[exa]> | thanks! |
| 19:42:33 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 19:49:30 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 19:49:30 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 19:49:30 | → | wroathe joins (~wroathe@user/wroathe) |
| 19:51:57 | → | waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 19:52:21 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:21c1:4642:3625:e265) (Remote host closed the connection) |
| 19:52:30 | × | quarkyalice quits (~quarkyali@user/quarkyalice) (Quit: quarkyalice) |
| 19:52:59 | → | earthy joins (~arthurvl@2a02-a469-f5e2-1-ba27-ebff-fea0-40b0.fixed6.kpn.net) |
| 19:55:27 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 19:56:01 | → | nate4 joins (~nate@98.45.169.16) |
| 20:02:08 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 246 seconds) |
| 20:06:32 | → | Kevin578 joins (~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net) |
| 20:06:41 | → | pleo joins (~pleo@user/pleo) |
| 20:08:57 | × | liz quits (~liz@cpc84585-newc17-2-0-cust60.16-2.cable.virginm.net) (Ping timeout: 248 seconds) |
| 20:09:18 | × | _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection) |
| 20:17:57 | × | ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Ping timeout: 258 seconds) |
| 20:19:11 | → | pretty_dumm_guy joins (~trottel@eduroam-134-96-204-3.uni-saarland.de) |
| 20:19:12 | × | pretty_dumm_guy quits (~trottel@eduroam-134-96-204-3.uni-saarland.de) (Client Quit) |
| 20:19:50 | → | pretty_dumm_guy joins (~trottel@eduroam-134-96-204-3.uni-saarland.de) |
| 20:20:12 | × | pretty_dumm_guy quits (~trottel@eduroam-134-96-204-3.uni-saarland.de) (Client Quit) |
| 20:21:45 | × | Kevin578 quits (~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net) (Ping timeout: 248 seconds) |
| 20:21:50 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 20:23:20 | → | ss- joins (~ss-@187.83.249.216.dyn.smithville.net) |
| 20:34:09 | → | jgeerds joins (~jgeerds@55d45f48.access.ecotel.net) |
| 20:37:18 | → | Kevin578 joins (~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net) |
| 20:38:09 | × | coco quits (~coco@212-51-146-199.fiber7.init7.net) (Quit: WeeChat 3.3) |
| 20:39:11 | → | nate4 joins (~nate@98.45.169.16) |
| 20:43:50 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 240 seconds) |
| 20:52:45 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:21c1:4642:3625:e265) |
| 20:57:29 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:21c1:4642:3625:e265) (Ping timeout: 255 seconds) |
| 21:02:20 | × | sebastiandb quits (~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) (Ping timeout: 246 seconds) |
| 21:08:00 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 21:13:40 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 21:15:47 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 21:19:21 | × | ss- quits (~ss-@187.83.249.216.dyn.smithville.net) (Quit: Client closed) |
| 21:20:35 | × | machinedgod quits (~machinedg@66.244.246.252) (Ping timeout: 256 seconds) |
| 21:22:36 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 21:24:22 | → | acidjnk joins (~acidjnk@dynamic-002-247-244-015.2.247.pool.telefonica.de) |
| 21:25:51 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 21:34:53 | × | dwt_ quits (~dwt_@c-98-198-103-176.hsd1.tx.comcast.net) (Ping timeout: 246 seconds) |
| 21:35:16 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 21:35:53 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 248 seconds) |
| 21:36:41 | → | dwt_ joins (~dwt_@c-98-198-103-176.hsd1.tx.comcast.net) |
| 21:39:18 | × | bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 276 seconds) |
| 21:39:52 | → | pavonia joins (~user@user/siracusa) |
| 21:43:52 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 21:44:32 | × | stackdroid18 quits (14094@user/stackdroid) (Quit: hasta la vista... tchau!) |
| 21:44:57 | × | machinedgod quits (~machinedg@66.244.246.252) (Ping timeout: 256 seconds) |
| 21:46:54 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 21:53:21 | → | sonny joins (~sonny@bras-base-toroon0812w-grc-01-142-114-220-108.dsl.bell.ca) |
| 21:54:43 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 21:59:18 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 22:05:04 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds) |
| 22:05:25 | → | pragma- joins (~chaos@user/pragmatic-chaos) |
| 22:09:19 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:21c1:4642:3625:e265) |
| 22:09:24 | × | zer0bitz quits (~zer0bitz@2001:2003:f748:2000:15be:cdf1:24c0:fca7) (Read error: Connection reset by peer) |
| 22:14:46 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 22:15:50 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Ping timeout: 240 seconds) |
| 22:17:18 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 22:18:57 | × | Kevin578 quits (~Kevin578@pool-173-76-179-30.bstnma.fios.verizon.net) (Ping timeout: 256 seconds) |
| 22:26:30 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 22:28:50 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 22:29:09 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 22:32:46 | → | Furor joins (~colere@about/linux/staff/sauvin) |
| 22:35:05 | × | Colere quits (~colere@about/linux/staff/sauvin) (Ping timeout: 246 seconds) |
| 22:37:31 | × | Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
| 22:38:39 | ← | sonny parts (~sonny@bras-base-toroon0812w-grc-01-142-114-220-108.dsl.bell.ca) () |
| 22:39:07 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:42:04 | → | nate4 joins (~nate@98.45.169.16) |
| 22:45:27 | → | liz joins (~liz@cpc84585-newc17-2-0-cust60.16-2.cable.virginm.net) |
| 22:51:07 | × | alp__ quits (~alp@user/alp) (Ping timeout: 244 seconds) |
| 22:52:06 | × | acidjnk quits (~acidjnk@dynamic-002-247-244-015.2.247.pool.telefonica.de) (Ping timeout: 276 seconds) |
| 22:53:14 | × | adium quits (adium@user/adium) (Quit: Stable ZNC by #bnc4you) |
| 22:53:58 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 22:54:48 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 22:56:53 | → | Feuermagier joins (~Feuermagi@user/feuermagier) |
| 22:56:59 | → | acidjnk joins (~acidjnk@dynamic-002-247-244-015.2.247.pool.telefonica.de) |
| 22:58:31 | × | acidjnk quits (~acidjnk@dynamic-002-247-244-015.2.247.pool.telefonica.de) (Remote host closed the connection) |
| 22:58:54 | → | acidjnk joins (~acidjnk@dynamic-002-247-244-015.2.247.pool.telefonica.de) |
| 23:01:52 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 23:02:27 | → | meinside joins (uid24933@id-24933.helmsley.irccloud.com) |
| 23:03:26 | × | acidjnk quits (~acidjnk@dynamic-002-247-244-015.2.247.pool.telefonica.de) (Ping timeout: 246 seconds) |
| 23:08:00 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 23:08:33 | → | adium joins (adium@user/adium) |
| 23:09:37 | × | tomgus1 quits (~tomgus1@2a02:c7e:4229:d900:dea6:32ff:fe3d:d1a3) (Ping timeout: 260 seconds) |
| 23:10:12 | → | ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) |
| 23:10:35 | → | tomgus1 joins (~tomgus1@2a02:c7e:4229:d900:dea6:32ff:fe3d:d1a3) |
| 23:11:30 | × | gurkenglas quits (~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 240 seconds) |
| 23:15:01 | → | sebastiandb joins (~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) |
| 23:18:20 | → | alp__ joins (~alp@user/alp) |
| 23:19:34 | × | mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Quit: ZNC 1.8.2 - https://znc.in) |
| 23:21:10 | → | mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) |
| 23:21:38 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds) |
| 23:21:44 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 23:22:58 | Lord_of_Life_ | is now known as Lord_of_Life |
| 23:25:32 | → | Pickchea joins (~private@user/pickchea) |
| 23:26:28 | × | YoungFrog quits (~youngfrog@2a02:a03f:c21b:f900:9057:83fb:8876:5481) (Ping timeout: 248 seconds) |
| 23:27:53 | × | m1dnight quits (~christoph@78-22-9-5.access.telenet.be) (Ping timeout: 248 seconds) |
| 23:28:10 | × | jgeerds quits (~jgeerds@55d45f48.access.ecotel.net) (Ping timeout: 240 seconds) |
| 23:32:03 | × | nate4 quits (~nate@98.45.169.16) (Ping timeout: 256 seconds) |
| 23:33:10 | × | causal quits (~user@50.35.83.177) (Quit: WeeChat 3.5) |
| 23:34:10 | × | sebastiandb quits (~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) (Ping timeout: 240 seconds) |
| 23:36:22 | × | Tuplanolla quits (~Tuplanoll@91-159-69-97.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:38:30 | × | odnes quits (~odnes@5-203-186-208.pat.nym.cosmote.net) (Quit: Leaving) |
| 23:38:41 | → | nate4 joins (~nate@98.45.169.16) |
| 23:47:34 | × | ec_ quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds) |
| 23:48:17 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 23:50:35 | → | m1dnight joins (~christoph@78-22-9-5.access.telenet.be) |
| 23:50:36 | × | machinedgod quits (~machinedg@66.244.246.252) (Ping timeout: 276 seconds) |
| 23:51:46 | → | machinedgod joins (~machinedg@66.244.246.252) |
| 23:54:22 | → | sebastiandb joins (~sebastian@pool-108-31-128-56.washdc.fios.verizon.net) |
| 23:55:19 | × | Pickchea quits (~private@user/pickchea) (Quit: Leaving) |
| 23:57:19 | × | HotblackDesiato quits (~HotblackD@gateway/tor-sasl/hotblackdesiato) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 23:57:47 | → | HotblackDesiato joins (~HotblackD@gateway/tor-sasl/hotblackdesiato) |
| 23:58:18 | × | zeenk quits (~zeenk@188.26.144.225) (Quit: Konversation terminated!) |
| 23:59:44 | → | juri__ joins (~juri@79.140.115.76) |
All times are in UTC on 2022-06-19.