Logs on 2022-08-09 (liberachat/#haskell)
| 00:06:02 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 00:09:05 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
| 00:11:01 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 00:15:19 | × | hounded_1969 quits (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Quit: Leaving) |
| 00:16:58 | × | hounded quits (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Remote host closed the connection) |
| 00:16:58 | × | hounded_woodstoc quits (~hounded@2603-7000-da43-eccc-0000-0000-0000-0cec.res6.spectrum.com) (Remote host closed the connection) |
| 00:17:56 | → | off^ joins (~off@206.85.120.17) |
| 00:19:05 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 00:20:26 | × | noteness quits (~noteness@user/noteness) (Remote host closed the connection) |
| 00:21:19 | × | werneta quits (~werneta@137.78.30.207) (Ping timeout: 252 seconds) |
| 00:21:43 | → | noteness joins (~noteness@user/noteness) |
| 00:22:09 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 00:23:56 | × | merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
| 00:24:13 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 00:27:40 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 00:30:44 | → | causal joins (~user@50.35.83.177) |
| 00:32:00 | × | zeenk quits (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!) |
| 00:36:53 | → | vysn joins (~vysn@user/vysn) |
| 00:37:03 | × | hmw[at]1 quits (~hmw@84-113-100-7.cable.dynamic.surfer.at) (Quit: Leaving.) |
| 00:37:20 | → | hmw[at] joins (~hmw@84-113-100-7.cable.dynamic.surfer.at) |
| 00:38:52 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 00:42:56 | × | waleee quits (~waleee@h-176-10-137-138.NA.cust.bahnhof.se) (Ping timeout: 255 seconds) |
| 00:44:47 | → | stef204 joins (~stef204@user/stef204) |
| 00:50:53 | PHO`_ | is now known as PHO` |
| 01:02:55 | → | nilradical joins (~nilradica@user/naso) |
| 01:08:11 | × | xff0x_ quits (~xff0x@2405:6580:b080:900:6c03:b0ff:76cc:e68c) (Ping timeout: 255 seconds) |
| 01:10:26 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 01:10:56 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 01:11:04 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 01:14:09 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 01:14:47 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 01:16:26 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 01:16:55 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 01:17:12 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 01:21:10 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 01:21:26 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 01:29:03 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 01:34:17 | → | frost joins (~frost@user/frost) |
| 01:35:28 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 01:36:04 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 01:38:49 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 01:38:58 | × | machined1od quits (~machinedg@d172-219-86-154.abhsia.telus.net) (Ping timeout: 240 seconds) |
| 01:39:17 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 01:45:11 | → | instantaphex joins (~jb@c-73-171-252-84.hsd1.fl.comcast.net) |
| 01:47:25 | → | merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
| 01:47:38 | × | gurkengl1s quits (~gurkengla@84.138.199.46) (Ping timeout: 240 seconds) |
| 01:50:17 | × | lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Ping timeout: 268 seconds) |
| 01:50:33 | → | xff0x_ joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 01:50:55 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 268 seconds) |
| 01:51:49 | × | aeka quits (~aeka@2606:6080:1001:17:9ea4:71f9:d294:d7b7) (Quit: ZNC 1.8.2 - https://znc.in) |
| 01:52:06 | → | aeka joins (~aeka@2606:6080:1001:17:9ea4:71f9:d294:d7b7) |
| 02:09:07 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 02:16:40 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 02:16:40 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 02:16:40 | finn_elija | is now known as FinnElija |
| 02:22:20 | × | merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
| 02:23:19 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 02:27:21 | × | stef204 quits (~stef204@user/stef204) (Quit: WeeChat 3.6) |
| 02:31:41 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
| 02:32:20 | → | hsw joins (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) |
| 02:34:40 | × | td_ quits (~td@muedsl-82-207-238-079.citykom.de) (Ping timeout: 268 seconds) |
| 02:35:58 | → | td_ joins (~td@94.134.91.254) |
| 02:38:02 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 02:39:04 | × | noteness quits (~noteness@user/noteness) (Ping timeout: 268 seconds) |
| 02:39:14 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 02:39:36 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 02:40:16 | → | noteness joins (~noteness@user/noteness) |
| 02:49:28 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 02:51:19 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 02:54:44 | → | Katarushisu3 joins (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
| 02:55:18 | → | ysh__ joins (sid6017@id-6017.ilkley.irccloud.com) |
| 02:55:18 | → | jmct_ joins (sid160793@id-160793.tinside.irccloud.com) |
| 02:55:19 | → | megeve_ joins (sid523379@id-523379.hampstead.irccloud.com) |
| 02:55:28 | → | agander_m__ joins (sid407952@id-407952.tinside.irccloud.com) |
| 02:55:34 | → | Noinia joins (~Frank@77-162-168-71.fixed.kpn.net) |
| 02:56:27 | → | bollu4 joins (~bollu@159.65.151.13) |
| 02:56:34 | → | rush joins (~sloorush@52.187.184.81) |
| 02:56:44 | → | jludwig89 joins (~justin@li657-110.members.linode.com) |
| 02:56:45 | → | Hafydd_ joins (jc@user/hafydd) |
| 02:57:01 | → | bonz060_ joins (~quassel@2001:bc8:47a4:a23::1) |
| 02:57:05 | → | dumptruckman_ joins (~dumptruck@23-239-13-163.ip.linodeusercontent.com) |
| 02:57:22 | → | marquis_1ndras joins (~marquis_a@124-150-76-210.tpgi.com.au) |
| 02:57:33 | → | Clint_ joins (~Clint@user/clint) |
| 02:57:44 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 02:57:54 | → | Jonno_FTW joins (~come@api.carswap.me) |
| 02:57:55 | × | Jonno_FTW quits (~come@api.carswap.me) (Changing host) |
| 02:57:55 | → | Jonno_FTW joins (~come@user/jonno-ftw/x-0835346) |
| 02:57:56 | → | wagle_ joins (~wagle@quassel.wagle.io) |
| 02:58:05 | → | Hecate_ joins (~mariposa@user/hecate) |
| 02:58:18 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 02:58:26 | → | red-snail joins (~snail@static.151.210.203.116.clients.your-server.de) |
| 02:58:27 | → | byorgey_ joins (~byorgey@155.138.238.211) |
| 02:58:30 | → | uroboros joins (~ouroboros@user/ouroboros) |
| 02:58:31 | → | poscat0x04 joins (~poscat@114.245.109.158) |
| 02:58:31 | → | bgamari_ joins (~bgamari@64.223.132.170) |
| 02:58:31 | → | kaol_ joins (~kaol@94-237-42-30.nl-ams1.upcloud.host) |
| 02:59:06 | → | Philonous_ joins (~Philonous@user/philonous) |
| 02:59:23 | → | absentia_ joins (~absentia@24-246-53-210.cable.teksavvy.com) |
| 02:59:28 | → | aku_ joins (~aku@163.172.137.34) |
| 02:59:36 | → | ente` joins (~daemon@inferno.barfooze.de) |
| 02:59:43 | → | Igloo joins (~ian@matrix.chaos.earth.li) |
| 02:59:47 | → | carbolymer_ joins (~carbolyme@dropacid.net) |
| 02:59:49 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 02:59:55 | → | lisk1n joins (~liskin@xmonad/liskin) |
| 03:00:19 | → | Fischmie1 joins (~Fischmiep@user/Fischmiep) |
| 03:00:32 | → | orcus- joins (~orcus@user/brprice) |
| 03:00:44 | → | gonz_______ joins (sid304396@id-304396.lymington.irccloud.com) |
| 03:01:03 | → | wallymathieu_ joins (sid533252@id-533252.uxbridge.irccloud.com) |
| 03:01:06 | → | LiChen_ joins (uid561437@id-561437.tinside.irccloud.com) |
| 03:01:06 | → | elvishjerricco1 joins (~elvishjer@2001:470:69fc:105::6172) |
| 03:01:18 | → | statusfailed joins (~statusfai@statusfailed.com) |
| 03:01:26 | → | pierrot_ joins (~pi@user/pierrot) |
| 03:01:29 | → | dunj3_ joins (~dunj3@kingdread.de) |
| 03:01:33 | → | hyiltiz_ joins (~quassel@31.220.5.250) |
| 03:01:48 | → | lagash joins (lagash@lagash.shelltalk.net) |
| 03:02:01 | → | dyniec joins (~dyniec@mail.dybiec.info) |
| 03:02:15 | → | systemfault_ joins (sid267009@id-267009.uxbridge.irccloud.com) |
| 03:03:04 | × | rodental quits (~rodental@38.146.5.222) (*.net *.split) |
| 03:03:04 | × | zaquest quits (~notzaques@5.130.79.72) (*.net *.split) |
| 03:03:04 | × | jludwig quits (~justin@li657-110.members.linode.com) (*.net *.split) |
| 03:03:04 | × | anderson quits (~ande@user/anderson) (*.net *.split) |
| 03:03:04 | × | Square2 quits (~a@user/square) (*.net *.split) |
| 03:03:04 | × | Vajb quits (~Vajb@2001:999:70c:2b99:3e15:6929:5bc6:c014) (*.net *.split) |
| 03:03:04 | × | statusfa1led quits (~statusfai@statusfailed.com) (*.net *.split) |
| 03:03:04 | × | lagash_ quits (lagash@lagash.shelltalk.net) (*.net *.split) |
| 03:03:04 | × | Jonno_FT1 quits (~come@api.carswap.me) (*.net *.split) |
| 03:03:04 | × | glider_ quits (~glider@user/glider) (*.net *.split) |
| 03:03:04 | × | WzC quits (~Frank@77-162-168-71.fixed.kpn.net) (*.net *.split) |
| 03:03:04 | × | ente`_ quits (~daemon@inferno.barfooze.de) (*.net *.split) |
| 03:03:04 | × | barrucadu quits (~barrucadu@carcosa.barrucadu.co.uk) (*.net *.split) |
| 03:03:04 | × | jao- quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (*.net *.split) |
| 03:03:04 | × | absentia quits (~absentia@user/absentia) (*.net *.split) |
| 03:03:04 | × | sloorush quits (~sloorush@52.187.184.81) (*.net *.split) |
| 03:03:04 | × | ian_ quits (~ian@matrix.chaos.earth.li) (*.net *.split) |
| 03:03:04 | × | Katarushisu quits (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (*.net *.split) |
| 03:03:04 | × | bollu quits (~bollu@159.65.151.13) (*.net *.split) |
| 03:03:04 | × | byorgey quits (~byorgey@155.138.238.211) (*.net *.split) |
| 03:03:04 | × | cosimone` quits (~user@93-44-186-171.ip98.fastwebnet.it) (*.net *.split) |
| 03:03:04 | × | shailangsa_ quits (~shailangs@host86-185-98-81.range86-185.btcentralplus.com) (*.net *.split) |
| 03:03:04 | × | poscat quits (~poscat@114.245.109.158) (*.net *.split) |
| 03:03:04 | × | sektor[m] quits (~sektor@2001:470:69fc:105::2:3f60) (*.net *.split) |
| 03:03:04 | × | jean-paul[m] quits (~jean-paul@2001:470:69fc:105::d1ab) (*.net *.split) |
| 03:03:04 | × | wallymathieu quits (sid533252@id-533252.uxbridge.irccloud.com) (*.net *.split) |
| 03:03:04 | × | megeve quits (sid523379@id-523379.hampstead.irccloud.com) (*.net *.split) |
| 03:03:04 | × | agander_m_ quits (sid407952@id-407952.tinside.irccloud.com) (*.net *.split) |
| 03:03:04 | × | Boarders__ quits (sid425905@id-425905.lymington.irccloud.com) (*.net *.split) |
| 03:03:04 | × | gonz______ quits (sid304396@id-304396.lymington.irccloud.com) (*.net *.split) |
| 03:03:04 | × | mht-wtf quits (~mht@2a03:b0c0:3:e0::1e2:c001) (*.net *.split) |
| 03:03:04 | × | liskin quits (~liskin@xmonad/liskin) (*.net *.split) |
| 03:03:04 | × | Hafydd quits (jc@owlchat.newnet.net) (*.net *.split) |
| 03:03:04 | × | jmct quits (sid160793@id-160793.tinside.irccloud.com) (*.net *.split) |
| 03:03:04 | × | dyniec_ quits (~dyniec@mail.dybiec.info) (*.net *.split) |
| 03:03:04 | × | ysh_ quits (sid6017@id-6017.ilkley.irccloud.com) (*.net *.split) |
| 03:03:04 | × | nshepperd quits (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) (*.net *.split) |
| 03:03:04 | × | berberman quits (~berberman@user/berberman) (*.net *.split) |
| 03:03:04 | × | pierrot quits (~pi@user/pierrot) (*.net *.split) |
| 03:03:04 | × | marquis_andras quits (~marquis_a@124-150-76-210.tpgi.com.au) (*.net *.split) |
| 03:03:04 | × | catern quits (~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407) (*.net *.split) |
| 03:03:04 | × | bonz060 quits (~quassel@2001:bc8:47a4:a23::1) (*.net *.split) |
| 03:03:04 | × | Hash quits (~Hash@tunnel686959-pt.tunnel.tserv15.lax1.ipv6.he.net) (*.net *.split) |
| 03:03:04 | × | bgamari quits (~bgamari@64.223.132.170) (*.net *.split) |
| 03:03:04 | × | auri quits (~auri@fsf/member/auri) (*.net *.split) |
| 03:03:04 | × | systemfault quits (sid267009@id-267009.uxbridge.irccloud.com) (*.net *.split) |
| 03:03:04 | × | aku quits (~aku@163.172.137.34) (*.net *.split) |
| 03:03:04 | × | Hecate quits (~mariposa@user/hecate) (*.net *.split) |
| 03:03:04 | × | kaol quits (~kaol@94-237-42-30.nl-ams1.upcloud.host) (*.net *.split) |
| 03:03:04 | × | heath quits (~heath@user/heath) (*.net *.split) |
| 03:03:04 | × | xstill_ quits (xstill@fimu/xstill) (*.net *.split) |
| 03:03:04 | × | orcus quits (~orcus@user/brprice) (*.net *.split) |
| 03:03:04 | × | ouroboros quits (~ouroboros@user/ouroboros) (*.net *.split) |
| 03:03:05 | × | dunj3 quits (~dunj3@kingdread.de) (*.net *.split) |
| 03:03:05 | × | hyiltiz quits (~quassel@31.220.5.250) (*.net *.split) |
| 03:03:05 | × | elvishjerricco quits (~elvishjer@2001:470:69fc:105::6172) (*.net *.split) |
| 03:03:05 | × | Fischmiep quits (~Fischmiep@user/Fischmiep) (*.net *.split) |
| 03:03:05 | × | DigitalKiwi quits (~kiwi@137.184.156.191) (*.net *.split) |
| 03:03:05 | × | mjacob quits (~mjacob@adrastea.uberspace.de) (*.net *.split) |
| 03:03:05 | × | wagle quits (~wagle@quassel.wagle.io) (*.net *.split) |
| 03:03:05 | × | LiChen quits (uid561437@id-561437.tinside.irccloud.com) (*.net *.split) |
| 03:03:05 | × | forell quits (~forell@user/forell) (*.net *.split) |
| 03:03:05 | × | Philonous quits (~Philonous@user/philonous) (*.net *.split) |
| 03:03:05 | × | JSharp quits (sid4580@id-4580.lymington.irccloud.com) (*.net *.split) |
| 03:03:05 | × | Clint quits (~Clint@user/clint) (*.net *.split) |
| 03:03:05 | × | carbolymer quits (~carbolyme@dropacid.net) (*.net *.split) |
| 03:03:05 | × | dumptruckman quits (~dumptruck@23-239-13-163.ip.linodeusercontent.com) (*.net *.split) |
| 03:03:05 | × | red-snail1 quits (~snail@static.151.210.203.116.clients.your-server.de) (*.net *.split) |
| 03:03:05 | × | remexre quits (~remexre@user/remexre) (*.net *.split) |
| 03:03:05 | × | leah2 quits (~leah@vuxu.org) (*.net *.split) |
| 03:03:06 | jmct_ | is now known as jmct |
| 03:03:06 | wallymathieu_ | is now known as wallymathieu |
| 03:03:06 | systemfault_ | is now known as systemfault |
| 03:03:07 | megeve_ | is now known as megeve |
| 03:03:08 | jludwig89 | is now known as jludwig |
| 03:03:08 | Katarushisu3 | is now known as Katarushisu |
| 03:03:08 | bollu4 | is now known as bollu |
| 03:03:08 | uroboros | is now known as ouroboros |
| 03:03:08 | dumptruckman_ | is now known as dumptruckman |
| 03:03:18 | → | Boarders___ joins (sid425905@id-425905.lymington.irccloud.com) |
| 03:03:24 | → | jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
| 03:03:37 | → | zaquest joins (~notzaques@5.130.79.72) |
| 03:03:47 | → | remexre joins (~remexre@user/remexre) |
| 03:04:14 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
| 03:04:47 | → | mht-wtf joins (~mht@mht.wtf) |
| 03:05:01 | → | JSharp joins (sid4580@id-4580.lymington.irccloud.com) |
| 03:05:33 | → | anderson joins (~ande@user/anderson) |
| 03:06:34 | → | glider joins (~glider@user/glider) |
| 03:06:40 | → | cosimone` joins (~user@93-44-186-171.ip98.fastwebnet.it) |
| 03:07:40 | → | nshepperd joins (nshepperd@2600:3c03::f03c:92ff:fe28:92c9) |
| 03:08:00 | → | barrucadu joins (~barrucadu@carcosa.barrucadu.co.uk) |
| 03:08:24 | → | DigitalKiwi joins (~kiwi@2604:a880:400:d0::1ca0:e001) |
| 03:08:36 | → | heath joins (~heath@user/heath) |
| 03:08:40 | → | sektor[m] joins (~sektor@2001:470:69fc:105::2:3f60) |
| 03:08:54 | → | mjacob joins (~mjacob@adrastea.uberspace.de) |
| 03:10:38 | → | rodental joins (~rodental@38.146.5.222) |
| 03:11:48 | → | jean-paul[m] joins (~jean-paul@2001:470:69fc:105::d1ab) |
| 03:11:53 | → | Square joins (~a@user/square) |
| 03:12:05 | → | leah2 joins (~leah@vuxu.org) |
| 03:12:41 | → | Hash joins (~Hash@tunnel686959-pt.tunnel.tserv15.lax1.ipv6.he.net) |
| 03:12:47 | hololeap_ | is now known as hololeap |
| 03:13:36 | → | auri joins (~auri@fsf/member/auri) |
| 03:13:40 | → | forell joins (~forell@user/forell) |
| 03:13:42 | → | xstill_ joins (xstill@fimu/xstill) |
| 03:13:45 | → | berberman joins (~berberman@user/berberman) |
| 03:18:29 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 268 seconds) |
| 03:20:21 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 03:27:01 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3ad-40.dhcp.inet.fi) |
| 03:27:10 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 268 seconds) |
| 03:28:10 | × | nilradical quits (~nilradica@user/naso) (Remote host closed the connection) |
| 03:28:45 | → | nilradical joins (~nilradica@user/naso) |
| 03:29:47 | × | nilradical quits (~nilradica@user/naso) (Remote host closed the connection) |
| 03:30:03 | → | nilradical joins (~nilradica@user/naso) |
| 03:30:41 | → | jargon joins (~jargon@153.sub-174-205-231.myvzw.com) |
| 03:35:05 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 03:35:34 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 03:39:28 | → | lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) |
| 03:40:43 | <Inst> | erm |
| 03:40:44 | <Inst> | question |
| 03:40:47 | <Inst> | is it dumb to attempt to use |
| 03:41:31 | × | instantaphex quits (~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 252 seconds) |
| 03:42:30 | <Inst> | criterion to benchmark a function that normally takes 30-90 minutes to run? |
| 03:45:44 | × | nilradical quits (~nilradica@user/naso) (Remote host closed the connection) |
| 03:47:11 | → | nilradical joins (~nilradica@user/naso) |
| 03:47:18 | → | merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
| 03:51:13 | → | shailangsa joins (~shailangs@host86-185-98-81.range86-185.btcentralplus.com) |
| 03:51:47 | × | nilradical quits (~nilradica@user/naso) (Ping timeout: 252 seconds) |
| 03:52:58 | → | hakutaku joins (~hakutaku@94.25.228.55) |
| 04:03:10 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3ad-40.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 04:03:42 | → | Vajb joins (~Vajb@2001:999:70c:2b99:3e15:6929:5bc6:c014) |
| 04:04:45 | × | zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!) |
| 04:10:38 | × | vglfr quits (~vglfr@194.9.14.33) (Ping timeout: 240 seconds) |
| 04:12:44 | → | vglfr joins (~vglfr@194.9.14.33) |
| 04:13:28 | → | nilradical joins (~nilradica@user/naso) |
| 04:19:30 | × | EsoAlgo quits (~EsoAlgo@129.146.136.145) (Ping timeout: 268 seconds) |
| 04:19:45 | → | gmg joins (~user@user/gehmehgeh) |
| 04:21:29 | × | vglfr quits (~vglfr@194.9.14.33) (Ping timeout: 252 seconds) |
| 04:21:38 | × | merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds) |
| 04:24:00 | <Axman6> | it can be made to work but it would be unusual - you'd need to configure timeouts and how many iterations you'd want to run. |
| 04:24:17 | <Axman6> | generally there would be better way to do that like logging the start and end times during actual use |
| 04:24:18 | → | vglfr joins (~vglfr@194.9.14.33) |
| 04:24:22 | → | kazaf joins (~kazaf@94.180.63.53) |
| 04:26:08 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Read error: Connection reset by peer) |
| 04:26:08 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 04:26:08 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 04:26:08 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Write error: Connection reset by peer) |
| 04:26:08 | × | noteness quits (~noteness@user/noteness) (Read error: Connection reset by peer) |
| 04:26:08 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 04:26:08 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Read error: Connection reset by peer) |
| 04:26:08 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 04:26:31 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 04:26:37 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 04:26:41 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 04:26:44 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 04:26:56 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 04:26:57 | → | noteness joins (~noteness@user/noteness) |
| 04:27:23 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 04:28:49 | → | gmg joins (~user@user/gehmehgeh) |
| 04:30:06 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 04:30:29 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 04:31:14 | agander_m__ | is now known as agander_m |
| 04:33:05 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 04:33:27 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 04:34:55 | × | luffy quits (~chenqisu1@183.217.201.23) (Ping timeout: 268 seconds) |
| 04:35:28 | × | johnw quits (~johnw@2600:1700:cf00:db0:c8aa:85f9:feb6:ad6f) (Quit: ZNC - http://znc.in) |
| 04:38:18 | absentia_ | is now known as absentia |
| 04:38:26 | × | absentia quits (~absentia@24-246-53-210.cable.teksavvy.com) (Changing host) |
| 04:38:26 | → | absentia joins (~absentia@user/absentia) |
| 04:38:43 | × | Kaipei quits (~Kaiepi@142.68.249.28) (Ping timeout: 252 seconds) |
| 04:47:56 | → | irfan joins (~irfan@user/irfan) |
| 04:51:06 | ← | pragma- parts (~chaos@user/pragmatic-chaos) (Bye!) |
| 04:52:35 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 04:53:58 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 04:55:01 | → | titibandit joins (~titibandi@xdsl-212-8-147-38.nc.de) |
| 04:57:11 | × | jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 255 seconds) |
| 05:00:46 | × | kazaf quits (~kazaf@94.180.63.53) (Ping timeout: 252 seconds) |
| 05:04:23 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 252 seconds) |
| 05:05:13 | × | noteness quits (~noteness@user/noteness) (Ping timeout: 268 seconds) |
| 05:07:22 | → | noteness joins (~noteness@user/noteness) |
| 05:07:50 | → | catern joins (~sbaugh@2604:2000:8fc0:b:a9c7:866a:bf36:3407) |
| 05:10:40 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 05:17:28 | × | hakutaku quits (~hakutaku@94.25.228.55) (Ping timeout: 268 seconds) |
| 05:22:41 | × | raym quits (~raym@user/raym) (Quit: travelling today) |
| 05:22:50 | <Inst> | axman6 |
| 05:22:56 | <Inst> | i just redid it with just getSystemTime |
| 05:22:59 | <Inst> | and Data.Time |
| 05:23:08 | × | jargon quits (~jargon@153.sub-174-205-231.myvzw.com) (Remote host closed the connection) |
| 05:27:11 | → | notzmv joins (~zmv@user/notzmv) |
| 05:31:54 | <Inst> | btw re Monochrome, have you seen the Chinese Haskell QQ group? I'm on the Wechat, which is about 1/3rd the QQ's size. The QQ is 1k people, ffs. |
| 05:39:37 | → | monadplus joins (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) |
| 05:42:10 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 05:46:45 | → | merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
| 05:55:58 | → | coot joins (~coot@213.134.176.158) |
| 05:57:16 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 05:57:36 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 06:02:17 | → | johnw joins (~johnw@76-234-69-149.lightspeed.frokca.sbcglobal.net) |
| 06:06:03 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 06:06:27 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 06:07:05 | → | ccntrq joins (~Thunderbi@172.209.94.92.rev.sfr.net) |
| 06:07:07 | × | nilradical quits (~nilradica@user/naso) (Remote host closed the connection) |
| 06:07:52 | → | nilradical joins (~nilradica@user/naso) |
| 06:08:11 | × | ski quits (~ski@102-198-142-46.pool.kielnet.net) (Ping timeout: 252 seconds) |
| 06:09:11 | × | merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 255 seconds) |
| 06:11:46 | × | vglfr quits (~vglfr@194.9.14.33) (Ping timeout: 268 seconds) |
| 06:12:33 | → | benin0 joins (~benin@183.82.204.69) |
| 06:14:29 | → | ski joins (~ski@102-198-142-46.pool.kielnet.net) |
| 06:15:09 | × | nilradical quits (~nilradica@user/naso) (Ping timeout: 252 seconds) |
| 06:17:32 | → | mbuf joins (~Shakthi@2401:4900:264d:2a18:1375:61b7:aab6:5d70) |
| 06:19:01 | → | ubert joins (~Thunderbi@178.115.60.12.wireless.dyn.drei.com) |
| 06:22:54 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 06:27:48 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
| 06:31:25 | → | cheater joins (~Username@user/cheater) |
| 06:35:20 | → | merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
| 06:35:49 | × | xff0x_ quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 268 seconds) |
| 06:36:43 | × | tzh_ quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
| 06:37:26 | → | xff0x_ joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
| 06:37:31 | × | cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds) |
| 06:39:09 | → | vglfr joins (~vglfr@194.9.14.33) |
| 06:40:45 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 06:42:41 | → | nilradical joins (~nilradica@user/naso) |
| 06:47:55 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:f6c8:3b8a:6258:a564) |
| 06:49:52 | → | cheater joins (~Username@user/cheater) |
| 06:51:51 | × | nilradical quits (~nilradica@user/naso) (Ping timeout: 268 seconds) |
| 06:52:20 | → | chele joins (~chele@user/chele) |
| 06:53:01 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 06:57:20 | → | cheater1__ joins (~Username@user/cheater) |
| 06:58:01 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 07:01:44 | → | cheater joins (~Username@user/cheater) |
| 07:02:05 | × | cheater1__ quits (~Username@user/cheater) (Ping timeout: 252 seconds) |
| 07:05:25 | → | MajorBiscuit joins (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) |
| 07:08:14 | × | michalz quits (~michalz@185.246.204.73) (Remote host closed the connection) |
| 07:08:41 | × | merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds) |
| 07:08:49 | → | michalz joins (~michalz@185.246.204.75) |
| 07:11:03 | × | MajorBiscuit quits (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.5) |
| 07:11:14 | → | MajorBiscuit joins (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) |
| 07:11:56 | → | nilradical joins (~nilradica@user/naso) |
| 07:12:35 | → | vysn joins (~vysn@user/vysn) |
| 07:16:31 | rush | is now known as sloorush |
| 07:18:27 | → | merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
| 07:22:26 | → | chomwitt joins (~chomwitt@2a02:587:dc12:7400:755f:cb3e:e77d:78e6) |
| 07:22:44 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 268 seconds) |
| 07:23:13 | → | fserucas joins (~fserucas@46.50.4.9) |
| 07:24:50 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 07:25:16 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 07:26:19 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 07:27:16 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
| 07:28:18 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 07:28:20 | aforemny_ | is now known as aforemny |
| 07:29:35 | × | nilradical quits (~nilradica@user/naso) (Ping timeout: 252 seconds) |
| 07:32:14 | → | cfricke joins (~cfricke@user/cfricke) |
| 07:34:22 | × | cosimone` quits (~user@93-44-186-171.ip98.fastwebnet.it) (Read error: Connection reset by peer) |
| 07:35:29 | → | jgeerds joins (~jgeerds@55d46bad.access.ecotel.net) |
| 07:36:17 | → | nilradical joins (~nilradica@user/naso) |
| 07:38:00 | → | kuribas joins (~user@ptr-17d51en70upy9zs31tv.18120a2.ip6.access.telenet.be) |
| 07:39:20 | × | chomwitt quits (~chomwitt@2a02:587:dc12:7400:755f:cb3e:e77d:78e6) (Ping timeout: 268 seconds) |
| 07:41:11 | × | nilradical quits (~nilradica@user/naso) (Ping timeout: 268 seconds) |
| 07:42:55 | → | hakutaku joins (~hakutaku@62.32.91.171) |
| 07:43:14 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
| 07:47:41 | × | LiChen_ quits (uid561437@id-561437.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
| 07:50:23 | <carbolymer_> | this looks like a valid NFData instance, right? https://bpa.st/BYRQ |
| 07:50:27 | carbolymer_ | is now known as carbolymer |
| 07:50:32 | → | nilradical joins (~nilradica@user/naso) |
| 07:50:47 | → | cosimone joins (~user@93-44-186-171.ip98.fastwebnet.it) |
| 07:52:45 | × | cheater quits (~Username@user/cheater) (Read error: Connection reset by peer) |
| 07:53:41 | → | zer0bitz joins (~zer0bitz@2001:2003:f748:2000:7d58:b5e3:80b4:aa10) |
| 07:55:07 | → | cheater joins (~Username@user/cheater) |
| 07:55:24 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 07:55:42 | → | machinedgod joins (~machinedg@d172-219-86-154.abhsia.telus.net) |
| 07:57:07 | → | acidjnk_new joins (~acidjnk@p200300d6e70586665c86bfb0acf03c2b.dip0.t-ipconnect.de) |
| 07:58:40 | × | cosimone quits (~user@93-44-186-171.ip98.fastwebnet.it) (Remote host closed the connection) |
| 07:59:46 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
| 08:00:14 | → | yvan-sraka joins (~yvan-srak@105.67.135.250) |
| 08:00:21 | × | kawzeg_ quits (kawzeg@2a01:7e01::f03c:92ff:fee2:ec34) (Quit: WeeChat 3.3) |
| 08:00:30 | → | kawzeg joins (kawzeg@2a01:7e01::f03c:92ff:fee2:ec34) |
| 08:01:33 | → | ell joins (~ellie@user/ellie) |
| 08:02:15 | → | cosimone joins (~user@93-44-186-171.ip98.fastwebnet.it) |
| 08:05:14 | → | jese joins (~nikola@93-86-182-196.dynamic.isp.telekom.rs) |
| 08:09:41 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 08:09:41 | × | noteness quits (~noteness@user/noteness) (Remote host closed the connection) |
| 08:09:41 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 08:09:50 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 08:10:10 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 08:10:20 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 08:10:27 | → | noteness joins (~noteness@user/noteness) |
| 08:12:08 | <Axman6> | why use foldr'? I don't even know where that comes from, but it seems like a recipe for stack overflows |
| 08:12:18 | <Axman6> | % :t foldr deepseq |
| 08:12:18 | <yahb2> | <interactive>:1:7: error: ; Variable not in scope: deepseq :: a -> b -> b |
| 08:12:35 | <tomsmeding> | looking at 'assocs' here, it seems one of the two maps is not evaluated https://hackage.haskell.org/package/ordered-containers-0.2.2/docs/src/Data.Map.Ordered.Internal.html#assocs |
| 08:12:43 | <tomsmeding> | but not sure if that is an issue -- presumably they are filled in lockstep |
| 08:12:45 | <Axman6> | % :t foldr (seq :: a -> () -> ()) |
| 08:12:45 | <yahb2> | foldr (seq :: a -> () -> ()) ; :: forall {t :: * -> *} {a}. Foldable t => () -> t a -> () |
| 08:12:59 | <tomsmeding> | but yeah, foldr should be sufficient |
| 08:13:03 | <Axman6> | % :t foldl (flip (seq :: a -> () -> ())) |
| 08:13:03 | <yahb2> | foldl (flip (seq :: a -> () -> ())) ; :: forall {t :: * -> *} {a}. Foldable t => () -> t a -> () |
| 08:13:12 | <tomsmeding> | or foldl' |
| 08:13:18 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 08:16:49 | <Axman6> | I think either foldr or foldl' would be fine here, but not foldr', because presumably that needs to traverse the whole list before each pair is passed to deepseq |
| 08:17:25 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 08:17:55 | <jese> | I have a lambda L to which I want to pass a Vector of Ts (T = an arbitrary type), but the compiler errors out that L accepts a Vector of ConstructorTs. Doing (v :: Vector ConstructorT) does not help. So how to properly do this? |
| 08:17:56 | → | alternateved joins (~user@staticline-31-183-149-36.toya.net.pl) |
| 08:21:46 | × | noteness quits (~noteness@user/noteness) (Remote host closed the connection) |
| 08:22:01 | → | noteness joins (~noteness@user/noteness) |
| 08:24:40 | <ski> | jese : some more context might help |
| 08:26:23 | <Axman6> | yeah definitely need to see more code to answer that one |
| 08:31:30 | × | eggplant_ quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 08:33:50 | <carbolymer> | Axman6: wait, why foldr' needs to traverse whole list before processing? doesn't that mean: |
| 08:33:50 | <carbolymer> | foldr f z [x1, x2, ..., xn] == x1 `f` (x2 `f` ... (xn `f` z)...) |
| 08:33:50 | <carbolymer> | that it should start evaluating from first element? |
| 08:36:51 | → | ubert1 joins (~Thunderbi@77.119.164.0.wireless.dyn.drei.com) |
| 08:38:30 | × | ubert quits (~Thunderbi@178.115.60.12.wireless.dyn.drei.com) (Ping timeout: 268 seconds) |
| 08:38:31 | ubert1 | is now known as ubert |
| 08:39:33 | × | merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 244 seconds) |
| 08:40:11 | × | nilradical quits (~nilradica@user/naso) (Remote host closed the connection) |
| 08:40:36 | <zzz> | carbolymer: what would you expect from foldr (+) 0 [1..] ? |
| 08:40:58 | → | nilradical joins (~nilradica@user/naso) |
| 08:43:30 | kawen_ | is now known as kawen |
| 08:43:34 | × | shriekingnoise quits (~shrieking@186.137.167.202) (Quit: Quit) |
| 08:45:25 | <tomsmeding> | carbolymer: what's the definition of foldr' |
| 08:47:10 | × | nilradical quits (~nilradica@user/naso) (Ping timeout: 268 seconds) |
| 08:48:50 | → | mmhat joins (~mmh@p200300f1c72ee918ee086bfffe095315.dip0.t-ipconnect.de) |
| 08:48:57 | → | nilradical joins (~nilradica@user/naso) |
| 08:55:00 | <cheater> | on a lot of websites, there's often stuff that's kind of annoying. let's say on a movie website you have it sorting according to date ascending instead of descending (annoying because you want to see the latest movies). in gmail, sometimes mailing lists have super long tag names (the [Stuff] that's at the beginning of every email's subject line). I can fix all that using user scripts, using the violent monkey plugin for firefox. it injects javascript |
| 08:55:00 | <cheater> | into sites i want and the js can change all that stuff automatically, shorten strings or modify them, etc. is a system like that is possible in an application written with haskell? how would that even work? |
| 08:55:23 | <carbolymer> | zzz: I'm trying to understand the docs - isn't the expression evaluated from the outer layer first? |
| 08:56:05 | → | merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
| 08:56:15 | <carbolymer> | tomsmeding: foldl and seq |
| 08:56:50 | <tomsmeding> | carbolymer: foldr' is implemented in terms of foldl and seq? Why isn't it called foldl' then? |
| 08:57:07 | × | mmhat quits (~mmh@p200300f1c72ee918ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
| 08:57:56 | <tomsmeding> | carbolymer: for foldr, that is indeed how it would work: evaluate from the outer layer first |
| 08:58:04 | <tomsmeding> | hence foldr deepseq is precisely what you want I think :p |
| 08:58:14 | × | jgeerds quits (~jgeerds@55d46bad.access.ecotel.net) (Ping timeout: 268 seconds) |
| 08:58:20 | <tomsmeding> | whether foldr' also does what you want depends on its precise definition |
| 08:58:27 | <carbolymer> | hmm |
| 08:58:29 | <carbolymer> | thanks |
| 08:58:53 | × | ski quits (~ski@102-198-142-46.pool.kielnet.net) (Ping timeout: 268 seconds) |
| 08:59:08 | → | alp_ joins (~alp@user/alp) |
| 08:59:20 | <carbolymer> | I guess I should pay more attention to haddocks |
| 09:00:11 | <carbolymer> | cheater: you want interop js <-> haskell? |
| 09:00:18 | × | steve[m] quits (~stevetrou@2001:470:69fc:105::e0b) (Quit: You have been kicked for being idle) |
| 09:00:52 | <cheater> | no. i want users to be able to modify the behavior of applications, using some, any, technology, without changing the source of the original application, and hopefully without recompiling |
| 09:00:56 | <jese> | nvm i solved it |
| 09:01:02 | × | jese quits (~nikola@93-86-182-196.dynamic.isp.telekom.rs) (Quit: leaving) |
| 09:01:07 | → | steve[m] joins (~stevetrou@2001:470:69fc:105::e0b) |
| 09:01:09 | <cheater> | that's what user scripts do for users |
| 09:01:21 | <tomsmeding> | cheater: I feel like that only works in a web context because of the DOM model |
| 09:01:21 | × | merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
| 09:01:49 | <cheater> | doesn't something like Qt have a dom-like model too? |
| 09:02:22 | <tomsmeding> | not familiar enough with Qt for that, but in any case that's not haskell :p |
| 09:02:49 | × | noteness quits (~noteness@user/noteness) (Remote host closed the connection) |
| 09:03:25 | → | noteness joins (~noteness@user/noteness) |
| 09:03:36 | <cheater> | it's not just the dom model though. actions on websites correspond to restful urls, and i can change those. so for example, sorting the list of movies in my previous example, that's done by navigating to a url that in original form has &sort=date&dir=asc. but if i can modify that anchor link's url before the user can click on it, then i can make it dir=desc |
| 09:03:57 | ← | steve[m] parts (~stevetrou@2001:470:69fc:105::e0b) () |
| 09:04:30 | × | alternateved quits (~user@staticline-31-183-149-36.toya.net.pl) (Remote host closed the connection) |
| 09:04:49 | <tomsmeding> | what that I guess boils down to, is that the web page gets much of its information from an external systen (the server) that it talks to with a fairly introspectable protocol (i.e. URLs and http requests) |
| 09:04:52 | <cheater> | i can also gather data from websites and present it in a form that i can use in other programs |
| 09:05:12 | <tomsmeding> | if you have a single-page web app that downloads the data and then doesn't communicate with the server anymore (those exist), then your url trick wouldn't work |
| 09:05:23 | <tomsmeding> | and those are closer to how native applications tend to work |
| 09:05:32 | <cheater> | i don't (yet) know of a way to modify http requests and responses using user scripts or add-ons. but that would be even more powerful |
| 09:06:07 | <cheater> | i don't know, bear in mind that javascript and html are interpreted languages. i can always change what's going on, modify the data that's in memory, etc |
| 09:06:28 | <tomsmeding> | html ~ dom model; js being interpreted doesn't really make much of a difference here |
| 09:06:30 | <cheater> | so even on a single page web app, i can change what's going on |
| 09:06:58 | <tomsmeding> | unless you're modifying global variables in your user scripts, but that's uncommon, if only because "modern" js stacks tend to not expose any page-global variables |
| 09:07:17 | <cheater> | no, but they don't need to be page-global to be accessible using some sort of hack |
| 09:07:22 | <jackdk> | People used to do that by poking into the memory of other programs (search term: "game trainer") and like ReadProcessMemory/WriteProcessMemory in win32 api |
| 09:07:37 | <cheater> | jackdk: yeah that's true, game trainers are a good example |
| 09:07:44 | <cheater> | but that's like, way too low level imo |
| 09:07:51 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds) |
| 09:08:00 | <cheater> | they'll also do that by dll preloading |
| 09:08:04 | <tomsmeding> | cheater: I think js modules do something like (function(){ var local = {...}; ... })(); and you can't reasonably access that 'local' from outside |
| 09:08:06 | <cheater> | so they can catch api calls |
| 09:08:27 | <cheater> | i wish haskell had a system like dll preloading. is that something that's doable? |
| 09:08:43 | <cheater> | tomsmeding: you can access it from dev tools though, can you? |
| 09:08:46 | <tomsmeding> | dll preloading in native applications is roughly comparable to modifying window.alert in JS I guess |
| 09:08:51 | <cheater> | can't* |
| 09:08:57 | <cheater> | yeah |
| 09:09:01 | <cheater> | well it's more |
| 09:09:05 | <tomsmeding> | in the debugger you mean? |
| 09:09:07 | <cheater> | yes |
| 09:09:11 | <tomsmeding> | maybe, but that's not from a user script :p |
| 09:09:22 | <cheater> | dll preloading is more like being able to modify xhr |
| 09:09:22 | <tomsmeding> | if you gdb a C program you can also change its variables :p |
| 09:09:33 | <tomsmeding> | people don't generally call that "scripting the C program" |
| 09:09:37 | <cheater> | yeah |
| 09:09:41 | <tomsmeding> | I guess yes |
| 09:10:12 | <tomsmeding> | you can also gdb a haskell program and do the same thing, it's just that the haskell heap structures and control flow are much less understandable from a simple C-oriented debugger |
| 09:10:17 | <tomsmeding> | "much less" being an understatement |
| 09:10:33 | <cheater> | yeah, haskell needs to get its own debugger honestly |
| 09:10:43 | <cheater> | not having one is kind of carp |
| 09:10:43 | <tomsmeding> | it's hard though |
| 09:10:49 | <cheater> | it certainly is |
| 09:10:54 | <tomsmeding> | if you want to pay someone to work on it :p |
| 09:11:16 | <tomsmeding> | I agree though, a good debugger for haskell that understands its control flow and memory model would be amazing |
| 09:11:26 | → | mmhat joins (~mmh@p200300f1c72ee96aee086bfffe095315.dip0.t-ipconnect.de) |
| 09:11:46 | <cheater> | to be honest we just need a basic piece of shit project, once that out, people will flock to make it better |
| 09:11:52 | <tomsmeding> | it would be ghc-specific though, whereas C-oriented debuggers tend to work for C, C++, D, Rust, and maybe more low-level languages |
| 09:11:53 | <cheater> | *is |
| 09:12:02 | → | mima joins (mmh@gateway/vpn/airvpn/mima) |
| 09:13:10 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 09:15:46 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 09:16:02 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 09:17:23 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 09:17:46 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 09:23:23 | × | cheater quits (~Username@user/cheater) (Read error: Connection reset by peer) |
| 09:24:19 | → | cheater joins (~Username@user/cheater) |
| 09:24:43 | <[exa]> | cheater: many people use haskell in order to be able to forget about the whole debugger business. :D |
| 09:24:59 | <cheater> | i don't think that's true |
| 09:25:22 | <cheater> | going from debuggers to print debugging is not an improvement |
| 09:25:33 | <[exa]> | no, simply do not debug |
| 09:25:43 | <tomsmeding> | [exa]: I mean, yes; like, haskell without a debugger is sometimes easier to debug than C with a debugger |
| 09:25:44 | <kuribas> | tomsmeding: I am missing a debugger that let's me choose how to evaluate the expression tree. |
| 09:25:53 | <tomsmeding> | but that doesn't mean that having a good debugger cannot make things even easier |
| 09:25:58 | <kuribas> | tomsmeding: the debugger in ghci simply seems to assume you want to step through. |
| 09:25:59 | <tomsmeding> | kuribas: _yes_ |
| 09:26:22 | <tomsmeding> | I think choosing in what order to evaluate an expression tree is impossible after you've gone to Core |
| 09:26:35 | <tomsmeding> | because that probably already encodes some decisions w.r.t. order of evaluation |
| 09:26:40 | <tomsmeding> | and if not Core, then STG or Cmm |
| 09:26:49 | <kuribas> | tomsmeding: can you bypass core? |
| 09:26:58 | <kuribas> | core is not strictly haskell. |
| 09:27:02 | <tomsmeding> | I'm not sure at what point ghci bytecode is generated |
| 09:27:02 | <[exa]> | cheater: there's 30+ years of research invested into being able to write the programs visibly correct without trying them, utilizing parametricity, types, correct modularization and composition, enforced locality, etc etc. And it pretty much works for me :] |
| 09:27:11 | → | luffy joins (~chenqisu1@183.217.201.23) |
| 09:27:29 | <tomsmeding> | ghci bytecode is certainly after Core, but perhaps before STG |
| 09:27:30 | <kuribas> | [exa]: yeah, plus occasionally Debug.Trace |
| 09:27:59 | <tomsmeding> | kuribas: I'm most concerned about strictness analysis and the ensuing compilation of certain functions as call-by-value |
| 09:28:07 | → | Kaipei joins (~Kaiepi@142.68.249.28) |
| 09:28:15 | <tomsmeding> | concerned as in, that will prevent choosing order of evaluation later on |
| 09:28:20 | <tomsmeding> | kuribas: have you ever looked at ghc-vis |
| 09:28:38 | <tomsmeding> | https://www.youtube.com/watch?v=I4lnCG18TaY |
| 09:28:40 | <kuribas> | no |
| 09:28:58 | <tomsmeding> | it's not quite what you're asking about, but you can interactively force heap thunks with it |
| 09:29:09 | <cheater> | kuribas: that's just print debugging. |
| 09:29:16 | <kuribas> | cheater: indeed! |
| 09:29:57 | <[exa]> | cheater: gdb also just prints internal values, right? |
| 09:30:43 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 09:30:49 | <[exa]> | wow ghc-vis is cool |
| 09:30:55 | <tomsmeding> | yes ghc-vis is very cool |
| 09:31:13 | <tomsmeding> | I've yet to use it on non-trivial examples though |
| 09:34:19 | × | coot quits (~coot@213.134.176.158) (Quit: coot) |
| 09:34:59 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds) |
| 09:35:39 | → | cheater1__ joins (~Username@user/cheater) |
| 09:35:43 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 252 seconds) |
| 09:35:53 | × | cheater quits (~Username@user/cheater) (Ping timeout: 268 seconds) |
| 09:36:02 | cheater1__ | is now known as cheater |
| 09:36:21 | → | chomwitt joins (~chomwitt@2a02:587:dc15:ef00:5da3:5948:b4:5053) |
| 09:39:34 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 09:44:09 | × | yvan-sraka quits (~yvan-srak@105.67.135.250) (Remote host closed the connection) |
| 09:51:02 | → | yvan-sraka joins (~yvan-srak@105.67.135.250) |
| 09:55:22 | × | mbuf quits (~Shakthi@2401:4900:264d:2a18:1375:61b7:aab6:5d70) (Quit: Leaving) |
| 09:56:40 | → | ski joins (~ski@185.109.152.13) |
| 09:58:52 | × | titibandit quits (~titibandi@xdsl-212-8-147-38.nc.de) (Quit: Leaving.) |
| 10:05:52 | → | bontaq joins (~user@ool-45779fe5.dyn.optonline.net) |
| 10:07:15 | × | cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds) |
| 10:08:25 | × | darchitect1 quits (~darchitec@2a00:23c6:3584:df01:2d0:4120:37b2:95) (Ping timeout: 244 seconds) |
| 10:11:17 | × | xff0x_ quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 252 seconds) |
| 10:13:08 | × | monadplus quits (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) (Quit: Client closed) |
| 10:16:01 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds) |
| 10:16:42 | × | jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 268 seconds) |
| 10:17:50 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 10:23:45 | → | monadplus joins (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) |
| 10:26:58 | → | aliosablack joins (~chomwitt@ppp-94-67-201-122.home.otenet.gr) |
| 10:27:04 | × | chomwitt quits (~chomwitt@2a02:587:dc15:ef00:5da3:5948:b4:5053) (Ping timeout: 268 seconds) |
| 10:29:29 | → | gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de) |
| 10:34:49 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 10:37:28 | → | alternateved joins (~user@staticline-31-183-149-36.toya.net.pl) |
| 10:40:36 | → | mastarija joins (~mastarija@2a05:4f46:e03:6000:18f8:fb5b:a843:cd18) |
| 10:41:55 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 10:42:27 | × | hakutaku quits (~hakutaku@62.32.91.171) (Ping timeout: 268 seconds) |
| 10:42:41 | <mastarija> | Is there something like "multiConst" that can take a constant value `v` and a function with n arguments e.g. `a -> b -> c -> ... -> v` and return a function of type `a -> b -> c -> ... -> v` that always return the initial value `v` no matter what the other arguments are? |
| 10:43:23 | → | hakutaku joins (~hakutaku@62.32.91.171) |
| 10:43:57 | <tomsmeding> | mastarija: what if `a` is a function type? When would the list of arguments to ignore stop then? |
| 10:44:38 | <mastarija> | at the return value? |
| 10:44:55 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 10:45:14 | <tomsmeding> | if I write `multiConst id 1 2 3`, what would be the type of that expression |
| 10:45:59 | <mastarija> | 1 is not of type (a -> a) |
| 10:46:04 | <mastarija> | It wouldn't type check |
| 10:46:29 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds) |
| 10:46:37 | <tomsmeding> | oh wait I misread |
| 10:47:01 | <mastarija> | basically, if you give me `id :: a -> a`, then I'd have to get `x -> y -> ... -> (a -> a )` |
| 10:47:02 | <tomsmeding> | if I understand correctly, this "function with n arguments e.g. `a -> b -> c -> ... -> v` would be completely unused except for its type, right? |
| 10:47:05 | <mastarija> | as the second argument |
| 10:47:11 | <mastarija> | yes |
| 10:47:15 | → | titibandit joins (~titibandi@xdsl-212-8-147-38.nc.de) |
| 10:47:27 | <tomsmeding> | I think you can do this with overlapping instances, but it's a bit gross |
| 10:47:35 | × | vglfr quits (~vglfr@194.9.14.33) (Ping timeout: 252 seconds) |
| 10:47:39 | <mastarija> | Yes... |
| 10:47:44 | <mastarija> | Something like printf |
| 10:47:56 | <ski> | "arity" is not a well-defined concept in Haskell, unless you take it to be 1 always |
| 10:48:03 | <mastarija> | But I was hoping we have it already |
| 10:48:10 | <tomsmeding> | the thing is that you want to "add another function arrow" to the type of multiConst only if the n'th return type of the function is not equal to `a` |
| 10:48:20 | <mastarija> | yes |
| 10:48:33 | <tomsmeding> | or, hmmm |
| 10:48:43 | <mastarija> | no, not really when i think about it |
| 10:49:51 | × | hakutaku quits (~hakutaku@62.32.91.171) (Ping timeout: 268 seconds) |
| 10:50:27 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 10:50:30 | <mastarija> | basically, in `multiConst :: a -> ( x -> ... -> n -> a) -> x -> ... -> n -> a ` first `a` should be determined by last type var of my multiparameter function |
| 10:50:56 | <tomsmeding> | "determined by" is not going to work |
| 10:51:05 | <tomsmeding> | in any case you'll need to fix the types from the outside |
| 10:51:20 | <tomsmeding> | because what is the "last type var" of a function with type `t -> t` |
| 10:51:26 | → | hakutaku joins (~hakutaku@62.32.91.171) |
| 10:51:37 | <tomsmeding> | if t ~ b -> c, then it becomes (b -> c) -> b -> c, and the last type var is actually b |
| 10:51:44 | <tomsmeding> | in a polymorphic context, you can't know |
| 10:54:05 | <mastarija> | I must admit I don't see the issue here. |
| 10:54:23 | <mastarija> | In my head it's still clear what's what. |
| 10:54:52 | <mastarija> | If the function is of form t -> t, then my constant should be of type `t` |
| 10:55:00 | <tomsmeding> | what is the type of `multiConst () id`? |
| 10:55:22 | Kaipei | is now known as Kaiepi |
| 10:56:01 | <mastarija> | multiConst :: () -> ( () -> () ) -> () -> () |
| 10:56:57 | <mastarija> | multiConst :: t -> ( t -> t ) -> ( t -> t ) |
| 10:57:01 | <tomsmeding> | how can you distinguish that from: multiConst :: () -> ((a -> ()) -> a -> ()) -> (a -> ()) -> a -> () |
| 10:57:23 | <tomsmeding> | `id :: (a -> ()) -> a -> ()` is also true |
| 10:57:41 | → | merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
| 10:58:09 | <tomsmeding> | this is not going to work in general |
| 10:58:55 | <tomsmeding> | I think even my overlapping instances madness is not going to work -- it would try to find () somewhere in the type of `id`, but it's never going to unambiguously find it |
| 10:59:03 | <tomsmeding> | with emphasis on _unambiguously_ |
| 10:59:19 | <mastarija> | Again, I'm not sure what's the problem here. To my human brain it's pretty distinguishable. Unless you are talking about GHC capabilities |
| 10:59:32 | <tomsmeding> | no I'm talking about the haskell type system |
| 10:59:53 | ← | kritzefitz parts (~kritzefit@debian/kritzefitz) () |
| 11:00:02 | <tomsmeding> | `id :: (a -> ()) -> a -> ()` is more specific than `id :: a -> a`, and in haskell you can always put an expression with a more specific type in place of one with a more general type |
| 11:00:07 | → | kritzefitz joins (~kritzefit@debian/kritzefitz) |
| 11:00:40 | <tomsmeding> | sometimes you can detect some shenanigans using overlapping instances (to try to match the more specific option, and if that fails, fall back to a more general option), but that doesn't work always |
| 11:00:47 | <mastarija> | I mean, it's just that the arg 1 has to match with the return value of arg2 |
| 11:00:57 | × | ski quits (~ski@185.109.152.13) (Ping timeout: 268 seconds) |
| 11:01:08 | <mastarija> | Functional dependencies? |
| 11:01:13 | <tomsmeding> | it is "the return value" that is not well-defined in haskell |
| 11:01:22 | <tomsmeding> | because a polymorphic return value might be instantiated to a functoin |
| 11:01:51 | <tomsmeding> | I don't think functional dependencies help here, they are just an alternative formulation of type families |
| 11:02:09 | <tomsmeding> | (open type families, at that) |
| 11:02:32 | <mastarija> | I kind of understood them as a way to distinctly determine x by y or what ever |
| 11:02:44 | <mastarija> | Or rather x is determined by y |
| 11:02:55 | <mastarija> | That kind of reasoning seems helpful here. |
| 11:03:48 | <tomsmeding> | which is precisely what a type family can give you |
| 11:04:04 | <mastarija> | Maybe if I talk about my usecase it will be more productive :D |
| 11:04:18 | <tomsmeding> | you might hope to be able to define a type family `ReturnType` such that you can write `multiConst :: ReturnType f ~ a => a -> f -> f` |
| 11:04:26 | <tomsmeding> | but I don't think that's going to work (I tried it but got stuck) |
| 11:04:47 | <mastarija> | Basically, I have some functions of form (Maybe Something) -> y -> ... -> m v |
| 11:06:08 | → | xff0x_ joins (~xff0x@2405:6580:b080:900:9f22:be61:9bf8:3a54) |
| 11:06:16 | <mastarija> | Now, I want to make a helper which in case (Maybe Something) is Nothing, I'd like to throw an error |
| 11:06:44 | <tomsmeding> | in that monad m? |
| 11:06:48 | <mastarija> | Yes |
| 11:06:54 | <mastarija> | One in which I have to throw an error |
| 11:07:17 | <mastarija> | And I'd otherwise apply a Something to the function |
| 11:07:35 | <mastarija> | Functions are in form of `Something -> x -> y ->...-> m v` |
| 11:07:41 | <mastarija> | Rather than `Maybe Something` |
| 11:08:19 | <mastarija> | But I have `Maybe Something` and would like to return `x -> y -> ... -> m v` if I have Something |
| 11:08:38 | <tomsmeding> | can any of the x, y, ... types be m values? |
| 11:08:51 | <mastarija> | or `x -> y -> ... -> m v` where `m v := throwError MyError` |
| 11:08:59 | <mastarija> | In case there is no Something |
| 11:09:35 | <mastarija> | tomsmeding, no |
| 11:09:42 | <mastarija> | (usually :D) |
| 11:09:56 | <mastarija> | But I'm ok with something that is halfway there |
| 11:12:16 | <carbolymer> | is this efficient? did I overcomplicate it? https://bpa.st/TOAQ |
| 11:12:42 | <tomsmeding> | mastarija: ah no, I asked the wrong question; the right question is, can m ever be the reader monad (r->) |
| 11:13:03 | <tomsmeding> | printf detects the end of its argument sequence by needing to return an IO a instead of an r->a |
| 11:13:31 | <carbolymer> | (I was also considering foldl' + DList - not sure which would be more efficient for strict map) |
| 11:14:06 | <mastarija> | tomsmeding, I do have a reader in the stack, but it's a newtype, not pure (r->) |
| 11:14:39 | <tomsmeding> | carbolymer: concatMap (\(k,vs) -> map (k,) vs) . assocs |
| 11:14:57 | <tomsmeding> | mastarija: ah that's okay |
| 11:16:53 | <carbolymer> | tomsmeding: oh shit, that's better, thanks |
| 11:18:33 | <tomsmeding> | % :set -XMultiParamTypeClasses -XFlexibleInstances |
| 11:18:33 | <yahb2> | <no output> |
| 11:18:36 | <tomsmeding> | % class MultiConst a f where multiConst :: IO a -> f -> f |
| 11:18:36 | <tomsmeding> | % instance MultiConst a (IO a) where multiConst = const |
| 11:18:36 | <tomsmeding> | % instance MultiConst a f => MultiConst a (b -> f) where multiConst v f = \x -> multiConst v (f x) |
| 11:18:36 | <yahb2> | <no output> |
| 11:18:37 | <yahb2> | <no output> |
| 11:18:38 | <yahb2> | <no output> |
| 11:18:53 | <tomsmeding> | % :t multiConst (return 10) (\x y z -> print (x, y, z) >> return 42) |
| 11:18:54 | <yahb2> | multiConst (return 10) (\x y z -> print (x, y, z) >> return 42) ; :: forall {a1} {b1} {a2} {b2} {c}. ; (MultiConst a1 (IO b1), Show a2, Show b2, Show c, Num a1, ; Num b1) => ; a2 ... |
| 11:19:03 | <tomsmeding> | % :t multiConst (return 10) (\x y z -> print (x::Bool, y::Char, z::Int) >> return 42) |
| 11:19:03 | <yahb2> | multiConst (return 10) (\x y z -> print (x::Bool, y::Char, z::Int) >> return 42) ; :: forall {a} {b}. ; (MultiConst a (IO b), Num a, Num b) => ; Bool -> Char -> Int -> IO b |
| 11:19:25 | <tomsmeding> | mastarija: replace IO with your own monad |
| 11:19:26 | → | monadplus[m] joins (~monadplus@2001:470:69fc:105::2:5fa2) |
| 11:19:29 | × | alp_ quits (~alp@user/alp) (Ping timeout: 268 seconds) |
| 11:19:32 | <tomsmeding> | it works because IO is a concrete type here |
| 11:20:12 | × | tubogram44 quits (~tubogram@user/tubogram) (Quit: Ping timeout (120 seconds)) |
| 11:20:28 | <tomsmeding> | if you want it to be "anything else than a function", you could replace the 'IO' with 'm' in the first instance and give the first instance an {-# OVERLAPPING #-} pragma |
| 11:20:59 | <tomsmeding> | the missing piece of information was that the return type has a recognisable shape :) |
| 11:21:04 | → | tubogram44 joins (~tubogram@user/tubogram) |
| 11:21:08 | <tomsmeding> | that is unambiguously distinct from r-> |
| 11:22:21 | × | cosimone quits (~user@93-44-186-171.ip98.fastwebnet.it) (Remote host closed the connection) |
| 11:22:25 | <mastarija> | Yes. I see, first instance marks the end |
| 11:22:32 | <mastarija> | And second recurses |
| 11:22:36 | <tomsmeding> | Yes |
| 11:24:09 | <mastarija> | Thanks |
| 11:27:37 | → | yaroot_ joins (~yaroot@p2550227-ipngn11101souka.saitama.ocn.ne.jp) |
| 11:27:47 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
| 11:28:45 | × | nilradical quits (~nilradica@user/naso) (Remote host closed the connection) |
| 11:29:01 | × | yaroot quits (~yaroot@p2543146-ipngn11101souka.saitama.ocn.ne.jp) (Ping timeout: 252 seconds) |
| 11:29:01 | yaroot_ | is now known as yaroot |
| 11:29:04 | × | monadplus quits (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) (Ping timeout: 252 seconds) |
| 11:30:14 | → | nilradical joins (~nilradica@user/naso) |
| 11:34:18 | × | nilradical quits (~nilradica@user/naso) (Remote host closed the connection) |
| 11:34:38 | → | nilradical joins (~nilradica@user/naso) |
| 11:35:06 | → | zeenk joins (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) |
| 11:40:57 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 11:42:12 | → | noteness_ joins (~noteness@user/noteness) |
| 11:42:58 | × | noteness quits (~noteness@user/noteness) (Ping timeout: 268 seconds) |
| 11:49:01 | → | alp_ joins (~alp@user/alp) |
| 11:53:31 | × | titibandit quits (~titibandi@xdsl-212-8-147-38.nc.de) (Quit: Leaving.) |
| 11:54:41 | × | califax quits (~califax@user/califx) (Ping timeout: 268 seconds) |
| 11:54:46 | → | califax_ joins (~califax@user/califx) |
| 11:55:15 | × | mastarija quits (~mastarija@2a05:4f46:e03:6000:18f8:fb5b:a843:cd18) (Ping timeout: 268 seconds) |
| 11:55:57 | califax_ | is now known as califax |
| 11:57:45 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 11:58:03 | → | califax joins (~califax@user/califx) |
| 12:00:15 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 255 seconds) |
| 12:01:22 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 12:02:51 | → | vglfr joins (~vglfr@37.73.110.255) |
| 12:05:29 | → | cosimone joins (~user@93-44-186-171.ip98.fastwebnet.it) |
| 12:07:35 | × | mc47 quits (~mc47@xmonad/TheMC47) (Ping timeout: 268 seconds) |
| 12:10:26 | → | kavvadias joins (~kavvadias@2001:9e8:6331:f600:aebb:e42c:4fd0:32c7) |
| 12:10:59 | × | elkcl quits (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Ping timeout: 255 seconds) |
| 12:13:23 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 12:13:45 | × | vglfr quits (~vglfr@37.73.110.255) (Ping timeout: 252 seconds) |
| 12:14:01 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 12:16:15 | → | mncheck joins (~mncheck@193.224.205.254) |
| 12:17:32 | → | Milan joins (~Milan@46.245.72.105) |
| 12:17:34 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 12:19:55 | × | mima quits (mmh@gateway/vpn/airvpn/mima) (Ping timeout: 268 seconds) |
| 12:20:24 | <Milan> | Hi,would please check whether my understanding of "bound variable " is right or not? xs aren't same ,we can only consider xs same only within a certain abstraction? |
| 12:21:42 | × | frost quits (~frost@user/frost) (Quit: Client closed) |
| 12:21:44 | × | TheCoffeMaker quits (~TheCoffeM@user/thecoffemaker) (Ping timeout: 268 seconds) |
| 12:22:21 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds) |
| 12:24:10 | <Milan> | how ever one thing is hard to understand for me :if we have one abstraction as an argument which contains an X ,what does this inner X Bound to ? |
| 12:25:15 | → | TheCoffeMaker joins (~TheCoffeM@user/thecoffemaker) |
| 12:25:19 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 12:25:28 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 268 seconds) |
| 12:26:09 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 12:28:50 | × | kavvadias quits (~kavvadias@2001:9e8:6331:f600:aebb:e42c:4fd0:32c7) (Ping timeout: 252 seconds) |
| 12:29:31 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 12:30:08 | × | nilradical quits (~nilradica@user/naso) (Remote host closed the connection) |
| 12:30:54 | → | nilradical joins (~nilradica@user/naso) |
| 12:31:50 | <nilradical> | in the readme for relude -- https://hackage.haskell.org/package/relude -- what does "show is polymorphic over the return type." mean ? |
| 12:35:06 | × | yvan-sraka quits (~yvan-srak@105.67.135.250) (Remote host closed the connection) |
| 12:35:18 | <kritzefitz> | nilradical: It means that `show` can not only returns `String`s, but anything that `IsString`. |
| 12:35:55 | <nilradical> | i see, thank kritzefitz |
| 12:40:54 | → | monadplus joins (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) |
| 12:44:16 | × | Milan quits (~Milan@46.245.72.105) (Quit: Client closed) |
| 12:44:17 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
| 12:46:09 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 12:47:03 | × | cfricke quits (~cfricke@user/cfricke) (Ping timeout: 268 seconds) |
| 12:47:07 | × | alp_ quits (~alp@user/alp) (Ping timeout: 252 seconds) |
| 12:51:00 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 12:52:37 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection) |
| 12:53:05 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 12:53:39 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 12:53:46 | × | MajorBiscuit quits (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) (Ping timeout: 244 seconds) |
| 12:54:06 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 12:56:02 | × | kuribas quits (~user@ptr-17d51en70upy9zs31tv.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
| 12:56:13 | → | titibandit joins (~titibandi@2a00:8a60:c000:1:8a13:bf74:b2:8d47) |
| 12:57:47 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
| 13:02:31 | × | aliosablack quits (~chomwitt@ppp-94-67-201-122.home.otenet.gr) (Ping timeout: 252 seconds) |
| 13:03:40 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 13:04:05 | × | acidjnk_new quits (~acidjnk@p200300d6e70586665c86bfb0acf03c2b.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 13:04:29 | × | off^ quits (~off@206.85.120.17) (Remote host closed the connection) |
| 13:05:32 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 13:05:36 | × | Natch quits (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Remote host closed the connection) |
| 13:06:50 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds) |
| 13:07:44 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 13:07:59 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection) |
| 13:08:06 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 13:09:16 | → | Guest45 joins (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) |
| 13:09:30 | ← | jakalx parts (~jakalx@base.jakalx.net) () |
| 13:10:29 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 13:11:05 | × | nilradical quits (~nilradica@user/naso) () |
| 13:11:44 | → | frost joins (~frost@user/frost) |
| 13:11:53 | → | MajorBiscuit joins (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) |
| 13:15:06 | → | Major_Biscuit joins (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) |
| 13:16:39 | × | MajorBiscuit quits (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) (Ping timeout: 268 seconds) |
| 13:16:53 | → | pmarg joins (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) |
| 13:17:16 | × | pmarg quits (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) (Remote host closed the connection) |
| 13:18:34 | → | nilradical joins (~nilradica@user/naso) |
| 13:18:58 | byorgey_ | is now known as byorgey |
| 13:19:02 | × | nilradical quits (~nilradica@user/naso) (Client Quit) |
| 13:19:19 | → | nilradical joins (~nilradica@user/naso) |
| 13:20:35 | → | pmarg joins (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) |
| 13:22:00 | lisk1n | is now known as liskin |
| 13:24:15 | × | pmarg quits (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) (Client Quit) |
| 13:24:52 | → | Natch joins (~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) |
| 13:25:32 | → | pmarg joins (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) |
| 13:27:21 | → | zxx7529 joins (~Thunderbi@user/zxx7529) |
| 13:29:15 | → | Midjak joins (~Midjak@82.66.147.146) |
| 13:30:13 | × | titibandit quits (~titibandi@2a00:8a60:c000:1:8a13:bf74:b2:8d47) (Ping timeout: 268 seconds) |
| 13:31:18 | → | azimut_ joins (~azimut@gateway/tor-sasl/azimut) |
| 13:31:23 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in) |
| 13:31:29 | × | Major_Biscuit quits (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) (Ping timeout: 252 seconds) |
| 13:31:55 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 13:35:10 | → | Major_Biscuit joins (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) |
| 13:36:02 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection) |
| 13:36:13 | × | Major_Biscuit quits (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Client Quit) |
| 13:36:31 | × | pmarg quits (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) (Quit: pmarg) |
| 13:37:54 | → | pmarg joins (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) |
| 13:39:26 | <zzz> | is it normal with gloss to have trouble getting keypress events register right? i'm getting duplicates and even triggers "on key up" |
| 13:39:55 | × | luffy quits (~chenqisu1@183.217.201.23) (Ping timeout: 252 seconds) |
| 13:40:02 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 13:40:31 | <tomsmeding> | O.o |
| 13:41:26 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection) |
| 13:41:59 | × | noteness_ quits (~noteness@user/noteness) (Ping timeout: 268 seconds) |
| 13:42:52 | → | noteness joins (~noteness@user/noteness) |
| 13:43:27 | → | MajorBiscuit joins (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) |
| 13:43:30 | × | Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Quit: o/) |
| 13:43:36 | → | titibandit joins (~titibandi@sunp.ient.rwth-aachen.de) |
| 13:44:27 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 13:46:31 | → | Sciencentistguy joins (~sciencent@hacksoc/ordinary-member) |
| 13:46:53 | × | finsternis quits (~X@23.226.237.192) (Read error: Connection reset by peer) |
| 13:47:08 | → | mima joins (~mmh@dhcp-138-246-3-117.dynamic.eduroam.mwn.de) |
| 13:47:17 | <zzz> | no? |
| 13:48:05 | <Guest45> | I've never seen that zzz |
| 13:48:27 | <zzz> | :( |
| 13:48:36 | <tomsmeding> | yeah that sounds highly suspect, unless your keyboard is malfunctioning :p |
| 13:49:31 | <zzz> | tried and tested different keyboards |
| 13:49:48 | <tomsmeding> | zzz: which event exactly are you getting multiple times per keypress? |
| 13:50:08 | <tomsmeding> | also, are you sure it's not automatic key repeat? |
| 13:50:18 | <tomsmeding> | (like, holding 'a' will produce lots of 'a's) |
| 13:50:18 | <Guest45> | How can I branch on the presence of a typeclass instance? The examples of avoiding overlapping instances here https://wiki.haskell.org/GHC/AdvancedOverlap and here https://kseo.github.io/tags/closed%20type%20families.html are both concerned with branching based on types, but I'd like to branch based on whether an instance exists because if it does |
| 13:50:19 | <Guest45> | I would like to use the instance's features. |
| 13:50:31 | <tomsmeding> | you cannot |
| 13:50:36 | <tomsmeding> | everybody seems to want it :p |
| 13:51:32 | <tomsmeding> | Guest45: it would need to be a runtime check, because if you're in a library, someone who indirectly uses your library might define an instance -- so statically you cannot know |
| 13:51:41 | <tomsmeding> | and at runtime, type information is erased |
| 13:51:59 | <tomsmeding> | in TemplateHaskell you can check for the existence of instances, but that's compile-time metaprogramming |
| 13:52:32 | → | Guest3727 joins (~Guest37@31.129.248.21) |
| 13:52:49 | <geekosaur> | https://hackage.haskell.org/package/ifcxt exists, with limitations |
| 13:52:52 | <Guest45> | tomsmeding, well I'd be fine doing this with a closed type family, but the syntax isn't even supported to put a constraint on the LHS or RHS of a typeclass instance body. |
| 13:53:15 | <tomsmeding> | it's also unclear what the semantics would be; what if two different users of your module both define an instance for the type in question, but those instances are different? |
| 13:53:48 | × | Guest3727 quits (~Guest37@31.129.248.21) (Client Quit) |
| 13:53:52 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 13:54:17 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 13:55:05 | → | coot joins (~coot@213.134.176.158) |
| 13:55:16 | <Guest45> | I think I'm describing a slightly different problem... Maybe I've misunderstood and this is the same as the problem you're describing. Here's a paste: https://paste.tomsmeding.com/kIKovVD6 |
| 13:55:47 | <tomsmeding> | in particular, ifcxt only gets the instances that are already defined at the point where you put mkIfCxtInstances |
| 13:55:58 | <Guest45> | I'll take a look at ifctx |
| 13:56:14 | <tomsmeding> | Guest45: see the readme here, the haddocks are unavailable https://github.com/mikeizbicki/ifcxt |
| 13:56:56 | <tomsmeding> | Guest45: hm, that's indeed a bit different than the usual question |
| 13:57:44 | × | Guest45 quits (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) (Quit: Client closed) |
| 13:57:55 | → | Guest45 joins (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) |
| 13:58:13 | → | mncheckm joins (~mncheck@193.224.205.254) |
| 13:58:27 | <tomsmeding> | still, same issues: if you write a function polymorphic in `a`, then some later user in another package could instantiate that `a` to a type you've never seen before |
| 13:58:29 | <Guest45> | Ifctx seems like it might be usable, because I could combine the two instances into one. |
| 13:59:12 | → | kuribas joins (~user@ptr-17d51en70upy9zs31tv.18120a2.ip6.access.telenet.be) |
| 13:59:17 | <geekosaur> | didn't they say closed type family though? that would prevent added instances |
| 13:59:24 | <Guest45> | tomsmeding All of the classes and intstances are going to be hidden in the library I'm writing. They're not intended to be comen. |
| 13:59:33 | <Guest45> | *not intended to be open |
| 13:59:34 | <tomsmeding> | geekosaur: added instances of the _class_, not the type family |
| 14:00:11 | <tomsmeding> | Guest45: ah, then it might work -- but you need all of the potentially-used instances (transitively) in scope at the point where you put mkIfCxtInstances ''MyClass |
| 14:00:46 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 14:01:02 | × | mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 268 seconds) |
| 14:01:06 | → | zanyan joins (~zanyan@2a02:6b64:f194:0:1d3f:ed4e:5027:57f2) |
| 14:01:09 | → | califax joins (~califax@user/califx) |
| 14:01:46 | <zanyan> | hihi, just want to ask a simple question about how the sqrt function works |
| 14:02:20 | × | frost quits (~frost@user/frost) (Ping timeout: 252 seconds) |
| 14:02:47 | <geekosaur> | % :i sqrt |
| 14:02:47 | <yahb2> | type Floating :: * -> Constraint ; class Fractional a => Floating a where ; ... ; sqrt :: a -> a ; ... ; -- Defined in ‘GHC.Float’ |
| 14:03:15 | <zanyan> | https://pastebin.com/xvASWmZ9 |
| 14:03:15 | × | coot quits (~coot@213.134.176.158) (Remote host closed the connection) |
| 14:03:27 | <geekosaur> | so it depends on the type, which must be an instance of Floating. (if you want integer sqrt you must get it from somewhere else) |
| 14:03:42 | <zanyan> | oh, right right |
| 14:03:53 | <geekosaur> | so you want fromIntegral on the parameters |
| 14:03:59 | <Guest45> | I'm not sure i can use ifctx directly; I'd need a type-level branch as well as a term level branch. I'll try looking at the technique they used and see if I can build what I need. |
| 14:04:04 | <geekosaur> | and probably ** in place of ^ |
| 14:04:11 | <zanyan> | gotchu, thanks! |
| 14:04:15 | × | noteness quits (~noteness@user/noteness) (Write error: Connection reset by peer) |
| 14:04:15 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 14:04:31 | → | noteness joins (~noteness@user/noteness) |
| 14:04:37 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 14:04:41 | <geekosaur> | mm, actually ^ should be fine |
| 14:04:44 | <geekosaur> | :t (^) |
| 14:04:45 | <lambdabot> | (Integral b, Num a) => a -> b -> a |
| 14:04:46 | <zanyan> | oh okay |
| 14:04:50 | <geekosaur> | right |
| 14:04:59 | <Guest45> | Or maybe the type level branch can populate that flag for me somehow; seem dubious (type to value to type ...) |
| 14:05:13 | <geekosaur> | singletons does that thing, but rip your sanity |
| 14:05:29 | <tomsmeding> | Guest45: yeah I feel you might be able to add extra information to the IfCxt class to accomplish what you need |
| 14:05:35 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection) |
| 14:05:53 | <Guest45> | I was hoping to avoid going via the value level, but it might be unavoidable. |
| 14:07:08 | → | zebrag joins (~chris@user/zebrag) |
| 14:08:25 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 14:09:04 | × | mima quits (~mmh@dhcp-138-246-3-117.dynamic.eduroam.mwn.de) (Ping timeout: 268 seconds) |
| 14:09:51 | Clint_ | is now known as Clint |
| 14:12:53 | × | aweinstock quits (~aweinstoc@cpe-74-76-189-75.nycap.res.rr.com) (Ping timeout: 268 seconds) |
| 14:13:11 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 14:13:42 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 14:14:45 | × | qhong quits (~qhong@rescomp-21-400677.stanford.edu) (Ping timeout: 252 seconds) |
| 14:15:42 | <zanyan> | okay I managed to do it Geekosaur, thanks! |
| 14:16:40 | <zanyan> | I forgot that uhhhhh Haskell has left associative functions and so I applied "fromIntegral" like the way you would in an imperative programming language |
| 14:17:58 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
| 14:18:06 | → | mastarija joins (~mastarija@2a05:4f46:e03:6000:c421:108c:b5ba:309e) |
| 14:19:16 | × | pmarg quits (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) (Quit: pmarg) |
| 14:20:14 | → | aweinstock joins (~aweinstoc@cpe-74-76-189-75.nycap.res.rr.com) |
| 14:20:32 | → | pmarg joins (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) |
| 14:20:46 | → | aliosablack joins (~chomwitt@2a02:587:dc15:5e00:4013:2028:e3f3:d52d) |
| 14:21:51 | × | kuribas quits (~user@ptr-17d51en70upy9zs31tv.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
| 14:22:41 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 268 seconds) |
| 14:24:08 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 14:25:47 | → | acidjnk_new joins (~acidjnk@p200300d6e705866645103b1bac763c69.dip0.t-ipconnect.de) |
| 14:27:39 | <nilradical> | what actually happens when i put `default (Text)` at the top of my file |
| 14:27:46 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 14:27:55 | <nilradical> | using OverloadedStrings |
| 14:28:11 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 14:30:37 | <nilradical> | does it mean whenever i have String in that file, it is secretly Text? |
| 14:31:10 | <tomsmeding> | nilradical: https://downloads.haskell.org/~ghc/latest/docs/users_guide/exts/overloaded_strings.html#extension-OverloadedStrings |
| 14:31:20 | → | cfricke joins (~cfricke@user/cfricke) |
| 14:31:25 | <tomsmeding> | search for "Haskell's defaulting mechanism" |
| 14:32:00 | <tomsmeding> | (normally default declarations are for Num only; OverloadedStrings extends this to IsString) |
| 14:32:32 | <albet70> | there's Functor for map, Foldable for reduce, is there something for filter? |
| 14:33:25 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 14:33:30 | <nilradical> | tomsmeding: thanks |
| 14:34:10 | <lortabac> | @hackage witherable -- albet70 |
| 14:34:10 | <lambdabot> | https://hackage.haskell.org/package/witherable -- albet70 |
| 14:37:09 | → | mima joins (~mmh@dhcp-138-246-3-117.dynamic.eduroam.mwn.de) |
| 14:37:26 | × | mastarija quits (~mastarija@2a05:4f46:e03:6000:c421:108c:b5ba:309e) (Ping timeout: 268 seconds) |
| 14:39:42 | <nilradical> | is there a printf (like Text.Printf) for Text? |
| 14:39:43 | × | aliosablack quits (~chomwitt@2a02:587:dc15:5e00:4013:2028:e3f3:d52d) (Remote host closed the connection) |
| 14:40:02 | → | aliosablack joins (~chomwitt@2a02:587:dc15:5e00:ea1e:e5c0:de8:53e2) |
| 14:41:29 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 14:41:56 | <geekosaur> | https://hackage.haskell.org/package/vformat-0.14.1.0/docs/Text-Format.html#v:fromString I was looking at the other day |
| 14:42:20 | <geekosaur> | (ignore the fromString part, OverloadedStrings does that for you) |
| 14:42:55 | <nilradical> | geekosaur: thanks |
| 14:44:46 | × | Guest45 quits (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) (Quit: Client closed) |
| 14:45:23 | → | Guest45 joins (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) |
| 14:45:36 | → | shriekingnoise joins (~shrieking@186.137.167.202) |
| 14:45:38 | × | zanyan quits (~zanyan@2a02:6b64:f194:0:1d3f:ed4e:5027:57f2) (Quit: Ping timeout (120 seconds)) |
| 14:45:55 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds) |
| 14:48:14 | × | noteness quits (~noteness@user/noteness) (Remote host closed the connection) |
| 14:48:42 | → | noteness joins (~noteness@user/noteness) |
| 14:49:18 | <Guest45> | As far as I can tell, the trick that IfCtx uses relies on the term level call to `ifCtx`. I'm contemplating going back from terms to types via some boilerplate minimal singletons stuff. I need to think a bit more though, because there ought to be a way to do the if at the type level. |
| 14:49:48 | × | In0perable quits (~PLAYER_1@fancydata.science) (Quit: All your buffer are belong to us!) |
| 14:51:02 | × | dfg quits (~dfg@user/dfg) (Ping timeout: 244 seconds) |
| 14:51:35 | × | mud quits (~mud@user/kadoban) (Ping timeout: 268 seconds) |
| 14:52:20 | → | `2jt joins (~jtomas@56.red-88-17-82.dynamicip.rima-tde.net) |
| 14:53:09 | → | dfg joins (~dfg@dfg.rocks) |
| 14:53:09 | × | dfg quits (~dfg@dfg.rocks) (Changing host) |
| 14:53:09 | → | dfg joins (~dfg@user/dfg) |
| 14:53:25 | → | Guest26 joins (~Guest26@cpc151201-smal19-2-0-cust133.19-1.cable.virginm.net) |
| 14:53:37 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 252 seconds) |
| 14:54:13 | × | alternateved quits (~user@staticline-31-183-149-36.toya.net.pl) (Remote host closed the connection) |
| 14:56:57 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 14:57:53 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
| 14:57:56 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
| 14:59:19 | → | EsoAlgo joins (~EsoAlgo@129.146.136.145) |
| 15:00:14 | → | kuribas joins (~user@ptr-17d51epg7uxmm3fpjg8.18120a2.ip6.access.telenet.be) |
| 15:01:02 | × | monadplus quits (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) (Quit: Client closed) |
| 15:01:05 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
| 15:01:06 | → | vglfr joins (~vglfr@37.73.110.255) |
| 15:01:25 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 15:02:11 | × | Guest45 quits (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) (Quit: Client closed) |
| 15:02:24 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 244 seconds) |
| 15:02:31 | → | Guest45 joins (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) |
| 15:03:53 | × | `2jt quits (~jtomas@56.red-88-17-82.dynamicip.rima-tde.net) (Remote host closed the connection) |
| 15:04:37 | → | Inoperable joins (~PLAYER_1@fancydata.science) |
| 15:04:41 | × | GoldsteinQ quits (~goldstein@goldstein.rs) (Ping timeout: 268 seconds) |
| 15:04:50 | → | gmg joins (~user@user/gehmehgeh) |
| 15:07:34 | × | vglfr quits (~vglfr@37.73.110.255) (Ping timeout: 244 seconds) |
| 15:07:39 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 15:07:57 | → | monadplus joins (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) |
| 15:08:13 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 15:09:28 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 15:10:58 | → | alp_ joins (~alp@user/alp) |
| 15:11:42 | → | vglfr joins (~vglfr@37.73.110.255) |
| 15:13:13 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 15:13:51 | → | elkcl joins (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) |
| 15:14:15 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:f6c8:3b8a:6258:a564) (Quit: WeeChat 2.8) |
| 15:16:17 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds) |
| 15:17:41 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 15:21:59 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 15:22:13 | <nilradical> | i have a record type `M` with a field `unity`. using OverloadedRecordDot, if i have `a :: M` and do `a.unit` i get `parse error on input ‘unit’` . If i rename it to 'unity' there is no error . ? |
| 15:22:14 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 15:22:27 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 15:22:43 | <nilradical> | typo... the 1st `unity` should be `unit` |
| 15:25:59 | × | Guest45 quits (~Guest45@d-216-246-141-77.nh.cpe.atlanticbb.net) (Quit: Client closed) |
| 15:34:08 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 15:35:47 | × | vglfr quits (~vglfr@37.73.110.255) (Ping timeout: 252 seconds) |
| 15:37:05 | × | Inst quits (~Inst@2601:6c4:4080:3f80:258f:9da7:8d32:3e0c) (Ping timeout: 255 seconds) |
| 15:37:22 | × | hakutaku quits (~hakutaku@62.32.91.171) (Quit: WeeChat 3.6) |
| 15:39:43 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 15:40:07 | × | acidjnk_new quits (~acidjnk@p200300d6e705866645103b1bac763c69.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
| 15:40:33 | × | causal quits (~user@50.35.83.177) (Quit: WeeChat 3.6) |
| 15:41:09 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 15:44:56 | → | bitmapper joins (uid464869@id-464869.lymington.irccloud.com) |
| 15:45:46 | → | cheater joins (~Username@user/cheater) |
| 15:47:18 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 15:50:52 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 15:51:11 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 15:52:01 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 15:52:33 | × | titibandit quits (~titibandi@sunp.ient.rwth-aachen.de) (Remote host closed the connection) |
| 15:54:51 | × | fserucas quits (~fserucas@46.50.4.9) (Ping timeout: 252 seconds) |
| 15:56:26 | → | slack1256 joins (~slack1256@wsip-184-177-0-226.no.no.cox.net) |
| 15:56:52 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 15:57:11 | → | Milan joins (~Milan@46.245.72.105) |
| 15:57:34 | × | Milan quits (~Milan@46.245.72.105) (Client Quit) |
| 16:02:25 | × | azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 16:02:53 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 16:03:07 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 16:03:31 | → | Guest94 joins (~Guest94@pool-100-40-26-64.prvdri.fios.verizon.net) |
| 16:03:48 | × | Guest26 quits (~Guest26@cpc151201-smal19-2-0-cust133.19-1.cable.virginm.net) (Quit: Client closed) |
| 16:04:21 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.6) |
| 16:05:19 | × | Guest94 quits (~Guest94@pool-100-40-26-64.prvdri.fios.verizon.net) (Client Quit) |
| 16:05:32 | <slack1256> | Hi, I want to use native haskell data types for configuration. On the first iteration I just used the Read instances. But I want to support comments and descriptions, any libraries I should take a look at? |
| 16:06:18 | <slack1256> | I am not interested currently on schema declarations or dhall for config, I will keep it simple and use the native haskell representation for now. |
| 16:06:22 | → | qhong joins (~qhong@rescomp-21-400677.stanford.edu) |
| 16:06:28 | <geekosaur> | dyre? |
| 16:06:46 | <geekosaur> | (was going to suggest dhall then you said no) |
| 16:08:58 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 16:11:07 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 16:11:11 | <slack1256> | geekosaur: I thought dyre was concerned with automatic recompilation, but seems to do just what I need. |
| 16:11:17 | <slack1256> | I will go with it for now. |
| 16:12:05 | × | cheater quits (~Username@user/cheater) (Ping timeout: 252 seconds) |
| 16:12:07 | <geekosaur[m]> | The problem with wanting to do your configuration in Haskell is that either you do it the Dyre way or you need to link all of ghc into your program, which seems a bit heavy for configuration |
| 16:12:24 | × | alp_ quits (~alp@user/alp) (Ping timeout: 268 seconds) |
| 16:12:40 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
| 16:14:15 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds) |
| 16:17:28 | → | vysn joins (~vysn@user/vysn) |
| 16:18:09 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 16:18:49 | → | cheater joins (~Username@user/cheater) |
| 16:23:52 | × | nilradical quits (~nilradica@user/naso) () |
| 16:26:36 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 16:29:03 | → | titibandit joins (~titibandi@xdsl-212-8-147-38.nc.de) |
| 16:30:32 | → | Milan joins (~Milan@46.245.72.105) |
| 16:30:44 | × | Milan quits (~Milan@46.245.72.105) (Client Quit) |
| 16:30:58 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 16:31:00 | → | jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
| 16:34:00 | → | Tuplanolla joins (~Tuplanoll@91-159-69-12.elisa-laajakaista.fi) |
| 16:35:13 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 16:35:31 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 16:39:59 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 16:40:28 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 16:48:19 | → | ski joins (~ski@217.116.228.14) |
| 16:52:18 | <kuribas> | slack1256: you can use higher kinded records: https://chrispenner.ca/posts/hkd-options |
| 16:53:46 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 268 seconds) |
| 16:57:11 | × | benin0 quits (~benin@183.82.204.69) (Ping timeout: 252 seconds) |
| 16:57:48 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 16:58:07 | → | raym joins (~raym@user/raym) |
| 16:59:54 | → | benin0 joins (~benin@183.82.30.53) |
| 16:59:59 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 17:00:26 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 17:00:38 | × | ridcully quits (~ridcully@p57b5218b.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 17:02:05 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 17:03:03 | × | ski quits (~ski@217.116.228.14) (Ping timeout: 252 seconds) |
| 17:05:25 | → | ridcully joins (~ridcully@pd951fa32.dip0.t-ipconnect.de) |
| 17:05:40 | × | monadplus quits (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) (Ping timeout: 252 seconds) |
| 17:07:15 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 17:08:11 | × | benin0 quits (~benin@183.82.30.53) (Ping timeout: 252 seconds) |
| 17:08:24 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 17:08:40 | → | benin0 joins (~benin@183.82.176.176) |
| 17:11:38 | → | econo joins (uid147250@user/econo) |
| 17:13:27 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 17:15:21 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 17:15:46 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 17:16:37 | × | benin0 quits (~benin@183.82.176.176) (Ping timeout: 252 seconds) |
| 17:16:57 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 17:17:30 | → | cyanide3dinner joins (~cyanide4d@2402:e280:2149:513:931b:41cb:2a7e:791d) |
| 17:19:24 | → | mud joins (~mud@user/kadoban) |
| 17:22:03 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 17:23:15 | × | zxx7529 quits (~Thunderbi@user/zxx7529) (Quit: zxx7529) |
| 17:23:17 | → | coot joins (~coot@213.134.176.158) |
| 17:23:22 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 17:27:02 | → | kenran joins (~kenran@200116b82b0c9300327c25528a273147.dip.versatel-1u1.de) |
| 17:28:37 | → | acidjnk_new joins (~acidjnk@p200300d6e705866691d881defe97b1cb.dip0.t-ipconnect.de) |
| 17:30:06 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds) |
| 17:34:25 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 17:36:03 | codolio | is now known as dolio |
| 17:37:22 | → | ski joins (~ski@217.116.228.14) |
| 17:37:36 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 17:39:58 | × | kenran quits (~kenran@200116b82b0c9300327c25528a273147.dip.versatel-1u1.de) (Ping timeout: 268 seconds) |
| 17:42:38 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 255 seconds) |
| 17:43:59 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
| 17:44:32 | → | kenran joins (~kenran@200116b82b0c93001ede1376b194f04b.dip.versatel-1u1.de) |
| 17:46:35 | × | kenran quits (~kenran@200116b82b0c93001ede1376b194f04b.dip.versatel-1u1.de) (Client Quit) |
| 17:46:41 | × | ski quits (~ski@217.116.228.14) (Ping timeout: 255 seconds) |
| 17:52:33 | → | fef joins (~thedawn@user/thedawn) |
| 17:52:38 | × | noteness quits (~noteness@user/noteness) (Remote host closed the connection) |
| 17:52:55 | × | pmarg quits (~pmarg@2a01:799:159f:9b00:99a6:120a:920d:bb02) (Ping timeout: 268 seconds) |
| 17:53:22 | → | noteness joins (~noteness@user/noteness) |
| 17:55:07 | → | ski joins (~ski@217.116.228.14) |
| 17:57:39 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 17:59:30 | → | neceve joins (~quassel@2.26.93.14) |
| 18:01:49 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection) |
| 18:01:55 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 18:02:07 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 18:03:45 | × | raym quits (~raym@user/raym) (Remote host closed the connection) |
| 18:07:43 | × | ski quits (~ski@217.116.228.14) (Ping timeout: 268 seconds) |
| 18:08:52 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 18:09:04 | → | raym joins (~raym@user/raym) |
| 18:10:18 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds) |
| 18:10:19 | Lord_of_Life_ | is now known as Lord_of_Life |
| 18:12:22 | → | ski joins (~ski@217.116.228.14) |
| 18:15:53 | × | irfan quits (~irfan@user/irfan) (Quit: leaving) |
| 18:18:58 | ← | mima parts (~mmh@dhcp-138-246-3-117.dynamic.eduroam.mwn.de) () |
| 18:23:45 | × | ski quits (~ski@217.116.228.14) (Ping timeout: 268 seconds) |
| 18:27:06 | → | ski joins (~ski@217.116.228.14) |
| 18:27:53 | × | kuribas quits (~user@ptr-17d51epg7uxmm3fpjg8.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
| 18:31:08 | × | raym quits (~raym@user/raym) (Ping timeout: 244 seconds) |
| 18:33:20 | → | raym joins (~raym@user/raym) |
| 18:36:56 | × | ski quits (~ski@217.116.228.14) (Remote host closed the connection) |
| 18:38:54 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 18:40:44 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 18:42:31 | → | ski joins (~ski@217.116.228.14) |
| 18:43:38 | → | seriously joins (~seriously@2001:1c06:1b1d:6f00:efd2:b7b6:20af:5f73) |
| 18:47:11 | × | neceve quits (~quassel@2.26.93.14) (Ping timeout: 268 seconds) |
| 18:49:36 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection) |
| 18:53:54 | × | ski quits (~ski@217.116.228.14) (Remote host closed the connection) |
| 18:54:04 | → | pmarg joins (~pmarg@224.80-203-5.customer.lyse.net) |
| 18:58:20 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 18:58:54 | × | MajorBiscuit quits (~MajorBisc@c-001-021-040.client.tudelft.eduvpn.nl) (Ping timeout: 268 seconds) |
| 18:59:24 | Hecate_ | is now known as Hecate |
| 19:00:48 | → | MajorBiscuit joins (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) |
| 19:01:27 | <seriously> | hello, is anyone familiar with this HW assignment from Yorgeys CIS 194? https://www.cis.upenn.edu/~cis1940/spring13/hw/05-type-classes.pdf . Im stuck on the last problem. |
| 19:02:42 | <seriously> | Specifically, this explanation: https://paste.tomsmeding.com/zYVyJ8YM |
| 19:03:18 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 19:03:22 | <seriously> | A gentle push in the right direction would be appreciated |
| 19:04:41 | × | bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 19:05:31 | <geekosaur> | at least one person in here is familiar with it 🙂 but what difficulty are you having with the explanation? |
| 19:06:01 | × | MajorBiscuit quits (~MajorBisc@2a02-a461-129d-1-193d-75d8-745d-e91e.fixed6.kpn.net) (Quit: WeeChat 3.5) |
| 19:06:03 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection) |
| 19:06:10 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 19:06:59 | × | ccntrq quits (~Thunderbi@172.209.94.92.rev.sfr.net) (Remote host closed the connection) |
| 19:07:29 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 19:08:15 | × | adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
| 19:08:33 | → | adanwan joins (~adanwan@gateway/tor-sasl/adanwan) |
| 19:08:58 | <seriously> | "these same functions can be inter- |
| 19:08:58 | <seriously> | preted as expressions" |
| 19:09:13 | → | ski joins (~ski@217.116.228.14) |
| 19:09:42 | <seriously> | I dont understand how a function that takes a map and returns maybe integer would look as an expression |
| 19:10:05 | <seriously> | (M.Map String Integer -> Maybe Integer) |
| 19:10:37 | × | slack1256 quits (~slack1256@wsip-184-177-0-226.no.no.cox.net) (Ping timeout: 268 seconds) |
| 19:11:26 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 244 seconds) |
| 19:12:35 | <geekosaur> | this would make `flip M.lookup "varName"` an expression, whoe value is `Nothing` if `varName` doesn't exist in the Map or `Just x` if it exists with value `x` |
| 19:12:45 | <geekosaur> | *whose value |
| 19:13:17 | <geekosaur> | remember that functions are themselves prefectly good values in Haskell |
| 19:13:42 | <seriously> | And also throughout the problem (excercise 6) the instances of type class Expr make total sense... Instance Expr Integers, Expr Bools, etc... but how the heck does an Expr instance of a function as a type make any sense |
| 19:13:43 | → | o-90 joins (~o-90@gateway/tor-sasl/o-90) |
| 19:14:01 | × | Kaiepi quits (~Kaiepi@142.68.249.28) (Read error: Connection reset by peer) |
| 19:14:31 | <geekosaur> | and that partial application of functions makes them quite useful as values |
| 19:14:47 | → | Kaiepi joins (~Kaiepi@142.68.249.28) |
| 19:15:52 | <seriously> | to clarify my last point: Expr (M.Map String Integer -> Maybe Integer) |
| 19:15:56 | <geekosaur> | yes |
| 19:15:58 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 19:16:01 | <geekosaur> | reread what I just said |
| 19:16:08 | <seriously> | ok |
| 19:17:06 | × | ski quits (~ski@217.116.228.14) (Remote host closed the connection) |
| 19:17:17 | <geekosaur> | instead of `flip M.lookup "varName"` it could be `("varName"?!)`; see https://downloads.haskell.org/ghc/9.2.3/docs/html/libraries/containers-0.6.5.1/Data-Map-Lazy.html#v:-33--63- |
| 19:17:39 | <geekosaur> | oh sorry that's reversed. `("varName"!?)` |
| 19:17:44 | <tomsmeding> | perhaps also helpful: try to write down the types of all the methods of Expr and HasVars when specialised to those particular function types, and then think separately about how you could sensibly implement those specialised types |
| 19:17:53 | → | ski joins (~ski@217.116.228.14) |
| 19:18:16 | × | o-90 quits (~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection) |
| 19:18:27 | <ski> | @type M.lookup "stringly" :: M.Map String Integer -> Maybe Integer -- seriously |
| 19:18:28 | <lambdabot> | M.Map String Integer -> Maybe Integer |
| 19:20:29 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 268 seconds) |
| 19:20:46 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 19:22:08 | → | Topsi joins (~Topsi@dyndsl-095-033-091-248.ewe-ip-backbone.de) |
| 19:25:07 | <seriously> | still here just still working through it |
| 19:25:23 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 244 seconds) |
| 19:27:34 | × | hgolden quits (~hgolden2@cpe-172-251-233-141.socal.res.rr.com) (Quit: Konversation terminated!) |
| 19:28:28 | → | waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 19:29:40 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 19:30:28 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 19:32:51 | → | jmdaemon joins (~jmdaemon@user/jmdaemon) |
| 19:35:57 | × | raym quits (~raym@user/raym) (Ping timeout: 252 seconds) |
| 19:37:46 | → | raym joins (~raym@user/raym) |
| 19:41:21 | × | ski quits (~ski@217.116.228.14) (Remote host closed the connection) |
| 19:42:07 | → | vglfr joins (~vglfr@37.73.110.255) |
| 19:42:35 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 19:43:43 | → | ski joins (~ski@217.116.228.14) |
| 19:46:11 | <tomsmeding> | take your time, ascending to the functional level requires laying of new roads in the brain :) |
| 19:46:24 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Remote host closed the connection) |
| 19:49:16 | <seriously> | '=( thanks ill keep trying |
| 19:51:28 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 19:53:11 | × | ski quits (~ski@217.116.228.14) (Ping timeout: 252 seconds) |
| 19:55:50 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
| 19:57:23 | <seriously> | giving up for now will try again tomorow; thanks for the help |
| 19:57:43 | × | seriously quits (~seriously@2001:1c06:1b1d:6f00:efd2:b7b6:20af:5f73) (Quit: Client closed) |
| 19:58:19 | × | machinedgod quits (~machinedg@d172-219-86-154.abhsia.telus.net) (Ping timeout: 252 seconds) |
| 19:59:35 | <monadplus[m]> | pbrpy5hv764rezd7 |
| 19:59:42 | <geekosaur> | uh |
| 19:59:44 | <tomsmeding> | oops? |
| 20:00:10 | → | ski joins (~ski@217.116.228.14) |
| 20:00:11 | <Rembane_> | Sounds like a good password |
| 20:00:20 | <monadplus[m]> | My bad sorry |
| 20:00:24 | <geekosaur> | past tense |
| 20:00:31 | <geekosaur> | one hopes |
| 20:04:34 | → | raehik joins (~raehik@82.21.176.157) |
| 20:04:44 | → | riverside joins (~riverside@109.249.184.161) |
| 20:05:22 | → | machinedgod joins (~machinedg@d172-219-86-154.abhsia.telus.net) |
| 20:06:47 | × | fef quits (~thedawn@user/thedawn) (Ping timeout: 268 seconds) |
| 20:07:39 | → | monadplus joins (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) |
| 20:08:19 | → | fserucas joins (~fserucas@46.50.4.9) |
| 20:08:23 | → | gdown joins (~gavin@h69-11-149-231.kndrid.broadband.dynamic.tds.net) |
| 20:09:03 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 20:09:24 | × | fserucas quits (~fserucas@46.50.4.9) (Client Quit) |
| 20:09:28 | × | monadplus quits (~monadplus@130.red-83-43-6.dynamicip.rima-tde.net) (Client Quit) |
| 20:09:28 | × | titibandit quits (~titibandi@xdsl-212-8-147-38.nc.de) (Remote host closed the connection) |
| 20:09:55 | × | ski quits (~ski@217.116.228.14) (Remote host closed the connection) |
| 20:12:06 | <EvanR> | my password is so strong I just tell everyone |
| 20:15:35 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 20:16:02 | × | gmg quits (~user@user/gehmehgeh) (Ping timeout: 268 seconds) |
| 20:16:13 | <riverside> | any news in the haskell world? |
| 20:16:30 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 20:17:45 | <geekosaur> | as of when? also you may want to peruse discourse.haskell.org |
| 20:19:21 | ← | kadoban1 parts (~kadoban@user/kadoban) () |
| 20:19:57 | × | raehik quits (~raehik@82.21.176.157) (Ping timeout: 252 seconds) |
| 20:21:02 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds) |
| 20:23:46 | → | asdf_ joins (~asdf@130.red-83-43-6.dynamicip.rima-tde.net) |
| 20:25:32 | <dsal> | EvanR: They'll never guess your username. |
| 20:26:49 | <geekosaur> | there's at least one service I used to use whose password rules were so craptacularly limited that I used the username as the actual password |
| 20:27:55 | → | pgib joins (~textual@173.38.117.69) |
| 20:27:59 | <tomsmeding> | geekosaur: I suppose that was not a service with public usernames? |
| 20:28:03 | <riverside> | wow, i wouldnt have expected like 40k views for some of the threads |
| 20:29:11 | <riverside> | i guess haskell is entering its mainstream phase, i even heard John Carmack mention it on the Lex Fridman podcast |
| 20:29:25 | × | eternalforms quits (~obsrwr@46.101.168.131) (Remote host closed the connection) |
| 20:29:39 | × | asdf_ quits (~asdf@130.red-83-43-6.dynamicip.rima-tde.net) (Quit: Leaving) |
| 20:30:38 | <geekosaur[m]> | Carmack's been mentioning it for years (mostly pissing on it) |
| 20:31:54 | <riverside> | "absurd mindbending paradigm" sort of angle, but he kindly caveated it with something like "C is becoming rarer" |
| 20:32:41 | <riverside> | top thread SPJ going to work on a new language called "Verse", i wonder how it will compare to haskell |
| 20:34:10 | <merijn> | riverside: Carmack gave a keynote talking about haskell about 8 years ago too :p |
| 20:34:29 | <merijn> | My bad, 6 years ago |
| 20:35:42 | <merijn> | riverside: A lot of the more techy people in games have been on the "C is dead/needs to die/etc." side of the fight for decades :p |
| 20:35:59 | <riverside> | oh cool. yeah, i guess with people with such a large profile promoting it we should see a pretty decent uptake of users |
| 20:36:31 | <riverside> | merijn: i think im alergic to curly braces from having haskell as a first language |
| 20:37:02 | <riverside> | and iv yet to find a functional programing language that compares in terms of clean-ness of syntax |
| 20:37:02 | <merijn> | riverside: In 2006 (I think? I can't find the exact date of the talk) Tim Sweeney from Epic Games gave a keynote about his vision of "languages for games" |
| 20:37:19 | <merijn> | Spoiler: Most of the stuff they want in games engines, C is terrible at |
| 20:37:36 | <riverside> | i dont know enough about the particulars of that field to understand |
| 20:37:37 | <merijn> | riverside: I dunno if there's a video somehwere, but slides are here: https://www.st.cs.uni-saarland.de/edu/seminare/2005/advanced-fp/docs/sweeny.pdf |
| 20:37:46 | <riverside> | thanks |
| 20:39:00 | <Lears> | riverside: Did you know you can write do { ...; ...; let { x = ...; y = ... }; ... } if you want to? |
| 20:39:04 | × | biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer) |
| 20:39:23 | <riverside> | hmm, judging from that it seems like they have the same problems as we do in the scientific programming community, basically fast vector stuff. |
| 20:39:39 | <tomsmeding> | and did you know that SPJ was (is?) partial to that syntax over the usual indentation-based ("layout") version? |
| 20:39:40 | <Lears> | There can actually be a lot of curly braces in Haskell. |
| 20:39:51 | <riverside> | Lears: lol, that actually looks pretty useful |
| 20:39:52 | gehmehgeh | is now known as gmg |
| 20:39:58 | <merijn> | tomsmeding: spj syntax is funky in many ways |
| 20:40:21 | <merijn> | riverside: Technically, Haskell's layout system is defined as syntactic sugar for braces and semicolons :p |
| 20:40:40 | <merijn> | tomsmeding: SPJ uses prefix semicolons |
| 20:40:46 | <riverside> | and all of these things makes writing an interpreter kind of difficult |
| 20:40:53 | <merijn> | Which, frankly, should be a bannable offense |
| 20:40:56 | <tomsmeding> | re syntactic sugar: yes and in the grossest way possible |
| 20:41:33 | <tomsmeding> | if the parser encounters a parse error, it goes back and inserts a } and tries again |
| 20:42:05 | <tomsmeding> | recently I've tried to write a parser for haskell-like syntax without such a hack, and it seems to work fine |
| 20:42:10 | <tomsmeding> | but there's probably something I'm missing :) |
| 20:42:19 | → | slack1256 joins (~slack1256@wsip-184-177-0-226.no.no.cox.net) |
| 20:42:32 | <riverside> | that reminds me of genetic programming using SK combinators |
| 20:44:04 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 20:44:36 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 20:44:58 | <riverside> | hmm, those game language slides mention sparse interaction graphs |
| 20:45:10 | <riverside> | (you can see where im going with that...) |
| 20:45:51 | <riverside> | i always thought that if graphs were a language primative that it would simplify the implementation of the compiler |
| 20:46:07 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 20:46:23 | <riverside> | but got scared off from trying to approach the formal methods style intermediary language we compile to |
| 20:46:35 | → | califax joins (~califax@user/califx) |
| 20:46:42 | <riverside> | i forget what its called... lambda++ or something |
| 20:46:48 | <Cale> | merijn: prefix semicolons I can live with, just don't do the garbage where you start a new do-block somewhere in the middle of another and don't increase the indentation level |
| 20:47:08 | → | darchitect1 joins (~darchitec@2a00:23c6:3584:df01:7ab:2377:4825:f9a) |
| 20:47:12 | <Cale> | That's where I draw the line, haha |
| 20:47:26 | × | pmarg quits (~pmarg@224.80-203-5.customer.lyse.net) (Remote host closed the connection) |
| 20:47:29 | × | noteness quits (~noteness@user/noteness) (Ping timeout: 268 seconds) |
| 20:47:31 | <riverside> | recently had to add extra indentation to if statements because of that... |
| 20:47:33 | <tomsmeding> | riverside: you mean what GHC compiles to? |
| 20:47:37 | <riverside> | yeah |
| 20:47:42 | <tomsmeding> | system F? |
| 20:47:45 | <riverside> | thats it |
| 20:47:55 | <riverside> | not sure if thats where the graph goes or what |
| 20:47:59 | <tomsmeding> | Cale: ._. |
| 20:48:20 | <geekosaur> | isn't the graph more on the STG level? |
| 20:48:35 | <tomsmeding> | Cale: like, have `when some_condition $ do` and then continue on the same indentation level? |
| 20:48:42 | <tomsmeding> | geekosaur: I would guess so |
| 20:48:45 | <riverside> | well there was all this complication of "explicating cycles" |
| 20:48:54 | <riverside> | geekosaur: idk |
| 20:49:09 | <tomsmeding> | though I feel like we're talking about graphs on different levels here |
| 20:49:16 | <riverside> | but yeah sure, you can probably put it at a higher level than system F |
| 20:49:49 | <tomsmeding> | I haven't looked at the slides (so sorry if I'm mistaken), but I feel like riverside is talking about graphs _in_ the language, whereas STG in some sense uses a graph structure to represent the language itself |
| 20:49:58 | <riverside> | tomsmeding: i think you just need parametric types, for something like "monadic tails" |
| 20:50:11 | tomsmeding | has no clue what a monadic tail is |
| 20:50:14 | <tomsmeding> | :) |
| 20:50:21 | <riverside> | dont worry about that! |
| 20:50:24 | <tomsmeding> | :D |
| 20:50:48 | <riverside> | but yeah, basically in haskell we define a program graph with cycles, because we can compile recursive programs |
| 20:51:39 | <riverside> | i think my idea was that if some underlying language had such graphs as a primative, that it would simplify the compiler itself |
| 20:51:46 | <tomsmeding> | though the graph isn't fully statically known |
| 20:52:07 | <riverside> | basically inferred via typchecking iiuc |
| 20:52:12 | <tomsmeding> | well, either that or the graph is infinitely large |
| 20:52:16 | → | noteness joins (~noteness@user/noteness) |
| 20:52:39 | <riverside> | hmm? no you dont unroll it |
| 20:52:46 | <riverside> | thats why its not a DAG |
| 20:53:06 | <riverside> | its an actual *graph*, like, tree with cyclic references |
| 20:53:20 | <riverside> | but we lack the ability to explicate the cycles syntactically |
| 20:53:25 | <tomsmeding> | hm, I'm thinking about how a program can instantiate a closure with multiple different values to close over |
| 20:53:43 | <riverside> | oh |
| 20:54:19 | <tomsmeding> | like, if `\x -> y + x` occurs somewhere, then if y=2 is in scope you get a closure with a 2 in it, whereas if you evaluate that lambda with y=3 in scope, you get a closure with a 3 in it |
| 20:54:29 | <tomsmeding> | would you consider those two closures different nodes in the graph, or the same node? |
| 20:54:49 | <riverside> | sorry, im baffled by this |
| 20:54:50 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 255 seconds) |
| 20:54:53 | <tomsmeding> | if different nodes, then either the graph is not statically known or infinite; if the same node, then the graph doesn't contain all required information to run the program (I think) |
| 20:55:17 | <tomsmeding> | f :: Int -> Int -> Int ; f y = let g = \x -> y + x in g y |
| 20:55:21 | <tomsmeding> | what is the graph for that program |
| 20:55:33 | <tomsmeding> | for f, that is |
| 20:55:55 | <slack1256> | How is Control.Monad.Trans.AccumT different that Control.Monad.Trans.Writer.CPS ? |
| 20:56:28 | <riverside> | oh right, your claiming that some scoping consideration could affect something, im not sure though |
| 20:56:48 | <riverside> | because there y is in scope for the definition of g |
| 20:56:58 | <tomsmeding> | riverside: I'm saying that I'm not quite sure what your definition of "the graph" is -- I can think of two possibilities, and neither is, in my mind, very satisfying |
| 20:57:04 | → | causal joins (~user@2001:470:ea0f:3:329c:23ff:fe3f:1e0e) |
| 20:58:17 | <tomsmeding> | what f is _calling_, there, is an _instantiation_ of the closure that is g with the y-value given by the argument of f |
| 20:58:40 | <tomsmeding> | so in my first alternative for the definition of "the graph", f would need to have an arrow to that instantiation |
| 20:58:45 | <riverside> | i guess you could add an axtra argument to g... but i guess really the graph should contain all the top level information, thought rewriting to avoid the scoping consideration would lead to per-function graphs that dont pull variables in from an outer scope |
| 20:58:50 | <riverside> | i hadnt considered this, thanks |
| 20:58:51 | <tomsmeding> | but which instantiation that is, depends on runtime values |
| 20:59:32 | <tomsmeding> | oh, you mean making every function a closed function by putting the closed-over values in additional arguments? |
| 20:59:49 | <riverside> | "up to some fancy rewite" yeah |
| 20:59:53 | <riverside> | rewrite* |
| 20:59:58 | <tomsmeding> | how would that work for a set of mutually recursive functions |
| 21:00:13 | <riverside> | would that change anything? |
| 21:00:14 | <tomsmeding> | say f and g are mutually recursive; do both get two additional arguments, f and g? |
| 21:00:40 | → | biberu joins (~biberu@user/biberu) |
| 21:00:59 | <riverside> | hmm, probably you would have the graph "at top level"? does that make sense? |
| 21:01:08 | <riverside> | ie, these wouldnt support per-function graphs |
| 21:01:12 | <tomsmeding> | sure |
| 21:01:15 | <riverside> | since they dont exist in isolation |
| 21:01:20 | <tomsmeding> | yes for sure |
| 21:01:40 | <riverside> | i guess then you could try and find subgraphs that exist on their own |
| 21:01:55 | <riverside> | some kind of graph factoring problem |
| 21:02:05 | <tomsmeding> | which is called strongly connected components? :) |
| 21:02:18 | <riverside> | there was a graph isomorphism problem also my prof was on about, apparently there are polynomial time algorithms for this |
| 21:02:47 | <tomsmeding> | given any graph, that produces a DAG of strongly connected components (SCCs), where each SCC is a directed (cluster of) cycles |
| 21:02:58 | <tomsmeding> | _graph isomorphism_? |
| 21:03:14 | <riverside> | i guess the idea is that you would want to "compile" it down to some cannoncal form, so that you can do function (in)equality |
| 21:03:18 | <tomsmeding> | that thing where Lazlo Babai designed a quasi-polynomial algorithm for? |
| 21:03:21 | <tomsmeding> | don't go there :p |
| 21:03:40 | <tomsmeding> | a friend of mine implemented Babai's algorithm in C++, and he came out half-alive |
| 21:03:49 | <tomsmeding> | also the constant factor is ridiculously bad |
| 21:04:40 | <riverside> | i think there is a theorem for factorin finite automata called the "cascade algorithm" or something |
| 21:04:48 | <tomsmeding> | fun fact, GHC typechecks let bindings by computing the DAG of SCCs of the bindings, then typechecks the components in topological order |
| 21:06:32 | <riverside> | hmm, well maybe if you dont care about function equality you dont actually need to check if two programs are isomorphic |
| 21:06:45 | <tomsmeding> | I don't think you need function equality very often |
| 21:07:03 | <tomsmeding> | intuitionistic logic doesn't usually assume functional extensionality :) |
| 21:07:08 | <riverside> | i guess i was just intrigued by the fact that 2 programs *might* factorise the same |
| 21:07:10 | × | mmhat quits (~mmh@p200300f1c72ee96aee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 21:07:21 | <riverside> | and that you could get some kind of canonical form just from compilation |
| 21:07:44 | <tomsmeding> | if two programs have the same graph, are they the same program? |
| 21:07:52 | <riverside> | but i guess you dont want to have to then find every different way the same program could be expressed on a graph! which you wouldnt need too unless you were doing function equality |
| 21:07:55 | <tomsmeding> | do `f x = x + 2` and `f x = x + 3` have the same graph? |
| 21:08:01 | × | stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
| 21:08:01 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
| 21:08:01 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 21:08:01 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 21:08:01 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 21:08:01 | × | noteness quits (~noteness@user/noteness) (Remote host closed the connection) |
| 21:08:05 | <riverside> | i think he wanted it for genetic programming to promote diversity |
| 21:08:19 | → | noteness joins (~noteness@user/noteness) |
| 21:08:34 | → | stiell joins (~stiell@gateway/tor-sasl/stiell) |
| 21:08:36 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 21:08:36 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 21:08:36 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 21:08:38 | <riverside> | tomsmeding: sure |
| 21:08:53 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 21:09:02 | → | gmg joins (~user@user/gehmehgeh) |
| 21:09:15 | <riverside> | f x = x + f x === f x = f x + x, is kind of what i was talking about |
| 21:09:35 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 21:09:56 | <tomsmeding> | viewing the graph modulo algebraic laws? |
| 21:10:14 | <riverside> | i guess this is where the isomorphism comes in |
| 21:10:20 | <slack1256> | I got a function `add a b = a + b` that is meant to be partially applied, ie: `let f = add <expensive> in ...` . Is there any advantage on writting as `add a = \b -> a + b` in terms of sharing `a`? |
| 21:10:23 | <riverside> | "their graphs are the same" |
| 21:10:41 | <riverside> | er "are isomorphic" |
| 21:10:59 | <geekosaur> | slack1256, I think ghc does let lifting? i.e. does it for you |
| 21:11:00 | <slack1256> | I know GHC has the concept of arity but that is used for inlining. |
| 21:11:14 | <riverside> | i guess the symetry in the arguments would have to *also* be explicated, not sure it can be inferred |
| 21:11:50 | × | zer0bitz quits (~zer0bitz@2001:2003:f748:2000:7d58:b5e3:80b4:aa10) (Ping timeout: 244 seconds) |
| 21:11:57 | <tomsmeding> | slack1256: if GHC does no optimisations at all and just follows call-by-need, your first version will compute <expensive> only once |
| 21:12:19 | <tomsmeding> | riverside: hence, isomorphism modulo algebraic laws :p |
| 21:12:30 | <tomsmeding> | where said laws you have to conjure from somewhere |
| 21:13:18 | <slack1256> | Mmm I was under the impression there were some theorical problems, but I got that impression from lambda lifting which another different optimization. |
| 21:13:21 | <tomsmeding> | riverside: this is kind of unrelated, but it makes me think of https://blog.sigplan.org/2021/04/06/equality-saturation-with-egg/ |
| 21:13:27 | <slack1256> | Thanks tomsmeding and geekosaur! |
| 21:13:29 | <riverside> | yeah, sorry, but yes, exactly that. i mean about the graph though, these "algebraic laws" should be inferable from the program shape i guess |
| 21:14:00 | <tomsmeding> | from the program shape and laws concerning the primitive operations |
| 21:14:11 | <riverside> | yeah, like how we actually implement + |
| 21:14:23 | <riverside> | recursively of course |
| 21:14:33 | <tomsmeding> | but that quickly gets untenable; it's easy to make commutativity of a two-argument function be equivalent to your favourite hard conjecture |
| 21:14:49 | <riverside> | damn |
| 21:15:13 | <tomsmeding> | rice's theorem, paraphrased: any useful static analysis will be partial |
| 21:15:19 | <riverside> | sure anyway, i dont really want function equality, ... so i guess gentic programing goes out the window |
| 21:15:24 | <tomsmeding> | (on a turing-complete language) |
| 21:15:57 | <riverside> | the point was more for syntax |
| 21:16:01 | <riverside> | i mean, like brevity |
| 21:16:08 | <tomsmeding> | we went on some tangents :p |
| 21:16:18 | <riverside> | well, it is *the* tangent |
| 21:16:35 | <riverside> | good point to rule out the obvious goose chase |
| 21:16:59 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
| 21:17:41 | <riverside> | i like the idea of graphs in STG though |
| 21:17:58 | <riverside> | i might be delusional to think it could simplify the implementation of GHC though |
| 21:18:09 | <tomsmeding> | the graph in STG, anyway, has a node for every closure created during program execution |
| 21:18:21 | <tomsmeding> | so those (2, g) and (3, g) are distinct |
| 21:18:29 | × | dashkal1 quits (~dashkal@user/dashkal) (Quit: WeeChat 3.5) |
| 21:18:34 | <geekosaur> | I think it could only do so if you could also use it as the input language, but now you make haskell even more brain-breaking than it already is |
| 21:18:34 | <tomsmeding> | which makes sense -- at runtime they're different objects in memory |
| 21:18:48 | <tomsmeding> | programming in STG ?! |
| 21:19:06 | → | pavonia joins (~user@user/siracusa) |
| 21:19:08 | <tomsmeding> | try programming in Unlambda first :p |
| 21:19:21 | <riverside> | we have list primitives, i cant see how graph primitives would make it incomprehensible |
| 21:19:40 | <tomsmeding> | graph primitives just let you use graphs as data structures in the language, right? |
| 21:19:50 | <tomsmeding> | whereas we were talking about the graph structure of the program itself |
| 21:19:52 | <tomsmeding> | two different things |
| 21:19:55 | <geekosaur> | right, it's *visualizing* graphs that is the problem |
| 21:20:02 | <riverside> | ah but sure, GHC is actually written in haskell, i think im confusing "simplifying the implementation of the compiler" with "simplifying the compilation process" |
| 21:20:09 | <geekosaur> | when they cpomprise the program, as opposed to the data |
| 21:20:09 | <tomsmeding> | ooooh |
| 21:20:18 | → | mmhat joins (~mmh@p200300f1c72ee96aee086bfffe095315.dip0.t-ipconnect.de) |
| 21:20:27 | <tomsmeding> | you mean, STG is composed of graph structures, so if Haskell had graph primitives, GHC could use those |
| 21:20:40 | <tomsmeding> | I highly doubt that would actually yield any significant simplification of GHC |
| 21:20:45 | <riverside> | i think my brain is caught in a graph recursion |
| 21:20:55 | <tomsmeding> | ooh a recursive graph |
| 21:21:06 | <riverside> | argh! my brain! |
| 21:21:36 | <riverside> | the primatives simply consist of designating cyclic references, otherwise its basically just a tree |
| 21:22:00 | <riverside> | "im going to put the top of the tree in the middle of the tree now! take note!" |
| 21:22:10 | × | ubert quits (~Thunderbi@77.119.164.0.wireless.dyn.drei.com) (Ping timeout: 244 seconds) |
| 21:22:41 | <tomsmeding> | I feel like that would be at most nice syntactic sugar for a simple Haskell graph library that you can already write |
| 21:23:23 | <riverside> | probably ammeding GADT syntax, so if you make reference to the datatype you are defining, then you can annotate it somehow |
| 21:24:03 | <riverside> | hmm, thats just off the topp of my head, and seems wrong. im sure i wrote all this down somewhere before... |
| 21:24:20 | <tomsmeding> | my brain starts to wind down for night anyway |
| 21:25:03 | <riverside> | ok, so its like, for list, where you say, "either empty, or a value and a list" where this recursive reference to list is used. and you would want to be able to say "not just any old list, *the start of this list*" |
| 21:25:30 | <riverside> | x = 1 : 2 : x |
| 21:25:40 | <tomsmeding> | I was just gonna say, you can kind of already do that : |
| 21:25:42 | <tomsmeding> | :p |
| 21:25:46 | <riverside> | would have its own special datatype |
| 21:25:49 | <tomsmeding> | you just can't (easily) observe the graph structure |
| 21:26:01 | <riverside> | hence the need for the cyclic explication |
| 21:26:46 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 21:27:14 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 21:27:18 | <riverside> | thus allowing for the representation of recursive programs on a graph that "captures the shape of the program explicitly" |
| 21:27:54 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 21:28:22 | → | notzmv joins (~zmv@user/notzmv) |
| 21:28:42 | <riverside> | i guess im still confused as to "how haskell can do this" (ie, allow for recursive function definitions) |
| 21:28:43 | × | Topsi quits (~Topsi@dyndsl-095-033-091-248.ewe-ip-backbone.de) (Read error: Connection reset by peer) |
| 21:28:46 | <riverside> | ah, yes i got it |
| 21:29:03 | <riverside> | but not actually allow to express these same functions in a datatype |
| 21:29:12 | → | matthewmosior joins (~matthewmo@173.170.253.91) |
| 21:29:33 | <riverside> | which is what makes me think that there is "something you could compile it down too, if it has graph syntax built in" |
| 21:29:51 | <riverside> | somehow GADT's seem weaker than top level haskell code |
| 21:29:55 | <tomsmeding> | I think in Haskell a recursive function just has a reference to itself in its closure |
| 21:30:08 | <riverside> | and i would like that to change, for some reason, which has something to do with compilation, i think |
| 21:30:15 | <riverside> | sorry, its been ages since i thought about this |
| 21:30:18 | <tomsmeding> | alternatively, you can assume that 'fix' exists, and build everything on that |
| 21:30:56 | <riverside> | we really want to explicate the cycles |
| 21:31:07 | → | alp_ joins (~alp@user/alp) |
| 21:31:07 | <riverside> | fix alone kind of doesnt |
| 21:31:28 | <tomsmeding> | fix indicates the existence of a back-edge, right? |
| 21:31:51 | <tomsmeding> | or, hm |
| 21:31:57 | <riverside> | i mean, "it has a start" is quite different to "and thats mentioned exactly here" |
| 21:32:03 | <tomsmeding> | right |
| 21:32:34 | <tomsmeding> | then again, that's precisely what variables do |
| 21:32:41 | <riverside> | basically, the symbolic dereferencing of bound variables, is "specifying the shape of the graph" |
| 21:32:50 | <hpc> | the start is wherever you hold your reference to |
| 21:32:59 | <riverside> | but we cant do that in a datatype, so we cant cast top level code onto a GADT and retain the information |
| 21:33:04 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 21:33:07 | <tomsmeding> | and if you don't like alpha-renaming, use de bruijn indices |
| 21:33:10 | <hpc> | (x = 1 : 2 : x) produces the exact same graph as (x = 2 : 1 : x) |
| 21:33:33 | <riverside> | you get what i mean though? |
| 21:33:46 | <tomsmeding> | I don't get where GADTs are coming from in the story |
| 21:33:49 | → | finsternis joins (~X@23.226.237.192) |
| 21:33:51 | <riverside> | that bit |
| 21:34:18 | <tomsmeding> | what about a simple syntax tree with variable names is not sufficient to you? |
| 21:34:26 | <riverside> | so we can express a tree |
| 21:34:39 | <riverside> | but cant tell if one of the branches is a reference to the top of the tree |
| 21:35:03 | <riverside> | if we could, then it would hold the same information as if we did it all with let bound nodes |
| 21:35:03 | <tomsmeding> | the graph structure is easily read off the data: any place a name is bound is a potential tip of a backedge, and any occurrence of that variable in its scope is a head of an arrow to that tip position |
| 21:35:46 | <tomsmeding> | "but cant tell if ... top of the tree" -- if so, said branch would be a variable reference, right? |
| 21:35:52 | <riverside> | but (1:2:x) = 1:2:1:2:1:2.... oh no! it unrolled |
| 21:36:13 | <tomsmeding> | like, data Expr = App Expr Expr | Lam Name Expr | Let (Name, Expr) Expr | Var Name |
| 21:36:24 | <riverside> | i mean, we can use lists for simplicity |
| 21:36:31 | <riverside> | same principle |
| 21:37:03 | <riverside> | 1 `cons` 2 `cons` *look heres the start again style cons* x |
| 21:37:48 | <riverside> | and this i guess gets a special type |
| 21:38:01 | <riverside> | :: cyclic list of length 2 |
| 21:38:15 | <tomsmeding> | Let ("x", Prim "cons" `App` Lit 1 `App` (Prim "cons" `App` Lit 2 `App` Var "x")) (Var "x") |
| 21:38:34 | <tomsmeding> | (data Expr = ... | Prim String | Lit Int) |
| 21:38:52 | <tomsmeding> | graph structure is fully readable from that syntax tree |
| 21:38:55 | <riverside> | im sure you get what i mean by this point |
| 21:38:58 | <tomsmeding> | s/readable/apparent/ |
| 21:39:10 | <riverside> | sure, that was never the problem |
| 21:39:12 | <tomsmeding> | you want some more intrinsic representation of the graph information |
| 21:39:17 | <tomsmeding> | something "nicer" |
| 21:39:27 | <tomsmeding> | I'm just apparently unable to see what the nicer approach would be :p |
| 21:39:40 | <tomsmeding> | I feel like it would always just be an encoding of this same thing, potentially with nicer syntax/ASPI |
| 21:39:41 | <tomsmeding> | *API |
| 21:39:59 | <riverside> | when its "written in top level haskell code" all the variable dereferencing comunicates the "shape" of the graph, including the cyclic references, that we can infer just by looking to see where the bound variable is mentioned in its definition |
| 21:40:45 | <riverside> | but after you do all the substitution, this information is lost |
| 21:41:06 | <riverside> | i certainly cant tell from the type [Int] that its a cyclic list of length 2 |
| 21:41:13 | → | jgeerds joins (~jgeerds@55d46bad.access.ecotel.net) |
| 21:41:27 | <riverside> | this is "where GADTs come into this" |
| 21:42:06 | <riverside> | doing whatever it is that we can do in terms of recursive function implementation, but actually within the type system |
| 21:42:21 | <riverside> | idk, maybe thats not where you want to specify the shape of your program... |
| 21:42:42 | <riverside> | but i had it for a scientific computation application with a very regular shaped graph (a euclidan grid) |
| 21:42:54 | <riverside> | which certainly could be expressed using type families |
| 21:43:38 | <riverside> | ie "calculating the shape of your program directly" |
| 21:43:43 | <riverside> | i g2g soon |
| 21:43:55 | <tomsmeding> | g'night (if applicable) |
| 21:43:58 | <tomsmeding> | (for me it is) |
| 21:45:23 | <riverside> | are you asking if its night? or if its good? dont make me think about these things, i may desolve in a pool of my own tears |
| 21:45:28 | × | riverside quits (~riverside@109.249.184.161) (Remote host closed the connection) |
| 21:45:28 | × | Midjak quits (~Midjak@82.66.147.146) (Quit: Leaving) |
| 21:47:17 | → | Kaipei joins (~Kaiepi@142.68.249.28) |
| 21:47:36 | → | Midjak joins (~Midjak@82.66.147.146) |
| 21:48:14 | × | Midjak quits (~Midjak@82.66.147.146) (Remote host closed the connection) |
| 21:49:05 | → | Midjak joins (~Midjak@82.66.147.146) |
| 21:50:34 | × | Kaiepi quits (~Kaiepi@142.68.249.28) (Ping timeout: 244 seconds) |
| 21:52:11 | × | Midjak quits (~Midjak@82.66.147.146) (Client Quit) |
| 21:53:35 | × | michalz quits (~michalz@185.246.204.75) (Remote host closed the connection) |
| 21:58:21 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 22:00:29 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 22:02:10 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.6) |
| 22:03:06 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 22:08:29 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds) |
| 22:10:04 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 22:10:48 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 22:14:32 | × | coot quits (~coot@213.134.176.158) (Quit: coot) |
| 22:16:52 | → | coot joins (~coot@213.134.176.158) |
| 22:17:12 | × | Cale quits (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com) (Remote host closed the connection) |
| 22:17:28 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 22:18:01 | × | coot quits (~coot@213.134.176.158) (Remote host closed the connection) |
| 22:18:07 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 22:18:38 | → | Cale joins (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com) |
| 22:19:33 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 22:19:37 | × | szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 22:22:22 | × | jgeerds quits (~jgeerds@55d46bad.access.ecotel.net) (Ping timeout: 268 seconds) |
| 22:32:18 | × | ystael_ quits (~ystael@user/ystael) (Ping timeout: 240 seconds) |
| 22:32:44 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 22:37:55 | → | BanUtama joins (~blake.rai@user/BanUtama) |
| 22:38:29 | × | zeenk quits (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!) |
| 22:53:23 | × | Tuplanolla quits (~Tuplanoll@91-159-69-12.elisa-laajakaista.fi) (Quit: Leaving.) |
| 22:58:10 | × | alp_ quits (~alp@user/alp) (Ping timeout: 268 seconds) |
| 23:03:43 | × | merijn quits (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
| 23:05:35 | <phma> | What needs to be in a repo to be ready to upload to Hackage? |
| 23:06:53 | <hpc> | a cabal file, and technically that's pretty much it :P |
| 23:07:58 | <geekosaur> | last I checked cabal insisted on a LICENSE file. cabal check will tell you what you need |
| 23:09:22 | <hpc> | you might want to build docs locally and make sure they look right |
| 23:10:36 | <EvanR> | nah, just yolo upload the package, wait (?) months for docs to build. See they are wrong, and do a fixup |
| 23:10:47 | <EvanR> | which doesn't require a new release |
| 23:11:31 | <phma> | is there a stack check? |
| 23:14:51 | geekosaur | has no idea |
| 23:14:57 | → | luffy joins (~chenqisu1@183.217.201.23) |
| 23:18:38 | <geekosaur> | my guess is that, just as cabal sdist runs a check first, stack sdist does whatever checks are needed first |
| 23:20:20 | × | slack1256 quits (~slack1256@wsip-184-177-0-226.no.no.cox.net) (Ping timeout: 268 seconds) |
| 23:29:12 | × | acidjnk_new quits (~acidjnk@p200300d6e705866691d881defe97b1cb.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 23:30:22 | → | merijn joins (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
| 23:36:47 | × | matthewmosior quits (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
| 23:44:23 | × | bontaq quits (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 268 seconds) |
| 23:44:25 | × | BanUtama quits (~blake.rai@user/BanUtama) (Ping timeout: 268 seconds) |
| 23:50:27 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 23:50:28 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 23:50:28 | → | wroathe joins (~wroathe@user/wroathe) |
| 23:55:55 | → | BanUtama joins (~blake.rai@user/BanUtama) |
All times are in UTC on 2022-08-09.