2023-01-17 00:00:13 +0100 | chiselfu1e | (~chiselfus@user/chiselfuse) (Remote host closed the connection) |
2023-01-17 00:00:49 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) |
2023-01-17 00:01:19 +0100 | TheCoffeMaker | (~TheCoffeM@user/thecoffemaker) |
2023-01-17 00:06:40 +0100 | <monochrom> | Do you mean like "foo ()" ? |
2023-01-17 00:07:09 +0100 | mud | (~mud@user/kadoban) |
2023-01-17 00:07:24 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2023-01-17 00:11:34 +0100 | <geekosaur> | I think they mean the parse tree is lopsided toward the right |
2023-01-17 00:14:33 +0100 | barzo | (~hd@31.223.41.44) |
2023-01-17 00:16:23 +0100 | p3n_ | (~p3n@217.198.124.246) (Ping timeout: 268 seconds) |
2023-01-17 00:18:48 +0100 | biberu | (~biberu@user/biberu) (Read error: Connection reset by peer) |
2023-01-17 00:23:48 +0100 | <__monty__> | geekosaur: Thank you for trying that out. |
2023-01-17 00:24:21 +0100 | biberu | (~biberu@user/biberu) |
2023-01-17 00:25:24 +0100 | <__monty__> | I'm a bit stumped. Checking with verbosity it seems like the path *is* being added to the call to GHC. So I don't understand why cabal says the module isn't found but doesn't say which directories it's looking in. |
2023-01-17 00:26:23 +0100 | p3n | (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) |
2023-01-17 00:27:19 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
2023-01-17 00:27:20 +0100 | <alexfmpe[m]> | <geekosaur> "I think they mean the parse tree..." <- yeah, something like `(a, (b, (c, (d, e))))` |
2023-01-17 00:27:39 +0100 | <EvanR> | right biased tree? |
2023-01-17 00:28:34 +0100 | AlexNoo_ | (~AlexNoo@94.233.240.156) |
2023-01-17 00:28:43 +0100 | Alex_test | (~al_test@94.233.240.156) (Ping timeout: 252 seconds) |
2023-01-17 00:29:04 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 00:29:24 +0100 | <alexfmpe[m]> | I guess? is that a commonly used term for this? googling that seems to give me some other 'biased' concept |
2023-01-17 00:30:20 +0100 | AlexZenon | (~alzenon@94.233.240.156) (Ping timeout: 272 seconds) |
2023-01-17 00:30:55 +0100 | AlexNoo | (~AlexNoo@94.233.240.156) (Ping timeout: 252 seconds) |
2023-01-17 00:31:18 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2023-01-17 00:33:00 +0100 | <geekosaur> | I get multiple kinds of biasing for "right-biased tree" but the first hit sounds closeish: describes a balanced tree that becomes unbalanced in some direction on insertion of a new node |
2023-01-17 00:33:19 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds) |
2023-01-17 00:34:47 +0100 | <geekosaur> | "right-biased parse tree" is no better, sadly |
2023-01-17 00:36:03 +0100 | <EvanR> | a maximally unbalanced tree xD |
2023-01-17 00:36:13 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) (Remote host closed the connection) |
2023-01-17 00:36:22 +0100 | Alex_test | (~al_test@94.233.240.156) |
2023-01-17 00:36:54 +0100 | mizlan | (~mizlan@2607:f010:2e9:21:a875:7a6d:b1bf:f503) |
2023-01-17 00:36:59 +0100 | AlexZenon | (~alzenon@94.233.240.156) |
2023-01-17 00:40:49 +0100 | <mauke> | a tree cosplaying as a linked list |
2023-01-17 00:41:15 +0100 | mizlan | (~mizlan@2607:f010:2e9:21:a875:7a6d:b1bf:f503) (Ping timeout: 260 seconds) |
2023-01-17 00:43:10 +0100 | jero98772 | (~jero98772@2800:484:1d80:d8ce:3490:26c5:1782:da8c) |
2023-01-17 00:46:06 +0100 | mimmy__ | (~mimmy@86.48.14.201) |
2023-01-17 00:46:47 +0100 | jmorris | (uid537181@id-537181.uxbridge.irccloud.com) |
2023-01-17 00:53:20 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 00:54:03 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) |
2023-01-17 00:54:37 +0100 | abhixec | (~abhinav@c-67-169-139-16.hsd1.ca.comcast.net) |
2023-01-17 00:55:26 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2023-01-17 00:56:24 +0100 | cheater_ | (~Username@user/cheater) |
2023-01-17 00:56:51 +0100 | tremon | (~tremon@83-85-213-108.cable.dynamic.v4.ziggo.nl) (Quit: getting boxed in) |
2023-01-17 00:58:11 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
2023-01-17 00:58:24 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds) |
2023-01-17 00:59:11 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 252 seconds) |
2023-01-17 00:59:20 +0100 | cheater_ | cheater |
2023-01-17 01:01:42 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) |
2023-01-17 01:06:54 +0100 | cheater | (~Username@user/cheater) (Read error: Connection reset by peer) |
2023-01-17 01:06:54 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
2023-01-17 01:07:42 +0100 | cheater | (~Username@user/cheater) |
2023-01-17 01:08:45 +0100 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2023-01-17 01:10:29 +0100 | abhixec | (~abhinav@c-67-169-139-16.hsd1.ca.comcast.net) (Read error: Connection reset by peer) |
2023-01-17 01:13:59 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
2023-01-17 01:13:59 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
2023-01-17 01:13:59 +0100 | wroathe | (~wroathe@user/wroathe) |
2023-01-17 01:17:15 +0100 | cheater_ | (~Username@user/cheater) |
2023-01-17 01:18:44 +0100 | <carter> | tomsmeding: hello! |
2023-01-17 01:19:11 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2023-01-17 01:20:20 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 260 seconds) |
2023-01-17 01:20:23 +0100 | cheater_ | cheater |
2023-01-17 01:20:29 +0100 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2023-01-17 01:22:03 +0100 | Lycurgus | (~juan@user/Lycurgus) |
2023-01-17 01:25:27 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-152.elisa-laajakaista.fi) (Quit: Leaving.) |
2023-01-17 01:32:30 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) (Remote host closed the connection) |
2023-01-17 01:33:05 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) |
2023-01-17 01:36:11 +0100 | dcoutts_ | (~duncan@host86-153-247-191.range86-153.btcentralplus.com) |
2023-01-17 01:36:38 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) |
2023-01-17 01:38:06 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-01-17 01:38:38 +0100 | dcoutts | (~duncan@host213-122-143-153.range213-122.btcentralplus.com) (Ping timeout: 246 seconds) |
2023-01-17 01:40:50 +0100 | opticblast | (~Thunderbi@75.104.70.12) |
2023-01-17 01:43:10 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 272 seconds) |
2023-01-17 01:45:00 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 01:45:48 +0100 | acidjnk | (~acidjnk@p54ad56b7.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
2023-01-17 01:48:28 +0100 | Lycurgus | (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz) |
2023-01-17 01:49:28 +0100 | tdrsrmaeo^ | (~tdrsrmaeo@76.145.190.81) (Remote host closed the connection) |
2023-01-17 01:49:44 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds) |
2023-01-17 01:55:33 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
2023-01-17 01:59:05 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-01-17 02:02:31 +0100 | opticblast | (~Thunderbi@75.104.70.12) (Read error: Connection reset by peer) |
2023-01-17 02:07:59 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 02:10:45 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2023-01-17 02:12:10 +0100 | thebinary | (~thebinary@2400:1a00:b040:c75d:84c9:5a90:c46b:31e6) |
2023-01-17 02:12:29 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds) |
2023-01-17 02:14:09 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
2023-01-17 02:15:37 +0100 | cheater_ | (~Username@user/cheater) |
2023-01-17 02:15:49 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-01-17 02:16:01 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 268 seconds) |
2023-01-17 02:16:03 +0100 | cheater_ | cheater |
2023-01-17 02:16:53 +0100 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2023-01-17 02:18:40 +0100 | xff0x_ | (~xff0x@2405:6580:b080:900:b37:9eab:7cc0:9b97) (Ping timeout: 260 seconds) |
2023-01-17 02:19:39 +0100 | urdh | (~urdh@user/urdh) (Ping timeout: 265 seconds) |
2023-01-17 02:19:51 +0100 | manwithl- | (~manwithlu@194.177.28.128) (Ping timeout: 252 seconds) |
2023-01-17 02:20:04 +0100 | manwithluck | (~manwithlu@194.177.28.128) |
2023-01-17 02:21:34 +0100 | razetime | (~Thunderbi@117.193.0.183) |
2023-01-17 02:22:08 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) |
2023-01-17 02:23:08 +0100 | troydm | (~troydm@user/troydm) |
2023-01-17 02:24:50 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 256 seconds) |
2023-01-17 02:25:06 +0100 | opticblast | (~Thunderbi@75.104.69.33) |
2023-01-17 02:30:44 +0100 | mizlan | (~mizlan@2607:f010:2e9:21:a875:7a6d:b1bf:f503) |
2023-01-17 02:32:10 +0100 | thebinary | (~thebinary@2400:1a00:b040:c75d:84c9:5a90:c46b:31e6) (Read error: Connection reset by peer) |
2023-01-17 02:33:04 +0100 | cheater | (~Username@user/cheater) |
2023-01-17 02:33:49 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) |
2023-01-17 02:35:13 +0100 | mizlan | (~mizlan@2607:f010:2e9:21:a875:7a6d:b1bf:f503) (Ping timeout: 252 seconds) |
2023-01-17 02:36:22 +0100 | cheater_ | (~Username@user/cheater) |
2023-01-17 02:38:14 +0100 | cheater__ | (~Username@user/cheater) |
2023-01-17 02:39:00 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 256 seconds) |
2023-01-17 02:40:33 +0100 | cheater | (~Username@user/cheater) |
2023-01-17 02:41:50 +0100 | cheater_ | (~Username@user/cheater) (Ping timeout: 256 seconds) |
2023-01-17 02:42:37 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 02:42:55 +0100 | cheater__ | (~Username@user/cheater) (Ping timeout: 252 seconds) |
2023-01-17 02:46:56 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 256 seconds) |
2023-01-17 02:54:46 +0100 | Bocaneri | (~sauvin@user/Sauvin) |
2023-01-17 02:55:10 +0100 | Bocaneri | Guest9402 |
2023-01-17 02:56:40 +0100 | Sauvin | (~sauvin@user/Sauvin) (Ping timeout: 252 seconds) |
2023-01-17 03:04:38 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 260 seconds) |
2023-01-17 03:05:29 +0100 | Guest9402 | Sauvin |
2023-01-17 03:07:11 +0100 | crns | (~netcrns@user/crns) (Ping timeout: 260 seconds) |
2023-01-17 03:08:24 +0100 | xff0x_ | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
2023-01-17 03:26:51 +0100 | meinside | (uid24933@id-24933.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
2023-01-17 03:28:54 +0100 | opticblast | (~Thunderbi@75.104.69.33) (Read error: Connection reset by peer) |
2023-01-17 03:30:34 +0100 | talismanick | (~talismani@2601:200:c181:4c40::1be2) |
2023-01-17 03:37:04 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 260 seconds) |
2023-01-17 03:39:46 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 03:41:20 +0100 | thebinary | (~thebinary@2400:1a00:b040:c75d:84c9:5a90:c46b:31e6) |
2023-01-17 03:42:22 +0100 | thebinary | (~thebinary@2400:1a00:b040:c75d:84c9:5a90:c46b:31e6) (Read error: Connection reset by peer) |
2023-01-17 03:45:18 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 256 seconds) |
2023-01-17 03:55:30 +0100 | Xeroine | (~Xeroine@user/xeroine) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in) |
2023-01-17 03:55:49 +0100 | Xeroine | (~Xeroine@user/xeroine) |
2023-01-17 03:57:35 +0100 | elbear | (~lucian@86.127.154.189) |
2023-01-17 03:59:14 +0100 | thebinary | (~thebinary@2400:1a00:b040:c75d:84c9:5a90:c46b:31e6) |
2023-01-17 04:01:10 +0100 | thebinary | (~thebinary@2400:1a00:b040:c75d:84c9:5a90:c46b:31e6) (Read error: Connection reset by peer) |
2023-01-17 04:02:30 +0100 | elbear | (~lucian@86.127.154.189) (Ping timeout: 272 seconds) |
2023-01-17 04:07:24 +0100 | mimmy__ | (~mimmy@86.48.14.201) (Ping timeout: 256 seconds) |
2023-01-17 04:11:20 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 268 seconds) |
2023-01-17 04:13:00 +0100 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection) |
2023-01-17 04:14:57 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) |
2023-01-17 04:14:57 +0100 | wroathe | (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host) |
2023-01-17 04:14:57 +0100 | wroathe | (~wroathe@user/wroathe) |
2023-01-17 04:18:02 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-01-17 04:18:17 +0100 | jero98772 | (~jero98772@2800:484:1d80:d8ce:3490:26c5:1782:da8c) (Remote host closed the connection) |
2023-01-17 04:21:03 +0100 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2023-01-17 04:21:11 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 04:23:13 +0100 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2023-01-17 04:26:40 +0100 | barzo | (~hd@31.223.41.44) (Ping timeout: 256 seconds) |
2023-01-17 04:27:50 +0100 | urdh | (~urdh@user/urdh) |
2023-01-17 04:28:53 +0100 | cheater_ | (~Username@user/cheater) |
2023-01-17 04:29:30 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 256 seconds) |
2023-01-17 04:29:48 +0100 | thebinary | (~thebinary@2400:1a00:b040:c75d:84c9:5a90:c46b:31e6) |
2023-01-17 04:30:28 +0100 | dsrt^ | (~dsrt@76.145.190.81) |
2023-01-17 04:31:08 +0100 | Guest70 | (~Guest@2409:4073:404:ee41:d79b:dd65:22ac:944e) |
2023-01-17 04:31:36 +0100 | thebinary | (~thebinary@2400:1a00:b040:c75d:84c9:5a90:c46b:31e6) (Read error: Connection reset by peer) |
2023-01-17 04:32:05 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 04:32:13 +0100 | sh1n | (~sh1n@181.229.121.151) (Quit: zzz) |
2023-01-17 04:32:14 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 246 seconds) |
2023-01-17 04:32:18 +0100 | cheater_ | cheater |
2023-01-17 04:32:35 +0100 | Guest7086 | (~Guest70@223.227.61.249) |
2023-01-17 04:33:06 +0100 | Guest7086 | (~Guest70@223.227.61.249) (Client Quit) |
2023-01-17 04:33:25 +0100 | Guest7086 | (~Guest7086@2409:4073:404:ee41:5af1:fc83:cbcf:c7ae) |
2023-01-17 04:33:51 +0100 | Guest708688 | (~Guest7086@2409:4073:404:ee41:5af1:fc83:cbcf:c7ae) |
2023-01-17 04:33:57 +0100 | crns | (~netcrns@p4ff5e2bf.dip0.t-ipconnect.de) |
2023-01-17 04:33:57 +0100 | crns | (~netcrns@p4ff5e2bf.dip0.t-ipconnect.de) (Changing host) |
2023-01-17 04:33:57 +0100 | crns | (~netcrns@user/crns) |
2023-01-17 04:34:48 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 272 seconds) |
2023-01-17 04:35:03 +0100 | mimmy__ | (~mimmy@86.48.14.201) |
2023-01-17 04:36:27 +0100 | Guest70868834 | (~Guest7086@2409:4073:404:ee41:5af1:fc83:cbcf:c7ae) |
2023-01-17 04:36:48 +0100 | Guest70 | (~Guest@2409:4073:404:ee41:d79b:dd65:22ac:944e) (Ping timeout: 260 seconds) |
2023-01-17 04:37:41 +0100 | mbuf | (~Shakthi@49.204.120.232) |
2023-01-17 04:37:41 +0100 | Guest7086 | (~Guest7086@2409:4073:404:ee41:5af1:fc83:cbcf:c7ae) (Client Quit) |
2023-01-17 04:38:00 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 256 seconds) |
2023-01-17 04:40:30 +0100 | mimmy__ | (~mimmy@86.48.14.201) (Ping timeout: 272 seconds) |
2023-01-17 04:40:53 +0100 | Guest708688 | (~Guest7086@2409:4073:404:ee41:5af1:fc83:cbcf:c7ae) (Ping timeout: 260 seconds) |
2023-01-17 04:41:17 +0100 | mimmy__ | (~mimmy@86.48.14.198) |
2023-01-17 04:41:31 +0100 | Guest70868834 | (~Guest7086@2409:4073:404:ee41:5af1:fc83:cbcf:c7ae) (Quit: Client closed) |
2023-01-17 04:45:16 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
2023-01-17 04:48:48 +0100 | Guest19 | (~Guest@2409:4073:404:ee41:5af1:fc83:cbcf:c7ae) |
2023-01-17 04:49:58 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 265 seconds) |
2023-01-17 04:51:27 +0100 | mizlan | (~mizlan@2607:f010:2e9:21:a875:7a6d:b1bf:f503) |
2023-01-17 04:52:19 +0100 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2023-01-17 04:52:19 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2023-01-17 04:52:19 +0100 | finn_elija | FinnElija |
2023-01-17 04:55:44 +0100 | mizlan | (~mizlan@2607:f010:2e9:21:a875:7a6d:b1bf:f503) (Ping timeout: 255 seconds) |
2023-01-17 04:55:56 +0100 | razetime1 | (~Thunderbi@117.193.0.183) |
2023-01-17 04:56:15 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 04:56:24 +0100 | td_ | (~td@83.135.9.45) (Ping timeout: 260 seconds) |
2023-01-17 04:57:34 +0100 | razetime | (~Thunderbi@117.193.0.183) (Ping timeout: 260 seconds) |
2023-01-17 04:57:34 +0100 | razetime1 | razetime |
2023-01-17 04:58:05 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds) |
2023-01-17 04:58:15 +0100 | td_ | (~td@83.135.9.4) |
2023-01-17 05:03:37 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-01-17 05:05:43 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-01-17 05:07:06 +0100 | mimmy__ | (~mimmy@86.48.14.198) (Ping timeout: 272 seconds) |
2023-01-17 05:14:43 +0100 | Guest19 | (~Guest@2409:4073:404:ee41:5af1:fc83:cbcf:c7ae) (Ping timeout: 260 seconds) |
2023-01-17 05:23:03 +0100 | johnw | (~johnw@2600:1700:cf00:db0:4874:7c64:7447:a5bd) (Quit: ZNC - http://znc.in) |
2023-01-17 05:33:22 +0100 | mimmy__ | (~mimmy@37.19.212.48) |
2023-01-17 05:36:20 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 255 seconds) |
2023-01-17 05:36:52 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-01-17 05:38:28 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) |
2023-01-17 05:39:24 +0100 | mimmy__ | (~mimmy@37.19.212.48) (Ping timeout: 272 seconds) |
2023-01-17 05:41:50 +0100 | Guest94 | (~Guest@2409:4073:404:ee41:14cb:fb64:542b:938) |
2023-01-17 05:43:10 +0100 | merijn | (~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 256 seconds) |
2023-01-17 05:46:35 +0100 | jmorris | (uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2023-01-17 05:49:35 +0100 | mizlan | (~mizlan@2607:f010:2e9:21:a875:7a6d:b1bf:f503) |
2023-01-17 05:51:28 +0100 | Guest94 | (~Guest@2409:4073:404:ee41:14cb:fb64:542b:938) (Ping timeout: 260 seconds) |
2023-01-17 05:53:41 +0100 | mimmy__ | (~mimmy@86.48.14.202) |
2023-01-17 05:56:12 +0100 | mizlan | (~mizlan@2607:f010:2e9:21:a875:7a6d:b1bf:f503) (Ping timeout: 256 seconds) |
2023-01-17 05:59:15 +0100 | mimmy__ | (~mimmy@86.48.14.202) (Ping timeout: 268 seconds) |
2023-01-17 06:04:16 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Read error: Connection reset by peer) |
2023-01-17 06:08:30 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 06:10:04 +0100 | iteratee | (~kyle@162.218.222.107) |
2023-01-17 06:10:23 +0100 | iteratee | (~kyle@162.218.222.107) (Read error: Connection reset by peer) |
2023-01-17 06:14:20 +0100 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 256 seconds) |
2023-01-17 06:15:04 +0100 | iteratee | (~kyle@162.218.222.107) |
2023-01-17 06:21:41 +0100 | piele | (~piele@tbonesteak.creativeserver.net) (Ping timeout: 255 seconds) |
2023-01-17 06:24:41 +0100 | bilegeek | (~bilegeek@2600:1008:b05a:688d:3f3f:2fd5:db6:a724) |
2023-01-17 06:28:19 +0100 | manwithluck | (~manwithlu@194.177.28.128) (Quit: ZNC 1.8.2 - https://znc.in) |
2023-01-17 06:29:39 +0100 | manwithluck | (~manwithlu@194.177.28.128) |
2023-01-17 06:30:31 +0100 | Sgeo_ | (~Sgeo@user/sgeo) |
2023-01-17 06:30:35 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2023-01-17 06:32:08 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-01-17 06:32:25 +0100 | mizlan | (~mizlan@2607:f010:2e9:21:a875:7a6d:b1bf:f503) |
2023-01-17 06:34:05 +0100 | mimmy__ | (~mimmy@86.48.14.200) |
2023-01-17 06:35:35 +0100 | bilegeek | (~bilegeek@2600:1008:b05a:688d:3f3f:2fd5:db6:a724) (Read error: Connection reset by peer) |
2023-01-17 06:35:48 +0100 | bilegeek | (~bilegeek@2600:1008:b05a:688d:3f3f:2fd5:db6:a724) |
2023-01-17 06:39:17 +0100 | bilegeek | (~bilegeek@2600:1008:b05a:688d:3f3f:2fd5:db6:a724) (Client Quit) |
2023-01-17 06:39:34 +0100 | mimmy__ | (~mimmy@86.48.14.200) (Ping timeout: 272 seconds) |
2023-01-17 06:42:29 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.7.1) |
2023-01-17 06:43:14 +0100 | mizlan | (~mizlan@2607:f010:2e9:21:a875:7a6d:b1bf:f503) (Ping timeout: 256 seconds) |
2023-01-17 06:44:56 +0100 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 256 seconds) |
2023-01-17 06:51:05 +0100 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) |
2023-01-17 06:51:10 +0100 | manwithluck | (~manwithlu@194.177.28.128) (Ping timeout: 256 seconds) |
2023-01-17 06:51:47 +0100 | manwithluck | (~manwithlu@194.177.28.192) |
2023-01-17 06:52:58 +0100 | johnw | (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) |
2023-01-17 06:54:17 +0100 | titibandit1 | (~titibandi@xdsl-81-173-160-143.nc.de) |
2023-01-17 07:00:23 +0100 | caryhartline | (~caryhartl@2600:1700:2d0:8d30:a4a8:25f2:538:8162) (Quit: caryhartline) |
2023-01-17 07:04:36 +0100 | Lycurgus | (~juan@user/Lycurgus) |
2023-01-17 07:15:22 +0100 | elbear | (~lucian@86.127.154.189) |
2023-01-17 07:25:09 +0100 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) (Remote host closed the connection) |
2023-01-17 07:25:48 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2023-01-17 07:32:12 +0100 | use-value1 | (~Thunderbi@2a00:23c6:8a03:2f01:79a6:4fda:28eb:3ce6) |
2023-01-17 07:33:58 +0100 | mizlan | (~mizlan@2607:f010:2a7:1005:a0d7:fa40:4d30:af9f) |
2023-01-17 07:34:51 +0100 | thegeekinside | (~thegeekin@189.217.82.244) (Read error: Connection reset by peer) |
2023-01-17 07:34:59 +0100 | use-value | (~Thunderbi@2a00:23c6:8a03:2f01:69f9:e48c:7103:7ff9) (Ping timeout: 264 seconds) |
2023-01-17 07:34:59 +0100 | use-value1 | use-value |
2023-01-17 07:38:12 +0100 | mizlan | (~mizlan@2607:f010:2a7:1005:a0d7:fa40:4d30:af9f) (Ping timeout: 256 seconds) |
2023-01-17 07:45:47 +0100 | use-value | (~Thunderbi@2a00:23c6:8a03:2f01:79a6:4fda:28eb:3ce6) (Ping timeout: 264 seconds) |
2023-01-17 07:45:57 +0100 | use-value1 | (~Thunderbi@2a00:23c6:8a03:2f01:2428:84d7:7517:8523) |
2023-01-17 07:46:14 +0100 | ub | (~Thunderbi@p200300ecdf264e9fe5173bdb45e8ff9d.dip0.t-ipconnect.de) |
2023-01-17 07:47:40 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds) |
2023-01-17 07:47:58 +0100 | ubert | (~Thunderbi@146.70.116.146) (Ping timeout: 272 seconds) |
2023-01-17 07:47:58 +0100 | ub | ubert |
2023-01-17 07:50:07 +0100 | gmg | (~user@user/gehmehgeh) |
2023-01-17 07:50:28 +0100 | use-value | (~Thunderbi@2a00:23c6:8a03:2f01:2428:84d7:7517:8523) |
2023-01-17 07:50:44 +0100 | use-value1 | (~Thunderbi@2a00:23c6:8a03:2f01:2428:84d7:7517:8523) (Ping timeout: 265 seconds) |
2023-01-17 07:57:28 +0100 | trev | (~trev@user/trev) |
2023-01-17 07:58:37 +0100 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 252 seconds) |
2023-01-17 08:05:44 +0100 | teddyc | (theodorc@cassarossa.samfundet.no) |
2023-01-17 08:06:10 +0100 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
2023-01-17 08:06:32 +0100 | elbear | (~lucian@86.127.154.189) (Ping timeout: 256 seconds) |
2023-01-17 08:10:25 +0100 | <Jadesheit[m]> | hello |
2023-01-17 08:16:00 +0100 | elbear | (~lucian@86.127.154.189) |
2023-01-17 08:22:34 +0100 | waleee | (~waleee@h-176-10-137-138.na.cust.bahnhof.se) |
2023-01-17 08:24:38 +0100 | barzo | (~hd@31.223.41.44) |
2023-01-17 08:28:21 +0100 | use-value1 | (~Thunderbi@2a00:23c6:8a03:2f01:4da1:8bf6:4505:40c5) |
2023-01-17 08:30:51 +0100 | use-value | (~Thunderbi@2a00:23c6:8a03:2f01:2428:84d7:7517:8523) (Ping timeout: 265 seconds) |
2023-01-17 08:30:51 +0100 | use-value1 | use-value |
2023-01-17 08:32:20 +0100 | freeside | (~mengwong@122.11.248.245) |
2023-01-17 08:40:32 +0100 | shriekingnoise | (~shrieking@186.137.175.87) (Ping timeout: 256 seconds) |
2023-01-17 08:44:14 +0100 | mmhat | (~mmh@p200300f1c7123c66ee086bfffe095315.dip0.t-ipconnect.de) |
2023-01-17 08:44:19 +0100 | mmhat | (~mmh@p200300f1c7123c66ee086bfffe095315.dip0.t-ipconnect.de) (Client Quit) |
2023-01-17 08:45:41 +0100 | elbear | (~lucian@86.127.154.189) (Ping timeout: 246 seconds) |
2023-01-17 08:45:45 +0100 | troydm | (~troydm@user/troydm) (Ping timeout: 268 seconds) |
2023-01-17 08:47:38 +0100 | manwithluck | (~manwithlu@194.177.28.192) (Read error: Connection reset by peer) |
2023-01-17 08:49:05 +0100 | manwithluck | (~manwithlu@194.177.28.192) |
2023-01-17 08:53:34 +0100 | manwithluck | (~manwithlu@194.177.28.192) (Ping timeout: 256 seconds) |
2023-01-17 08:54:02 +0100 | use-value1 | (~Thunderbi@2a00:23c6:8a03:2f01:8cfd:de7b:dc70:e461) |
2023-01-17 08:54:11 +0100 | use-value | (~Thunderbi@2a00:23c6:8a03:2f01:4da1:8bf6:4505:40c5) (Ping timeout: 264 seconds) |
2023-01-17 08:54:12 +0100 | use-value1 | use-value |
2023-01-17 08:57:41 +0100 | manwithluck | (~manwithlu@194.177.28.157) |
2023-01-17 08:58:59 +0100 | use-value1 | (~Thunderbi@2a00:23c6:8a03:2f01:b860:794c:a959:bba8) |
2023-01-17 09:00:56 +0100 | use-value | (~Thunderbi@2a00:23c6:8a03:2f01:8cfd:de7b:dc70:e461) (Ping timeout: 256 seconds) |
2023-01-17 09:00:56 +0100 | use-value1 | use-value |
2023-01-17 09:01:27 +0100 | use-value1 | (~Thunderbi@2a00:23c6:8a03:2f01:c1c3:e297:674c:356d) |
2023-01-17 09:01:56 +0100 | elbear | (~lucian@86.127.154.189) |
2023-01-17 09:05:12 +0100 | opticblast | (~Thunderbi@secure-165.caltech.edu) |
2023-01-17 09:05:43 +0100 | use-value | (~Thunderbi@2a00:23c6:8a03:2f01:b860:794c:a959:bba8) (Ping timeout: 260 seconds) |
2023-01-17 09:05:44 +0100 | use-value1 | use-value |
2023-01-17 09:06:25 +0100 | mimmy__ | (~mimmy@86.48.14.202) |
2023-01-17 09:07:00 +0100 | manwithluck | (~manwithlu@194.177.28.157) (Ping timeout: 260 seconds) |
2023-01-17 09:07:08 +0100 | manwithl- | (~manwithlu@194.177.28.192) |
2023-01-17 09:08:43 +0100 | CiaoSen | (~Jura@p200300c9570452002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2023-01-17 09:11:34 +0100 | mimmy__ | (~mimmy@86.48.14.202) (Ping timeout: 272 seconds) |
2023-01-17 09:14:51 +0100 | Lycurgus | (~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz) |
2023-01-17 09:21:46 +0100 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2023-01-17 09:24:53 +0100 | fserucas | (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) |
2023-01-17 09:28:58 +0100 | mimmy__ | (~mimmy@86.48.14.202) |
2023-01-17 09:31:51 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2023-01-17 09:33:35 +0100 | mimmy__ | (~mimmy@86.48.14.202) (Ping timeout: 246 seconds) |
2023-01-17 09:34:33 +0100 | <dminuoso> | anatta: What part about QQs do you not like |
2023-01-17 09:34:35 +0100 | Sgeo_ | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2023-01-17 09:34:56 +0100 | CiaoSen | (~Jura@p200300c9570452002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
2023-01-17 09:35:19 +0100 | panovia | (~user@user/siracusa) |
2023-01-17 09:37:08 +0100 | elbear | (~lucian@86.127.154.189) (Quit: leaving) |
2023-01-17 09:39:47 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) (Ping timeout: 255 seconds) |
2023-01-17 09:40:54 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) |
2023-01-17 09:41:09 +0100 | acidjnk | (~acidjnk@p200300d6e715c4203c380012bc2cb8d8.dip0.t-ipconnect.de) |
2023-01-17 09:44:59 +0100 | jinsun__ | (~jinsun@user/jinsun) |
2023-01-17 09:44:59 +0100 | jinsun | Guest5150 |
2023-01-17 09:44:59 +0100 | jinsun__ | jinsun |
2023-01-17 09:47:33 +0100 | Guest5150 | (~jinsun@user/jinsun) (Ping timeout: 252 seconds) |
2023-01-17 09:47:44 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
2023-01-17 09:51:19 +0100 | CiaoSen | (~Jura@p200300c9570452002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2023-01-17 09:53:56 +0100 | avicenzi | (~avicenzi@2a00:ca8:a1f:b004::c32) |
2023-01-17 09:54:07 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 252 seconds) |
2023-01-17 09:55:51 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
2023-01-17 09:57:15 +0100 | cfricke | (~cfricke@user/cfricke) |
2023-01-17 10:01:50 +0100 | merijn | (~merijn@c-001-001-014.client.esciencecenter.eduvpn.nl) |
2023-01-17 10:05:05 +0100 | merijn | (~merijn@c-001-001-014.client.esciencecenter.eduvpn.nl) (Read error: Connection reset by peer) |
2023-01-17 10:09:59 +0100 | merijn | (~merijn@c-001-001-014.client.esciencecenter.eduvpn.nl) |
2023-01-17 10:11:52 +0100 | gtdg | (~gtdg@nat-inria-interne-72-gw-01-lne.lille.inria.fr) |
2023-01-17 10:16:41 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds) |
2023-01-17 10:17:33 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2023-01-17 10:23:42 +0100 | piele | (~piele@tbonesteak.creativeserver.net) |
2023-01-17 10:25:56 +0100 | barzo | (~hd@31.223.41.44) (Ping timeout: 256 seconds) |
2023-01-17 10:35:34 +0100 | waleee | (~waleee@h-176-10-137-138.na.cust.bahnhof.se) (Ping timeout: 256 seconds) |
2023-01-17 10:37:03 +0100 | titibandit1 | (~titibandi@xdsl-81-173-160-143.nc.de) (Remote host closed the connection) |
2023-01-17 10:37:25 +0100 | talismanick | (~talismani@2601:200:c181:4c40::1be2) (Ping timeout: 260 seconds) |
2023-01-17 10:41:31 +0100 | __monty__ | (~toonn@user/toonn) |
2023-01-17 10:42:22 +0100 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
2023-01-17 10:45:04 +0100 | boxscape_ | (~boxscape_@81.191.27.107) |
2023-01-17 10:47:49 +0100 | [Leary] | (~Leary]@user/Leary/x-0910699) (Remote host closed the connection) |
2023-01-17 10:48:26 +0100 | [Leary] | (~Leary]@user/Leary/x-0910699) |
2023-01-17 10:48:32 +0100 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 246 seconds) |
2023-01-17 10:50:04 +0100 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
2023-01-17 10:54:06 +0100 | nschoe | (~q@2a01:e0a:8e:a190:59bc:3e0d:1333:bdb1) |
2023-01-17 11:06:58 +0100 | xff0x_ | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 268 seconds) |
2023-01-17 11:08:30 +0100 | enoq | (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) |
2023-01-17 11:11:21 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
2023-01-17 11:15:30 +0100 | mizlan | (~mizlan@2607:f010:2a7:1005:a0d7:fa40:4d30:af9f) |
2023-01-17 11:19:09 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) |
2023-01-17 11:20:00 +0100 | mizlan | (~mizlan@2607:f010:2a7:1005:a0d7:fa40:4d30:af9f) (Ping timeout: 260 seconds) |
2023-01-17 11:23:46 +0100 | ft | (~ft@p4fc2a257.dip0.t-ipconnect.de) (Quit: leaving) |
2023-01-17 11:35:19 +0100 | troydm | (~troydm@user/troydm) |
2023-01-17 11:42:03 +0100 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds) |
2023-01-17 11:42:57 +0100 | <anatta> | dminuoso: Eh, it's not that I don't like it as much as it's me being bad and not understanding it. |
2023-01-17 11:48:31 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 252 seconds) |
2023-01-17 11:53:11 +0100 | <dminuoso> | anatta: A quasiquoter is really simple. It consists of potentially 4 functions `quoteExp :: String -> Q Exp`, `quotePat :: String -> Q Pat`, `quoteType :: String -> Q Type` and `quoteDec :: String -> Q [Dec]`. What this lets you do, is conjure up a function that takes an arbitrary string and - at compile time - turn it into a different kind of AST node (an expression, pattern, type or a list of |
2023-01-17 11:53:13 +0100 | cheater | (~Username@user/cheater) |
2023-01-17 11:53:13 +0100 | <dminuoso> | declarations) |
2023-01-17 11:53:27 +0100 | <dminuoso> | It's a very limited form of TemplateHaskell. |
2023-01-17 11:54:17 +0100 | <dminuoso> | One perhaps motivating example might be a quasiquoter for IPv6 literals. Say you want to express `myIP :: IPv6; myIP = [ipv6| 12001:db8::fe1 |]` |
2023-01-17 11:55:02 +0100 | xff0x_ | (~xff0x@ai084091.d.east.v6connect.net) |
2023-01-17 11:55:04 +0100 | <anatta> | dminuoso: Yeah, I was experimenting some with it yesterday, but I didn't manage to get a mvp, just type errors |
2023-01-17 11:55:11 +0100 | <dminuoso> | Where ipv6 has a suitable field quoteExp that knows how to turn the *string* "2001:db8::fe1" into some equivalent expression, say `ipv6FromWord16s 0x2001 0xdb8 0 0 0 0 0xfe1` or some such |
2023-01-17 11:56:10 +0100 | <anatta> | I just tried to make a basic math reader, but I like the idea of being able to write in some DSL or whatever inside your haskell files |
2023-01-17 11:56:39 +0100 | kuribas | (~user@ptr-17d51enmqmkg8yow88s.18120a2.ip6.access.telenet.be) |
2023-01-17 11:57:41 +0100 | <kuribas> | is haskell really a difficult language? I am looking at C# linq queries and F# computation expressions, and it just looks like ad-hoc syntax for supporting monads. |
2023-01-17 11:58:04 +0100 | <kuribas> | isn't it just easier to have a language which supports these abstractions from the base (like haskell, idris, ...) |
2023-01-17 11:59:24 +0100 | <kuribas> | [Leary]: re your comment on dhall union, indeed `::` solves the problem of using default values. |
2023-01-17 12:00:38 +0100 | kuribas | (~user@ptr-17d51enmqmkg8yow88s.18120a2.ip6.access.telenet.be) (Client Quit) |
2023-01-17 12:00:52 +0100 | kuribas | (~user@ptr-17d51enmqmkg8yow88s.18120a2.ip6.access.telenet.be) |
2023-01-17 12:08:20 +0100 | int-index | (~int-index@2a00:1370:8178:5994:30e6:1466:2eaa:dd53) |
2023-01-17 12:08:40 +0100 | <dminuoso> | anatta: Consider a two step process then. Parse into some kind of ADT, and then a function turning an ADT into - say - an Expr. |
2023-01-17 12:08:54 +0100 | <dminuoso> | The first part you can write outside of TH/QQ easily, and the second becomes easier |
2023-01-17 12:09:54 +0100 | laalyn | (~laalyn@c-73-241-126-7.hsd1.ca.comcast.net) (Quit: Client closed) |
2023-01-17 12:11:06 +0100 | razetime | (~Thunderbi@117.193.0.183) (Ping timeout: 268 seconds) |
2023-01-17 12:14:24 +0100 | int-index28 | (~int-index@2a00:1370:8178:5994:87d0:2048:7511:2eba) |
2023-01-17 12:14:27 +0100 | <kuribas> | http://fsprojects.github.io/SQLProvider/core/composable.html |
2023-01-17 12:15:13 +0100 | int-index28 | (~int-index@2a00:1370:8178:5994:87d0:2048:7511:2eba) () |
2023-01-17 12:17:46 +0100 | freeside | (~mengwong@122.11.248.245) (Ping timeout: 272 seconds) |
2023-01-17 12:17:51 +0100 | razetime | (~Thunderbi@117.193.0.183) |
2023-01-17 12:18:13 +0100 | int-index | (~int-index@2a00:1370:8178:5994:30e6:1466:2eaa:dd53) (Ping timeout: 260 seconds) |
2023-01-17 12:18:36 +0100 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2023-01-17 12:19:12 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2023-01-17 12:20:09 +0100 | razetime | (~Thunderbi@117.193.0.183) (Client Quit) |
2023-01-17 12:20:18 +0100 | <kuribas> | This just looks like Monads, but with special syntax. |
2023-01-17 12:20:27 +0100 | Joao003 | (~Joao003@2804:840:8311:d200:306d:6168:be07:23f0) |
2023-01-17 12:20:52 +0100 | <Joao003> | hi i'm back |
2023-01-17 12:22:31 +0100 | Axman6 | Guess who's back, back again... |
2023-01-17 12:28:01 +0100 | <kuribas> | I mean, these composable just look like my database library, but my library is just build on top of haskell basic abstractions. |
2023-01-17 12:28:12 +0100 | <Joao003> | finally i can see chat |
2023-01-17 12:28:30 +0100 | ubert1 | (~Thunderbi@2a02:8109:abc0:6434:8e77:5003:7dc0:6c4e) |
2023-01-17 12:28:33 +0100 | <kuribas> | these languages are supposed to be "simpler" than haskell. |
2023-01-17 12:28:59 +0100 | <kuribas> | But in the end they just end up less composable, with more ad-hoc logic, right? |
2023-01-17 12:30:16 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) (Remote host closed the connection) |
2023-01-17 12:30:39 +0100 | razetime | (~Thunderbi@117.193.0.183) |
2023-01-17 12:31:11 +0100 | <Joao003> | look at this function i made |
2023-01-17 12:31:41 +0100 | razetime | (~Thunderbi@117.193.0.183) (Client Quit) |
2023-01-17 12:32:02 +0100 | int-index | (~Vladislav@2a00:1370:8178:5994:30e6:1466:2eaa:dd53) |
2023-01-17 12:37:40 +0100 | <kuribas> | "F# computation expressions are the syntactic language mechanism that is used by features like sequence expressions and asynchronous workflows. The aim of F# computation expressions is to provide a single syntactic mechanism that provides convenient notation for writing a wide range of computations." |
2023-01-17 12:38:18 +0100 | <kuribas> | so a complicated syntactical language, instead of just a light do notation sugar. |
2023-01-17 12:38:22 +0100 | <kuribas> | How would that be easier? |
2023-01-17 12:42:48 +0100 | <dminuoso> | kuribas: Regarding "looks like monads", do you know of MonadComprehensions and TransformListComp? |
2023-01-17 12:43:28 +0100 | <dminuoso> | The latter in particular |
2023-01-17 12:43:56 +0100 | <dminuoso> | https://www.microsoft.com/en-us/research/wp-content/uploads/2007/09/list-comp.pdf for some publication on this subjecft |
2023-01-17 12:44:01 +0100 | califax | (~califax@user/califx) (Remote host closed the connection) |
2023-01-17 12:45:00 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2023-01-17 12:47:38 +0100 | califax | (~califax@user/califx) |
2023-01-17 12:47:40 +0100 | <Unhammer> | Is there a shorthand for referring to functions from "this module" when importing things of the same name from others? |
2023-01-17 12:49:08 +0100 | <Unhammer> | E.g. in Admin.View.Samples.Index I have a data type with field userId, but I'm also importing a data type with field userId. Typically I want to refer to the imported one so I call that one with no module prefix, but the two times I want to refer to the one from "this" module I have to give the full module path v{Admin.View.Samples.Index.userId=…} |
2023-01-17 12:49:39 +0100 | <dminuoso> | Unhammer: You can always qualify them with the module name of the current module |
2023-01-17 12:49:45 +0100 | <int-index> | There is no shorthand |
2023-01-17 12:50:09 +0100 | <Unhammer> | ok, maybe I should just put it in a FooTypes.hs or something |
2023-01-17 12:50:34 +0100 | <dminuoso> | You can also supply custom qualifiers with `as` if that helps |
2023-01-17 12:51:41 +0100 | <mauke> | how do you use as on the current module? |
2023-01-17 12:51:48 +0100 | <dminuoso> | Unhammer: Potentially DuplicateRecordFields could help as well |
2023-01-17 12:51:55 +0100 | <dminuoso> | mauke: ah mmm I dont think you can do that. |
2023-01-17 12:52:27 +0100 | zaquest | (~notzaques@5.130.79.72) (Remote host closed the connection) |
2023-01-17 12:52:48 +0100 | <kuribas> | dminuoso: yes, but I never use them. |
2023-01-17 12:53:12 +0100 | <kuribas> | dminuoso: it's mostly useful to show that list comprehension syntax is just monad syntax. |
2023-01-17 12:54:04 +0100 | zaquest | (~notzaques@5.130.79.72) |
2023-01-17 13:03:30 +0100 | jinsun__ | (~jinsun@user/jinsun) |
2023-01-17 13:03:30 +0100 | jinsun | Guest5401 |
2023-01-17 13:03:30 +0100 | Guest5401 | (~jinsun@user/jinsun) (Killed (silver.libera.chat (Nickname regained by services))) |
2023-01-17 13:03:30 +0100 | jinsun__ | jinsun |
2023-01-17 13:04:48 +0100 | <boxscape_> | I really like using MonadComprehensions for things like `[ "config.json" | useConfig ] :: Maybe String` |
2023-01-17 13:04:54 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2023-01-17 13:05:55 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2023-01-17 13:09:10 +0100 | <boxscape_> | kuribas fwiw list comprehensions and do blocks even use the same AST node in GHC |
2023-01-17 13:11:21 +0100 | <dminuoso> | boxscape_: that's cute |
2023-01-17 13:12:06 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2023-01-17 13:16:33 +0100 | acidjnk | (~acidjnk@p200300d6e715c4203c380012bc2cb8d8.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2023-01-17 13:19:05 +0100 | poljar | (~poljar@93-139-120-188.adsl.net.t-com.hr) (Remote host closed the connection) |
2023-01-17 13:19:29 +0100 | poljar | (~poljar@93-139-120-188.adsl.net.t-com.hr) |
2023-01-17 13:20:06 +0100 | <kuribas> | boxscape_: what about the return? |
2023-01-17 13:20:34 +0100 | <boxscape_> | kuribas the Node has a flag that keeps track of whether it's a do block, list comp, etc. |
2023-01-17 13:20:40 +0100 | <kuribas> | [ x | x <- myEffect] => do x <- myEffect; pure x |
2023-01-17 13:20:51 +0100 | <boxscape_> | ( https://hackage.haskell.org/package/ghc-9.4.4/docs/Language-Haskell-Syntax-Expr.html#v:HsDo ) |
2023-01-17 13:20:57 +0100 | <kuribas> | these an extra pure |
2023-01-17 13:21:36 +0100 | <boxscape_> | the pure is inserted by the desugarer, which looks at the HsDoFlavour |
2023-01-17 13:25:33 +0100 | <merijn> | boxscape_: I mean, you can just do: "config.json" <$ guard useConfig |
2023-01-17 13:25:43 +0100 | <merijn> | boxscape_: And get something similarly cute without extensions :p |
2023-01-17 13:26:00 +0100 | <boxscape_> | my files usually have 15 extensions anyway, so... |
2023-01-17 13:27:20 +0100 | <Joao003> | i just installed haskell |
2023-01-17 13:29:11 +0100 | <Joao003> | boxscape_: what did you say by 15 extensions? |
2023-01-17 13:29:45 +0100 | <int-index> | boxscape_: GHC2021 should lower that amount somewhat |
2023-01-17 13:29:50 +0100 | <boxscape_> | Joao003 the GHC compiler supports some features that are not part of the Haskell2010 standard, but to use them one has to enable corresponding extensions |
2023-01-17 13:29:59 +0100 | <boxscape_> | int-index: that is true |
2023-01-17 13:30:41 +0100 | <Joao003> | is it worth it installing haskell? |
2023-01-17 13:30:45 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) |
2023-01-17 13:31:12 +0100 | <Joao003> | i installed it through ghcup |
2023-01-17 13:31:59 +0100 | <boxscape_> | If you want to learn or use Haskell then installing it is probably a good idea, yeah. And ghcup is a good way to do it |
2023-01-17 13:32:04 +0100 | <int-index> | Joao003: as opposed to using an online compiler? if you're just toying around, then https://play-haskell.tomsmeding.com/ is a good option too |
2023-01-17 13:32:15 +0100 | <boxscape_> | true |
2023-01-17 13:32:34 +0100 | <Joao003> | nah what if i don't have access to the internet? |
2023-01-17 13:32:43 +0100 | <int-index> | then having it locally is the way to go |
2023-01-17 13:34:53 +0100 | <Joao003> | what's the most commonly used haskell function? |
2023-01-17 13:35:06 +0100 | acidjnk | (~acidjnk@p200300d6e715c420889663d2e7d74ba2.dip0.t-ipconnect.de) |
2023-01-17 13:35:42 +0100 | <Joao003> | i love and hate using windows |
2023-01-17 13:36:00 +0100 | <Joao003> | windows has a lot of cool functionality |
2023-01-17 13:36:13 +0100 | <Joao003> | but it isn't as good for development as linux is |
2023-01-17 13:36:30 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) (Ping timeout: 260 seconds) |
2023-01-17 13:38:01 +0100 | <mauke> | oh no. am I being protontorpedo'd? |
2023-01-17 13:39:39 +0100 | <dminuoso> | Joao003 | what's the most commonly used haskell function? |
2023-01-17 13:39:44 +0100 | <dminuoso> | If I had to guess, its probably (.) |
2023-01-17 13:39:52 +0100 | <Joao003> | yeah |
2023-01-17 13:40:00 +0100 | <Joao003> | wait just found out something |
2023-01-17 13:40:05 +0100 | <Joao003> | there's , |
2023-01-17 13:40:07 +0100 | <dminuoso> | (>>=) and (>>) are probably quite high (found after desugaring of do) |
2023-01-17 13:40:08 +0100 | <Joao003> | but there's ,, |
2023-01-17 13:40:11 +0100 | <Joao003> | ,,, |
2023-01-17 13:40:13 +0100 | <Joao003> | ,,,, |
2023-01-17 13:40:15 +0100 | <Joao003> | ,,,,, |
2023-01-17 13:40:18 +0100 | <Joao003> | and so on |
2023-01-17 13:40:25 +0100 | <dminuoso> | ($) would be high up as well |
2023-01-17 13:40:40 +0100 | <dminuoso> | so in short, I expect (.), ($), (>>=) and (>>) to be in the top 10 list |
2023-01-17 13:40:49 +0100 | <Joao003> | where would map go |
2023-01-17 13:40:57 +0100 | <dminuoso> | map is not commonly used |
2023-01-17 13:41:04 +0100 | <Jadesheit[m]> | map isn't all that high |
2023-01-17 13:41:17 +0100 | <dminuoso> | fmap and its infix variant <$> however is used a lot more |
2023-01-17 13:41:20 +0100 | <Jadesheit[m]> | and the problem is that map also isn't used in favor of `fmap` or `<$>` |
2023-01-17 13:41:34 +0100 | <Jadesheit[m]> | * or `<$>` sometimes |
2023-01-17 13:41:45 +0100 | <dminuoso> | I recently found <&> to be quite handy as well :) |
2023-01-17 13:42:01 +0100 | <dminuoso> | In some styles of code it can be a lot easier to read |
2023-01-17 13:42:11 +0100 | <Joao003> | no instance for showing the (,,,,,,,,,) (10-tuple) |
2023-01-17 13:42:19 +0100 | <Joao003> | operator |
2023-01-17 13:42:27 +0100 | <Jadesheit[m]> | interesting |
2023-01-17 13:43:04 +0100 | <Jadesheit[m]> | Joao003: hm? |
2023-01-17 13:43:12 +0100 | <Jadesheit[m]> | as soon as your tuple is bigger than three you should reconsider anyways |
2023-01-17 13:43:17 +0100 | <Joao003> | yeah |
2023-01-17 13:43:43 +0100 | <int-index> | tuples have Show instances up to length 15 |
2023-01-17 13:43:57 +0100 | <Joao003> | sorry operators dont have instances |
2023-01-17 13:44:05 +0100 | gtdg | (~gtdg@nat-inria-interne-72-gw-01-lne.lille.inria.fr) (Quit: Client closed) |
2023-01-17 13:44:06 +0100 | <dminuoso> | Types do. |
2023-01-17 13:44:38 +0100 | <Jadesheit[m]> | dminuoso: the flipped version of `<$>` should have been `>$<` |
2023-01-17 13:44:40 +0100 | <Jadesheit[m]> | * been `>$<` /j |
2023-01-17 13:44:43 +0100 | <Joao003> | lol |
2023-01-17 13:44:56 +0100 | <dminuoso> | The term "operator" is only useful as a lexical/grammatical notion. In particular we call functions `operators` that are not composed of alphanumeric characters, and they can be used in infix position. |
2023-01-17 13:45:05 +0100 | <Joao003> | yeah |
2023-01-17 13:45:12 +0100 | <boxscape_> | is `elem` an operator |
2023-01-17 13:45:17 +0100 | <dminuoso> | Jadesheit[m]: No, <&> is quite right |
2023-01-17 13:45:23 +0100 | <Joao003> | to turn a function into a "operator" you can just type backticks around it |
2023-01-17 13:45:29 +0100 | <Joao003> | for example `map` |
2023-01-17 13:45:29 +0100 | <dminuoso> | Jadesheit[m]: ($) is to (&) as <$> is to <&> |
2023-01-17 13:45:37 +0100 | <Jadesheit[m]> | dminuoso: haha yeah im joking |
2023-01-17 13:45:38 +0100 | <dminuoso> | Jadesheit[m]: >$< is actually an infix contramap |
2023-01-17 13:45:57 +0100 | <dminuoso> | So there's certainly merit to >$< being used a a kind of "flipped" thing of <$> |
2023-01-17 13:46:28 +0100 | <boxscape_> | >&< doesn't exist though :( |
2023-01-17 13:46:42 +0100 | <boxscape_> | (at least not findable in hoogle) |
2023-01-17 13:47:07 +0100 | <Joao003> | hey |
2023-01-17 13:47:11 +0100 | <dminuoso> | boxscape_: Its called >$$< |
2023-01-17 13:47:14 +0100 | <dminuoso> | Confusingly. |
2023-01-17 13:47:16 +0100 | <Joao003> | do you call [] an array or a list |
2023-01-17 13:47:19 +0100 | <dminuoso> | Joao003: a list |
2023-01-17 13:47:21 +0100 | <boxscape_> | ah |
2023-01-17 13:47:27 +0100 | <dminuoso> | Joao003: we have a thing called Array that is something different |
2023-01-17 13:47:31 +0100 | <Joao003> | oh |
2023-01-17 13:47:32 +0100 | <Jadesheit[m]> | A list is also not the same as an array |
2023-01-17 13:47:41 +0100 | <Jadesheit[m]> | think of a list as an iterator, not a storage ds |
2023-01-17 13:47:48 +0100 | <Joao003> | oh |
2023-01-17 13:47:53 +0100 | <dminuoso> | array in haskell usually refers to `Array` from the `array` package |
2023-01-17 13:47:57 +0100 | <dminuoso> | tps://hackage.haskell.org/package/array-0.5.4.0/docs/Data-Array.html |
2023-01-17 13:48:05 +0100 | <Joao003> | think of a list as a series of applications of (:) |
2023-01-17 13:48:14 +0100 | <int-index> | there are also arrays from the `primitive` package |
2023-01-17 13:48:31 +0100 | <int-index> | which don't have the Ix overabstraction nonsense |
2023-01-17 13:48:36 +0100 | epolanski | (uid312403@id-312403.helmsley.irccloud.com) |
2023-01-17 13:48:36 +0100 | <Jadesheit[m]> | Joao003: that's how it works, yes |
2023-01-17 13:48:43 +0100 | <dminuoso> | To be fair, the terms `list`, `array`, `sequence`, and so forth is extremely overloaded, and most languages tend to conflate their meaning with the semantics of particular implementations that share their names. |
2023-01-17 13:48:59 +0100 | <Jadesheit[m]> | [1, 2, 3] desugars to 1 : (2 : (3 : [])) |
2023-01-17 13:48:59 +0100 | <dminuoso> | Similar story with `string` or `text` |
2023-01-17 13:49:15 +0100 | <dminuoso> | (though `string` is probably the most ambiguous term of all of these) |
2023-01-17 13:49:17 +0100 | <Joao003> | most of the things you know from lambda calculus carry over to any functional language |
2023-01-17 13:49:27 +0100 | <Jadesheit[m]> | kind of? |
2023-01-17 13:49:33 +0100 | <Jadesheit[m]> | I wouldn't say all |
2023-01-17 13:49:43 +0100 | <Joao003> | i said "most" |
2023-01-17 13:50:27 +0100 | <Jadesheit[m]> | I was referring to the language part, you said any functional language |
2023-01-17 13:50:36 +0100 | <Joao003> | oh |
2023-01-17 13:50:46 +0100 | <Joao003> | yeah almost |
2023-01-17 13:50:46 +0100 | <dminuoso> | int-index: Mmm from the looks of it, the only difference is that the primitive version doesnt have bounds encoded inside. So I guess that explains the lack of Ix? |
2023-01-17 13:50:50 +0100 | <merijn> | Depends how you define functional language :p |
2023-01-17 13:51:23 +0100 | <int-index> | dminuoso: yes, the primitive version is simpler and it's also the data structure backing `vector` |
2023-01-17 13:51:47 +0100 | <Jadesheit[m]> | merijn: yup |
2023-01-17 13:51:52 +0100 | <dminuoso> | int-index: Ahh! I thought it was the `array` Array. |
2023-01-17 13:51:58 +0100 | <Joao003> | also you said a thing about array desugarization so "hi" desugarizes into ['h','i'] and that desugarizes into 'h' : ('i' : []) |
2023-01-17 13:52:14 +0100 | <dminuoso> | But given that `vector` doesnt even depend on that package, that assumption was just a wild guess. |
2023-01-17 13:52:16 +0100 | <Jadesheit[m]> | list, not array |
2023-01-17 13:52:17 +0100 | <Jadesheit[m]> | and yes |
2023-01-17 13:52:32 +0100 | <Joao003> | since string is just [Char] |
2023-01-17 13:52:36 +0100 | <Jadesheit[m]> | yes |
2023-01-17 13:52:57 +0100 | <Jadesheit[m]> | Joao003: identically so, they are interchangeable |
2023-01-17 13:53:03 +0100 | <Joao003> | yeah |
2023-01-17 13:53:03 +0100 | <dminuoso> | Even the notion of what a "string" is can be tricky, as there's very different expectations. |
2023-01-17 13:53:07 +0100 | <Jadesheit[m]> | * are interchangeable as by `type` |
2023-01-17 13:53:11 +0100 | <Joao003> | data String = [Char] |
2023-01-17 13:53:12 +0100 | <Jadesheit[m]> | * are interchangeable as by `type` they have the same runtime representation |
2023-01-17 13:53:16 +0100 | <boxscape_> | int-index: I suppose it's not a coincidence that you prefer int indices over Ix |
2023-01-17 13:53:25 +0100 | <dminuoso> | For instance, what would a `stringLength` function in an arbitrary language produce exactly? |
2023-01-17 13:53:39 +0100 | <Jadesheit[m]> | Joao003: no, data creates a different runtime representation, it's `type String = [Char]` |
2023-01-17 13:53:48 +0100 | <Joao003> | oh i didn't know that |
2023-01-17 13:54:04 +0100 | <boxscape_> | (`data String = [Char]` would not be valid syntax) |
2023-01-17 13:54:16 +0100 | <Joao003> | cool |
2023-01-17 13:54:16 +0100 | <Jadesheit[m]> | that's why you use `newtype` over `data` for single constructor datatypes |
2023-01-17 13:54:58 +0100 | <Joao003> | the lists are actually monads |
2023-01-17 13:55:03 +0100 | <Joao003> | @src [] return |
2023-01-17 13:55:03 +0100 | <lambdabot> | return x = [x] |
2023-01-17 13:56:55 +0100 | <zzz> | @src [] pure |
2023-01-17 13:56:55 +0100 | <lambdabot> | pure = return |
2023-01-17 13:57:11 +0100 | <zzz> | shouldn't this be the other way around? |
2023-01-17 13:57:35 +0100 | <dminuoso> | zzz: it doesnt matter which way you do it. |
2023-01-17 13:57:55 +0100 | <dminuoso> | first, what lambdabot tells in terms of @src is just based on a simple text file its fed with |
2023-01-17 13:58:01 +0100 | <dminuoso> | it doesnt represent actual source of base |
2023-01-17 13:58:11 +0100 | <hpc> | @src sort |
2023-01-17 13:58:11 +0100 | <lambdabot> | sort = sortBy compare |
2023-01-17 13:58:17 +0100 | <hpc> | @src sortBy |
2023-01-17 13:58:17 +0100 | <lambdabot> | -- The actual definition used by GHC is an optimised mergesort. |
2023-01-17 13:58:17 +0100 | <lambdabot> | sortBy cmp = foldr (insertBy cmp) [] |
2023-01-17 13:58:23 +0100 | <hpc> | ^ for exapmle |
2023-01-17 13:58:25 +0100 | <dminuoso> | second, defining applicative in terms of monad is a bit simpler mechanically, because you can always just write `instance Applicative F where (<*>) = ap; pure = return` |
2023-01-17 13:58:28 +0100 | <Joao003> | @src map |
2023-01-17 13:58:29 +0100 | <lambdabot> | map _ [] = [] |
2023-01-17 13:58:29 +0100 | <lambdabot> | map f (x:xs) = f x : map f xs |
2023-01-17 13:58:38 +0100 | <Joao003> | exactly what i was expecting |
2023-01-17 13:58:46 +0100 | <Joao003> | map on nil = nil |
2023-01-17 13:59:14 +0100 | <Joao003> | and map on a list is applying the function on the head then consing with map f tail |
2023-01-17 13:59:41 +0100 | <zzz> | dminuoso: but wouldn't we need then `instance Monad f => Applicative f where pure = return` ? |
2023-01-17 13:59:56 +0100 | <dminuoso> | zzz: no |
2023-01-17 14:00:10 +0100 | <zzz> | @info return |
2023-01-17 14:00:10 +0100 | <lambdabot> | return |
2023-01-17 14:00:19 +0100 | <zzz> | i'm confused |
2023-01-17 14:00:27 +0100 | <dminuoso> | zzz: For a concrete type, you dont need constraints |
2023-01-17 14:00:32 +0100 | <dminuoso> | Or rather |
2023-01-17 14:00:34 +0100 | <dminuoso> | Heh |
2023-01-17 14:00:36 +0100 | <dminuoso> | let me rephrase. |
2023-01-17 14:00:40 +0100 | <Joao003> | return's name is weirdd |
2023-01-17 14:00:47 +0100 | <Joao003> | and pure doesn't solve the problem |
2023-01-17 14:00:49 +0100 | <dminuoso> | zzz: In principle one could have written such an instance, yes. |
2023-01-17 14:00:51 +0100 | <dminuoso> | However! |
2023-01-17 14:01:26 +0100 | <dminuoso> | zzz: note that the constraint in the instance is *not* used for instance selection. |
2023-01-17 14:01:37 +0100 | <dminuoso> | That means, that instance claims there is an instance `Applicative f` for *ALL* choices of f. |
2023-01-17 14:01:49 +0100 | <dminuoso> | Even if no `Monad f` exists |
2023-01-17 14:01:52 +0100 | <dminuoso> | (for the purpose of instance selection) |
2023-01-17 14:02:29 +0100 | <dminuoso> | Not sure what other considerations might play into this. |
2023-01-17 14:04:34 +0100 | fizbin_ | (~fizbin@user/fizbin) (Ping timeout: 268 seconds) |
2023-01-17 14:05:01 +0100 | <Joao003> | give me a formal definition of a monad |
2023-01-17 14:05:14 +0100 | <mauke> | also, there is no @info command and it autocorrects to @undo |
2023-01-17 14:05:28 +0100 | <dminuoso> | Joao003: [not a] monad is simply an abstract interface. |
2023-01-17 14:05:39 +0100 | <mauke> | "A monad is a monoid in the category of endofunctors" |
2023-01-17 14:05:55 +0100 | <boxscape_> | Joao003 do you mean Haskell's `Monad` or the category theoretical concept of a monad? |
2023-01-17 14:05:57 +0100 | <dminuoso> | mauke: So is applicative. |
2023-01-17 14:06:04 +0100 | <Joao003> | both |
2023-01-17 14:06:13 +0100 | <dminuoso> | The category theory perspective is not going to help *shrugs* |
2023-01-17 14:06:37 +0100 | <Joao003> | but i want it anyways |
2023-01-17 14:06:48 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
2023-01-17 14:06:53 +0100 | <boxscape_> | the formal definition of Haskell's `Monad` is `class Monad where return :: a -> m a; (>>=) :: m a -> (a -> m b) -> m b` |
2023-01-17 14:07:34 +0100 | <boxscape_> | uhh I guess you might want to add an Applicative superclass constraint to that depending on which version of Haskell we're talking about |
2023-01-17 14:08:10 +0100 | <int-index> | I prefer to think of it as a Functor+join |
2023-01-17 14:08:22 +0100 | <boxscape_> | I do prefer that, too |
2023-01-17 14:08:28 +0100 | <Joao003> | what is functor |
2023-01-17 14:08:33 +0100 | <Joao003> | im gonna hoogle |
2023-01-17 14:08:40 +0100 | <Joao003> | @hoogle Functor |
2023-01-17 14:08:40 +0100 | <lambdabot> | Prelude class Functor f |
2023-01-17 14:08:40 +0100 | <lambdabot> | Control.Monad class Functor f |
2023-01-17 14:08:41 +0100 | <lambdabot> | Control.Monad.Instances class Functor f |
2023-01-17 14:08:56 +0100 | <Joao003> | @src Functor |
2023-01-17 14:08:56 +0100 | <lambdabot> | class Functor f where |
2023-01-17 14:08:57 +0100 | <lambdabot> | fmap :: (a -> b) -> f a -> f b |
2023-01-17 14:09:18 +0100 | <Joao003> | class functor where fmap :: (a -> b) -> f a -> f b |
2023-01-17 14:09:38 +0100 | <Joao003> | @src join |
2023-01-17 14:09:38 +0100 | <lambdabot> | join x = x >>= id |
2023-01-17 14:10:00 +0100 | <boxscape_> | Joao003 join is easier to understand in terms of its type, `join :: m (m a) -> m a` |
2023-01-17 14:10:22 +0100 | <Joao003> | yeah |
2023-01-17 14:10:25 +0100 | <boxscape_> | it allows you to collapse two levels of the same monadic context into one |
2023-01-17 14:10:29 +0100 | <Jadesheit[m]> | Some terms that I like to use are |
2023-01-17 14:10:29 +0100 | <Jadesheit[m]> | Functor -> Mappable |
2023-01-17 14:10:29 +0100 | <Jadesheit[m]> | Monad -> Flatmappable |
2023-01-17 14:10:54 +0100 | <Joao003> | join takes a monad of monads and returns a monad, right? |
2023-01-17 14:11:01 +0100 | <boxscape_> | % join [[1,2], [3,4]] |
2023-01-17 14:11:01 +0100 | <yahb2> | [1,2,3,4] |
2023-01-17 14:11:21 +0100 | <Joao003> | > join [[1,2], [3,4]] |
2023-01-17 14:11:23 +0100 | thebinary | (~thebinary@2400:1a00:b040:11cf:84c9:5a90:c46b:31e6) |
2023-01-17 14:11:23 +0100 | <lambdabot> | [1,2,3,4] |
2023-01-17 14:11:47 +0100 | <boxscape_> | Joao003 not quite, `m` is a monad, `m a` is a value in a monadic context. so `join` returns a value in a monadic context, not the monad itself |
2023-01-17 14:11:56 +0100 | <Jadesheit[m]> | yes, it flattens it |
2023-01-17 14:11:57 +0100 | <Jadesheit[m]> | not neccesarily plural though |
2023-01-17 14:12:01 +0100 | <Joao003> | oh |
2023-01-17 14:12:24 +0100 | <Jadesheit[m]> | > join $ Just (Just 2) |
2023-01-17 14:12:26 +0100 | <Jadesheit[m]> | * > join $ Just (Just 2) |
2023-01-17 14:12:26 +0100 | <lambdabot> | Just 2 |
2023-01-17 14:12:41 +0100 | <Joao003> | so what's happening when i pass a function like (,) |
2023-01-17 14:12:49 +0100 | <Joao003> | > join (,) 1 |
2023-01-17 14:12:50 +0100 | <lambdabot> | (1,1) |
2023-01-17 14:13:05 +0100 | <Jadesheit[m]> | a function `(->) r` is a monad |
2023-01-17 14:13:16 +0100 | <Jadesheit[m]> | defined by `f >>= g = g (f x) x` |
2023-01-17 14:13:25 +0100 | <boxscape_> | it represents a context where things expect a value of type `r` as input |
2023-01-17 14:13:40 +0100 | <boxscape_> | :t (,) |
2023-01-17 14:13:41 +0100 | <lambdabot> | a -> b -> (a, b) |
2023-01-17 14:14:02 +0100 | <zzz> | > join (+) 7 |
2023-01-17 14:14:04 +0100 | <lambdabot> | 14 |
2023-01-17 14:14:10 +0100 | <Joao003> | (, >>= id) x = id (, x) x = , x x |
2023-01-17 14:14:14 +0100 | <Joao003> | (, >>= id) x = id (, x) x = (,) x x |
2023-01-17 14:14:16 +0100 | <Jadesheit[m]> | so `join = (>>= id)` means that `join f` is identically the same as `f x x` |
2023-01-17 14:14:22 +0100 | <Jadesheit[m]> | yep exactly |
2023-01-17 14:14:34 +0100 | <Jadesheit[m]> | put parantheses though |
2023-01-17 14:14:51 +0100 | <Jadesheit[m]> | and flip the functions |
2023-01-17 14:15:12 +0100 | <Joao003> | join id has no type |
2023-01-17 14:15:17 +0100 | <Jadesheit[m]> | * as `(f x, * f x) x` |
2023-01-17 14:15:23 +0100 | <boxscape_> | :t join id |
2023-01-17 14:15:24 +0100 | <lambdabot> | error: |
2023-01-17 14:15:24 +0100 | <lambdabot> | • Occurs check: cannot construct the infinite type: m ~ (->) (m a) |
2023-01-17 14:15:24 +0100 | <lambdabot> | Expected type: m (m a) |
2023-01-17 14:15:33 +0100 | son0p | (~ff@181.136.122.143) (Remote host closed the connection) |
2023-01-17 14:16:00 +0100 | thebinary | (~thebinary@2400:1a00:b040:11cf:84c9:5a90:c46b:31e6) (Ping timeout: 256 seconds) |
2023-01-17 14:16:20 +0100 | <Jadesheit[m]> | :t \f :: ((->) r)-> join |
2023-01-17 14:16:21 +0100 | <lambdabot> | error: parse error on input ‘::’ |
2023-01-17 14:16:26 +0100 | <Jadesheit[m]> | does that even work |
2023-01-17 14:16:40 +0100 | <Jadesheit[m]> | * :t (\f :: ((->) r))-> join |
2023-01-17 14:16:45 +0100 | <Jadesheit[m]> | nope |
2023-01-17 14:17:00 +0100 | <Jadesheit[m]> | * :t (\f :: ((->) r))-> join f |
2023-01-17 14:17:04 +0100 | <boxscape_> | % :t join @((->) _) |
2023-01-17 14:17:04 +0100 | <yahb2> | join @((->) _) :: Monad ((->) w) => (w -> (w -> a)) -> w -> a |
2023-01-17 14:17:17 +0100 | <Jadesheit[m]> | ah yeah, that's what I tried |
2023-01-17 14:18:43 +0100 | <Jadesheit[m]> | * I tried, thanks |
2023-01-17 14:18:43 +0100 | <Jadesheit[m]> | the function monad is interesting |
2023-01-17 14:18:59 +0100 | <zzz> | the function everything is interesting |
2023-01-17 14:19:16 +0100 | <zzz> | wait until you see Arrow |
2023-01-17 14:19:31 +0100 | <Jadesheit[m]> | ah yeah, I wanted to look into that |
2023-01-17 14:19:37 +0100 | <geekosaur> | Jadesheit[m], editing IRC bot input is even more pointless than matrix editing in an IRC channel in general |
2023-01-17 14:20:04 +0100 | <zzz> | matrix is a digrace to irc |
2023-01-17 14:20:07 +0100 | <Joao003> | % map (+1) [1..3] |
2023-01-17 14:20:07 +0100 | <yahb2> | [2,3,4] |
2023-01-17 14:20:22 +0100 | <Joao003> | we have two haskell bots? lol |
2023-01-17 14:20:58 +0100 | <boxscape_> | lambdabot is older and has more commands, yahb2 is more useful for some things because it just runs a ghci instance |
2023-01-17 14:21:10 +0100 | <Jadesheit[m]> | geekosaur: haha ok thanks |
2023-01-17 14:21:39 +0100 | <Joao003> | boxscape_: thanks |
2023-01-17 14:26:01 +0100 | <zzz> | @pl (>>= id) a |
2023-01-17 14:26:01 +0100 | <lambdabot> | join a |
2023-01-17 14:26:30 +0100 | <zzz> | @pl (>>= id) a a |
2023-01-17 14:26:30 +0100 | <lambdabot> | a a a |
2023-01-17 14:27:28 +0100 | <Joao003> | @pl (negate >>= (*)) a |
2023-01-17 14:27:28 +0100 | <lambdabot> | negate a * a |
2023-01-17 14:27:44 +0100 | <boxscape_> | :t (>>= id) a a |
2023-01-17 14:27:46 +0100 | <lambdabot> | error: |
2023-01-17 14:27:46 +0100 | <lambdabot> | • Couldn't match expected type ‘Expr -> Expr -> t’ |
2023-01-17 14:27:46 +0100 | <lambdabot> | with actual type ‘Expr’ |
2023-01-17 14:27:53 +0100 | <boxscape_> | :t \a -> (>>= id) a a |
2023-01-17 14:27:54 +0100 | <lambdabot> | error: |
2023-01-17 14:27:54 +0100 | <lambdabot> | • Occurs check: cannot construct the infinite type: |
2023-01-17 14:27:54 +0100 | <lambdabot> | m ~ (->) (m (m t)) |
2023-01-17 14:29:14 +0100 | <Joao003> | on ghci it says * Couldn't match type `m' with `(->) (m (m t))' |
2023-01-17 14:30:13 +0100 | <boxscape_> | Joao003 it's using a different version of GHC |
2023-01-17 14:30:20 +0100 | <Joao003> | oh |
2023-01-17 14:31:01 +0100 | <boxscape_> | e.g. 9.4.4 results in the error you reported, but 8.10 in the one lambdabot did |
2023-01-17 14:31:10 +0100 | <Joao003> | :t const 1 2 |
2023-01-17 14:31:11 +0100 | <lambdabot> | Num a => a |
2023-01-17 14:31:29 +0100 | <Joao003> | oh |
2023-01-17 14:32:11 +0100 | <Joao003> | i'm using 9.2.5 which is outdated but ok |
2023-01-17 14:32:45 +0100 | <boxscape_> | 9.2.5 is the one ghcup recommends it seems |
2023-01-17 14:33:27 +0100 | <anatta> | dminuoso: finally got my toy example to work (https://i.imgur.com/U7bRlVH.png) |
2023-01-17 14:34:10 +0100 | <dminuoso> | anatta: Hooray! |
2023-01-17 14:34:13 +0100 | <Joao003> | oh nice |
2023-01-17 14:34:14 +0100 | <anatta> | it wasn't that difficult, I just had been a bit confused and not autoderived Data |
2023-01-17 14:34:30 +0100 | <Joao003> | how many lines of code? |
2023-01-17 14:34:42 +0100 | <dminuoso> | anatta: By the way, you can also place constructors into infix position. |
2023-01-17 14:35:13 +0100 | <anatta> | Joao003: about 70 in Expr.hs |
2023-01-17 14:35:18 +0100 | <Joao003> | oh |
2023-01-17 14:35:23 +0100 | <dminuoso> | anatta: `data Expr = Expr `Plus` Expr | Con Int` |
2023-01-17 14:35:33 +0100 | <mauke> | /plain > expr (5+3) |
2023-01-17 14:35:34 +0100 | <dminuoso> | The added benefit is that the derived show instance will then place `Plus` into infix position as well. |
2023-01-17 14:35:45 +0100 | <dminuoso> | Making it even more readable. :) |
2023-01-17 14:35:52 +0100 | <dminuoso> | Unless you're a big fan of polish notation |
2023-01-17 14:35:59 +0100 | <mauke> | > expr (5+3) |
2023-01-17 14:36:01 +0100 | <lambdabot> | 5 + 3 |
2023-01-17 14:36:11 +0100 | <Joao003> | > expr (5+3) |
2023-01-17 14:36:12 +0100 | <lambdabot> | 5 + 3 |
2023-01-17 14:36:47 +0100 | <Joao003> | i made a function that duplicates each item of an array |
2023-01-17 14:36:50 +0100 | <anatta> | dminuoso: I hadn't even considered you could do that, lol |
2023-01-17 14:36:50 +0100 | <Joao003> | list* |
2023-01-17 14:37:05 +0100 | <anatta> | but it's a good suggestion |
2023-01-17 14:37:46 +0100 | <anatta> | Joao003: nice |
2023-01-17 14:37:51 +0100 | <Joao003> | look |
2023-01-17 14:38:16 +0100 | <Joao003> | @let double_items = (uncurry ((.) concat . (zipWith (\x y -> [x, y])))) . (ap (,) id) |
2023-01-17 14:38:17 +0100 | <lambdabot> | Defined. |
2023-01-17 14:38:28 +0100 | <Joao003> | > double_items [1, 2, 3] |
2023-01-17 14:38:30 +0100 | <lambdabot> | [1,1,2,2,3,3] |
2023-01-17 14:38:35 +0100 | <dminuoso> | anatta: yeah, and you can even use `infixr/infixl` declarations with it. |
2023-01-17 14:38:40 +0100 | <mauke> | concatMap (\x -> [x, x]) [1,2,3] |
2023-01-17 14:38:53 +0100 | <Joao003> | didn't know that existed |
2023-01-17 14:39:03 +0100 | <dminuoso> | anatta: Further, you can also use operator constructors like :+ which could be even more readable |
2023-01-17 14:39:14 +0100 | <dminuoso> | % data Expr = Expr :+ Expr | Con Int |
2023-01-17 14:39:14 +0100 | <yahb2> | <no output> |
2023-01-17 14:39:22 +0100 | <Joao003> | > concatMap (\x -> [x,x]) [1,2,3] |
2023-01-17 14:39:23 +0100 | <lambdabot> | [1,1,2,2,3,3] |
2023-01-17 14:39:41 +0100 | <mauke> | > [ x' | x <- [1, 2, 3], x' <- [x, x] ] |
2023-01-17 14:39:42 +0100 | <lambdabot> | [1,1,2,2,3,3] |
2023-01-17 14:39:45 +0100 | <dminuoso> | anatta: note that they have to start with a colon then, but the rest is up to you |
2023-01-17 14:40:03 +0100 | <boxscape_> | (well, the rest has to be symbols rather than letters or numbers) |
2023-01-17 14:40:14 +0100 | <anatta> | dminuoso: I've seen that, but never really experimented with making my own operators |
2023-01-17 14:40:18 +0100 | <Joao003> | (ap (,) id) in my example can be replaced with (join (,)) |
2023-01-17 14:40:28 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
2023-01-17 14:40:39 +0100 | <dminuoso> | Yeah fair, it's just some hopefully interesting facts. I dont personally like using these. |
2023-01-17 14:41:56 +0100 | <Joao003> | > ((uncurry ((.) concat . (zipWith (\x y -> [x, y])))) . (join (,))) "Hello, World!" |
2023-01-17 14:41:59 +0100 | <lambdabot> | "HHeelllloo,, WWoorrlldd!!" |
2023-01-17 14:42:39 +0100 | <anatta> | dminuoso: well, you can't know what features I've seen before and what features are new to me, so I appreciate it ;) |
2023-01-17 14:43:04 +0100 | <mauke> | :t concatMap (replicate 2) |
2023-01-17 14:43:05 +0100 | <lambdabot> | Foldable t => t b -> [b] |
2023-01-17 14:43:34 +0100 | <Joao003> | > replicate 3 "test" |
2023-01-17 14:43:35 +0100 | <lambdabot> | ["test","test","test"] |
2023-01-17 14:44:29 +0100 | <Joao003> | > (concat . map) (replicate 3) "test" |
2023-01-17 14:44:31 +0100 | <lambdabot> | error: |
2023-01-17 14:44:31 +0100 | <lambdabot> | • Couldn't match expected type ‘[Char] -> t’ |
2023-01-17 14:44:31 +0100 | <lambdabot> | with actual type ‘[[a0]]’ |
2023-01-17 14:44:45 +0100 | <Joao003> | > concatMap (replicate 3) "test" |
2023-01-17 14:44:47 +0100 | <lambdabot> | "ttteeesssttt" |
2023-01-17 14:45:19 +0100 | <Joao003> | @let multChars = replicate >>= concatMap |
2023-01-17 14:45:20 +0100 | <lambdabot> | /sandbox/tmp/.L.hs:158:27: error: |
2023-01-17 14:45:20 +0100 | <lambdabot> | • Couldn't match type ‘t0 a’ with ‘Int’ |
2023-01-17 14:45:20 +0100 | <lambdabot> | Expected type: (a -> [a]) -> Int -> [a] |
2023-01-17 14:45:45 +0100 | <anatta> | > foldr (\x acc -> x : x : acc) [] "test" |
2023-01-17 14:45:45 +0100 | <Joao003> | :t (>>=) |
2023-01-17 14:45:47 +0100 | <lambdabot> | Monad m => m a -> (a -> m b) -> m b |
2023-01-17 14:45:47 +0100 | <lambdabot> | "tteesstt" |
2023-01-17 14:46:06 +0100 | <Joao003> | @src (>>=) |
2023-01-17 14:46:06 +0100 | <lambdabot> | Source not found. Maybe if you used more than just two fingers... |
2023-01-17 14:46:11 +0100 | Cybro | (~Cybro@user/Cybro) |
2023-01-17 14:46:35 +0100 | <Joao003> | > (replicate >>= concatMap) 2 "test" |
2023-01-17 14:46:37 +0100 | <lambdabot> | error: |
2023-01-17 14:46:37 +0100 | <lambdabot> | • Couldn't match type ‘[a0]’ with ‘[Char] -> t’ |
2023-01-17 14:46:37 +0100 | <lambdabot> | Expected type: Int -> [Char] -> t |
2023-01-17 14:46:45 +0100 | <Joao003> | th |
2023-01-17 14:46:59 +0100 | <dminuoso> | anatta: the one place where I like these, is for displaying how a list type can be made from hand easily |
2023-01-17 14:47:12 +0100 | <Joao003> | > (concatMap >>= replicate) 2 "test" |
2023-01-17 14:47:13 +0100 | <lambdabot> | error: |
2023-01-17 14:47:13 +0100 | <lambdabot> | • Couldn't match type ‘t0 a0 -> [b0]’ with ‘Int’ |
2023-01-17 14:47:13 +0100 | <lambdabot> | Expected type: (a0 -> [b0]) -> Int |
2023-01-17 14:47:28 +0100 | <Cybro> | I'm trying to make "filter" using only foldr (and lambdas). I'm having trouble converting a unary predicate into a binary function that foldr can use. Can anyone help? |
2023-01-17 14:47:29 +0100 | <dminuoso> | % data MyList a = a :| MyList | Nil |
2023-01-17 14:47:29 +0100 | <yahb2> | <interactive>:80:22: error: ; • Expecting one more argument to ‘MyList’ ; Expected a type, but ‘MyList’ has kind ‘* -> *’ ; • In the type ‘MyList’ ; In the definition of data co... |
2023-01-17 14:47:32 +0100 | <dminuoso> | % data MyList a = a :| MyList a | Nil |
2023-01-17 14:47:32 +0100 | <yahb2> | <no output> |
2023-01-17 14:47:39 +0100 | <anatta> | > concat . map (replicate 3) $ "test" |
2023-01-17 14:47:41 +0100 | <lambdabot> | "ttteeesssttt" |
2023-01-17 14:47:41 +0100 | <dminuoso> | % infixr 5 :| |
2023-01-17 14:47:41 +0100 | <yahb2> | <interactive>:84:10: error: ; The fixity signature for ‘:|’ lacks an accompanying binding ; (The fixity signature must be given where ‘:|’ is declared) |
2023-01-17 14:47:48 +0100 | <anatta> | is what you want Joao003 |
2023-01-17 14:47:50 +0100 | <anatta> | I think |
2023-01-17 14:47:51 +0100 | <dminuoso> | Gah, well its ghcid. But you get the idea. |
2023-01-17 14:48:18 +0100 | <__monty__> | geekosaur: About yesterday's issue, I think I've found an MRE, seems like a legitimate cabal-install bug, https://github.com/haskell/cabal/issues/8687 |
2023-01-17 14:48:23 +0100 | <Joao003> | > concatMap (replicate 2) "test" |
2023-01-17 14:48:25 +0100 | <lambdabot> | "tteesstt" |
2023-01-17 14:48:28 +0100 | <mauke> | Cybro: the other argument is the rest of the results |
2023-01-17 14:48:31 +0100 | <geekosaur> | interesting |
2023-01-17 14:48:34 +0100 | <dminuoso> | % data MyList a = a :| MyList a | Nil; infixr 5 :| |
2023-01-17 14:48:34 +0100 | <yahb2> | <no output> |
2023-01-17 14:48:39 +0100 | <Joao003> | this is in the shape of >>= |
2023-01-17 14:48:43 +0100 | <anatta> | dminuoso: yeah, having prefixed cons gets a bit cluttered |
2023-01-17 14:49:10 +0100 | <dminuoso> | % data MyList a = a :| MyList a | Nil deriving Show; infixr 5 :| |
2023-01-17 14:49:10 +0100 | <yahb2> | <no output> |
2023-01-17 14:49:10 +0100 | <Joao003> | :t (replicate >>= concatMap) |
2023-01-17 14:49:11 +0100 | <lambdabot> | error: |
2023-01-17 14:49:11 +0100 | <lambdabot> | • Couldn't match type ‘t0 a’ with ‘Int’ |
2023-01-17 14:49:11 +0100 | <lambdabot> | Expected type: (a -> [a]) -> Int -> [a] |
2023-01-17 14:49:15 +0100 | <dminuoso> | % 1 :| 2 :| 3 :| Nil |
2023-01-17 14:49:15 +0100 | <yahb2> | 1 :| (2 :| (3 :| Nil)) |
2023-01-17 14:49:17 +0100 | <Joao003> | but it doesn't work |
2023-01-17 14:49:30 +0100 | <mauke> | :t (=<<) . replicate |
2023-01-17 14:49:31 +0100 | <lambdabot> | Int -> [b] -> [b] |
2023-01-17 14:49:33 +0100 | <dminuoso> | A bit sad there's not enough machinery to elide these redundant parens there |
2023-01-17 14:49:51 +0100 | <Joao003> | :t (replicate =<< concatMap) |
2023-01-17 14:49:52 +0100 | <lambdabot> | error: |
2023-01-17 14:49:52 +0100 | <lambdabot> | • Couldn't match type ‘t0 a -> [b]’ with ‘Int’ |
2023-01-17 14:49:52 +0100 | <lambdabot> | Expected type: (a -> [b]) -> Int |
2023-01-17 14:50:05 +0100 | <Joao003> | :t (concatMap =<< replicate) |
2023-01-17 14:50:06 +0100 | <lambdabot> | error: |
2023-01-17 14:50:06 +0100 | <lambdabot> | • Couldn't match type ‘Int’ with ‘t a’ |
2023-01-17 14:50:06 +0100 | <lambdabot> | Expected type: t a -> a -> [a] |
2023-01-17 14:50:10 +0100 | <Joao003> | WHY |
2023-01-17 14:50:23 +0100 | <mauke> | wtf are you doing |
2023-01-17 14:50:28 +0100 | <mauke> | > ((=<<) . replicate) 2 "test" |
2023-01-17 14:50:30 +0100 | <lambdabot> | "tteesstt" |
2023-01-17 14:50:35 +0100 | <Joao003> | forgetting what >>= is for |
2023-01-17 14:50:44 +0100 | <Joao003> | :t =<< |
2023-01-17 14:50:46 +0100 | <lambdabot> | error: parse error on input ‘=<<’ |
2023-01-17 14:50:50 +0100 | <Joao003> | :t (=<<) |
2023-01-17 14:50:52 +0100 | <lambdabot> | Monad m => (a -> m b) -> m a -> m b |
2023-01-17 14:50:57 +0100 | <boxscape_> | > replicate 2 =<< "test" |
2023-01-17 14:51:00 +0100 | <lambdabot> | "tteesstt" |
2023-01-17 14:51:03 +0100 | <Cybro> | mauke, what I have currently is filter p xs = foldr p [] xs which doesn't match the typedef for filter |
2023-01-17 14:51:14 +0100 | <Joao003> | > (=<<) == (flip >>=) |
2023-01-17 14:51:16 +0100 | <lambdabot> | error: |
2023-01-17 14:51:16 +0100 | <lambdabot> | • Occurs check: cannot construct the infinite type: |
2023-01-17 14:51:16 +0100 | <lambdabot> | b1 ~ (a0 -> b0 -> c0) -> b1 |
2023-01-17 14:51:19 +0100 | <Joao003> | > (=<<) == (flip (>>=)) |
2023-01-17 14:51:21 +0100 | <lambdabot> | error: |
2023-01-17 14:51:21 +0100 | <lambdabot> | • Ambiguous type variable ‘m0’ arising from a use of ‘=<<’ |
2023-01-17 14:51:21 +0100 | <lambdabot> | prevents the constraint ‘(Monad m0)’ from being solved. |
2023-01-17 14:51:41 +0100 | <boxscape_> | you will not be able to compare functions with (==) |
2023-01-17 14:51:52 +0100 | <Joao003> | (=<<) is just (flip (>>=)) |
2023-01-17 14:51:56 +0100 | <boxscape_> | yes |
2023-01-17 14:52:07 +0100 | <Joao003> | @src (=<<) |
2023-01-17 14:52:07 +0100 | <lambdabot> | f =<< x = x >>= f |
2023-01-17 14:52:12 +0100 | <Joao003> | lol |
2023-01-17 14:52:14 +0100 | <boxscape_> | nice |
2023-01-17 14:52:25 +0100 | <mauke> | Cybro: yeah, you need to pass a slightly different function to `foldr` |
2023-01-17 14:52:25 +0100 | <mauke> | one that uses p internally |
2023-01-17 14:52:30 +0100 | <Joao003> | do a 180 rotation and ur done |
2023-01-17 14:53:38 +0100 | <Joao003> | @src Either |
2023-01-17 14:53:38 +0100 | <lambdabot> | Source not found. I don't think I can be your friend on Facebook anymore. |
2023-01-17 14:53:42 +0100 | <Joao003> | @src either |
2023-01-17 14:53:42 +0100 | <lambdabot> | either f _ (Left x) = f x |
2023-01-17 14:53:42 +0100 | <lambdabot> | either _ g (Right y) = g y |
2023-01-17 14:53:51 +0100 | razetime | (~Thunderbi@117.193.0.183) |
2023-01-17 14:54:06 +0100 | <anatta> | Joao003: often you want to apply a function outside some context on something inside a context instead, and then you typically use <$> |
2023-01-17 14:54:15 +0100 | <Joao003> | i understand |
2023-01-17 14:54:17 +0100 | <anatta> | or <*> if the function is already inside the context |
2023-01-17 14:54:39 +0100 | <Joao003> | :t (<$>) |
2023-01-17 14:54:40 +0100 | <lambdabot> | Functor f => (a -> b) -> f a -> f b |
2023-01-17 14:54:55 +0100 | <anatta> | > (+1) <$> [1..3] |
2023-01-17 14:54:57 +0100 | <lambdabot> | [2,3,4] |
2023-01-17 14:55:02 +0100 | <Joao003> | fmap? |
2023-01-17 14:55:05 +0100 | <anatta> | yes |
2023-01-17 14:55:13 +0100 | <Joao003> | > fmap (+1) [1..3] |
2023-01-17 14:55:14 +0100 | <anatta> | > [(+1)] <*> [1..3] |
2023-01-17 14:55:15 +0100 | <lambdabot> | [2,3,4] |
2023-01-17 14:55:16 +0100 | <lambdabot> | [2,3,4] |
2023-01-17 14:55:40 +0100 | <Joao003> | > [(+1), (+2)] <*> [1..3] |
2023-01-17 14:55:41 +0100 | kurbus | (~kurbus@user/kurbus) |
2023-01-17 14:55:42 +0100 | <lambdabot> | [2,3,4,3,4,5] |
2023-01-17 14:55:46 +0100 | <Joao003> | oh nice |
2023-01-17 14:56:04 +0100 | <Joao003> | @src (<$>) |
2023-01-17 14:56:04 +0100 | <lambdabot> | f <$> a = fmap f a |
2023-01-17 14:56:09 +0100 | <Joao003> | nice |
2023-01-17 14:56:48 +0100 | <Joao003> | :t (<*>) |
2023-01-17 14:56:49 +0100 | <lambdabot> | Applicative f => f (a -> b) -> f a -> f b |
2023-01-17 14:56:53 +0100 | mimmy__ | (~mimmy@37.19.212.48) |
2023-01-17 14:57:19 +0100 | <anatta> | it's kind of like ap |
2023-01-17 14:57:25 +0100 | <Joao003> | :t ap |
2023-01-17 14:57:26 +0100 | <lambdabot> | Monad m => m (a -> b) -> m a -> m b |
2023-01-17 14:57:37 +0100 | <Joao003> | ap for applicatives |
2023-01-17 14:57:56 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2023-01-17 14:58:02 +0100 | <Joao003> | ap is just liftM right |
2023-01-17 14:58:29 +0100 | <Joao003> | @src ap |
2023-01-17 14:58:29 +0100 | <lambdabot> | ap = liftM2 id |
2023-01-17 14:58:34 +0100 | <Joao003> | liftM2 |
2023-01-17 14:58:39 +0100 | <Joao003> | on id |
2023-01-17 14:58:58 +0100 | <Cybro> | mauke, I'm thinking of using a lambda for that. Would my accumulator need to be the rest of the list? |
2023-01-17 14:59:03 +0100 | <Joao003> | :t ($) |
2023-01-17 14:59:04 +0100 | <lambdabot> | (a -> b) -> a -> b |
2023-01-17 14:59:16 +0100 | <Joao003> | ($) just calls a function |
2023-01-17 14:59:22 +0100 | <Joao003> | :t (*) |
2023-01-17 14:59:23 +0100 | <lambdabot> | Num a => a -> a -> a |
2023-01-17 14:59:26 +0100 | <Joao003> | oh no |
2023-01-17 15:01:47 +0100 | <boxscape_> | If the non-applicative version of <$> is $, the non-applicative version of <*> is... I think also just $ |
2023-01-17 15:02:01 +0100 | <Joao003> | > [(+1), (+2)] <*> [1..5] |
2023-01-17 15:02:03 +0100 | <lambdabot> | [2,3,4,5,6,3,4,5,6,7] |
2023-01-17 15:02:14 +0100 | <Joao003> | > [(+1), (+2)] $ [1..5] |
2023-01-17 15:02:15 +0100 | <lambdabot> | error: |
2023-01-17 15:02:15 +0100 | <lambdabot> | • Couldn't match expected type ‘[a1] -> t’ |
2023-01-17 15:02:15 +0100 | <lambdabot> | with actual type ‘[a0 -> a0]’ |
2023-01-17 15:02:18 +0100 | <Joao003> | nope |
2023-01-17 15:02:40 +0100 | <boxscape_> | non-applicative meaning applied to values that aren't in an applicative context |
2023-01-17 15:02:45 +0100 | <boxscape_> | % (+1) $ 1 |
2023-01-17 15:02:45 +0100 | <anatta> | I mean you wouldn't be able to use $ in place of <$> either |
2023-01-17 15:02:45 +0100 | <yahb2> | 2 |
2023-01-17 15:02:48 +0100 | <Joao003> | > [(+1), (+2)] <$> [1,2,3] |
2023-01-17 15:02:50 +0100 | <lambdabot> | error: |
2023-01-17 15:02:50 +0100 | <lambdabot> | • Couldn't match expected type ‘a1 -> b’ |
2023-01-17 15:02:50 +0100 | <lambdabot> | with actual type ‘[a0 -> a0]’ |
2023-01-17 15:03:12 +0100 | <Joao003> | <*> for monads is ap |
2023-01-17 15:03:33 +0100 | <Joao003> | > [(+1), (+2)] `ap` [1..5] |
2023-01-17 15:03:35 +0100 | <lambdabot> | [2,3,4,5,6,3,4,5,6,7] |
2023-01-17 15:04:16 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 252 seconds) |
2023-01-17 15:04:39 +0100 | <Joao003> | if u do it right you could do something like apl's outer product |
2023-01-17 15:08:53 +0100 | <boxscape_> | > map (zipWith (+) [1..5] . repeat) [1..5] |
2023-01-17 15:08:54 +0100 | <lambdabot> | [[2,3,4,5,6],[3,4,5,6,7],[4,5,6,7,8],[5,6,7,8,9],[6,7,8,9,10]] |
2023-01-17 15:09:10 +0100 | <merijn> | That feeling where, to switch to a faster compiler you have to do a billion compiles to fix compatibility using the old compiler >.> |
2023-01-17 15:09:18 +0100 | <Cybro> | Is there a nicer way to write "\x acc -> if p x then x : acc else acc"? |
2023-01-17 15:10:10 +0100 | <merijn> | not really, tbh |
2023-01-17 15:10:23 +0100 | <boxscape_> | some people define `applyWhen` so that you can have `\x acc -> applyWhen (p x) (x : ) acc` |
2023-01-17 15:11:26 +0100 | gtdg | (~gtdg@nat-inria-interne-72-gw-01-lne.lille.inria.fr) |
2023-01-17 15:11:41 +0100 | gtdg | (~gtdg@nat-inria-interne-72-gw-01-lne.lille.inria.fr) (Changing host) |
2023-01-17 15:11:41 +0100 | gtdg | (~gtdg@user/gtdg) |
2023-01-17 15:13:01 +0100 | <Joao003> | :t repeat |
2023-01-17 15:13:02 +0100 | <lambdabot> | a -> [a] |
2023-01-17 15:13:10 +0100 | <Joao003> | @src repeat |
2023-01-17 15:13:10 +0100 | <lambdabot> | repeat x = xs where xs = x : xs |
2023-01-17 15:13:16 +0100 | <Franciman> | :t foldr |
2023-01-17 15:13:18 +0100 | <lambdabot> | Foldable t => (a -> b -> b) -> b -> t a -> b |
2023-01-17 15:13:29 +0100 | <Joao003> | > repeat 1 |
2023-01-17 15:13:31 +0100 | <lambdabot> | [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1... |
2023-01-17 15:13:35 +0100 | <Joao003> | oh my god |
2023-01-17 15:14:15 +0100 | <anatta> | > cycle [1, 2] |
2023-01-17 15:14:17 +0100 | <lambdabot> | [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2... |
2023-01-17 15:14:25 +0100 | <Joao003> | repeat [1,2,3] |
2023-01-17 15:14:26 +0100 | <boxscape_> | > cycle [] |
2023-01-17 15:14:28 +0100 | <lambdabot> | *Exception: Prelude.cycle: empty list |
2023-01-17 15:14:36 +0100 | <Joao003> | > repeat [1,2,3] |
2023-01-17 15:14:37 +0100 | <merijn> | > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in fibs |
2023-01-17 15:14:38 +0100 | <lambdabot> | [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,... |
2023-01-17 15:14:39 +0100 | <lambdabot> | [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,... |
2023-01-17 15:14:48 +0100 | <merijn> | > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in fibs !! 10000 |
2023-01-17 15:14:50 +0100 | <lambdabot> | 3364476487643178326662161200510754331030214846068006390656476997468008144216... |
2023-01-17 15:14:53 +0100 | <boxscape_> | hmm not sure if [] or bottom is more reasonable for cycle [] |
2023-01-17 15:15:07 +0100 | <merijn> | 10,000th Fibonacci number ;) |
2023-01-17 15:19:11 +0100 | ddellacosta | (~ddellacos@89.45.224.240) (Ping timeout: 268 seconds) |
2023-01-17 15:19:27 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-01-17 15:20:44 +0100 | <kuribas> | you need to use matrix multiplication... |
2023-01-17 15:21:48 +0100 | int-index-r | (~Vladislav@2a00:1370:8178:5994:87d0:2048:7511:2eba) |
2023-01-17 15:22:11 +0100 | <Jadesheit[m]> | fibs = 0 : scanr (+) 1 fibs |
2023-01-17 15:22:40 +0100 | <Jadesheit[m]> | wait no, im stupid |
2023-01-17 15:23:15 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 260 seconds) |
2023-01-17 15:23:19 +0100 | <Joao003> | @let palindrome x = x : t where reverse (x : t) == (x : t) |
2023-01-17 15:23:19 +0100 | <lambdabot> | Parse failed: Parse error: EOF |
2023-01-17 15:23:21 +0100 | <Jadesheit[m]> | needs to be scanl |
2023-01-17 15:24:18 +0100 | <Joao003> | > reverse "wow" == "wow" |
2023-01-17 15:24:20 +0100 | <lambdabot> | True |
2023-01-17 15:25:14 +0100 | thegeekinside | (~thegeekin@189.217.82.244) |
2023-01-17 15:25:29 +0100 | <Joao003> | > map (zipWith (*) [1..5] . repeat) [1..5] |
2023-01-17 15:25:31 +0100 | <lambdabot> | [[1,2,3,4,5],[2,4,6,8,10],[3,6,9,12,15],[4,8,12,16,20],[5,10,15,20,25]] |
2023-01-17 15:25:33 +0100 | int-index | (~Vladislav@2a00:1370:8178:5994:30e6:1466:2eaa:dd53) (Ping timeout: 265 seconds) |
2023-01-17 15:26:22 +0100 | <Joao003> | @let outerProduct f x = map (zipWith f x . repeat) |
2023-01-17 15:26:24 +0100 | <lambdabot> | Defined. |
2023-01-17 15:26:30 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
2023-01-17 15:26:51 +0100 | <Joao003> | > join (outerProduct (*)) [1..5] |
2023-01-17 15:26:52 +0100 | <anatta> | but can you prove that (reverse . reverse l) == l for all l ;) |
2023-01-17 15:26:53 +0100 | <lambdabot> | [[1,2,3,4,5],[2,4,6,8,10],[3,6,9,12,15],[4,8,12,16,20],[5,10,15,20,25]] |
2023-01-17 15:27:52 +0100 | <Joao003> | @pl \f x -> map (zipWith f x . repeat) |
2023-01-17 15:27:52 +0100 | <lambdabot> | (map .) . flip flip repeat . ((.) .) . zipWith |
2023-01-17 15:27:57 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-01-17 15:27:58 +0100 | <Joao003> | oh my god |
2023-01-17 15:28:17 +0100 | <boxscape_> | @unpl (map .) . flip flip repeat . ((.) .) . zipWith |
2023-01-17 15:28:17 +0100 | <lambdabot> | (\ x x0 -> map (\ x2 -> zipWith x x0 (repeat x2))) |
2023-01-17 15:28:43 +0100 | <Joao003> | > ((map .) . flip flip repeat . ((.) .) . zipWith) (*) [1..5] [1..5] |
2023-01-17 15:28:45 +0100 | <lambdabot> | [[1,2,3,4,5],[2,4,6,8,10],[3,6,9,12,15],[4,8,12,16,20],[5,10,15,20,25]] |
2023-01-17 15:29:18 +0100 | piele | (~piele@tbonesteak.creativeserver.net) (Quit: Ciao!) |
2023-01-17 15:29:59 +0100 | <Joao003> | whatever that was |
2023-01-17 15:30:22 +0100 | <Joao003> | :t (map .) . flip flip repeat . ((.) .) . zipWith |
2023-01-17 15:30:23 +0100 | <lambdabot> | (a1 -> a2 -> c) -> [a1] -> [a2] -> [[c]] |
2023-01-17 15:30:24 +0100 | <geekosaur> | friends don't let friends code pointfree 🙂 |
2023-01-17 15:30:32 +0100 | <Joao003> | exactly what i expected |
2023-01-17 15:30:56 +0100 | <Joao003> | flip flip flip flip flip flip flip flip flip flip |
2023-01-17 15:32:33 +0100 | <geekosaur> | "flippant and a bit dotty" |
2023-01-17 15:33:00 +0100 | <Joao003> | "flippy and periodant" |
2023-01-17 15:33:45 +0100 | <anatta> | Joao003: have you heard about our lord and savior (.) . (.)? |
2023-01-17 15:34:07 +0100 | <anatta> | :t (.) . (.) |
2023-01-17 15:34:07 +0100 | <Joao003> | you can point-free, or rather function-free in python |
2023-01-17 15:34:08 +0100 | <lambdabot> | (b -> c) -> (a1 -> a2 -> b) -> a1 -> a2 -> c |
2023-01-17 15:34:29 +0100 | <Joao003> | :t . ((.) .) . |
2023-01-17 15:34:30 +0100 | <anatta> | it's like composition with functions of different arity |
2023-01-17 15:34:30 +0100 | <lambdabot> | error: parse error on input ‘.’ |
2023-01-17 15:34:36 +0100 | <Joao003> | :t . ((.) .) |
2023-01-17 15:34:38 +0100 | <lambdabot> | error: parse error on input ‘.’ |
2023-01-17 15:34:40 +0100 | <dminuoso> | If you're extra brave you can also use |
2023-01-17 15:34:45 +0100 | <dminuoso> | % :t fmap fmap fmap |
2023-01-17 15:34:45 +0100 | <yahb2> | fmap fmap fmap ; :: (Functor f1, Functor f2) => (a -> b) -> f1 (f2 a) -> f1 (f2 b) |
2023-01-17 15:35:12 +0100 | <dminuoso> | % :t [fmap fmap fmap, (.) . (.)] |
2023-01-17 15:35:12 +0100 | <yahb2> | [fmap fmap fmap, (.) . (.)] ; :: [(a1 -> b) -> (a2 -> a3 -> a1) -> a2 -> a3 -> b] |
2023-01-17 15:35:16 +0100 | <Joao003> | :t ap ap ap |
2023-01-17 15:35:18 +0100 | <lambdabot> | error: |
2023-01-17 15:35:18 +0100 | <lambdabot> | • Occurs check: cannot construct the infinite type: |
2023-01-17 15:35:18 +0100 | <lambdabot> | m ~ (->) (m (m b)) |
2023-01-17 15:35:35 +0100 | <boxscape_> | similar to cddr and such we should have fffmap for (fmap . fmap . fmap). and tttraverse |
2023-01-17 15:35:40 +0100 | <anatta> | don't break the type system :( |
2023-01-17 15:35:43 +0100 | <Joao003> | :t (<*>) <*> (<*>) |
2023-01-17 15:35:44 +0100 | <lambdabot> | error: |
2023-01-17 15:35:44 +0100 | <lambdabot> | • Occurs check: cannot construct the infinite type: |
2023-01-17 15:35:44 +0100 | <lambdabot> | f ~ (->) (f (f b)) |
2023-01-17 15:35:52 +0100 | thebinary | (~thebinary@2400:1a00:b040:11cf:c948:e2cc:186e:ea47) |
2023-01-17 15:36:00 +0100 | <dminuoso> | boxscape_: tttraverse reads like a very distasteful joke on stuttering people. :/ |
2023-01-17 15:36:05 +0100 | <boxscape_> | :( |
2023-01-17 15:36:20 +0100 | thegeekinside | (~thegeekin@189.217.82.244) (Remote host closed the connection) |
2023-01-17 15:36:25 +0100 | <Joao003> | lambdabot correct your grammar cuz "Occurs check"? /s |
2023-01-17 15:36:32 +0100 | thegeekinside | (~thegeekin@189.217.82.244) |
2023-01-17 15:37:06 +0100 | <Joao003> | try to get a non-existant src and lambdabot will make fun of you |
2023-01-17 15:37:10 +0100 | <Joao003> | @src Monad |
2023-01-17 15:37:10 +0100 | <lambdabot> | class Applicative m => Monad m where |
2023-01-17 15:37:10 +0100 | <lambdabot> | -- Note: Applicative wasn't a superclass before GHC 7.10 |
2023-01-17 15:37:10 +0100 | <lambdabot> | (>>=) :: m a -> (a -> m b) -> m b |
2023-01-17 15:37:10 +0100 | <lambdabot> | (>>) :: m a -> m b -> m b |
2023-01-17 15:37:10 +0100 | <lambdabot> | return :: a -> m a |
2023-01-17 15:37:12 +0100 | <lambdabot> | fail :: String -> m a |
2023-01-17 15:37:16 +0100 | <Joao003> | @src (>>=) |
2023-01-17 15:37:16 +0100 | <lambdabot> | Source not found. |
2023-01-17 15:37:19 +0100 | <anatta> | Joao003: https://hackage.haskell.org/package/data-aviary-0.4.0/docs/Data-Aviary-Birds.html |
2023-01-17 15:37:27 +0100 | <anatta> | all the birds |
2023-01-17 15:38:09 +0100 | <Joao003> | > kite 1 2 |
2023-01-17 15:38:11 +0100 | <lambdabot> | error: |
2023-01-17 15:38:11 +0100 | <lambdabot> | Variable not in scope: kite :: t0 -> t1 -> t |
2023-01-17 15:38:42 +0100 | <Joao003> | > 1 `kite` 2 |
2023-01-17 15:38:44 +0100 | <lambdabot> | error: |
2023-01-17 15:38:44 +0100 | <lambdabot> | Variable not in scope: kite :: t0 -> t1 -> t |
2023-01-17 15:38:48 +0100 | <Joao003> | wth |
2023-01-17 15:38:53 +0100 | <Joao003> | > kestrel 1 2 |
2023-01-17 15:38:55 +0100 | <lambdabot> | error: |
2023-01-17 15:38:55 +0100 | <lambdabot> | Variable not in scope: kestrel :: t0 -> t1 -> t |
2023-01-17 15:39:05 +0100 | <geekosaur> | they're not imported into lambdabot |
2023-01-17 15:39:17 +0100 | <Joao003> | > import Data.Aviary.Birds |
2023-01-17 15:39:19 +0100 | <lambdabot> | <hint>:1:1: error: parse error on input ‘import’ |
2023-01-17 15:39:30 +0100 | <Joao003> | @import Data.Aviary.Birds |
2023-01-17 15:39:30 +0100 | <lambdabot> | Unknown command, try @list |
2023-01-17 15:39:33 +0100 | <Joao003> | @list |
2023-01-17 15:39:34 +0100 | <lambdabot> | What module? Try @listmodules for some ideas. |
2023-01-17 15:39:42 +0100 | <Joao003> | @list Data.Aviary.Birds |
2023-01-17 15:39:43 +0100 | <lambdabot> | No module "Data.Aviary.Birds" loaded |
2023-01-17 15:39:43 +0100 | <geekosaur> | @let import Data.Aviary.Birds |
2023-01-17 15:39:43 +0100 | <lambdabot> | /sandbox/tmp/.L.hs:68:1: error: |
2023-01-17 15:39:43 +0100 | <lambdabot> | Could not find module ‘Data.Aviary.Birds’ |
2023-01-17 15:39:43 +0100 | <lambdabot> | Use -v (or `:set -v` in ghci) to see a list of the files searched for. |
2023-01-17 15:39:56 +0100 | <geekosaur> | and it doesn;t have access to hackage |
2023-01-17 15:39:56 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in) |
2023-01-17 15:40:06 +0100 | <anatta> | you have to define them on your own |
2023-01-17 15:40:12 +0100 | <Joao003> | oh no |
2023-01-17 15:40:24 +0100 | <Joao003> | kite is just flip const |
2023-01-17 15:40:36 +0100 | <anatta> | you can see the source on hackage |
2023-01-17 15:40:47 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-01-17 15:40:53 +0100 | AlexNoo_ | AlexNoo |
2023-01-17 15:41:03 +0100 | <Joao003> | identity is called idiot XD |
2023-01-17 15:41:04 +0100 | thebinary | (~thebinary@2400:1a00:b040:11cf:c948:e2cc:186e:ea47) (Read error: Connection reset by peer) |
2023-01-17 15:41:35 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) (Ping timeout: 255 seconds) |
2023-01-17 15:42:36 +0100 | <Joao003> | > on (*) (+1) 1 2 |
2023-01-17 15:42:38 +0100 | <lambdabot> | 6 |
2023-01-17 15:43:33 +0100 | <Joao003> | @pl \f g a b -> f (g a) (g b) |
2023-01-17 15:43:33 +0100 | <lambdabot> | join . ((flip . ((.) .)) .) . (.) |
2023-01-17 15:43:38 +0100 | <Joao003> | ah yes |
2023-01-17 15:43:48 +0100 | <Joao003> | pointless on |
2023-01-17 15:43:54 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) |
2023-01-17 15:44:29 +0100 | <Joao003> | > (join . ((flip . ((.) .)) .) . (.)) (*) (+1) 1 2 |
2023-01-17 15:44:32 +0100 | <lambdabot> | 6 |
2023-01-17 15:44:48 +0100 | <Joao003> | lesson learned: never code pointfree |
2023-01-17 15:45:20 +0100 | thebinary | (~thebinary@2400:1a00:b040:11cf:c948:e2cc:186e:ea47) |
2023-01-17 15:46:21 +0100 | <Joao003> | :t \f -> (\x -> f x x) (\x -> f x x) |
2023-01-17 15:46:22 +0100 | <lambdabot> | error: |
2023-01-17 15:46:22 +0100 | <lambdabot> | • Occurs check: cannot construct the infinite type: t ~ t -> t1 |
2023-01-17 15:46:22 +0100 | <lambdabot> | • In the first argument of ‘\ x -> f x x’, namely ‘(\ x -> f x x)’ |
2023-01-17 15:46:29 +0100 | <anatta> | sometimes pointfree is nice, but it's not great to write pointfree just for the sake of writing pointfree code |
2023-01-17 15:46:34 +0100 | <Joao003> | yeah |
2023-01-17 15:46:35 +0100 | <thebinary> | Could not find module ‘System.Environment’ |
2023-01-17 15:47:22 +0100 | piele | (~piele@tbonesteak.creativeserver.net) |
2023-01-17 15:47:45 +0100 | <thebinary> | `import System.Environment (getArgs)` returns the above error. What should be done? |
2023-01-17 15:47:58 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:53c1:5ba:8f53:5689) |
2023-01-17 15:48:19 +0100 | <merijn> | thebinary: How are you compiling? |
2023-01-17 15:48:41 +0100 | <merijn> | Looks like you're missing a dependency on base, which is kinda odd |
2023-01-17 15:48:45 +0100 | <Joao003> | @hoogle fix |
2023-01-17 15:48:46 +0100 | <lambdabot> | Data.Function fix :: (a -> a) -> a |
2023-01-17 15:48:46 +0100 | <thebinary> | merijn: ghc --make InteractWith.hs |
2023-01-17 15:48:46 +0100 | <lambdabot> | Control.Monad.Fix fix :: (a -> a) -> a |
2023-01-17 15:48:46 +0100 | <lambdabot> | Protolude fix :: () => (a -> a) -> a |
2023-01-17 15:49:03 +0100 | <Cybro> | I'm trying to make group using filter, my current lambda is "\x sublist -> if x == head sublist then x:sublist else [x]" but it's incorrect, does anyone know what would make it work? |
2023-01-17 15:49:17 +0100 | <merijn> | thebinary: I dunno who told you to use --make, but that flag has been redundant for well over a decade :p |
2023-01-17 15:49:45 +0100 | <merijn> | mm, I'd think ghc automatically includes base when compiling |
2023-01-17 15:49:52 +0100 | <thebinary> | merijn: i am new to haskell. Was learning using real world haskell book |
2023-01-17 15:50:02 +0100 | <merijn> | thebinary: Can you pastebin the entire error |
2023-01-17 15:50:05 +0100 | <merijn> | @paste |
2023-01-17 15:50:05 +0100 | <lambdabot> | A pastebin: https://paste.debian.net/ |
2023-01-17 15:50:06 +0100 | <anatta> | rwh is like 10+ years old |
2023-01-17 15:50:11 +0100 | <anatta> | afaik |
2023-01-17 15:50:13 +0100 | kurbus | (~kurbus@user/kurbus) (Quit: Client closed) |
2023-01-17 15:50:23 +0100 | <[exa]> | Cybro: you may generate all contiguous subsequences (map inits . tails?) and then filter out the OK ones...but that's still going to be quite horrible |
2023-01-17 15:50:24 +0100 | <merijn> | anatta: Yeah, although --make was redundant when it came out too :p |
2023-01-17 15:50:40 +0100 | merijn | has a sneaking suspicion to be confirmed by full error |
2023-01-17 15:50:43 +0100 | <razetime> | how do people pattern match on free monads? |
2023-01-17 15:50:43 +0100 | <razetime> | 1234 val <- case ext of |
2023-01-17 15:50:43 +0100 | <razetime> | F (I.ExtOpError _) -> error "interpreter error" |
2023-01-17 15:50:43 +0100 | <razetime> | F (I.ExtOpTrace w v _) -> pure $ putDocLn $ pretty w <> ":" <+> unAnnotate v |
2023-01-17 15:50:43 +0100 | <razetime> | F (I.ExtOpBreak {}) -> error "break" |
2023-01-17 15:50:43 +0100 | <razetime> | ext is of type F ExtOp Value |
2023-01-17 15:50:55 +0100 | <merijn> | razetime: Painfully? ;) |
2023-01-17 15:51:03 +0100 | <Joao003> | @pl \f -> (\x -> f (x x)) (\x -> f (x x)) |
2023-01-17 15:51:03 +0100 | <anatta> | mechap: I'll take your word for it, it was long before I got into haskell |
2023-01-17 15:51:03 +0100 | <lambdabot> | ap (. join id) (. join id) |
2023-01-17 15:51:06 +0100 | <anatta> | eh |
2023-01-17 15:51:08 +0100 | <[exa]> | Cybro: the "shape" of what `filter` does doesn't really match the "shape" that you want from `group`.... Maybe better try with `foldr` |
2023-01-17 15:51:15 +0100 | <merijn> | razetime: You might want to look into the PatternSynonyms extension to get some less painfull patterns |
2023-01-17 15:51:16 +0100 | <anatta> | not mechap, merijn |
2023-01-17 15:51:34 +0100 | <thebinary> | merijn: https://paste.tomsmeding.com/URSXgXrd |
2023-01-17 15:51:49 +0100 | <merijn> | thebinary: Oh, lemme take a *wild* guess |
2023-01-17 15:51:51 +0100 | <razetime> | i'd like to know what the patterns are in the first place.. |
2023-01-17 15:51:54 +0100 | <merijn> | thebinary: You use Arch |
2023-01-17 15:52:12 +0100 | <razetime> | currently i'm getting an error i don't understand |
2023-01-17 15:52:19 +0100 | <merijn> | Did I guess right? :D |
2023-01-17 15:52:23 +0100 | <thebinary> | merijn: i am trying within termux |
2023-01-17 15:52:31 +0100 | <razetime> | • Couldn't match expected type: (I.Value -> r0) |
2023-01-17 15:52:31 +0100 | <razetime> | -> (I.ExtOp r0 -> r0) -> r0 |
2023-01-17 15:52:31 +0100 | <razetime> | with actual type: I.ExtOp a0 |
2023-01-17 15:52:31 +0100 | <razetime> | • In the pattern: I.ExtOpError _ |
2023-01-17 15:52:31 +0100 | <razetime> | In the pattern: F (I.ExtOpError _) |
2023-01-17 15:52:31 +0100 | Vajb | (~Vajb@2001:999:78d:d7:457c:7773:573e:6903) (Ping timeout: 260 seconds) |
2023-01-17 15:52:32 +0100 | <razetime> | In a case alternative: |
2023-01-17 15:52:32 +0100 | <razetime> | F (I.ExtOpError _) -> error "interpreter error" |
2023-01-17 15:52:54 +0100 | <merijn> | thebinary: Basically, what that error is saying is that your GHC install is broken |
2023-01-17 15:52:55 +0100 | <[exa]> | razetime: please use pastebing, code gets horribly borked in IRC and it just kills everyone's screen with conversation |
2023-01-17 15:52:56 +0100 | <thebinary> | merijn: Linux localhost 4.14.113-24230781 #1 SMP PREEMPT Wed Oct 5 10:02:10 KST 2022 aarch64 Android |
2023-01-17 15:52:59 +0100 | <[exa]> | *pastebin |
2023-01-17 15:53:00 +0100 | <razetime> | i see. |
2023-01-17 15:53:04 +0100 | beefyran | (~beefyran@2601:406:100:830:ad1c:493f:e8fc:867) |
2023-01-17 15:53:11 +0100 | <merijn> | thebinary: "Could not find module ‘Prelude’ There are files missing in the ‘base-4.14.3.0’ package," |
2023-01-17 15:53:27 +0100 | <razetime> | https://paste.tomsmeding.com/5MJ3rG7P this is the error |
2023-01-17 15:53:27 +0100 | <anatta> | It amuses me that the part you focused on was "System.Environment is not there" |
2023-01-17 15:53:35 +0100 | <anatta> | and not "Prelude is missing" |
2023-01-17 15:53:40 +0100 | <merijn> | thebinary: base and prelude are part of GHC, if those thing are missing files, something is very, *very* broken |
2023-01-17 15:54:02 +0100 | Cybro | (~Cybro@user/Cybro) (Ping timeout: 256 seconds) |
2023-01-17 15:54:03 +0100 | <merijn> | thebinary: Arch notably ships a GHC that's broken in it's packages, hence that's my first thought |
2023-01-17 15:54:31 +0100 | <merijn> | thebinary: But in short, the answer is: Nothing is wrong with your code (well, maybe there is, but at least it's not causing this error ;)) |
2023-01-17 15:54:43 +0100 | <geekosaur[m]> | Or you are using Arch packages and need -dynamic |
2023-01-17 15:54:45 +0100 | <merijn> | But something is very, very wrong with your GHC install |
2023-01-17 15:54:46 +0100 | <Joao003> | if u have missing Prelude you have trash |
2023-01-17 15:55:03 +0100 | <merijn> | thebinary: You can try doing "ghc -dynamic InteractWith.hs" |
2023-01-17 15:55:13 +0100 | <thebinary> | anatta: apologies i missed the first part of the error and focused on the end part of the error report |
2023-01-17 15:55:14 +0100 | <Joao003> | what is this square with 4 circles character |
2023-01-17 15:55:15 +0100 | <merijn> | If that works, you probably have an Arch based GHC package |
2023-01-17 15:55:28 +0100 | <anatta> | thebinary: no worries, we've all been there |
2023-01-17 15:55:34 +0100 | Cybro | (~Cybro@user/Cybro) |
2023-01-17 15:56:02 +0100 | <anatta> | thebinary: one time I clicked something in VSCode making it "import Prelude (whatever)" |
2023-01-17 15:56:11 +0100 | <anatta> | took me ages to debug |
2023-01-17 15:56:12 +0100 | <thebinary> | merijn: thanks a lot. The -dynamic did the trick |
2023-01-17 15:56:50 +0100 | <merijn> | thebinary: Arch by default ships only dynamic versions of the base libraries, but GHC (by default) links statically, so it looks for the static libs and doesn't find them and errors out cryptically |
2023-01-17 15:56:59 +0100 | <[exa]> | razetime: the error actually corresponds to what I'd expect from the definition of F |
2023-01-17 15:57:16 +0100 | <merijn> | thebinary: I dunno how you installed GHC, but you'd want something like ghc-static package to fix that |
2023-01-17 15:57:21 +0100 | <geekosaur[m]> | Joao003: a Unicode character your client doesn't render |
2023-01-17 15:57:41 +0100 | <Joao003> | in this case hexchat |
2023-01-17 15:57:53 +0100 | <[exa]> | razetime: in particular you probably don't want to patternmatch on the F, but supply the puring/rolling functions to that and let it evaluate itself |
2023-01-17 15:57:57 +0100 | <thebinary> | merijn: thanks a lot. It quite explains to me the cause as well. |
2023-01-17 15:58:01 +0100 | <geekosaur[m]> | Or remove the Arch packages and use ghcup |
2023-01-17 15:58:04 +0100 | <merijn> | geekosaur[m]: I'm seing inverted colour Q in front of dynamic, and I've seen that a few times, so I'm curious what unicode character you have in front of -dynamic |
2023-01-17 15:58:10 +0100 | <merijn> | (or ghcup in that last one) |
2023-01-17 15:58:25 +0100 | <[exa]> | razetime: I'd say that the patternmatches will be in the functions... see runF here: https://hackage.haskell.org/package/free-5.1.10/docs/Control-Monad-Free-Church.html#t:F |
2023-01-17 15:58:35 +0100 | <merijn> | geekosaur[m]: termux seems to be some android device thingy, so unsure if that's an option |
2023-01-17 15:58:51 +0100 | <geekosaur[m]> | The bridge translates code markup to control Q |
2023-01-17 15:59:40 +0100 | <thebinary> | merijn: i found ghc-libs-static in the termux packages. Installing it. Will try again and let u know |
2023-01-17 16:00:07 +0100 | <geekosaur[m]> | I wrote a script to translate it to something sensible but then you lose tab highlighting |
2023-01-17 16:00:39 +0100 | <razetime> | [exa]: hm, so i need to create a functions for RunF to retrieve the value.. |
2023-01-17 16:00:42 +0100 | <razetime> | makes sense |
2023-01-17 16:02:20 +0100 | <thebinary> | merijn: installing "ghc-libs-static" termux pkg also solved the issue. Thanks. |
2023-01-17 16:04:30 +0100 | <Joao003> | how do you pronounce haskell |
2023-01-17 16:04:38 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2023-01-17 16:04:52 +0100 | <Joao003> | bye |
2023-01-17 16:04:54 +0100 | Joao003 | (~Joao003@2804:840:8311:d200:306d:6168:be07:23f0) (Quit: Leaving) |
2023-01-17 16:06:20 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds) |
2023-01-17 16:06:59 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-01-17 16:07:30 +0100 | <Jadesheit[m]> | has-cal |
2023-01-17 16:07:31 +0100 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 3.7.1) |
2023-01-17 16:07:39 +0100 | Cybro | (~Cybro@user/Cybro) (Remote host closed the connection) |
2023-01-17 16:07:48 +0100 | <Jadesheit[m]> | * has-cal/kel |
2023-01-17 16:07:55 +0100 | Cybro | (~Cybro@user/Cybro) |
2023-01-17 16:09:02 +0100 | mimmy_ | (~mimmy@2607:fea8:6c0:e30:19f0:e06a:636a:c450) |
2023-01-17 16:10:28 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 256 seconds) |
2023-01-17 16:10:49 +0100 | <dminuoso> | /ˈhæskəl/ |
2023-01-17 16:11:07 +0100 | cheater | (~Username@user/cheater) |
2023-01-17 16:11:40 +0100 | mimmy__ | (~mimmy@37.19.212.48) (Ping timeout: 260 seconds) |
2023-01-17 16:13:38 +0100 | mimmy_ | (~mimmy@2607:fea8:6c0:e30:19f0:e06a:636a:c450) (Ping timeout: 246 seconds) |
2023-01-17 16:15:22 +0100 | mimmy_ | (~mimmy@45.14.195.75) |
2023-01-17 16:16:40 +0100 | <anatta> | what dminuoso said, or /'haskəl/ depending on what language I'm speaking |
2023-01-17 16:17:16 +0100 | shriekingnoise | (~shrieking@186.137.175.87) |
2023-01-17 16:18:16 +0100 | kurbus | (~kurbus@user/kurbus) |
2023-01-17 16:18:42 +0100 | thebinary | (~thebinary@2400:1a00:b040:11cf:c948:e2cc:186e:ea47) (Read error: Connection reset by peer) |
2023-01-17 16:18:47 +0100 | <cheater> | hi |
2023-01-17 16:18:53 +0100 | <cheater> | anyone know, on replit, how to import a package? |
2023-01-17 16:19:11 +0100 | notzmv | (~zmv@user/notzmv) |
2023-01-17 16:20:45 +0100 | <[exa]> | razetime: yes that's the idea AFAIK, you can only 'roll' it. These can also very easily be just almost-`id`'s if you just want to retrieve the structure |
2023-01-17 16:20:53 +0100 | laalyn | (~laalyn@c-73-241-126-7.hsd1.ca.comcast.net) |
2023-01-17 16:21:00 +0100 | <[exa]> | but the usual idea there is that you somehow interpret it right at the spot |
2023-01-17 16:21:03 +0100 | <razetime> | interesting. I figured a way out with RunF |
2023-01-17 16:21:09 +0100 | <[exa]> | \o/ |
2023-01-17 16:21:41 +0100 | thebinary | (~thebinary@2400:1a00:b040:11cf:c948:e2cc:186e:ea47) |
2023-01-17 16:23:10 +0100 | kurbus | (~kurbus@user/kurbus) (Quit: Client closed) |
2023-01-17 16:23:28 +0100 | CiaoSen | (~Jura@p200300c9570452002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2023-01-17 16:24:18 +0100 | thebinary | (~thebinary@2400:1a00:b040:11cf:c948:e2cc:186e:ea47) (Read error: Connection reset by peer) |
2023-01-17 16:25:37 +0100 | CiaoSen | (~Jura@p200300c95723a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2023-01-17 16:27:16 +0100 | son0p | (~ff@181.136.122.143) |
2023-01-17 16:29:14 +0100 | kurbus | (~kurbus@user/kurbus) |
2023-01-17 16:29:39 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2023-01-17 16:31:55 +0100 | gdd | (~gdd@2001:470:1f13:187:e8a5:fbff:fe29:42f5) (Ping timeout: 248 seconds) |
2023-01-17 16:34:26 +0100 | <cheater> | i'm glad we have nix now instead of cabal, cabal never worked. https://imgur.com/a/6uLDoSC |
2023-01-17 16:35:39 +0100 | <[exa]> | great that the syntax is made perfectly clear with these just 43534 pairs of parentheses of all types! |
2023-01-17 16:36:01 +0100 | <merijn> | cheater: Nix is great! |
2023-01-17 16:36:07 +0100 | <merijn> | For keeping yourself employed as Nix engineer |
2023-01-17 16:36:17 +0100 | <cheater> | sigh |
2023-01-17 16:36:17 +0100 | <merijn> | Since no one can replace your infra without breaking everything xD |
2023-01-17 16:39:02 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 16:39:39 +0100 | xyh | (~xyh@2409:8a7a:a8a:3840:235a:9ae0:d084:eed) |
2023-01-17 16:41:32 +0100 | <cheater> | sigh |
2023-01-17 16:41:38 +0100 | mimmy_ | (~mimmy@45.14.195.75) (Ping timeout: 256 seconds) |
2023-01-17 16:41:47 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2023-01-17 16:41:47 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) (Write error: Connection reset by peer) |
2023-01-17 16:41:47 +0100 | califax | (~califax@user/califx) (Remote host closed the connection) |
2023-01-17 16:41:48 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2023-01-17 16:42:24 +0100 | <dminuoso> | To be fair, merijn has rather strong feelings for a bunch of subjects. |
2023-01-17 16:42:41 +0100 | mimmy_ | (~mimmy@176.100.43.29) |
2023-01-17 16:42:42 +0100 | califax | (~califax@user/califx) |
2023-01-17 16:42:57 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-01-17 16:43:06 +0100 | <merijn> | dminuoso: Well, I got the impression that a link to a cryptic god knows how many line error on repl.it wasn't exactly a true appreciation post ;) |
2023-01-17 16:43:18 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2023-01-17 16:43:20 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 256 seconds) |
2023-01-17 16:44:50 +0100 | jonathanx_ | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
2023-01-17 16:46:38 +0100 | <dminuoso> | merijn: honestly thats more of statement about the repl.it diagnostics. |
2023-01-17 16:46:47 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
2023-01-17 16:47:08 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2023-01-17 16:47:29 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) |
2023-01-17 16:47:34 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 272 seconds) |
2023-01-17 16:47:52 +0100 | <boxscape_> | is there a way for me to see which version of a package cabal decided to use? |
2023-01-17 16:48:00 +0100 | <dminuoso> | boxscape_: cabal-plan |
2023-01-17 16:48:04 +0100 | <boxscape_> | thank you |
2023-01-17 16:48:14 +0100 | xyh | (~xyh@2409:8a7a:a8a:3840:235a:9ae0:d084:eed) (Quit: WeeChat 3.8) |
2023-01-17 16:48:36 +0100 | mei | (~mei@user/mei) (Remote host closed the connection) |
2023-01-17 16:48:52 +0100 | Cybro | (~Cybro@user/Cybro) (Remote host closed the connection) |
2023-01-17 16:49:09 +0100 | Cybro | (~Cybro@user/Cybro) |
2023-01-17 16:49:41 +0100 | <merijn> | Technically also "cabal freeze", I guess |
2023-01-17 16:50:04 +0100 | <boxscape_> | does that have the side effect of freezing it? |
2023-01-17 16:50:12 +0100 | <dminuoso> | Yeah, unless you delete the freeze file again |
2023-01-17 16:50:18 +0100 | <merijn> | boxscape_: It generates a freeze file, so yeah |
2023-01-17 16:50:19 +0100 | <dminuoso> | cabal-plan is something you likely want to have/use anyway |
2023-01-17 16:50:19 +0100 | <boxscape_> | I see |
2023-01-17 16:50:26 +0100 | <merijn> | but you can just delete the freeze file when you're done |
2023-01-17 16:50:30 +0100 | <boxscape_> | ok |
2023-01-17 16:50:40 +0100 | <dminuoso> | cabal-plan can, for example, generate a dot file (it can even invoke things like dot2png for you), do transitive reduction |
2023-01-17 16:50:42 +0100 | <dminuoso> | and other useful things |
2023-01-17 16:50:47 +0100 | <dminuoso> | its a wonderful tool to have |
2023-01-17 16:50:52 +0100 | mei | (~mei@user/mei) |
2023-01-17 16:51:20 +0100 | <dminuoso> | or diffs between two plans |
2023-01-17 16:51:24 +0100 | <boxscape_> | sounds neat |
2023-01-17 16:51:39 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
2023-01-17 16:51:51 +0100 | <dminuoso> | for all intends and purposes, this thing ought to be part of cabal-install |
2023-01-17 16:52:00 +0100 | <dminuoso> | some part of it made their way even, like `list-bin` |
2023-01-17 16:54:33 +0100 | gdd | (~gdd@2001:470:1f13:187:41fc:3586:85ea:bc08) |
2023-01-17 16:54:56 +0100 | califax | (~califax@user/califx) (Ping timeout: 255 seconds) |
2023-01-17 16:55:37 +0100 | thebinary | (~thebinary@2400:1a00:b040:11cf:c948:e2cc:186e:ea47) |
2023-01-17 16:56:50 +0100 | califax | (~califax@user/califx) |
2023-01-17 16:56:56 +0100 | acidjnk | (~acidjnk@p200300d6e715c420889663d2e7d74ba2.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
2023-01-17 16:57:56 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2023-01-17 16:58:01 +0100 | thebinary | (~thebinary@2400:1a00:b040:11cf:c948:e2cc:186e:ea47) (Read error: Connection reset by peer) |
2023-01-17 16:58:11 +0100 | <boxscape_> | cabal tells me "conflict: pkg-config package vulkan-any, not found in the pkg-config database" for the version of vulkan I want to use (and had used on a different machine). But it *does* work with an older version. Is there a way for me to just tell cabal to ignore that error? Not sure if that would fix it, but seems like there's a chance |
2023-01-17 16:58:14 +0100 | epolanski | (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
2023-01-17 16:59:29 +0100 | <boxscape_> | oh, I fixed it |
2023-01-17 16:59:51 +0100 | <boxscape_> | ChatGPT told me to run "sudo apt-get install pkg-config" |
2023-01-17 17:00:52 +0100 | <merijn> | boxscape_: "just tell cabal to ignore the error" <- well, that's pretty counter productive :p |
2023-01-17 17:01:25 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 17:01:35 +0100 | CiaoSen | (~Jura@p200300c95723a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
2023-01-17 17:01:51 +0100 | <boxscape_> | yeah, I just figured it was worth a shot :) |
2023-01-17 17:02:03 +0100 | <merijn> | boxscape_: pkg-config dependencies list non-haskell library dependencies (to be resolved via pkg-config), so it's just cabal telling you a required dependency isn't found |
2023-01-17 17:02:28 +0100 | <boxscape_> | well, the thing is that I do have vulkan installed |
2023-01-17 17:02:41 +0100 | <boxscape_> | but apparently I needed to (re-?)install pkg-config |
2023-01-17 17:03:00 +0100 | <boxscape_> | s/(re-?)// |
2023-01-17 17:03:30 +0100 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
2023-01-17 17:05:15 +0100 | mimmy_ | (~mimmy@176.100.43.29) (Ping timeout: 268 seconds) |
2023-01-17 17:05:48 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds) |
2023-01-17 17:07:26 +0100 | <geekosaur[m]> | Possibly the older version of the package didn't use pkg-config |
2023-01-17 17:08:24 +0100 | <boxscape_> | hm seems plausible |
2023-01-17 17:10:21 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 17:11:40 +0100 | jonathanx_ | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 256 seconds) |
2023-01-17 17:11:58 +0100 | thongpv | (~thongpv87@2001:ee0:5577:f0d0:fe01:28c6:d263:9ebf) |
2023-01-17 17:14:22 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
2023-01-17 17:15:08 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds) |
2023-01-17 17:15:33 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) |
2023-01-17 17:15:56 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:53c1:5ba:8f53:5689) (Quit: WeeChat 2.8) |
2023-01-17 17:18:04 +0100 | troydm | (~troydm@user/troydm) (Ping timeout: 260 seconds) |
2023-01-17 17:18:37 +0100 | acidjnk | (~acidjnk@p200300d6e715c420889663d2e7d74ba2.dip0.t-ipconnect.de) |
2023-01-17 17:26:47 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 255 seconds) |
2023-01-17 17:30:44 +0100 | mbuf | (~Shakthi@49.204.120.232) (Quit: Leaving) |
2023-01-17 17:34:35 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 17:36:50 +0100 | mimmy_ | (~mimmy@176.100.43.31) |
2023-01-17 17:36:59 +0100 | Cybro | (~Cybro@user/Cybro) (Ping timeout: 256 seconds) |
2023-01-17 17:37:20 +0100 | <geekosaur[m]> | pkg-config is nice when it works because it deals with dependencies and compilation and linking details, but has to be installed and the required packages have to know about it |
2023-01-17 17:37:40 +0100 | Cybro | (~Cybro@user/Cybro) |
2023-01-17 17:39:03 +0100 | beefyran | (~beefyran@2601:406:100:830:ad1c:493f:e8fc:867) () |
2023-01-17 17:39:11 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 264 seconds) |
2023-01-17 17:41:58 +0100 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) |
2023-01-17 17:43:23 +0100 | mimmy_ | (~mimmy@176.100.43.31) (Ping timeout: 264 seconds) |
2023-01-17 17:44:01 +0100 | <dminuoso> | geekosaur[m]: pkg-config is one of 14 competing standards. |
2023-01-17 17:44:26 +0100 | <dminuoso> | It's a bit sad there's no good all-encompassing solution to dealing with dependencies. |
2023-01-17 17:44:45 +0100 | <geekosaur[m]> | Inevitably |
2023-01-17 17:44:48 +0100 | <dminuoso> | From all the solutions, nix gets somewhat close, but only due to tedious effort by maintainers. |
2023-01-17 17:45:10 +0100 | <geekosaur[m]> | Cue xkcd |
2023-01-17 17:45:18 +0100 | <dminuoso> | :-) |
2023-01-17 17:45:29 +0100 | <dminuoso> | geekosaur[m]: I was very careful with my phrasing of "14 competing standards" |
2023-01-17 17:45:51 +0100 | Cybro | (~Cybro@user/Cybro) (Quit: Leaving) |
2023-01-17 17:45:56 +0100 | <geekosaur[m]> | I noticed |
2023-01-17 17:46:47 +0100 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2023-01-17 17:47:11 +0100 | Joao003 | (~Joao003@2804:840:8311:d200:306d:6168:be07:23f0) |
2023-01-17 17:47:18 +0100 | <Joao003> | hi again |
2023-01-17 17:47:41 +0100 | epolanski | (uid312403@id-312403.helmsley.irccloud.com) |
2023-01-17 17:48:37 +0100 | <boxscape_> | I'm on Windows now and with the package I'm trying to build, cabal just hangs and does nothing. Is there a good way to debug this/has anyone experienced this? |
2023-01-17 17:48:40 +0100 | mizlan | (~mizlan@2607:f010:2a7:1005:a0d7:fa40:4d30:af9f) |
2023-01-17 17:48:52 +0100 | <dminuoso> | boxscape_: what does it hang on? |
2023-01-17 17:49:01 +0100 | Cybro | (~Cybro@user/Cybro) |
2023-01-17 17:49:04 +0100 | <dminuoso> | And does supplying -v3 add extra verbosity around the area you are stuck on? |
2023-01-17 17:49:57 +0100 | <boxscape_> | dminuoso I think after downloading a dependency repo, last message is "Resolving deltas: 100% (3055/3055), done.". Worth noting also that cabal clean says permission denied and I have to do `rm -rf dist-newstyle`to clean. Will try -v3 |
2023-01-17 17:51:57 +0100 | <boxscape_> | hmm with -v3 the last message is ""C:\Program Files\Git\cmd\git.exe" "submodule" "deinit" "--force" "--all"" |
2023-01-17 17:52:41 +0100 | mizlan | (~mizlan@2607:f010:2a7:1005:a0d7:fa40:4d30:af9f) (Ping timeout: 246 seconds) |
2023-01-17 17:54:44 +0100 | <Cybro> | I'm trying to make a generator for lists of integers using arbitrary, how do I get arbitrary to generate lists? |
2023-01-17 17:58:05 +0100 | gtdg | (~gtdg@user/gtdg) (Quit: Client closed) |
2023-01-17 17:59:58 +0100 | <Cybro> | Actually, how do I return a list. Using 'return' in Haskell since I'm using do notation |
2023-01-17 18:00:34 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 18:02:34 +0100 | irrgit_ | (~irrgit@146.70.27.250) |
2023-01-17 18:04:27 +0100 | raoul | (~raoul@95.179.203.88) (Ping timeout: 268 seconds) |
2023-01-17 18:04:52 +0100 | thebinary | (~thebinary@36.252.26.191) |
2023-01-17 18:04:56 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 256 seconds) |
2023-01-17 18:05:24 +0100 | raoul | (~raoul@95.179.203.88) |
2023-01-17 18:06:04 +0100 | eggplantade | (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2023-01-17 18:06:18 +0100 | irrgit__ | (~irrgit@176.113.74.138) (Ping timeout: 268 seconds) |
2023-01-17 18:09:09 +0100 | thebinary | (~thebinary@36.252.26.191) (Ping timeout: 260 seconds) |
2023-01-17 18:09:47 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) (Remote host closed the connection) |
2023-01-17 18:11:52 +0100 | dtman34 | (~dtman34@2601:447:d000:93c9:8095:75ea:f23b:f5f5) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in) |
2023-01-17 18:13:27 +0100 | mimmy_ | (~mimmy@176.100.43.36) |
2023-01-17 18:15:20 +0100 | chiselfuse | (~chiselfus@user/chiselfuse) |
2023-01-17 18:16:14 +0100 | <boxscape_> | hm I think I'll just build cabal from source and see if I can figure out where it hangs |
2023-01-17 18:16:20 +0100 | cheater__ | (~Username@user/cheater) |
2023-01-17 18:18:28 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 252 seconds) |
2023-01-17 18:18:32 +0100 | mimmy_ | (~mimmy@176.100.43.36) (Ping timeout: 256 seconds) |
2023-01-17 18:18:35 +0100 | cheater__ | cheater |
2023-01-17 18:18:53 +0100 | mei_ | (~mei@user/mei) |
2023-01-17 18:18:53 +0100 | mei | Guest4547 |
2023-01-17 18:18:53 +0100 | mei_ | mei |
2023-01-17 18:19:51 +0100 | <EvanR> | Cybro, return has nothing to do with do notation. It's just a function. It does the same thing as pure |
2023-01-17 18:19:53 +0100 | <EvanR> | :t pure |
2023-01-17 18:19:54 +0100 | <lambdabot> | Applicative f => a -> f a |
2023-01-17 18:19:59 +0100 | fserucas | (~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Quit: Leaving) |
2023-01-17 18:20:03 +0100 | <EvanR> | :t return |
2023-01-17 18:20:05 +0100 | <lambdabot> | Monad m => a -> m a |
2023-01-17 18:20:07 +0100 | Guest4547 | (~mei@user/mei) (Ping timeout: 252 seconds) |
2023-01-17 18:20:37 +0100 | hgolden | (~hgolden@cpe-172-251-233-141.socal.res.rr.com) (Remote host closed the connection) |
2023-01-17 18:21:22 +0100 | avicenzi | (~avicenzi@2a00:ca8:a1f:b004::c32) (Ping timeout: 256 seconds) |
2023-01-17 18:21:55 +0100 | <Cybro> | EvanR, can arbitrary be used to generate a list of integers? |
2023-01-17 18:22:02 +0100 | <EvanR> | yes |
2023-01-17 18:22:10 +0100 | ubert1 | (~Thunderbi@2a02:8109:abc0:6434:8e77:5003:7dc0:6c4e) (Remote host closed the connection) |
2023-01-17 18:23:56 +0100 | <Cybro> | So if I want "ns <- arbitrary" how would I get ns to be a list? |
2023-01-17 18:23:57 +0100 | <EvanR> | look at this thing in Test.QuickCheck.Arbitrary |
2023-01-17 18:24:03 +0100 | <EvanR> | vector :: Arbitrary a => Int -> Gen [a] |
2023-01-17 18:24:44 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) |
2023-01-17 18:24:47 +0100 | <monochrom> | Oh heh so you have to think up a length afterall. |
2023-01-17 18:25:09 +0100 | <EvanR> | there's probably many ways to use Arbitrary |
2023-01-17 18:25:17 +0100 | <EvanR> | to get a list |
2023-01-17 18:26:03 +0100 | <Cybro> | What can the function "arbitrary" be used for specifically, not the "Arbitrary" class |
2023-01-17 18:26:59 +0100 | <ncf> | :t listOf |
2023-01-17 18:27:00 +0100 | <anatta> | arbitrary returns a generator |
2023-01-17 18:27:01 +0100 | <lambdabot> | Gen a -> Gen [a] |
2023-01-17 18:27:13 +0100 | hgolden | (~hgolden@cpe-172-251-233-141.socal.res.rr.com) |
2023-01-17 18:27:28 +0100 | <ncf> | there's even an Arbitrary a => Arbitrary [a] instance |
2023-01-17 18:27:59 +0100 | <Joao003> | guys you can try it |
2023-01-17 18:28:10 +0100 | <Joao003> | there are infinitely many tuple functions |
2023-01-17 18:29:36 +0100 | cheater_ | (~Username@user/cheater) |
2023-01-17 18:32:56 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 255 seconds) |
2023-01-17 18:33:03 +0100 | cheater_ | cheater |
2023-01-17 18:35:16 +0100 | razetime | (~Thunderbi@117.193.0.183) (Remote host closed the connection) |
2023-01-17 18:36:08 +0100 | Cybro | (~Cybro@user/Cybro) (Quit: Leaving) |
2023-01-17 18:36:32 +0100 | mizlan | (~mizlan@169.150.203.53) |
2023-01-17 18:37:20 +0100 | nschoe | (~q@2a01:e0a:8e:a190:59bc:3e0d:1333:bdb1) (Quit: Switching off) |
2023-01-17 18:37:50 +0100 | kuribas | (~user@ptr-17d51enmqmkg8yow88s.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 27.1)) |
2023-01-17 18:39:03 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) (Remote host closed the connection) |
2023-01-17 18:42:31 +0100 | dsrt^ | (~dsrt@76.145.190.81) (Remote host closed the connection) |
2023-01-17 18:43:36 +0100 | <EvanR> | hmm... the number of tuple functions... |
2023-01-17 18:47:04 +0100 | <Joao003> | :t (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) |
2023-01-17 18:47:06 +0100 | <lambdabot> | a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o -> p -> q -> r -> s -> t -> u -> v -> w -> x -> y -> z -> t26 -> t27 -> t28 -> t29 -> t30 -> (a, b, c, d, e, f, g, h, i, j, k, |
2023-01-17 18:47:06 +0100 | <lambdabot> | l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, t26, t27, t28, t29, t30) |
2023-01-17 18:47:51 +0100 | <boxscape_> | :t (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) |
2023-01-17 18:47:53 +0100 | <lambdabot> | error: |
2023-01-17 18:47:53 +0100 | <lambdabot> | A 116-tuple is too large for GHC |
2023-01-17 18:47:53 +0100 | <lambdabot> | (max size is 62) |
2023-01-17 18:47:53 +0100 | <boxscape_> | not infinite |
2023-01-17 18:48:23 +0100 | <Joao003> | but a computer with infinite memory could handle a infini-tuple |
2023-01-17 18:48:31 +0100 | <boxscape_> | but not if it's running GHC |
2023-01-17 18:48:50 +0100 | <Joao003> | edit ghc's code |
2023-01-17 18:49:05 +0100 | <geekosaur> | that limit's there for a reason |
2023-01-17 18:49:10 +0100 | <c_wraith> | if I was going to edit that part of ghc, I'd reduce the maximum tuple size to 2 |
2023-01-17 18:49:10 +0100 | <Joao003> | ik |
2023-01-17 18:49:17 +0100 | <Joao003> | maybe 4 |
2023-01-17 18:49:26 +0100 | <c_wraith> | Beyond that, name your type |
2023-01-17 18:49:28 +0100 | <boxscape_> | (importantly, a technical reason, not an aesthetic reason) |
2023-01-17 18:49:36 +0100 | <geekosaur> | it used to dump core on 63-tuples and iirc nobody was able to track down why |
2023-01-17 18:50:10 +0100 | <boxscape_> | I think Idris just handles (a,b,c) as (a, (b, c))? Which seems alright |
2023-01-17 18:50:18 +0100 | <Joao003> | wondering if they would add uncurryn |
2023-01-17 18:50:22 +0100 | <Joao003> | and curryn |
2023-01-17 18:50:29 +0100 | <c_wraith> | boxscape_: Idris is strict, so it's fine there |
2023-01-17 18:50:32 +0100 | <boxscape_> | ah |
2023-01-17 18:50:45 +0100 | <boxscape_> | just make Haskell tuples strict :) |
2023-01-17 18:51:07 +0100 | <int-e> | can Idris flatten the representation of such a tuple to avoid those extra indirections? |
2023-01-17 18:51:12 +0100 | <boxscape_> | not sure |
2023-01-17 18:51:36 +0100 | <Joao003> | it wouldn't be able to handle the type a ~ a -> (a, b) |
2023-01-17 18:51:38 +0100 | <anatta> | I know there are weirdos who call it a tupple and not a two-ple, but it's clearly immoral to have tuples of sizes other than two |
2023-01-17 18:51:44 +0100 | <int-e> | I rather suspect Haskell's designers made this choice for efficiency rather than out of concern for laziness. |
2023-01-17 18:52:02 +0100 | <Joao003> | three-ple? |
2023-01-17 18:52:08 +0100 | <boxscape_> | thruple |
2023-01-17 18:52:32 +0100 | <boxscape_> | oh apparently that's already taken for relationships |
2023-01-17 18:52:33 +0100 | <Joao003> | three-ple sounds like three pole |
2023-01-17 18:53:05 +0100 | <int-e> | mmm triple |
2023-01-17 18:53:14 +0100 | <c_wraith> | int-e: really? Given that the same solution addresses both, I'd expect that both were considered |
2023-01-17 18:53:16 +0100 | <Joao003> | sixty-two-ple |
2023-01-17 18:53:40 +0100 | <glguy> | temple |
2023-01-17 18:53:41 +0100 | <int-e> | c_wraith: Obviously I wasn't there :P |
2023-01-17 18:54:09 +0100 | <c_wraith> | int-e: that's not 100% obvious. Lots of people were! Maybe you were one of them! |
2023-01-17 18:54:26 +0100 | <int-e> | Fine. I still wasn't there though. |
2023-01-17 18:54:37 +0100 | <Joao003> | Is there a whole chapter on documentation about type signatures lol |
2023-01-17 18:54:53 +0100 | <glguy> | int-e: we'll never know |
2023-01-17 18:54:58 +0100 | <int-e> | I learned about Haskell in 2001 or so. |
2023-01-17 18:55:17 +0100 | titibandit1 | (~titibandi@xdsl-81-173-160-143.nc.de) |
2023-01-17 18:55:22 +0100 | <c_wraith> | I keep meaning to write a few blog posts about types in Haskell as documentation, and how they say a lot more than types in most languages. |
2023-01-17 18:56:03 +0100 | <geekosaur> | given the number of packages that think the types are all the documentation they need, I''m not sure such blogging is necessary 🙂 |
2023-01-17 18:56:40 +0100 | enoq | (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq) |
2023-01-17 18:57:01 +0100 | <int-e> | Also if Haskell didn't have those larger tuples built in, people would define them, and then we'd have dozens of incompatible versions of anonymous tuples. |
2023-01-17 18:57:23 +0100 | <Joao003> | true |
2023-01-17 18:58:35 +0100 | <Joao003> | imagine if there was also an infinite family of compose operators each composing more functions together |
2023-01-17 18:59:07 +0100 | <Joao003> | wait |
2023-01-17 18:59:54 +0100 | <Joao003> | 62-ples could be the max size because 62 is the sum of the number of decimal digits, and the number of lowercase and uppercase letters |
2023-01-17 19:00:05 +0100 | <Joao003> | 10+26+26=62 |
2023-01-17 19:00:26 +0100 | <anatta> | @let comp = foldr (.) id |
2023-01-17 19:00:28 +0100 | <lambdabot> | Defined. |
2023-01-17 19:00:46 +0100 | <anatta> | now you can chain how many functions you want |
2023-01-17 19:00:56 +0100 | <Joao003> | > comp [(+1), (+1), (+1)] 1 |
2023-01-17 19:00:58 +0100 | <lambdabot> | 4 |
2023-01-17 19:01:06 +0100 | <c_wraith> | geekosaur: I dunno. Given the fact that I can *use* a lot of libraries that other people complain have no documentation, it's quite likely the people complaining are missing some information. |
2023-01-17 19:01:52 +0100 | <Joao003> | @let cons = foldr (:) [] |
2023-01-17 19:01:53 +0100 | <lambdabot> | Defined. |
2023-01-17 19:02:03 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-01-17 19:02:04 +0100 | <Joao003> | now you can cons how many items you want |
2023-01-17 19:02:18 +0100 | <Joao003> | > cons [1, 2, 3, []] |
2023-01-17 19:02:19 +0100 | <lambdabot> | error: |
2023-01-17 19:02:19 +0100 | <lambdabot> | Ambiguous occurrence ‘cons’ |
2023-01-17 19:02:19 +0100 | <lambdabot> | It could refer to |
2023-01-17 19:02:25 +0100 | <Joao003> | > L.cons [1, 2, 3, []] |
2023-01-17 19:02:27 +0100 | <lambdabot> | error: |
2023-01-17 19:02:27 +0100 | <lambdabot> | • No instance for (Num [()]) arising from a use of ‘e_1123’ |
2023-01-17 19:02:27 +0100 | <lambdabot> | • In the expression: e_1123 |
2023-01-17 19:02:51 +0100 | <glguy> | > L.cons [1, 2, 3] |
2023-01-17 19:02:52 +0100 | <Joao003> | > L.cons [1, 2, 3] |
2023-01-17 19:02:53 +0100 | <lambdabot> | [1,2,3] |
2023-01-17 19:02:54 +0100 | <lambdabot> | [1,2,3] |
2023-01-17 19:03:06 +0100 | <anatta> | more useful to |
2023-01-17 19:03:18 +0100 | <anatta> | @let cons' = foldr (:) |
2023-01-17 19:03:19 +0100 | <lambdabot> | Defined. |
2023-01-17 19:03:20 +0100 | <Joao003> | wait this is just identity |
2023-01-17 19:03:36 +0100 | <boxscape_> | is there some amazing debugging functionality I can use to figure out where a program is hanging or do I have to printf my way to the answer? |
2023-01-17 19:05:06 +0100 | <Joao003> | @let range x = takeWhile (<=x) [1..] |
2023-01-17 19:05:08 +0100 | <lambdabot> | Defined. |
2023-01-17 19:05:16 +0100 | <Joao003> | > range 10 |
2023-01-17 19:05:18 +0100 | <lambdabot> | error: |
2023-01-17 19:05:18 +0100 | <lambdabot> | Ambiguous occurrence ‘range’ |
2023-01-17 19:05:18 +0100 | <lambdabot> | It could refer to |
2023-01-17 19:05:22 +0100 | <Joao003> | > L.range 10 |
2023-01-17 19:05:24 +0100 | <lambdabot> | [1,2,3,4,5,6,7,8,9,10] |
2023-01-17 19:05:50 +0100 | <c_wraith> | boxscape_: ghci has a debugger, but I've never used it... |
2023-01-17 19:05:53 +0100 | <anatta> | boxscape_: Debug.Trace |
2023-01-17 19:06:09 +0100 | <glguy> | Joao003: lambdabot works in a /query window |
2023-01-17 19:06:09 +0100 | <boxscape_> | hmm I will take your suggestions into consideration |
2023-01-17 19:06:15 +0100 | <anatta> | that's the one people don't want you to know about |
2023-01-17 19:06:16 +0100 | <Joao003> | ik |
2023-01-17 19:06:24 +0100 | <boxscape_> | debug.trace is certainly better than printf |
2023-01-17 19:06:46 +0100 | thebinary | (~thebinary@2400:1a00:b040:c48c:c948:e2cc:186e:ea47) |
2023-01-17 19:07:12 +0100 | thebinary | (~thebinary@2400:1a00:b040:c48c:c948:e2cc:186e:ea47) (Read error: Connection reset by peer) |
2023-01-17 19:08:21 +0100 | marinelli | (~marinelli@gateway/tor-sasl/marinelli) |
2023-01-17 19:08:52 +0100 | marinelli | (~marinelli@gateway/tor-sasl/marinelli) (Quit: marinelli) |
2023-01-17 19:10:03 +0100 | <Joao003> | glguy: #haskell-offtopic exists |
2023-01-17 19:10:05 +0100 | Sauvin | (~sauvin@user/Sauvin) (Remote host closed the connection) |
2023-01-17 19:10:39 +0100 | Sauvin | (~sauvin@user/Sauvin) |
2023-01-17 19:12:10 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) |
2023-01-17 19:12:37 +0100 | Kuttenbrunzer | (~Kuttenbru@2a02:8108:8b80:1d48::c00) |
2023-01-17 19:13:03 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) (Max SendQ exceeded) |
2023-01-17 19:13:30 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) |
2023-01-17 19:13:39 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
2023-01-17 19:14:55 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
2023-01-17 19:16:47 +0100 | <boxscape_> | oh maybe I can use profiling functionality to see where it hangs... |
2023-01-17 19:17:18 +0100 | tng | (~tng@4133220a.cst.lightpath.net) |
2023-01-17 19:18:13 +0100 | <tng> | Hi, im new to haskell, is this syntatically correct? |
2023-01-17 19:18:13 +0100 | <tng> | sumNums numLst = |
2023-01-17 19:18:14 +0100 | <tng> | numLst == [] |
2023-01-17 19:18:14 +0100 | <tng> | | True = 0 |
2023-01-17 19:18:15 +0100 | <tng> | | False = (head numLst) + sumNums (tail numLst) |
2023-01-17 19:18:26 +0100 | <tng> | I get this error |
2023-01-17 19:18:26 +0100 | <tng> | Command exited with code 1. |
2023-01-17 19:18:27 +0100 | <tng> | GHC output |
2023-01-17 19:18:27 +0100 | <tng> | input.hs:17:3: warning: [-Wtabs] |
2023-01-17 19:18:28 +0100 | <tng> | Tab character found here, and in five further locations. |
2023-01-17 19:18:28 +0100 | <tng> | Please use spaces instead. |
2023-01-17 19:18:29 +0100 | <tng> | | |
2023-01-17 19:18:29 +0100 | <tng> | 17 | |
2023-01-17 19:18:30 +0100 | <tng> | | ^^^^^^ |
2023-01-17 19:18:30 +0100 | <tng> | input.hs:20:17: error: parse error on input ‘|’ |
2023-01-17 19:18:31 +0100 | <tng> | | |
2023-01-17 19:18:31 +0100 | <tng> | 20 | | True = 0 |
2023-01-17 19:18:32 +0100 | <tng> | | ^ |
2023-01-17 19:18:39 +0100 | <glguy> | tng: please don't paste directly into chat |
2023-01-17 19:18:46 +0100 | <tng> | oh sorry |
2023-01-17 19:18:50 +0100 | <boxscape_> | tng: you can use e.g. https://paste.tomsmeding.com/ |
2023-01-17 19:18:55 +0100 | <glguy> | the syntax for what you're doing for if then else isn't quite right |
2023-01-17 19:18:58 +0100 | titibandit1 | (~titibandi@xdsl-81-173-160-143.nc.de) (Quit: Leaving.) |
2023-01-17 19:19:19 +0100 | kurbus | (~kurbus@user/kurbus) (Quit: Client closed) |
2023-01-17 19:19:22 +0100 | <glguy> | you'll need to either use a case numLst == [] of ... or if null numList then, but better would be pattern matching on numList |
2023-01-17 19:19:34 +0100 | <glguy> | sumNums [] = ...; sumNums (x:xs) = ... |
2023-01-17 19:19:56 +0100 | <tng> | https://paste.tomsmeding.com/NJKdfRaJ |
2023-01-17 19:19:56 +0100 | <Joao003> | sumNums [] = 0 |
2023-01-17 19:20:28 +0100 | <Joao003> | sumNums (h : t) = h + sumNums t |
2023-01-17 19:22:53 +0100 | <tng> | glguy sorry i dont follow. I just learned the pattern matching with pipe | char. And it's complaining not able to parse that. Could you please explain by | char? |
2023-01-17 19:23:08 +0100 | <tng> | im not worrying about checking the empty list for now |
2023-01-17 19:23:21 +0100 | cstm[m] | (~cstmmatri@2001:470:69fc:105::2:f76f) |
2023-01-17 19:23:42 +0100 | mimmy_ | (~mimmy@176.100.43.30) |
2023-01-17 19:23:48 +0100 | <glguy> | tng: You could use a "guard" with the | syntax, but then it goes on the thing you're defining, so that'd be: sumNums numList | null numList = ... | otherwise = ... |
2023-01-17 19:24:04 +0100 | <glguy> | you don't provide a separate expression to case on, like you had with "numList == []" |
2023-01-17 19:24:16 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 256 seconds) |
2023-01-17 19:24:26 +0100 | <glguy> | each guard expression needs to be a boolean, the first one that evaluates to True gets picked |
2023-01-17 19:25:06 +0100 | <Joao003> | tng: have you learned about folds? |
2023-01-17 19:25:12 +0100 | <tng> | oh interesting, that's why. Thank you |
2023-01-17 19:25:36 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-01-17 19:25:37 +0100 | <tng> | hi Joao003, yes I know fold, reduce |
2023-01-17 19:25:40 +0100 | finsternis | (~X@23.226.237.192) (Read error: Connection reset by peer) |
2023-01-17 19:26:30 +0100 | <tng> | glguy I came from f# so that tripped me up a bit. glguy Joao003 thank you for your help |
2023-01-17 19:27:10 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 272 seconds) |
2023-01-17 19:28:22 +0100 | <Joao003> | and i came from python. |
2023-01-17 19:29:22 +0100 | <Joao003> | > sum [1, 2, 3] |
2023-01-17 19:29:24 +0100 | <lambdabot> | 6 |
2023-01-17 19:29:32 +0100 | <Joao003> | list sum builtin |
2023-01-17 19:30:49 +0100 | kurbus | (~kurbus@user/kurbus) |
2023-01-17 19:33:54 +0100 | <Joao003> | channel dead |
2023-01-17 19:36:36 +0100 | cheater_ | (~Username@user/cheater) |
2023-01-17 19:37:43 +0100 | notzmv | (~zmv@user/notzmv) |
2023-01-17 19:38:41 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) |
2023-01-17 19:39:33 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) |
2023-01-17 19:40:02 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 268 seconds) |
2023-01-17 19:40:02 +0100 | cheater_ | cheater |
2023-01-17 19:43:04 +0100 | econo | (uid147250@user/econo) |
2023-01-17 19:43:04 +0100 | beteigeuze | (~Thunderbi@bl14-81-220.dsl.telepac.pt) (Ping timeout: 260 seconds) |
2023-01-17 19:44:16 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) (Ping timeout: 252 seconds) |
2023-01-17 19:45:34 +0100 | jwiegley | (~jwiegley@2600:1700:cf00:db0:3c2b:7b2b:9a29:78) |
2023-01-17 19:46:44 +0100 | <Jadesheit[m]> | sometimes I like to make pointfree and ununderstandable just for fun |
2023-01-17 19:46:46 +0100 | Kuttenbrunzer | (~Kuttenbru@2a02:8108:8b80:1d48::c00) (Quit: Where is it) |
2023-01-17 19:46:58 +0100 | <Jadesheit[m]> | `weight = nub >>= ((*) `on` length)` |
2023-01-17 19:47:08 +0100 | <Jadesheit[m]> | s/`/``/, s/`/``/ |
2023-01-17 19:48:03 +0100 | mizlan | (~mizlan@169.150.203.53) (Ping timeout: 268 seconds) |
2023-01-17 19:48:39 +0100 | <dminuoso> | This reminds me slightly of Dijkstra: `The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise` |
2023-01-17 19:48:49 +0100 | <dminuoso> | And usual point-free notation does not attain that. |
2023-01-17 19:48:54 +0100 | <dminuoso> | At least not in most examples. |
2023-01-17 19:49:20 +0100 | <dminuoso> | This is in part why using things like Category *can* lead to incredibly compact and concise code, if it models the problem well enough |
2023-01-17 19:49:37 +0100 | <dminuoso> | But eliding function arguments looks like just a shallow trick to make code more complicated in many examples |
2023-01-17 19:50:59 +0100 | <Joao003> | the functions that @pl comes up with are just a mess of flips, composes and other builtins. |
2023-01-17 19:53:07 +0100 | <boxscape_> | hm does +RTS -p only write to the .prof file once the program finishes? |
2023-01-17 19:53:15 +0100 | <boxscape_> | because if I force-kill my program it has 0 bytes |
2023-01-17 19:53:28 +0100 | <geekosaur> | I believe so, yes |
2023-01-17 19:53:32 +0100 | <boxscape_> | hmmm |
2023-01-17 19:53:32 +0100 | <geekosaur> | this has come up before |
2023-01-17 19:53:50 +0100 | <boxscape_> | I suppose I can't use profiling to find out where cabal hangs, then, after all |
2023-01-17 19:54:08 +0100 | <geekosaur> | eventlog? |
2023-01-17 19:54:42 +0100 | <boxscape_> | I don't think I've heard of that |
2023-01-17 19:54:48 +0100 | <dminuoso> | Joao003: Of course, its a completely mechanical substition algorithm. |
2023-01-17 19:54:56 +0100 | <dminuoso> | It has no incentive or machinery to be smart about it |
2023-01-17 19:55:02 +0100 | <geekosaur> | all the pieces may not be there though, but they're moving toward using eventlog for profiling in part to help with this |
2023-01-17 19:55:16 +0100 | <boxscape_> | geekosaur I'll check it out, thanks |
2023-01-17 19:55:27 +0100 | beteigeuze | (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) |
2023-01-17 19:55:55 +0100 | <geekosaur> | https://downloads.haskell.org/ghc/9.4.1/docs/users_guide/runtime_control.html#event-log-output |
2023-01-17 19:56:07 +0100 | <boxscape_> | thank you |
2023-01-17 19:56:08 +0100 | <geekosaur> | which points to some other relevant stuff, notably +RTS -l |
2023-01-17 19:56:10 +0100 | <Jadesheit[m]> | dminuoso: totally agree; I just like to do these as exercises, it helps me to learn functions and think more functionally |
2023-01-17 19:56:46 +0100 | <dminuoso> | I have a hard time seeing how rewriting into point-free code realistically improves learning or haskell thinking |
2023-01-17 19:56:49 +0100 | <Joao003> | Jadesheit[m]: ever used uncurry to make it pointfree |
2023-01-17 19:56:54 +0100 | <dminuoso> | But who knows, people work differently. |
2023-01-17 19:57:42 +0100 | <geekosaur> | all it does is help with the lambda calculus view |
2023-01-17 19:57:49 +0100 | <Joao003> | > uncurry (+) (1, 2) |
2023-01-17 19:57:51 +0100 | <lambdabot> | 3 |
2023-01-17 19:57:58 +0100 | <dminuoso> | Jadesheit[m]: Over the past few years Ive become to an important realization: Code is written only once, but read many times by humans. As such, writing code to me more understandable seems to be a more important goal to me. |
2023-01-17 19:58:07 +0100 | <geekosaur> | well, and the compiler likes it better, but we generally make the compiler do the conversion instead of forcing programmers to do so |
2023-01-17 19:58:13 +0100 | <dminuoso> | Which is also why I greatly dislike code formatters or even linters |
2023-01-17 19:58:28 +0100 | <Jadesheit[m]> | yes I totally agree with all of these |
2023-01-17 19:58:30 +0100 | <geekosaur> | Because of that |
2023-01-17 19:59:10 +0100 | <Jadesheit[m]> | I guess it's just a personal thing; In the beginning I struggled with ($), but playing around with it helped me gain a very intuitive understanding of it |
2023-01-17 19:59:38 +0100 | mizlan | (~mizlan@89.46.114.142) |
2023-01-17 19:59:40 +0100 | <Jadesheit[m]> | I guess here its the same, playing around with the language and seeing what I can do helps me gain an insight even when the specific thing isn't useful |
2023-01-17 19:59:57 +0100 | <Jadesheit[m]> | I play around a lot more than write actual code with haskell |
2023-01-17 20:00:26 +0100 | <geekosaur> | at some point you'll start gaining more by actually writing useful code with it |
2023-01-17 20:00:55 +0100 | <geekosaur> | I'm gradually replacing most of my perl scripts with haskell, unless they're really heavy on the regexps |
2023-01-17 20:02:30 +0100 | <geekosaur> | (https://paste.tomsmeding.com/360uMJkd being an example) |
2023-01-17 20:02:43 +0100 | <dminuoso> | I wish Haskell had some out of box support for either reliable parsers/regex, and some easy-to-use http stuff |
2023-01-17 20:02:49 +0100 | jespada | (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) |
2023-01-17 20:02:52 +0100 | <dminuoso> | Those would make a lot of scripts easy to port to Haskell |
2023-01-17 20:03:51 +0100 | <dminuoso> | Especially HTTP is quite complicated, even the libraries calling themselves "simple" are still complicated, which is probably largely results of HTTP being really complicated. Haskell authors have a higher tendency to write a robust but hard to use API than easy to use but brittle APIs. |
2023-01-17 20:03:56 +0100 | mizlan | (~mizlan@89.46.114.142) (Ping timeout: 256 seconds) |
2023-01-17 20:04:14 +0100 | ft | (~ft@p4fc2a257.dip0.t-ipconnect.de) |
2023-01-17 20:04:54 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) |
2023-01-17 20:05:04 +0100 | <dminuoso> | Or even simple json support built into base. |
2023-01-17 20:05:10 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds) |
2023-01-17 20:05:19 +0100 | beteigeuze | (~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 268 seconds) |
2023-01-17 20:05:47 +0100 | <dminuoso> | Which if one is familiar with Haskell seems like a bizarre request, but if I just want to hack together a quick script to get some job done, these are things I likely want without creating a directory, initializing a cabal project, specifying dependencies, structuring modules.. |
2023-01-17 20:07:08 +0100 | <boxscape_> | dminuoso you can use something like `#!cabal --build-depends=...` at the top of the file |
2023-01-17 20:07:10 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 268 seconds) |
2023-01-17 20:07:11 +0100 | <boxscape_> | I think? |
2023-01-17 20:07:38 +0100 | <geekosaur> | similar but not quite |
2023-01-17 20:07:49 +0100 | <boxscape_> | yeah it's not quite right |
2023-01-17 20:07:54 +0100 | <geekosaur> | ut yes, cabal supports scripts since one of the later 2.x versions iirc |
2023-01-17 20:07:55 +0100 | <boxscape_> | I think I've actually only seen it done with slack |
2023-01-17 20:08:03 +0100 | <boxscape_> | stack |
2023-01-17 20:08:10 +0100 | <int-index-r> | I use nix to get a ghc package database with all the packages I need |
2023-01-17 20:08:43 +0100 | <dminuoso> | nix is the anthesis of simple, though. |
2023-01-17 20:08:50 +0100 | <dminuoso> | *antithesis |
2023-01-17 20:10:06 +0100 | <int-index-r> | it does something that neither cabal or stack do: give me a ghc package database with all packages installed, so I get to use ghc/ghci as if everything I cared about was in the standard library |
2023-01-17 20:10:15 +0100 | <boxscape_> | jesus |
2023-01-17 20:10:16 +0100 | <boxscape_> | cabal is hanging while trying to install ghc-events, which I was going to use to figure out why cabal is hanging |
2023-01-17 20:10:44 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2023-01-17 20:11:54 +0100 | <Joao003> | lol |
2023-01-17 20:12:00 +0100 | <Joao003> | replace your cabal |
2023-01-17 20:13:21 +0100 | <Joao003> | paste your terminal here |
2023-01-17 20:13:33 +0100 | <Joao003> | https://paste.tomsmeding.com |
2023-01-17 20:14:07 +0100 | <boxscape_> | There is no output. It just hangs. With -v3 the last line is `"C:\Program Files\Git\cmd\git.exe" "fetch"` |
2023-01-17 20:14:12 +0100 | <Joao003> | oh no |
2023-01-17 20:14:23 +0100 | <boxscape_> | apparently it happens whenever trying to build a package that depends on a git repository |
2023-01-17 20:14:28 +0100 | <Joao003> | try replacing your cabal |
2023-01-17 20:14:31 +0100 | <boxscape_> | I have |
2023-01-17 20:14:58 +0100 | <Joao003> | i guess it's trying to fetch nothing |
2023-01-17 20:15:18 +0100 | <Joao003> | is your git at that folder |
2023-01-17 20:15:21 +0100 | <boxscape_> | oh wait it's because I'm using cabal-install from the directory in which my hanging package is. Outside of that I actually can install ghc-events |
2023-01-17 20:15:29 +0100 | <Joao003> | lol |
2023-01-17 20:17:42 +0100 | <Joao003> | did it install now? |
2023-01-17 20:17:57 +0100 | <boxscape_> | ghc-events did, yes |
2023-01-17 20:18:11 +0100 | Guest61 | (~Guest61@84.218.13.11) |
2023-01-17 20:18:30 +0100 | Guest61 | (~Guest61@84.218.13.11) (Client Quit) |
2023-01-17 20:18:40 +0100 | <Joao003> | i want a challenge |
2023-01-17 20:18:44 +0100 | <Joao003> | give me a builtin |
2023-01-17 20:18:50 +0100 | <Joao003> | and i will guess the type |
2023-01-17 20:19:06 +0100 | troydm | (~troydm@user/troydm) |
2023-01-17 20:19:11 +0100 | <boxscape_> | builtin meaning part of the base library? |
2023-01-17 20:19:15 +0100 | <Joao003> | yeah |
2023-01-17 20:19:21 +0100 | <boxscape_> | fix |
2023-01-17 20:19:35 +0100 | Inst_ | (~Inst@2601:6c4:4081:54f0:ac9c:50:1323:7808) |
2023-01-17 20:19:40 +0100 | gmg | (~user@user/gehmehgeh) |
2023-01-17 20:19:40 +0100 | <Joao003> | idk what fix does |
2023-01-17 20:19:48 +0100 | <Joao003> | oh fixed point? |
2023-01-17 20:19:51 +0100 | <boxscape_> | yes |
2023-01-17 20:20:05 +0100 | <boxscape_> | it finds the least defined fixed point |
2023-01-17 20:20:32 +0100 | <Joao003> | idk |
2023-01-17 20:20:45 +0100 | <boxscape_> | % :t fix |
2023-01-17 20:20:45 +0100 | <yahb2> | fix :: (a -> a) -> a |
2023-01-17 20:20:52 +0100 | <Joao003> | oh |
2023-01-17 20:21:00 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
2023-01-17 20:21:00 +0100 | <Joao003> | another one |
2023-01-17 20:21:03 +0100 | <boxscape_> | hm |
2023-01-17 20:21:25 +0100 | <Joao003> | fix is the Y combinator? |
2023-01-17 20:21:29 +0100 | <anatta> | Joao003: it iterates until it stops changing, basically |
2023-01-17 20:21:31 +0100 | <anatta> | yes |
2023-01-17 20:21:33 +0100 | <Joao003> | oh |
2023-01-17 20:21:40 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 20:22:25 +0100 | <boxscape_> | you can try to guess the type of `for`, which is intended to emulate a for loop |
2023-01-17 20:23:05 +0100 | <Joao003> | emulate what for loop? the c for loop or the python "for in"? |
2023-01-17 20:23:11 +0100 | <boxscape_> | apparently I'm going for 3-letter words starting with f today |
2023-01-17 20:23:14 +0100 | <boxscape_> | python |
2023-01-17 20:23:40 +0100 | Inst | (~Inst@2601:6c4:4081:54f0:ac48:655:9d0e:6fdc) (Ping timeout: 260 seconds) |
2023-01-17 20:23:44 +0100 | <dminuoso> | boxscape_: I would say it doesnt just "emulate it", it generalizes it. |
2023-01-17 20:23:52 +0100 | <dminuoso> | emulate sounds like a poor imitation. |
2023-01-17 20:23:55 +0100 | <anatta> | there was this wordle clone where you had to guess a function based on the type or something |
2023-01-17 20:23:55 +0100 | <dminuoso> | but `for` is so much more potent. |
2023-01-17 20:23:59 +0100 | <boxscape_> | fair, I guess I'm saying that because it's not built in |
2023-01-17 20:24:07 +0100 | <anatta> | maybe vice versa |
2023-01-17 20:24:15 +0100 | <Joao003> | what wordle clone lol |
2023-01-17 20:24:24 +0100 | <anatta> | I can't remember what it was called |
2023-01-17 20:24:31 +0100 | <Joao003> | :( |
2023-01-17 20:24:51 +0100 | <dminuoso> | boxscape_: Yeah, Haskell is quite unstructured. :) |
2023-01-17 20:25:03 +0100 | <dminuoso> | its almost curious we have if-then-else at all |
2023-01-17 20:25:23 +0100 | <dminuoso> | Next time I meet SPJ Ill ask him whether he can recall why that is. |
2023-01-17 20:25:23 +0100 | <Joao003> | idk for's type |
2023-01-17 20:25:30 +0100 | <Joao003> | % :t for |
2023-01-17 20:25:30 +0100 | <yahb2> | <interactive>:1:1: error: ; • Variable not in scope: for ; • Perhaps you meant one of these: ; ‘or’ (imported from Prelude), ‘forM’ (imported from Control.Monad) |
2023-01-17 20:25:31 +0100 | <boxscape_> | It's because Miranda had it, I would assume |
2023-01-17 20:25:43 +0100 | <boxscape_> | (I don't know if Miranda had it, but I'm assuming that, too) |
2023-01-17 20:25:44 +0100 | <Joao003> | :t for |
2023-01-17 20:25:46 +0100 | <lambdabot> | (Traversable t, Applicative f) => t a -> (a -> f b) -> f (t b) |
2023-01-17 20:25:50 +0100 | <Joao003> | wth |
2023-01-17 20:26:10 +0100 | <Joao003> | now no 3 letter builtins starting with f |
2023-01-17 20:26:14 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 260 seconds) |
2023-01-17 20:26:24 +0100 | <yushyin> | anatta: https://type-signature.com/ this one? |
2023-01-17 20:27:18 +0100 | <anatta> | yushyin: no, but it was similar enough that it might have been an earlier version |
2023-01-17 20:27:48 +0100 | <dminuoso> | boxscape_: I checked the Miranda Systems Manual, I dont think if-then-else was in it |
2023-01-17 20:27:50 +0100 | <dminuoso> | https://www.cs.kent.ac.uk/people/staff/dat/miranda/manual/7.html |
2023-01-17 20:27:56 +0100 | <boxscape_> | oh, huh |
2023-01-17 20:28:21 +0100 | <dminuoso> | A simple expression is one of the following: [identifier] [literal] [operator] [`show` or `readvals`] [a list] [a tuple] [any expression enclosed in parnethesis] |
2023-01-17 20:29:26 +0100 | <boxscape_> | "An expression is either simple, or a function application, or an operator expression, or an operator" |
2023-01-17 20:29:26 +0100 | jespada | (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Read error: Connection reset by peer) |
2023-01-17 20:29:38 +0100 | <boxscape_> | s/^/And |
2023-01-17 20:30:41 +0100 | <dminuoso> | Yup |
2023-01-17 20:30:42 +0100 | jespada | (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) |
2023-01-17 20:30:49 +0100 | <Joao003> | Thanks https://type-signature.com for teaching me that lefts and rights exist |
2023-01-17 20:30:57 +0100 | <boxscape_> | apparently Miranda use "if" for guards, and they are the other way around https://www.cs.kent.ac.uk/people/staff/dat/miranda/Overview.html |
2023-01-17 20:31:23 +0100 | <dminuoso> | boxscape_: which seems much more aligned with mathematics honestly |
2023-01-17 20:31:27 +0100 | <boxscape_> | true |
2023-01-17 20:31:47 +0100 | <dminuoso> | I've seen this quite literally in some publications |
2023-01-17 20:31:55 +0100 | <geekosaur> | yeh, haskell guards always make me think of (cond) |
2023-01-17 20:32:13 +0100 | <geekosaur> | whereas I see the mathy way quite a lot |
2023-01-17 20:32:23 +0100 | <dminuoso> | geekosaur: wdym by (cond)? |
2023-01-17 20:32:30 +0100 | <geekosaur> | the lisp construct |
2023-01-17 20:32:31 +0100 | <monochrom> | boxscape_: w00t Perl-style "stmt if cond" :) |
2023-01-17 20:33:05 +0100 | <geekosaur> | (cond (boolexp stmts) (boolexp stmts) [(t stmts)]) |
2023-01-17 20:33:25 +0100 | <monochrom> | Or more likely inspired by math's by-case notation. |
2023-01-17 20:33:47 +0100 | <monochrom> | err, actually s/by-case/piece-wise/ |
2023-01-17 20:33:48 +0100 | <dminuoso> | The suffix condition does seem a bit nicer to read for small compact code |
2023-01-17 20:34:00 +0100 | <dminuoso> | a prefix condition lends itself much nicer for non-trivial cases |
2023-01-17 20:34:09 +0100 | <boxscape_> | yeah |
2023-01-17 20:34:17 +0100 | <dminuoso> | and I guess an additional benefit of the prefix condition is that it looks more similar to case-of as well |
2023-01-17 20:34:42 +0100 | <boxscape_> | I do like having the patterns and conditions written close together, since they're kind of similar |
2023-01-17 20:35:44 +0100 | <monochrom> | Evil invention: Revisionist Haskell in which all pattern matching must be pattern guards >:) |
2023-01-17 20:35:55 +0100 | <dminuoso> | Mmm I tend to like indenting the defining clause with the condition for both functions and case-of even https://gist.github.com/dminuoso/bd4284e4e7e68cc7ca4f5b566d89b416 |
2023-01-17 20:35:55 +0100 | <boxscape_> | or all guards must be view patterns |
2023-01-17 20:36:27 +0100 | <dminuoso> | (but this depends a bit on context and the length of the defining expression |
2023-01-17 20:37:07 +0100 | <dminuoso> | on that note, is there a good name for `whattocallthis` in `case scruntinee of pattern -> whattocallthis`? |
2023-01-17 20:37:14 +0100 | <dminuoso> | Is that a clause? |
2023-01-17 20:37:35 +0100 | <boxscape_> | I think <pattern -> whattocallthis> is a clause? not sure |
2023-01-17 20:37:42 +0100 | <monochrom> | I sometimes say "body" but I don't know whether it is standard. |
2023-01-17 20:37:59 +0100 | <monochrom> | And some other times I say "branch". |
2023-01-17 20:38:23 +0100 | <Joao003> | <pattern -> statement>? |
2023-01-17 20:38:27 +0100 | <monochrom> | "branch" is standard in "if <cond> then <branch> else <branch>" |
2023-01-17 20:38:32 +0100 | <dminuoso> | statement is definitely off, as its not a statement but an expression |
2023-01-17 20:38:46 +0100 | <Joao003> | <pttrn -> stmt> |
2023-01-17 20:38:52 +0100 | <Joao003> | <pttrn -> expr> |
2023-01-17 20:39:02 +0100 | <boxscape_> | it is not a statement, since those are the lines in a do block |
2023-01-17 20:39:17 +0100 | <Joao003> | i don't use do blocks |
2023-01-17 20:39:22 +0100 | <dminuoso> | *do expression |
2023-01-17 20:39:25 +0100 | <dminuoso> | :-P |
2023-01-17 20:39:31 +0100 | <Joao003> | :D |
2023-01-17 20:39:54 +0100 | <dminuoso> | monochrom: mmm body isnt too terrible, I dont like branch though as to me that includes the pattern |
2023-01-17 20:40:05 +0100 | <dminuoso> | that is the entirety of `pat -> expr` would be the branch |
2023-01-17 20:40:05 +0100 | <boxscape_> | I suppose <pattern -> whattocallthis> is called "alternative" in the standard, so from that point of view it would make sense to call whattocallthis a clause, but I don't know if anyone does |
2023-01-17 20:40:09 +0100 | <monochrom> | Ah, right. |
2023-01-17 20:40:43 +0100 | <Joao003> | guys use :þ instead of :P |
2023-01-17 20:41:15 +0100 | <geekosaur> | I think I'm the only one who does that |
2023-01-17 20:41:23 +0100 | Sauvin | (~sauvin@user/Sauvin) (Remote host closed the connection) |
2023-01-17 20:41:26 +0100 | <darkling> | I've been known to. |
2023-01-17 20:41:31 +0100 | <dminuoso> | The haskell report seems to use `body` as well |
2023-01-17 20:41:33 +0100 | <geekosaur> | sadly whether it looks right depends on the font on the receiving system |
2023-01-17 20:41:40 +0100 | <Joao003> | pattern -> whattocallthis lol |
2023-01-17 20:41:40 +0100 | <dminuoso> | 3.13 Case Expressions [...] `A case expression must have at least one alternative and each alternative must have at least one body.` |
2023-01-17 20:41:50 +0100 | <dminuoso> | `Each body must have the same type, and the type of the whole expression is that type.` |
2023-01-17 20:42:02 +0100 | <boxscape_> | ah |
2023-01-17 20:42:11 +0100 | <monochrom> | :) |
2023-01-17 20:42:13 +0100 | <dminuoso> | monochrom: So you win this round! |
2023-01-17 20:42:17 +0100 | <dminuoso> | But you also lost. |
2023-01-17 20:42:19 +0100 | <dminuoso> | What does that make you? |
2023-01-17 20:42:30 +0100 | <monochrom> | "win some, lose some" :) |
2023-01-17 20:42:33 +0100 | <geekosaur> | real life 😈 |
2023-01-17 20:42:50 +0100 | <monochrom> | "is it half empty or half full?" :) |
2023-01-17 20:43:00 +0100 | <Joao003> | some = some, tie |
2023-01-17 20:43:06 +0100 | Sauvin | (~sauvin@user/Sauvin) |
2023-01-17 20:43:11 +0100 | <dminuoso> | Oh gosh, what decides that evil color of that emoji geekosaur? Is that my font? Is it my terminal? |
2023-01-17 20:43:21 +0100 | <monochrom> | (xckd be like "no no no, don't do that, half vacuum is a very bad idea...") |
2023-01-17 20:43:57 +0100 | <boxscape_> | should be font I think |
2023-01-17 20:44:03 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) |
2023-01-17 20:44:05 +0100 | <monochrom> | I think the exact unicode codepoint specifies colour too. |
2023-01-17 20:44:11 +0100 | witcher_ | (~witcher@static.74.224.203.116.clients.your-server.de) |
2023-01-17 20:44:23 +0100 | <geekosaur> | font, I believe |
2023-01-17 20:44:25 +0100 | <dminuoso> | Mmm, my browser renders it with a different color |
2023-01-17 20:44:37 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) (Remote host closed the connection) |
2023-01-17 20:44:43 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-01-17 20:44:48 +0100 | <Joao003> | hexchat renders as monochrome |
2023-01-17 20:45:15 +0100 | <geekosaur> | in my terminal it's black and white, in my hexchat it's magenta |
2023-01-17 20:45:39 +0100 | <monochrom> | My hexchat shows magenta too. |
2023-01-17 20:45:44 +0100 | <geekosaur> | font is Source Code Variable 10 |
2023-01-17 20:45:57 +0100 | <geekosaur> | I don't know what fallback font it uses |
2023-01-17 20:46:15 +0100 | <Joao003> | i can make hexchat opaque |
2023-01-17 20:46:20 +0100 | <monochrom> | No way Source Code Variable 10 covers emojis. Definitely fallback font. |
2023-01-17 20:47:16 +0100 | <geekosaur> | probably specified by ubuntu in one of the global fontconfig files |
2023-01-17 20:47:40 +0100 | witcher | (dd5f7b3c87@2604:bf00:561:2000::296) (Remote host closed the connection) |
2023-01-17 20:47:40 +0100 | witcher_ | witcher |
2023-01-17 20:47:51 +0100 | <Joao003> | font is consolas 10 |
2023-01-17 20:48:33 +0100 | <Joao003> | make me guess a function by its type |
2023-01-17 20:48:59 +0100 | <monochrom> | Many web browsers (including both Firefox and Chrome) also do its own fallback font thing out of distrust of random Linux distros. So web browsers can show different glyphs/fonts than other programs. |
2023-01-17 20:49:31 +0100 | <dminuoso> | mmm, xfd is properly broken for me, refuses to open the font |
2023-01-17 20:50:17 +0100 | <Joao003> | ^ |
2023-01-17 20:50:43 +0100 | <dminuoso> | ah now it does, but the next button doesnt work |
2023-01-17 20:50:46 +0100 | dminuoso | suspects foul play |
2023-01-17 20:50:58 +0100 | <Joao003> | wth is that suspects foul play thing |
2023-01-17 20:50:58 +0100 | kee | (~~kee@user/wizzwizz4) (Ping timeout: 260 seconds) |
2023-01-17 20:51:57 +0100 | <dminuoso> | Even the quit button doesnt work |
2023-01-17 20:51:59 +0100 | <dminuoso> | Mmm |
2023-01-17 20:52:26 +0100 | <Joao003> | forcefully end the process |
2023-01-17 20:52:38 +0100 | <dminuoso> | Thats not the issue, Im rather worried this tool doesnt work at all\ |
2023-01-17 20:52:38 +0100 | witcher | (~witcher@static.74.224.203.116.clients.your-server.de) (Remote host closed the connection) |
2023-01-17 20:52:43 +0100 | <Joao003> | :/ |
2023-01-17 20:52:47 +0100 | witcher | (~witcher@static.74.224.203.116.clients.your-server.de) |
2023-01-17 20:52:58 +0100 | <Joao003> | what tool |
2023-01-17 20:54:01 +0100 | kee | (~~kee@user/wizzwizz4) |
2023-01-17 20:58:44 +0100 | <Joao003> | chat died |
2023-01-17 20:59:00 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 272 seconds) |
2023-01-17 20:59:08 +0100 | tng | (~tng@4133220a.cst.lightpath.net) (Ping timeout: 260 seconds) |
2023-01-17 20:59:17 +0100 | Joao003 | (~Joao003@2804:840:8311:d200:306d:6168:be07:23f0) (Quit: Leaving) |
2023-01-17 20:59:21 +0100 | <yushyin> | ... |
2023-01-17 20:59:53 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-01-17 21:00:43 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) |
2023-01-17 21:02:35 +0100 | kurbus | (~kurbus@user/kurbus) (Quit: Client closed) |
2023-01-17 21:04:09 +0100 | remedan | (~remedan@octo.cafe) (Ping timeout: 260 seconds) |
2023-01-17 21:07:20 +0100 | thebinary | (~thebinary@2400:1a00:b040:c48c:c948:e2cc:186e:ea47) |
2023-01-17 21:07:24 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 256 seconds) |
2023-01-17 21:08:37 +0100 | thebinary | (~thebinary@2400:1a00:b040:c48c:c948:e2cc:186e:ea47) (Client Quit) |
2023-01-17 21:09:18 +0100 | Sauvin | (~sauvin@user/Sauvin) (Remote host closed the connection) |
2023-01-17 21:10:03 +0100 | Sauvin | (~sauvin@user/Sauvin) |
2023-01-17 21:12:56 +0100 | opticblast | (~Thunderbi@secure-165.caltech.edu) (Ping timeout: 272 seconds) |
2023-01-17 21:15:05 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-01-17 21:21:04 +0100 | siers69 | (~ij@user/ij) (Ping timeout: 252 seconds) |
2023-01-17 21:21:56 +0100 | <boxscape_> | When cabal says [110 of 132], but then doesn't build anything after that, is it because the interface file of module 110 didn't change? |
2023-01-17 21:22:24 +0100 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
2023-01-17 21:25:40 +0100 | int-index-r | int-index |
2023-01-17 21:31:19 +0100 | Joao003 | (~Joao003@2804:840:8311:d200:306d:6168:be07:23f0) |
2023-01-17 21:32:18 +0100 | <Joao003> | let's start some chat shall we |
2023-01-17 21:32:57 +0100 | <Joao003> | guys? |
2023-01-17 21:33:12 +0100 | Sauvin | (~sauvin@user/Sauvin) (Ping timeout: 272 seconds) |
2023-01-17 21:33:39 +0100 | <Joao003> | guys? |
2023-01-17 21:33:53 +0100 | <Joao003> | no one is gonna chat> |
2023-01-17 21:33:54 +0100 | <Joao003> | ? |
2023-01-17 21:34:47 +0100 | <yushyin> | Joao003: if you have a haskell-specific question, just ask? for chitchat join #haskell-offtopic |
2023-01-17 21:35:58 +0100 | <geekosaur> | this channel is relatively non-busy right now but we can also have 3-4 different discussions going on at the same time and chit-chat just gets in the way |
2023-01-17 21:36:25 +0100 | titibandit1 | (~titibandi@xdsl-81-173-160-143.nc.de) |
2023-01-17 21:36:25 +0100 | <geekosaur> | so #haskell-offtopic for that, and we sometimes redirect some stuff to #haskell-in-depth |
2023-01-17 21:37:56 +0100 | <geekosaur> | boxscape_, depends on the package. it's not unusual a small change in xmonad-contrib leads to it rebuilding only 6 or 7 modules based on dependencies |
2023-01-17 21:39:17 +0100 | <boxscape_> | hm I think that makes sense? I didn't consider initially that it has to flatten a dependency graph into a one-dimensional list |
2023-01-17 21:39:23 +0100 | <geekosaur> | so it just means nothing else was affected by a dependency possibly including the modules it did rebuild |
2023-01-17 21:39:32 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 272 seconds) |
2023-01-17 21:39:35 +0100 | Sauvin | (~sauvin@user/Sauvin) |
2023-01-17 21:39:49 +0100 | <boxscape_> | right, okay |
2023-01-17 21:40:22 +0100 | Sauvin | (~sauvin@user/Sauvin) (Remote host closed the connection) |
2023-01-17 21:40:46 +0100 | Sauvin | (~sauvin@user/Sauvin) |
2023-01-17 21:40:50 +0100 | <Joao003> | if i want to return an useless value, what's the best option? |
2023-01-17 21:41:00 +0100 | <boxscape_> | () |
2023-01-17 21:42:02 +0100 | <Joao003> | what does "IO a" in a type signature mean? |
2023-01-17 21:42:42 +0100 | fizbin_ | (~fizbin@user/fizbin) |
2023-01-17 21:42:53 +0100 | <xerox> | Joao003: it means a value that is an IO action that when sequenced produces a result of type 'a' |
2023-01-17 21:43:03 +0100 | nehsou^ | (~nehsou@76.145.190.81) |
2023-01-17 21:43:52 +0100 | <Joao003> | what do you mean by that? |
2023-01-17 21:44:23 +0100 | <[exa]> | Joao003: "a program that causes side effects and produces some `a`" |
2023-01-17 21:45:29 +0100 | son0p | (~ff@181.136.122.143) (Remote host closed the connection) |
2023-01-17 21:45:35 +0100 | <Joao003> | example? |
2023-01-17 21:46:40 +0100 | <[exa]> | you can't have an actual good example because `a` is a type variable (except for ugly nonsense like `return undefined`) |
2023-01-17 21:46:53 +0100 | <[exa]> | but for example `print 5` is of type `IO ()` |
2023-01-17 21:47:09 +0100 | <xerox> | :t (>>=) |
2023-01-17 21:47:10 +0100 | <lambdabot> | Monad m => m a -> (a -> m b) -> m b |
2023-01-17 21:47:11 +0100 | <anatta> | myIOprogram = getLine >>= \ ans -> print ans >> pure ans |
2023-01-17 21:47:11 +0100 | fizbin_ | (~fizbin@user/fizbin) (Ping timeout: 260 seconds) |
2023-01-17 21:47:22 +0100 | <xerox> | substitute IO for m in there |
2023-01-17 21:47:48 +0100 | <Joao003> | "IO ()" means that it is a program that makes I/O operations and produces "()" |
2023-01-17 21:47:50 +0100 | <Joao003> | right? |
2023-01-17 21:48:12 +0100 | <int-index> | [exa]: it could also be an infinite loop or something that throws an exception |
2023-01-17 21:48:24 +0100 | <[exa]> | +1 true ^ |
2023-01-17 21:48:35 +0100 | <Joao003> | "a program which produces nothing" |
2023-01-17 21:48:40 +0100 | <[exa]> | Joao003: the "a program that makes IO operations" is handwavy but it's basically it |
2023-01-17 21:49:07 +0100 | <anatta> | IO a means a set of instructions that when evaluated at runtime *might* return a :p |
2023-01-17 21:49:21 +0100 | <Joao003> | :t fileWrite |
2023-01-17 21:49:23 +0100 | <lambdabot> | error: Variable not in scope: fileWrite |
2023-01-17 21:49:25 +0100 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
2023-01-17 21:49:36 +0100 | <int-index> | :t writeFile |
2023-01-17 21:49:38 +0100 | <lambdabot> | FilePath -> String -> IO () |
2023-01-17 21:50:03 +0100 | <int-index> | :t readLn |
2023-01-17 21:50:05 +0100 | <lambdabot> | Read a => IO a |
2023-01-17 21:50:08 +0100 | <Joao003> | given a file path and a string, it makes side effects and produces nothing |
2023-01-17 21:50:18 +0100 | <anatta> | I think we used to indicate it as turnstile_t or something |
2023-01-17 21:50:20 +0100 | califax | (~califax@user/califx) (Remote host closed the connection) |
2023-01-17 21:50:23 +0100 | <anatta> | "may return t" |
2023-01-17 21:51:10 +0100 | <anatta> | to be fair, I'm not sure it's the same notation for haskell |
2023-01-17 21:51:19 +0100 | <Joao003> | simple: "IO a" causes side effects and may return a |
2023-01-17 21:51:27 +0100 | califax | (~califax@user/califx) |
2023-01-17 21:51:31 +0100 | <anatta> | it may cause side effects |
2023-01-17 21:51:33 +0100 | <anatta> | and may return a |
2023-01-17 21:51:47 +0100 | <monochrom> | Now that I think of it, you have already seen the IO types and what they mean and why they show up, from previous discussions these past few days. |
2023-01-17 21:51:53 +0100 | <anatta> | you don't get a lot of guarantees |
2023-01-17 21:51:57 +0100 | <Joao003> | like readln |
2023-01-17 21:52:00 +0100 | <anatta> | and that's kind of the point |
2023-01-17 21:52:02 +0100 | <Joao003> | takes a read of type a |
2023-01-17 21:52:05 +0100 | remedan | (~remedan@144.76.104.133) |
2023-01-17 21:52:13 +0100 | <Joao003> | and makes side effects which may return a |
2023-01-17 21:52:26 +0100 | pagnol | (~user@213-205-209-87.ftth.glasoperator.nl) |
2023-01-17 21:52:35 +0100 | <anatta> | IO means that your code is allowed to interface with the impure and nasty real world |
2023-01-17 21:52:46 +0100 | <anatta> | so you can't really say for sure what's going to happen |
2023-01-17 21:52:56 +0100 | trev | (~trev@user/trev) (Remote host closed the connection) |
2023-01-17 21:52:58 +0100 | <Joao003> | "causes side effects" |
2023-01-17 21:54:16 +0100 | <Joao003> | :t readFile |
2023-01-17 21:54:17 +0100 | <lambdabot> | FilePath -> IO String |
2023-01-17 21:54:43 +0100 | talismanick | (~talismani@campus-102-199.ucdavis.edu) |
2023-01-17 21:54:52 +0100 | <Joao003> | takes a FilePath, causes side effects and may return a value of type String |
2023-01-17 21:55:19 +0100 | <anatta> | maybe |
2023-01-17 21:55:21 +0100 | <monochrom> | For the sake of one last time, my http://www.vex.net/~trebla/haskell/IO.xhtml teaches IO. |
2023-01-17 21:55:28 +0100 | <anatta> | like |
2023-01-17 21:56:10 +0100 | <anatta> | not sure how the bot works, but lets try this |
2023-01-17 21:56:15 +0100 | <anatta> | @let f :: IO Integer; f = pure 5 |
2023-01-17 21:56:17 +0100 | <lambdabot> | Defined. |
2023-01-17 21:56:26 +0100 | <anatta> | not a lot of side effects going on |
2023-01-17 21:56:31 +0100 | <Joao003> | > f |
2023-01-17 21:56:33 +0100 | <lambdabot> | error: |
2023-01-17 21:56:33 +0100 | <lambdabot> | Ambiguous occurrence ‘f’ |
2023-01-17 21:56:33 +0100 | <lambdabot> | It could refer to |
2023-01-17 21:56:53 +0100 | <monochrom> | lambdabot won't execute IO actions. But yahb2 can. Try: % putStrLn "hello" |
2023-01-17 21:56:54 +0100 | <Joao003> | let's undefine for the sake of it |
2023-01-17 21:57:19 +0100 | <Joao003> | % putStrLn "hello" |
2023-01-17 21:57:19 +0100 | <yahb2> | hello |
2023-01-17 21:57:55 +0100 | <anatta> | monochrom: yeah, but that's a side effect =) I just wanted to show that even though IO actions may produce side effects, it's not guaranteed that they will |
2023-01-17 21:58:10 +0100 | <monochrom> | You can show that with yahb2 too :) |
2023-01-17 21:58:22 +0100 | <Joao003> | % pure 5 |
2023-01-17 21:58:22 +0100 | <yahb2> | 5 |
2023-01-17 21:58:23 +0100 | <anatta> | so you can do |
2023-01-17 21:58:24 +0100 | <monochrom> | And perhaps it's even more convincing that way. |
2023-01-17 21:58:46 +0100 | <anatta> | % f :: IO Integer; f = pure 5 |
2023-01-17 21:58:46 +0100 | <yahb2> | <no output> |
2023-01-17 21:58:53 +0100 | <anatta> | % f |
2023-01-17 21:58:53 +0100 | <yahb2> | 5 |
2023-01-17 21:58:57 +0100 | <anatta> | nice |
2023-01-17 21:59:45 +0100 | <Joao003> | % g :: IO String; g = pure "test" |
2023-01-17 21:59:45 +0100 | <yahb2> | <no output> |
2023-01-17 21:59:50 +0100 | <Joao003> | % g |
2023-01-17 21:59:50 +0100 | <yahb2> | "test" |
2023-01-17 22:01:21 +0100 | titibandit1 | (~titibandi@xdsl-81-173-160-143.nc.de) (Remote host closed the connection) |
2023-01-17 22:02:40 +0100 | <anatta> | I tend to think of IO as an identifier that my code interfaces with impure aspects of the system |
2023-01-17 22:03:24 +0100 | <anatta> | personally I find it not really helpful to think of it as "a set of instructions that when evaluated..." or some other definition of what it actually is |
2023-01-17 22:03:51 +0100 | <anatta> | for me the most helpful way of looking at it is just as a warning |
2023-01-17 22:04:19 +0100 | <anatta> | but ymmv |
2023-01-17 22:05:29 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:d14:f10:c58a:afef) (Remote host closed the connection) |
2023-01-17 22:06:26 +0100 | mimmy_ | (~mimmy@176.100.43.30) (Quit: WeeChat 3.8) |
2023-01-17 22:13:19 +0100 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 252 seconds) |
2023-01-17 22:19:08 +0100 | finsternis | (~X@23.226.237.192) |
2023-01-17 22:20:31 +0100 | waleee | (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) |
2023-01-17 22:21:04 +0100 | int-index | (~Vladislav@2a00:1370:8178:5994:87d0:2048:7511:2eba) (Quit: Konversation terminated!) |
2023-01-17 22:22:53 +0100 | <EvanR> | anatta, a version of IO that literally does that would act the same way |
2023-01-17 22:23:24 +0100 | <EvanR> | and helps solidify the idea that IO actions don't really do anything on their own, so you are free to pass them around and store them in containers |
2023-01-17 22:24:15 +0100 | <anatta> | true, that's a good point |
2023-01-17 22:24:16 +0100 | <Joao003> | IO is probably a Monad |
2023-01-17 22:24:21 +0100 | <anatta> | IO is a monad |
2023-01-17 22:24:40 +0100 | <Joao003> | It wraps a value |
2023-01-17 22:24:47 +0100 | <EvanR> | noooo |
2023-01-17 22:24:52 +0100 | <EvanR> | not the burrito story |
2023-01-17 22:25:01 +0100 | <Joao003> | Every monad wraps a value |
2023-01-17 22:25:06 +0100 | <EvanR> | are you sure |
2023-01-17 22:25:19 +0100 | <Rembane> | They could be many or zero |
2023-01-17 22:25:27 +0100 | <Joao003> | true |
2023-01-17 22:25:32 +0100 | <Joao003> | guys |
2023-01-17 22:25:37 +0100 | <Joao003> | how often do you use ($) |
2023-01-17 22:26:21 +0100 | <cstm[m]> | > Every monad wraps a value |
2023-01-17 22:26:21 +0100 | <cstm[m]> | Not true - some wrap a function. |
2023-01-17 22:26:23 +0100 | <lambdabot> | error: |
2023-01-17 22:26:24 +0100 | <lambdabot> | Data constructor not in scope: Every :: t0 -> t1 -> Expr -> t2 -> terror... |
2023-01-17 22:26:30 +0100 | <Joao003> | lol |
2023-01-17 22:26:42 +0100 | <cstm[m]> | * > Every monad wraps a value |
2023-01-17 22:26:42 +0100 | <cstm[m]> | Not true - some wrap a function. |
2023-01-17 22:26:51 +0100 | <anatta> | I use $ a lot |
2023-01-17 22:26:55 +0100 | <Joao003> | look at this |
2023-01-17 22:27:05 +0100 | codaraxis | (~codaraxis@user/codaraxis) |
2023-01-17 22:27:08 +0100 | <Rembane> | Joao003: Once every line, before it I use . |
2023-01-17 22:27:15 +0100 | <anatta> | mostly in e.g: f . g . h $ val |
2023-01-17 22:27:26 +0100 | <Joao003> | % zipWith ($) (map (+) [1..3]) [1..3] |
2023-01-17 22:27:26 +0100 | <yahb2> | [2,4,6] |
2023-01-17 22:27:35 +0100 | bgs | (~bgs@212-85-160-171.dynamic.telemach.net) |
2023-01-17 22:28:07 +0100 | <Joao003> | % map ($ 1) (map (+) [1..3]) |
2023-01-17 22:28:07 +0100 | <yahb2> | [2,3,4] |
2023-01-17 22:28:26 +0100 | mei | (~mei@user/mei) (Killed (cadmium.libera.chat (Nickname regained by services))) |
2023-01-17 22:28:29 +0100 | <__monty__> | % zipWith (+) [1..3] [1..3] |
2023-01-17 22:28:29 +0100 | <yahb2> | [2,4,6] |
2023-01-17 22:28:31 +0100 | mei | (~mei@user/mei) |
2023-01-17 22:29:05 +0100 | <EvanR> | every monad has to have an operation that accepts an a |
2023-01-17 22:29:10 +0100 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2023-01-17 22:29:17 +0100 | <EvanR> | what it does with that a is another story |
2023-01-17 22:29:18 +0100 | <cstm[m]> | > <@cstm:matrix.org> > Every monad wraps a value |
2023-01-17 22:29:20 +0100 | <lambdabot> | <hint>:1:1: error: parse error on input ‘<@’ |
2023-01-17 22:29:21 +0100 | <cstm[m]> | > |
2023-01-17 22:29:21 +0100 | <cstm[m]> | > Not true - some wrap a function. |
2023-01-17 22:29:21 +0100 | <cstm[m]> | And some wrap a Monad - for example Monad Transformers. |
2023-01-17 22:29:23 +0100 | <lambdabot> | <hint>:1:33: error: |
2023-01-17 22:29:23 +0100 | <lambdabot> | parse error (possibly incorrect indentation or mismatched brackets) |
2023-01-17 22:29:23 +0100 | <lambdabot> | <no location info>: error: not an expression: ‘’ |
2023-01-17 22:29:26 +0100 | <Joao003> | % zipWith ($) [(== 0), even, odd] [1, 2, 3] |
2023-01-17 22:29:26 +0100 | <yahb2> | [False,True,True] |
2023-01-17 22:29:33 +0100 | gmg | (~user@user/gehmehgeh) |
2023-01-17 22:29:40 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
2023-01-17 22:29:41 +0100 | <EvanR> | a monad transformer isn't a monad in the same sense as Monad |
2023-01-17 22:30:12 +0100 | <cstm[m]> | A monad transformer is a monad because the monad laws apply - it's not a debate really. |
2023-01-17 22:30:24 +0100 | <EvanR> | it can't be a Monad, wrong kind |
2023-01-17 22:30:38 +0100 | <Joao003> | how often do you use (<*>) |
2023-01-17 22:30:39 +0100 | <EvanR> | :k Maybe |
2023-01-17 22:30:40 +0100 | <lambdabot> | * -> * |
2023-01-17 22:30:43 +0100 | <EvanR> | :k StateT |
2023-01-17 22:30:45 +0100 | <lambdabot> | * -> (* -> *) -> * -> * |
2023-01-17 22:31:01 +0100 | <EvanR> | :k StateT Int |
2023-01-17 22:31:02 +0100 | <Joao003> | @help k |
2023-01-17 22:31:02 +0100 | <lambdabot> | help <command>. Ask for help for <command>. Try 'list' for all commands |
2023-01-17 22:31:03 +0100 | <lambdabot> | (* -> *) -> * -> * |
2023-01-17 22:31:03 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-01-17 22:31:06 +0100 | <Joao003> | @help :k |
2023-01-17 22:31:06 +0100 | <lambdabot> | help <command>. Ask for help for <command>. Try 'list' for all commands |
2023-01-17 22:31:24 +0100 | <Joao003> | :k Either Int |
2023-01-17 22:31:25 +0100 | <lambdabot> | * -> * |
2023-01-17 22:31:29 +0100 | <EvanR> | it gives the kind of some type |
2023-01-17 22:31:29 +0100 | <Joao003> | :k Either |
2023-01-17 22:31:31 +0100 | <lambdabot> | * -> * -> * |
2023-01-17 22:31:33 +0100 | <Joao003> | oh |
2023-01-17 22:31:49 +0100 | <Joao003> | :t Left |
2023-01-17 22:31:50 +0100 | <lambdabot> | a -> Either a b |
2023-01-17 22:31:54 +0100 | <EvanR> | :k Char |
2023-01-17 22:31:55 +0100 | <lambdabot> | * |
2023-01-17 22:32:01 +0100 | <Joao003> | :t Either |
2023-01-17 22:32:02 +0100 | <lambdabot> | error: |
2023-01-17 22:32:02 +0100 | <lambdabot> | • Data constructor not in scope: Either |
2023-01-17 22:32:02 +0100 | <lambdabot> | • Perhaps you meant variable ‘either’ (imported from Data.Either) |
2023-01-17 22:32:15 +0100 | <Joao003> | :k Either a |
2023-01-17 22:32:16 +0100 | <lambdabot> | error: Not in scope: type variable ‘a’ |
2023-01-17 22:32:23 +0100 | <EvanR> | :t is for value expressions |
2023-01-17 22:32:37 +0100 | <EvanR> | :k Either Char |
2023-01-17 22:32:38 +0100 | gawen | (~gawen@user/gawen) (Quit: cya) |
2023-01-17 22:32:38 +0100 | <lambdabot> | * -> * |
2023-01-17 22:32:54 +0100 | <Joao003> | how often do you use (<*>) |
2023-01-17 22:33:03 +0100 | <anatta> | fairly often |
2023-01-17 22:33:17 +0100 | <Rembane> | Always |
2023-01-17 22:33:31 +0100 | <Joao003> | give me an example |
2023-01-17 22:33:32 +0100 | <anatta> | in many cases you want to do something like f <$> m a <*> m b |
2023-01-17 22:33:36 +0100 | <Joao003> | :t (<*>) |
2023-01-17 22:33:37 +0100 | <lambdabot> | Applicative f => f (a -> b) -> f a -> f b |
2023-01-17 22:33:56 +0100 | <cstm[m]> | :k (Monad m) => forall a . StateT () m |
2023-01-17 22:33:56 +0100 | <Joao003> | :t (<$>) |
2023-01-17 22:33:57 +0100 | <lambdabot> | error: Not in scope: type variable ‘m’ |
2023-01-17 22:33:57 +0100 | <lambdabot> | Functor f => (a -> b) -> f a -> f b |
2023-01-17 22:33:58 +0100 | gawen | (~gawen@user/gawen) |
2023-01-17 22:34:03 +0100 | <EvanR> | f <$> m a <*> m b is heavily crossing the streams |
2023-01-17 22:34:14 +0100 | <Joao003> | <$> is <*> for functors |
2023-01-17 22:34:20 +0100 | <Joao003> | @src fmap |
2023-01-17 22:34:20 +0100 | <lambdabot> | Source not found. I feel much better now. |
2023-01-17 22:34:27 +0100 | <cstm[m]> | * :k forall m a . (Monad m) => StateT () m |
2023-01-17 22:34:38 +0100 | Joao003 | (~Joao003@2804:840:8311:d200:306d:6168:be07:23f0) (Quit: Leaving) |
2023-01-17 22:34:38 +0100 | <anatta> | > (+) <$> Just 3 <*> Just 5 |
2023-01-17 22:34:40 +0100 | <lambdabot> | Just 8 |
2023-01-17 22:35:24 +0100 | <anatta> | first you move the function inside with <$> |
2023-01-17 22:35:34 +0100 | <geekosaur> | they left |
2023-01-17 22:35:40 +0100 | <anatta> | lol |
2023-01-17 22:35:46 +0100 | <EvanR> | Employee <$> readID <*> readName <*> readProductivity |
2023-01-17 22:36:07 +0100 | <EvanR> | it's the thought that counts |
2023-01-17 22:37:41 +0100 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) |
2023-01-17 22:38:04 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds) |
2023-01-17 22:40:26 +0100 | Lord_of_Life_ | Lord_of_Life |
2023-01-17 22:41:58 +0100 | barzo | (~hd@31.223.41.44) |
2023-01-17 22:47:08 +0100 | talismanick | (~talismani@campus-102-199.ucdavis.edu) (Ping timeout: 256 seconds) |
2023-01-17 22:48:26 +0100 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2023-01-17 22:52:43 +0100 | mechap | (~mechap@user/mechap) (Quit: WeeChat 3.8) |
2023-01-17 23:06:15 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:1812:9885:2ce4:4618) |
2023-01-17 23:07:41 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2023-01-17 23:08:14 +0100 | epolanski | (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
2023-01-17 23:08:29 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2023-01-17 23:09:48 +0100 | zmt01 | (~zmt00@user/zmt00) (Read error: Connection reset by peer) |
2023-01-17 23:10:58 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:1812:9885:2ce4:4618) (Ping timeout: 260 seconds) |
2023-01-17 23:13:09 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2023-01-17 23:13:57 +0100 | laalyn | (~laalyn@c-73-241-126-7.hsd1.ca.comcast.net) (Quit: Client closed) |
2023-01-17 23:15:37 +0100 | ratapaca | (~ratapaca@98.40.240.33) |
2023-01-17 23:18:14 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) (Quit: WeeChat 3.7.1) |
2023-01-17 23:22:35 +0100 | oldfashionedcow | (~Rahul_San@user/oldfashionedcow) |
2023-01-17 23:23:00 +0100 | gmg | (~user@user/gehmehgeh) (Quit: Leaving) |
2023-01-17 23:24:15 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) |
2023-01-17 23:26:03 +0100 | fizbin_ | (~fizbin@user/fizbin) |
2023-01-17 23:28:49 +0100 | freeside | (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 268 seconds) |
2023-01-17 23:31:09 +0100 | ratapaca | (~ratapaca@98.40.240.33) (Quit: Leaving) |
2023-01-17 23:31:23 +0100 | califax | (~califax@user/califx) (Ping timeout: 255 seconds) |
2023-01-17 23:32:28 +0100 | acidjnk | (~acidjnk@p200300d6e715c420889663d2e7d74ba2.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
2023-01-17 23:33:30 +0100 | zzz | zwro |
2023-01-17 23:33:41 +0100 | califax | (~califax@user/califx) |
2023-01-17 23:35:31 +0100 | Guest|7 | (~Guest|7@ip2-197.halifax.rwth-aachen.de) |
2023-01-17 23:36:20 +0100 | use-value | (~Thunderbi@2a00:23c6:8a03:2f01:c1c3:e297:674c:356d) (Remote host closed the connection) |
2023-01-17 23:36:24 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 260 seconds) |
2023-01-17 23:36:29 +0100 | ub | (~Thunderbi@p200300ecdf264e0169c651b6116f6648.dip0.t-ipconnect.de) |
2023-01-17 23:36:39 +0100 | use-value | (~Thunderbi@2a00:23c6:8a03:2f01:c1c3:e297:674c:356d) |
2023-01-17 23:36:46 +0100 | Midjak | (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
2023-01-17 23:37:00 +0100 | ubert | (~Thunderbi@p200300ecdf264e9fe5173bdb45e8ff9d.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
2023-01-17 23:37:00 +0100 | ub | ubert |
2023-01-17 23:37:34 +0100 | fizbin_ | (~fizbin@user/fizbin) (Ping timeout: 260 seconds) |
2023-01-17 23:37:40 +0100 | cheater | (~Username@user/cheater) |
2023-01-17 23:43:44 +0100 | gnalzo | (~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 3.8) |
2023-01-17 23:50:46 +0100 | mechap | (~mechap@user/mechap) |
2023-01-17 23:56:26 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2023-01-17 23:58:58 +0100 | zer0bitz_ | (~zer0bitz@dsl-hkibng32-54f843-214.dhcp.inet.fi) (Read error: Connection reset by peer) |