2023-11-29 00:05:21 +0100 | coot | (~coot@89-69-206-216.dynamic.chello.pl) |
2023-11-29 00:08:36 +0100 | gmg | (~user@user/gehmehgeh) (Quit: Leaving) |
2023-11-29 00:10:15 +0100 | coot | (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
2023-11-29 00:12:50 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) |
2023-11-29 00:14:38 +0100 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
2023-11-29 00:21:26 +0100 | mengu | (~mengu@c83-254-18-254.bredband.tele2.se) (Quit: Client closed) |
2023-11-29 00:22:22 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds) |
2023-11-29 00:23:32 +0100 | L29Ah | (~L29Ah@wikipedia/L29Ah) |
2023-11-29 00:26:07 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 00:27:20 +0100 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2023-11-29 00:28:09 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 00:32:48 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 00:33:23 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 00:36:39 +0100 | chomwitt | (~chomwitt@ppp-2-85-137-120.home.otenet.gr) (Ping timeout: 256 seconds) |
2023-11-29 00:37:23 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2023-11-29 00:37:37 +0100 | <meejah> | if you were to build a little toy 2D game-like thing (goal: learn more haskell) on a Linux machine, which Haskell framework would you reach for right now? |
2023-11-29 00:38:32 +0100 | <meejah> | (I'm asking here, because I want something showing "good haskell" -- i.e. sure I could use the GTK bindings, but then I'm doing "c-like gtk in haskell" approximately, it seems) |
2023-11-29 00:40:31 +0100 | <carter> | meejah: dear im gui |
2023-11-29 00:40:51 +0100 | <carter> | It’s dirt simple but you can make it fancy |
2023-11-29 00:41:03 +0100 | <carter> | Or maybe I’m just ignorant at gui dev |
2023-11-29 00:41:16 +0100 | <jackdk> | meejah: Note that whatever program you write, there's often an "imperative outer layer" which grows up around the program and then you have a core of pure data structures and functions to work out what you need to change in the imperative layer |
2023-11-29 00:41:23 +0100 | thegeekinside | (~thegeekin@189.180.53.210) (Remote host closed the connection) |
2023-11-29 00:43:36 +0100 | <jackdk> | meejah: https://www.youtube.com/watch?v=GaorHAlUkVs is an interesting talk using some pretty high-powered tools to get performance but captures the idea pretty well |
2023-11-29 00:43:45 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 00:44:36 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2023-11-29 00:46:16 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 00:47:10 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2023-11-29 00:47:17 +0100 | <duncan> | meejah: I have a Haskell implementation of the 'greed' game using Brick |
2023-11-29 00:47:44 +0100 | <duncan> | Brick runs in the terminal and it is a bunch of combinators |
2023-11-29 00:48:27 +0100 | <meejah> | thanks! (I've played a little with Brick and yeah it looks neat) |
2023-11-29 00:48:37 +0100 | <meejah> | it's the "reactive" type thing? |
2023-11-29 00:48:46 +0100 | <duncan> | It's not reactive |
2023-11-29 00:48:52 +0100 | <duncan> | State is updated every so often though |
2023-11-29 00:49:17 +0100 | <meejah> | jackdk: thanks, i'll check out the talk |
2023-11-29 00:49:34 +0100 | <meejah> | duncan: oh, is it like monomer then? (more like model/view/controller a bit) |
2023-11-29 00:49:56 +0100 | <duncan> | Well, it's not reactive in the same way the reactive-banana is |
2023-11-29 00:50:01 +0100 | <meejah> | right, okay |
2023-11-29 00:50:04 +0100 | <duncan> | But it might be given it has a state machine |
2023-11-29 00:50:12 +0100 | emmanuelux | (~emmanuelu@user/emmanuelux) |
2023-11-29 00:50:25 +0100 | <meejah> | (yeah i meant "reactive" in that sense, like Obsidian etc ) |
2023-11-29 00:50:31 +0100 | <duncan> | https://github.com/druimalban/hgreed |
2023-11-29 00:50:45 +0100 | <duncan> | A famous Haskeller starred the repository IIRC. |
2023-11-29 00:53:51 +0100 | <duncan> | Oh god I think I used some recursion scheme with that |
2023-11-29 00:54:01 +0100 | <duncan> | Probably not a great teaching tool. |
2023-11-29 00:55:13 +0100 | <EvanR> | meejah, simple graphics library gloss has a "game" mode |
2023-11-29 00:55:35 +0100 | <EvanR> | but you'd have to bring your own audio if you want audio |
2023-11-29 00:55:36 +0100 | masterbuilder | (~quassel@user/masterbuilder) |
2023-11-29 00:57:06 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 260 seconds) |
2023-11-29 00:57:25 +0100 | gabriel_sevecek | (~gabriel@188-167-229-200.dynamic.chello.sk) (Ping timeout: 276 seconds) |
2023-11-29 00:58:36 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 00:59:30 +0100 | <duncan> | I think it would involve a lot of wrangling with 2D graphics libraries, whereas Brick is just blitting composed together text objects to the terminal |
2023-11-29 01:00:00 +0100 | thegeekinside | (~thegeekin@189.180.53.210) |
2023-11-29 01:00:18 +0100 | <duncan> | Also, the Brick approach using combinators is quite powerful as a teaching mechanism because learning about combinators can be applied to other stuff like parsec |
2023-11-29 01:09:35 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 01:10:21 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 01:12:08 +0100 | shapr | (~user@2600:1700:c640:3100:147b:3662:c432:30f1) (Remote host closed the connection) |
2023-11-29 01:12:23 +0100 | shapr | (~user@2600:1700:c640:3100:c355:fe3e:4f9f:d5b6) |
2023-11-29 01:13:40 +0100 | alp_ | (~alp@2001:861:e3d6:8f80:1124:c998:cd66:bc03) (Ping timeout: 246 seconds) |
2023-11-29 01:17:34 +0100 | mrmr15533 | (~mrmr@user/mrmr) |
2023-11-29 01:18:46 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Remote host closed the connection) |
2023-11-29 01:19:10 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 01:22:47 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) |
2023-11-29 01:23:34 +0100 | <EvanR> | gloss depends on glfw-b, and opengl that's it |
2023-11-29 01:24:24 +0100 | gabriel_sevecek | (~gabriel@188-167-229-200.dynamic.chello.sk) |
2023-11-29 01:25:46 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 245 seconds) |
2023-11-29 01:27:19 +0100 | Alleria | (~JohnGalt@user/alleria) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2023-11-29 01:27:44 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) (Ping timeout: 268 seconds) |
2023-11-29 01:30:49 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 268 seconds) |
2023-11-29 01:31:49 +0100 | <EvanR> | a new enough GLFW is probably in your distros package manager |
2023-11-29 01:32:00 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 01:34:40 +0100 | misterfish | (~misterfis@87.215.131.102) (Ping timeout: 255 seconds) |
2023-11-29 01:37:38 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 260 seconds) |
2023-11-29 01:43:06 +0100 | Alleria | (~JohnGalt@user/alleria) |
2023-11-29 01:43:11 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 01:47:47 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 260 seconds) |
2023-11-29 01:49:37 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 268 seconds) |
2023-11-29 01:50:29 +0100 | ames | (~amelia@offtopia/offtopian/amelia) (Quit: Ping timeout (120 seconds)) |
2023-11-29 01:50:40 +0100 | ames | (~amelia@offtopia/offtopian/amelia) |
2023-11-29 01:51:16 +0100 | shailangsa | (~shailangs@host109-152-9-157.range109-152.btcentralplus.com) (Read error: Connection reset by peer) |
2023-11-29 01:51:29 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2023-11-29 01:51:29 +0100 | dumptruckman | (~dumptruck@23-239-13-136.ip.linodeusercontent.com) (Remote host closed the connection) |
2023-11-29 01:51:33 +0100 | tertek | (~tertek@user/tertek) (Remote host closed the connection) |
2023-11-29 01:51:39 +0100 | dumptruckman | (~dumptruck@23-239-13-136.ip.linodeusercontent.com) |
2023-11-29 01:51:54 +0100 | tertek | (~tertek@user/tertek) |
2023-11-29 01:53:53 +0100 | emmanuelux | (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer) |
2023-11-29 01:54:12 +0100 | targetdisk | (~daemonchi@45-33-4-162.ip.linodeusercontent.com) (Ping timeout: 256 seconds) |
2023-11-29 01:56:30 +0100 | tzh_ | (~tzh@c-71-193-181-0.hsd1.or.comcast.net) |
2023-11-29 01:56:56 +0100 | dtman34 | (~dtman34@c-76-156-89-180.hsd1.mn.comcast.net) (Quit: ZNC 1.8.2+deb3.1 - https://znc.in) |
2023-11-29 01:57:05 +0100 | telser | (~quassel@user/telser) (Quit: No Ping reply in 180 seconds.) |
2023-11-29 01:57:17 +0100 | dtman34 | (~dtman34@c-76-156-89-180.hsd1.mn.comcast.net) |
2023-11-29 01:57:43 +0100 | <meejah> | EvanR: thanks |
2023-11-29 01:57:55 +0100 | fun-safe-math | (~fun-safe-@c-24-21-106-247.hsd1.or.comcast.net) (Quit: No Ping reply in 180 seconds.) |
2023-11-29 01:58:10 +0100 | raym | (~ray@user/raym) (Ping timeout: 256 seconds) |
2023-11-29 01:58:44 +0100 | kaol | (~kaol@94-237-42-30.nl-ams1.upcloud.host) (Ping timeout: 256 seconds) |
2023-11-29 01:58:50 +0100 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) |
2023-11-29 01:59:18 +0100 | <meejah> | ah, i have looked at gloss before. definitely like the "pitch" / paragraph on hackage :) (and so I want Graphics.Gloss.Interface.IO.Game is what you're saying ...) |
2023-11-29 01:59:50 +0100 | emmanuelux | (~emmanuelu@user/emmanuelux) |
2023-11-29 02:00:10 +0100 | <meejah> | ahh, BitmapSection sounds good too |
2023-11-29 02:01:00 +0100 | tzh | (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Ping timeout: 256 seconds) |
2023-11-29 02:01:06 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 02:01:37 +0100 | fun-safe-math | (~fun-safe-@c-24-21-106-247.hsd1.or.comcast.net) |
2023-11-29 02:02:23 +0100 | telser | (~quassel@user/telser) |
2023-11-29 02:04:02 +0100 | dcoutts | (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (*.net *.split) |
2023-11-29 02:04:02 +0100 | yahb2 | (~yahb2@static.56.27.47.78.clients.your-server.de) (*.net *.split) |
2023-11-29 02:04:02 +0100 | troydm | (~troydm@user/troydm) (*.net *.split) |
2023-11-29 02:04:02 +0100 | tremon | (~tremon@83.80.159.219) (*.net *.split) |
2023-11-29 02:04:02 +0100 | arahael | (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) (*.net *.split) |
2023-11-29 02:04:03 +0100 | caef^ | (~cd@c-98-242-74-66.hsd1.ga.comcast.net) (*.net *.split) |
2023-11-29 02:04:03 +0100 | ridcully | (~ridcully@p57b52dae.dip0.t-ipconnect.de) (*.net *.split) |
2023-11-29 02:04:03 +0100 | nek0 | (~nek0@2a01:4f8:222:2b41::12) (*.net *.split) |
2023-11-29 02:04:03 +0100 | John_Ivan | (~John_Ivan@user/john-ivan/x-1515935) (*.net *.split) |
2023-11-29 02:04:03 +0100 | benjaminl | (~benjaminl@user/benjaminl) (*.net *.split) |
2023-11-29 02:04:03 +0100 | teqwve | (teqwve@2a01:4f8:c2c:e5b0::1) (*.net *.split) |
2023-11-29 02:04:03 +0100 | Luj | (~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb) (*.net *.split) |
2023-11-29 02:04:03 +0100 | inedia | (~irc@23.153.248.82) (*.net *.split) |
2023-11-29 02:04:03 +0100 | steew | (~steew@user/steew) (*.net *.split) |
2023-11-29 02:04:03 +0100 | turlando | (~turlando@user/turlando) (*.net *.split) |
2023-11-29 02:04:03 +0100 | bramhaag7 | (~bramhaag@endeavour.server.bramh.me) (*.net *.split) |
2023-11-29 02:04:03 +0100 | rncwnd | (~quassel@2a01:4f8:221:27c6::1) (*.net *.split) |
2023-11-29 02:04:04 +0100 | m1dnight | (~christoph@78-22-4-67.access.telenet.be) (*.net *.split) |
2023-11-29 02:04:04 +0100 | p3n | (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) (*.net *.split) |
2023-11-29 02:04:04 +0100 | cawfee_ | (~root@2406:3003:2077:2758::babe) (*.net *.split) |
2023-11-29 02:04:04 +0100 | V | (~v@ircpuzzles/2022/april/winner/V) (*.net *.split) |
2023-11-29 02:04:04 +0100 | dyniec | (~dyniec@dybiec.info) (*.net *.split) |
2023-11-29 02:04:04 +0100 | arkeet | (~arkeet@moriya.ca) (*.net *.split) |
2023-11-29 02:04:04 +0100 | codedmart | (codedmart@2600:3c01::f03c:92ff:fefe:8511) (*.net *.split) |
2023-11-29 02:04:04 +0100 | terrorjack | (~terrorjac@2a01:4f8:c17:87f8::) (*.net *.split) |
2023-11-29 02:04:04 +0100 | noctux1 | (Hfi6K5vcqP@user/noctux) (*.net *.split) |
2023-11-29 02:04:05 +0100 | dunj3 | (~dunj3@kingdread.de) (*.net *.split) |
2023-11-29 02:04:05 +0100 | defanor | (~defanor@tart.uberspace.net) (*.net *.split) |
2023-11-29 02:04:05 +0100 | dminuoso_ | (~dminuoso@user/dminuoso) (*.net *.split) |
2023-11-29 02:04:05 +0100 | Yumemi_ | (~Yumemi@2001:bc8:47a0:1b14::1) (*.net *.split) |
2023-11-29 02:04:05 +0100 | erisco | (~erisco@d24-141-66-165.home.cgocable.net) (*.net *.split) |
2023-11-29 02:04:05 +0100 | SoF | (~skius@user/skius) (*.net *.split) |
2023-11-29 02:04:05 +0100 | Xe | (~cadey@perl/impostor/xe) (*.net *.split) |
2023-11-29 02:04:05 +0100 | sudden | (~cat@user/sudden) (*.net *.split) |
2023-11-29 02:04:05 +0100 | nicole | (ilbelkyr@libera/staff/ilbelkyr) (*.net *.split) |
2023-11-29 02:04:05 +0100 | blackfield | (~aenima@85.255.4.218) (*.net *.split) |
2023-11-29 02:04:05 +0100 | cross | (~cross@spitfire.i.gajendra.net) (*.net *.split) |
2023-11-29 02:04:05 +0100 | eL_Bart0 | (eL_Bart0@dietunichtguten.org) (*.net *.split) |
2023-11-29 02:04:06 +0100 | jjhoo | (~jahakala@user/jjhoo) (*.net *.split) |
2023-11-29 02:04:06 +0100 | iteratee | (~kyle@162.218.222.207) (*.net *.split) |
2023-11-29 02:04:28 +0100 | Alleria | (~JohnGalt@user/alleria) (*.net *.split) |
2023-11-29 02:04:28 +0100 | end | (~end@user/end/x-0094621) (*.net *.split) |
2023-11-29 02:04:28 +0100 | remedan | (~remedan@ip-94-112-0-18.bb.vodafone.cz) (*.net *.split) |
2023-11-29 02:04:28 +0100 | potato44 | (uid421314@id-421314.lymington.irccloud.com) (*.net *.split) |
2023-11-29 02:04:28 +0100 | ubert | (~Thunderbi@91.141.52.8.wireless.dyn.drei.com) (*.net *.split) |
2023-11-29 02:04:29 +0100 | cods | (~fred@tuxee.net) (*.net *.split) |
2023-11-29 02:04:29 +0100 | dexter2 | (dexter@2a01:7e00::f03c:91ff:fe86:59ec) (*.net *.split) |
2023-11-29 02:04:29 +0100 | feetwind | (~mike@user/feetwind) (*.net *.split) |
2023-11-29 02:04:29 +0100 | incertia | (~incertia@209.122.137.252) (*.net *.split) |
2023-11-29 02:04:29 +0100 | swistak- | (~swistak@185.21.216.141) (*.net *.split) |
2023-11-29 02:04:29 +0100 | meinside | (uid24933@id-24933.helmsley.irccloud.com) (*.net *.split) |
2023-11-29 02:04:29 +0100 | nrr_______ | (sid20938@id-20938.lymington.irccloud.com) (*.net *.split) |
2023-11-29 02:04:29 +0100 | hamess_ | (~hamess@user/hamess) (*.net *.split) |
2023-11-29 02:04:29 +0100 | ft | (~ft@p508db3bc.dip0.t-ipconnect.de) (*.net *.split) |
2023-11-29 02:04:29 +0100 | nckx | (~nckx@libera/staff/owl/nckx) (*.net *.split) |
2023-11-29 02:04:29 +0100 | Pozyomka | (~pyon@user/pyon) (*.net *.split) |
2023-11-29 02:04:30 +0100 | connrs | (~connrs@user/connrs) (*.net *.split) |
2023-11-29 02:04:30 +0100 | kraftwerk28 | (~kraftwerk@164.92.219.160) (*.net *.split) |
2023-11-29 02:04:30 +0100 | xsarnik | (xsarnik@lounge.fi.muni.cz) (*.net *.split) |
2023-11-29 02:04:30 +0100 | pieguy128 | (~pieguy128@bras-base-mtrlpq5031w-grc-49-67-70-103-21.dsl.bell.ca) (*.net *.split) |
2023-11-29 02:04:30 +0100 | davetapley | (sid666@uxbridge.irccloud.com) (*.net *.split) |
2023-11-29 02:04:30 +0100 | koala_man | (~vidar@157.146.251.23.bc.googleusercontent.com) (*.net *.split) |
2023-11-29 02:04:30 +0100 | pointlessslippe1 | (~pointless@212.82.82.3) (*.net *.split) |
2023-11-29 02:04:30 +0100 | lbseale | (~quassel@user/ep1ctetus) (*.net *.split) |
2023-11-29 02:04:30 +0100 | ggVGc | (~ggVGc@a.lowtech.earth) (*.net *.split) |
2023-11-29 02:04:31 +0100 | NiKaN | (sid385034@id-385034.helmsley.irccloud.com) (*.net *.split) |
2023-11-29 02:04:31 +0100 | gaze_____ | (sid387101@helmsley.irccloud.com) (*.net *.split) |
2023-11-29 02:04:31 +0100 | conjunctive | (sid433686@helmsley.irccloud.com) (*.net *.split) |
2023-11-29 02:04:31 +0100 | tomku | (~tomku@user/tomku) (*.net *.split) |
2023-11-29 02:04:31 +0100 | dsrt^ | (~cd@c-98-242-74-66.hsd1.ga.comcast.net) (*.net *.split) |
2023-11-29 02:04:31 +0100 | nisstyre | (wes@user/nisstyre) (*.net *.split) |
2023-11-29 02:04:31 +0100 | hamster | (~ham@user/ham) (*.net *.split) |
2023-11-29 02:04:31 +0100 | vgtw | (~vgtw@user/vgtw) (*.net *.split) |
2023-11-29 02:04:31 +0100 | Deide | (d0130db69a@user/deide) (*.net *.split) |
2023-11-29 02:04:31 +0100 | mhatta | (~mhatta@www21123ui.sakura.ne.jp) (*.net *.split) |
2023-11-29 02:04:31 +0100 | g00gler | (uid125351@id-125351.uxbridge.irccloud.com) (*.net *.split) |
2023-11-29 02:04:31 +0100 | Katarushisu1 | (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (*.net *.split) |
2023-11-29 02:04:31 +0100 | AlexNoo | (~AlexNoo@178.34.151.29) (*.net *.split) |
2023-11-29 02:04:31 +0100 | komikat | (~akshitkr@218.185.248.66) (*.net *.split) |
2023-11-29 02:04:32 +0100 | shriekingnoise | (~shrieking@186.137.175.87) (*.net *.split) |
2023-11-29 02:04:32 +0100 | oo_miguel | (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) (*.net *.split) |
2023-11-29 02:04:32 +0100 | xff0x | (~xff0x@ai096045.d.east.v6connect.net) (*.net *.split) |
2023-11-29 02:04:32 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (*.net *.split) |
2023-11-29 02:04:32 +0100 | andjjj23_ | (~irc@107.170.228.47) (*.net *.split) |
2023-11-29 02:04:32 +0100 | bliminse | (~bliminse@user/bliminse) (*.net *.split) |
2023-11-29 02:04:32 +0100 | motherfsck | (~motherfsc@user/motherfsck) (*.net *.split) |
2023-11-29 02:04:32 +0100 | TheCatCollective | (NyaaTheKit@user/calculuscat) (*.net *.split) |
2023-11-29 02:04:33 +0100 | Logio | (em@kapsi.fi) (*.net *.split) |
2023-11-29 02:04:33 +0100 | tomboy64 | (~tomboy64@user/tomboy64) (*.net *.split) |
2023-11-29 02:04:33 +0100 | leeb | (~leeb@tk2-243-31079.vs.sakura.ne.jp) (*.net *.split) |
2023-11-29 02:04:33 +0100 | doyougnu | (~doyougnu@45.46.170.68) (*.net *.split) |
2023-11-29 02:04:33 +0100 | koz | (~koz@121.99.240.58) (*.net *.split) |
2023-11-29 02:04:33 +0100 | Maxdamantus | (~Maxdamant@user/maxdamantus) (*.net *.split) |
2023-11-29 02:04:33 +0100 | tessier | (~treed@ec2-184-72-149-67.compute-1.amazonaws.com) (*.net *.split) |
2023-11-29 02:04:33 +0100 | hc | (~hc@mail.hce.li) (*.net *.split) |
2023-11-29 02:04:34 +0100 | Arsen | (arsen@gentoo/developer/managarm.dev.Arsen) (*.net *.split) |
2023-11-29 02:04:34 +0100 | dibblego | (~dibblego@haskell/developer/dibblego) (*.net *.split) |
2023-11-29 02:04:34 +0100 | hueso | (~root@user/hueso) (*.net *.split) |
2023-11-29 02:04:34 +0100 | benmachine | (bm380@pip.srcf.societies.cam.ac.uk) (*.net *.split) |
2023-11-29 02:04:34 +0100 | _________ | (~nobody@user/noodly) (*.net *.split) |
2023-11-29 02:04:34 +0100 | pie_ | (~pie_bnc@user/pie/x-2818909) (*.net *.split) |
2023-11-29 02:04:34 +0100 | tertek | (~tertek@user/tertek) (*.net *.split) |
2023-11-29 02:04:34 +0100 | dumptruckman | (~dumptruck@23-239-13-136.ip.linodeusercontent.com) (*.net *.split) |
2023-11-29 02:04:34 +0100 | Sgeo | (~Sgeo@user/sgeo) (*.net *.split) |
2023-11-29 02:04:35 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5836:1305:ce95:7f7f) (*.net *.split) |
2023-11-29 02:04:35 +0100 | infinity0 | (~infinity0@pwned.gg) (*.net *.split) |
2023-11-29 02:04:35 +0100 | haasn` | (~nand@haasn.dev) (*.net *.split) |
2023-11-29 02:04:35 +0100 | TMA | (tma@twin.jikos.cz) (*.net *.split) |
2023-11-29 02:04:35 +0100 | jespada | (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (*.net *.split) |
2023-11-29 02:04:35 +0100 | andreas303 | (andreas303@is.drunk.and.ready-to.party) (*.net *.split) |
2023-11-29 02:04:35 +0100 | srk | (~sorki@user/srk) (*.net *.split) |
2023-11-29 02:04:35 +0100 | [exa] | (~exa@user/exa/x-3587197) (*.net *.split) |
2023-11-29 02:04:35 +0100 | mulk | (~mulk@p5b2dc93f.dip0.t-ipconnect.de) (*.net *.split) |
2023-11-29 02:04:36 +0100 | chessai | (sid225296@id-225296.lymington.irccloud.com) (*.net *.split) |
2023-11-29 02:04:36 +0100 | astra | (sid289983@user/amish) (*.net *.split) |
2023-11-29 02:04:36 +0100 | bjs | (sid190364@user/bjs) (*.net *.split) |
2023-11-29 02:04:36 +0100 | shawwwn | (sid6132@id-6132.helmsley.irccloud.com) (*.net *.split) |
2023-11-29 02:04:36 +0100 | actioninja | (~actioninj@user/actioninja) (*.net *.split) |
2023-11-29 02:04:36 +0100 | son0p | (~ff@181.136.122.143) (*.net *.split) |
2023-11-29 02:04:36 +0100 | driib | (~driib@vmi931078.contaboserver.net) (*.net *.split) |
2023-11-29 02:04:36 +0100 | Buggys | (Buggys@shelltalk.net) (*.net *.split) |
2023-11-29 02:04:36 +0100 | mankyKitty | (sid31287@id-31287.helmsley.irccloud.com) (*.net *.split) |
2023-11-29 02:04:37 +0100 | riatre | (~quassel@2001:310:6000:f::5198:1) (*.net *.split) |
2023-11-29 02:04:37 +0100 | CAT_S | (apic@brezn3.muc.ccc.de) (*.net *.split) |
2023-11-29 02:04:37 +0100 | paddymahoney | (~paddymaho@cpe883d24bcf597-cmbc4dfb741f80.cpe.net.cable.rogers.com) (*.net *.split) |
2023-11-29 02:04:37 +0100 | duncan | (~duncan@nat-server.ehlab.uk) (*.net *.split) |
2023-11-29 02:04:38 +0100 | Lord_of_Life_ | Lord_of_Life |
2023-11-29 02:05:57 +0100 | dsrt^ | (~cd@c-98-242-74-66.hsd1.ga.comcast.net) |
2023-11-29 02:06:13 +0100 | caef^ | (~cd@c-98-242-74-66.hsd1.ga.comcast.net) |
2023-11-29 02:06:33 +0100 | AlexNoo | (~AlexNoo@178.34.151.29) |
2023-11-29 02:06:33 +0100 | komikat | (~akshitkr@218.185.248.66) |
2023-11-29 02:06:33 +0100 | shriekingnoise | (~shrieking@186.137.175.87) |
2023-11-29 02:06:33 +0100 | oo_miguel | (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) |
2023-11-29 02:06:33 +0100 | xff0x | (~xff0x@ai096045.d.east.v6connect.net) |
2023-11-29 02:06:33 +0100 | andjjj23_ | (~irc@107.170.228.47) |
2023-11-29 02:06:33 +0100 | bliminse | (~bliminse@user/bliminse) |
2023-11-29 02:06:33 +0100 | motherfsck | (~motherfsc@user/motherfsck) |
2023-11-29 02:06:33 +0100 | TheCatCollective | (NyaaTheKit@user/calculuscat) |
2023-11-29 02:06:33 +0100 | Logio | (em@kapsi.fi) |
2023-11-29 02:06:33 +0100 | tomboy64 | (~tomboy64@user/tomboy64) |
2023-11-29 02:06:33 +0100 | leeb | (~leeb@tk2-243-31079.vs.sakura.ne.jp) |
2023-11-29 02:06:33 +0100 | doyougnu | (~doyougnu@45.46.170.68) |
2023-11-29 02:06:33 +0100 | koz | (~koz@121.99.240.58) |
2023-11-29 02:06:33 +0100 | Maxdamantus | (~Maxdamant@user/maxdamantus) |
2023-11-29 02:06:33 +0100 | tessier | (~treed@ec2-184-72-149-67.compute-1.amazonaws.com) |
2023-11-29 02:06:33 +0100 | hc | (~hc@mail.hce.li) |
2023-11-29 02:06:33 +0100 | Arsen | (arsen@gentoo/developer/managarm.dev.Arsen) |
2023-11-29 02:06:33 +0100 | dibblego | (~dibblego@haskell/developer/dibblego) |
2023-11-29 02:06:33 +0100 | hueso | (~root@user/hueso) |
2023-11-29 02:06:33 +0100 | benmachine | (bm380@pip.srcf.societies.cam.ac.uk) |
2023-11-29 02:06:33 +0100 | _________ | (~nobody@user/noodly) |
2023-11-29 02:06:33 +0100 | pie_ | (~pie_bnc@user/pie/x-2818909) |
2023-11-29 02:06:36 +0100 | targetdi1k | (~daemonchi@45-33-4-162.ip.linodeusercontent.com) |
2023-11-29 02:06:36 +0100 | dcoutts | (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
2023-11-29 02:06:36 +0100 | teqwve | (teqwve@2a01:4f8:c2c:e5b0::1) |
2023-11-29 02:06:36 +0100 | yahb2 | (~yahb2@static.56.27.47.78.clients.your-server.de) |
2023-11-29 02:06:36 +0100 | troydm | (~troydm@user/troydm) |
2023-11-29 02:06:36 +0100 | arahael | (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) |
2023-11-29 02:06:36 +0100 | ridcully | (~ridcully@p57b52dae.dip0.t-ipconnect.de) |
2023-11-29 02:06:36 +0100 | nek0 | (~nek0@2a01:4f8:222:2b41::12) |
2023-11-29 02:06:36 +0100 | John_Ivan | (~John_Ivan@user/john-ivan/x-1515935) |
2023-11-29 02:06:36 +0100 | benjaminl | (~benjaminl@user/benjaminl) |
2023-11-29 02:06:36 +0100 | Luj | (~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb) |
2023-11-29 02:06:36 +0100 | inedia | (~irc@23.153.248.82) |
2023-11-29 02:06:36 +0100 | steew | (~steew@user/steew) |
2023-11-29 02:06:36 +0100 | turlando | (~turlando@user/turlando) |
2023-11-29 02:06:36 +0100 | bramhaag7 | (~bramhaag@endeavour.server.bramh.me) |
2023-11-29 02:06:36 +0100 | rncwnd | (~quassel@2a01:4f8:221:27c6::1) |
2023-11-29 02:06:36 +0100 | m1dnight | (~christoph@78-22-4-67.access.telenet.be) |
2023-11-29 02:06:36 +0100 | p3n | (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) |
2023-11-29 02:06:36 +0100 | cawfee_ | (~root@2406:3003:2077:2758::babe) |
2023-11-29 02:06:36 +0100 | V | (~v@ircpuzzles/2022/april/winner/V) |
2023-11-29 02:06:36 +0100 | dyniec | (~dyniec@dybiec.info) |
2023-11-29 02:06:36 +0100 | arkeet | (~arkeet@moriya.ca) |
2023-11-29 02:06:36 +0100 | codedmart | (codedmart@2600:3c01::f03c:92ff:fefe:8511) |
2023-11-29 02:06:36 +0100 | terrorjack | (~terrorjac@2a01:4f8:c17:87f8::) |
2023-11-29 02:06:36 +0100 | noctux1 | (Hfi6K5vcqP@user/noctux) |
2023-11-29 02:06:36 +0100 | dunj3 | (~dunj3@kingdread.de) |
2023-11-29 02:06:36 +0100 | defanor | (~defanor@tart.uberspace.net) |
2023-11-29 02:06:36 +0100 | dminuoso_ | (~dminuoso@user/dminuoso) |
2023-11-29 02:06:36 +0100 | Yumemi_ | (~Yumemi@2001:bc8:47a0:1b14::1) |
2023-11-29 02:06:36 +0100 | SoF | (~skius@user/skius) |
2023-11-29 02:06:36 +0100 | erisco | (~erisco@d24-141-66-165.home.cgocable.net) |
2023-11-29 02:06:36 +0100 | Xe | (~cadey@perl/impostor/xe) |
2023-11-29 02:06:36 +0100 | sudden | (~cat@user/sudden) |
2023-11-29 02:06:36 +0100 | nicole | (ilbelkyr@libera/staff/ilbelkyr) |
2023-11-29 02:06:36 +0100 | blackfield | (~aenima@85.255.4.218) |
2023-11-29 02:06:36 +0100 | cross | (~cross@spitfire.i.gajendra.net) |
2023-11-29 02:06:36 +0100 | jjhoo | (~jahakala@user/jjhoo) |
2023-11-29 02:06:36 +0100 | iteratee | (~kyle@162.218.222.207) |
2023-11-29 02:06:36 +0100 | molybdenum.libera.chat | +v yahb2 |
2023-11-29 02:06:39 +0100 | Xe | (~cadey@perl/impostor/xe) (Quit: WeeChat 4.1.0) |
2023-11-29 02:06:39 +0100 | haskellbridge | (~haskellbr@069-135-003-034.biz.spectrum.com) (Excess Flood) |
2023-11-29 02:06:40 +0100 | pie_ | (~pie_bnc@user/pie/x-2818909) (Max SendQ exceeded) |
2023-11-29 02:06:40 +0100 | _________ | (~nobody@user/noodly) (Max SendQ exceeded) |
2023-11-29 02:06:40 +0100 | Arsen | (arsen@gentoo/developer/managarm.dev.Arsen) (Max SendQ exceeded) |
2023-11-29 02:06:44 +0100 | kaol_ | (~kaol@94-237-42-30.nl-ams1.upcloud.host) |
2023-11-29 02:06:44 +0100 | tertek | (~tertek@user/tertek) |
2023-11-29 02:06:44 +0100 | dumptruckman | (~dumptruck@23-239-13-136.ip.linodeusercontent.com) |
2023-11-29 02:06:44 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2023-11-29 02:06:44 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5836:1305:ce95:7f7f) |
2023-11-29 02:06:44 +0100 | infinity0 | (~infinity0@pwned.gg) |
2023-11-29 02:06:44 +0100 | 040AADFUL | (~nand@haasn.dev) |
2023-11-29 02:06:44 +0100 | jespada | (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) |
2023-11-29 02:06:44 +0100 | TMA | (tma@twin.jikos.cz) |
2023-11-29 02:06:44 +0100 | andreas303 | (andreas303@is.drunk.and.ready-to.party) |
2023-11-29 02:06:44 +0100 | srk | (~sorki@user/srk) |
2023-11-29 02:06:44 +0100 | [exa] | (~exa@user/exa/x-3587197) |
2023-11-29 02:06:44 +0100 | mulk | (~mulk@p5b2dc93f.dip0.t-ipconnect.de) |
2023-11-29 02:06:44 +0100 | astra | (sid289983@user/amish) |
2023-11-29 02:06:44 +0100 | chessai | (sid225296@id-225296.lymington.irccloud.com) |
2023-11-29 02:06:44 +0100 | bjs | (sid190364@user/bjs) |
2023-11-29 02:06:44 +0100 | shawwwn | (sid6132@id-6132.helmsley.irccloud.com) |
2023-11-29 02:06:44 +0100 | actioninja | (~actioninj@user/actioninja) |
2023-11-29 02:06:44 +0100 | son0p | (~ff@181.136.122.143) |
2023-11-29 02:06:44 +0100 | driib | (~driib@vmi931078.contaboserver.net) |
2023-11-29 02:06:44 +0100 | Buggys | (Buggys@shelltalk.net) |
2023-11-29 02:06:44 +0100 | mankyKitty | (sid31287@id-31287.helmsley.irccloud.com) |
2023-11-29 02:06:44 +0100 | riatre | (~quassel@2001:310:6000:f::5198:1) |
2023-11-29 02:06:44 +0100 | CAT_S | (apic@brezn3.muc.ccc.de) |
2023-11-29 02:06:44 +0100 | paddymahoney | (~paddymaho@cpe883d24bcf597-cmbc4dfb741f80.cpe.net.cable.rogers.com) |
2023-11-29 02:06:44 +0100 | duncan | (~duncan@nat-server.ehlab.uk) |
2023-11-29 02:06:44 +0100 | pie__ | (~pie_bnc@user/pie/x-2818909) |
2023-11-29 02:06:50 +0100 | Arsen | (arsen@gentoo/developer/managarm.dev.Arsen) |
2023-11-29 02:06:53 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 268 seconds) |
2023-11-29 02:06:54 +0100 | Xe | (~cadey@perl/impostor/xe) |
2023-11-29 02:07:04 +0100 | _________ | (~nobody@user/noodly) |
2023-11-29 02:07:17 +0100 | cross | (~cross@spitfire.i.gajendra.net) (Max SendQ exceeded) |
2023-11-29 02:07:29 +0100 | Alleria | (~JohnGalt@user/alleria) |
2023-11-29 02:07:29 +0100 | end | (~end@user/end/x-0094621) |
2023-11-29 02:07:29 +0100 | remedan | (~remedan@ip-94-112-0-18.bb.vodafone.cz) |
2023-11-29 02:07:29 +0100 | potato44 | (uid421314@id-421314.lymington.irccloud.com) |
2023-11-29 02:07:29 +0100 | ubert | (~Thunderbi@91.141.52.8.wireless.dyn.drei.com) |
2023-11-29 02:07:29 +0100 | cods | (~fred@tuxee.net) |
2023-11-29 02:07:29 +0100 | dexter2 | (dexter@2a01:7e00::f03c:91ff:fe86:59ec) |
2023-11-29 02:07:29 +0100 | feetwind | (~mike@user/feetwind) |
2023-11-29 02:07:29 +0100 | incertia | (~incertia@209.122.137.252) |
2023-11-29 02:07:29 +0100 | swistak- | (~swistak@185.21.216.141) |
2023-11-29 02:07:29 +0100 | meinside | (uid24933@id-24933.helmsley.irccloud.com) |
2023-11-29 02:07:29 +0100 | nrr_______ | (sid20938@id-20938.lymington.irccloud.com) |
2023-11-29 02:07:29 +0100 | hamess_ | (~hamess@user/hamess) |
2023-11-29 02:07:29 +0100 | ft | (~ft@p508db3bc.dip0.t-ipconnect.de) |
2023-11-29 02:07:29 +0100 | nckx | (~nckx@libera/staff/owl/nckx) |
2023-11-29 02:07:29 +0100 | Pozyomka | (~pyon@user/pyon) |
2023-11-29 02:07:29 +0100 | connrs | (~connrs@user/connrs) |
2023-11-29 02:07:29 +0100 | kraftwerk28 | (~kraftwerk@164.92.219.160) |
2023-11-29 02:07:29 +0100 | xsarnik | (xsarnik@lounge.fi.muni.cz) |
2023-11-29 02:07:29 +0100 | pieguy128 | (~pieguy128@bras-base-mtrlpq5031w-grc-49-67-70-103-21.dsl.bell.ca) |
2023-11-29 02:07:29 +0100 | davetapley | (sid666@uxbridge.irccloud.com) |
2023-11-29 02:07:29 +0100 | koala_man | (~vidar@157.146.251.23.bc.googleusercontent.com) |
2023-11-29 02:07:29 +0100 | pointlessslippe1 | (~pointless@212.82.82.3) |
2023-11-29 02:07:29 +0100 | lbseale | (~quassel@user/ep1ctetus) |
2023-11-29 02:07:29 +0100 | ggVGc | (~ggVGc@a.lowtech.earth) |
2023-11-29 02:07:29 +0100 | NiKaN | (sid385034@id-385034.helmsley.irccloud.com) |
2023-11-29 02:07:29 +0100 | gaze_____ | (sid387101@helmsley.irccloud.com) |
2023-11-29 02:07:29 +0100 | conjunctive | (sid433686@helmsley.irccloud.com) |
2023-11-29 02:07:29 +0100 | tomku | (~tomku@user/tomku) |
2023-11-29 02:07:29 +0100 | nisstyre | (wes@user/nisstyre) |
2023-11-29 02:07:29 +0100 | hamster | (~ham@user/ham) |
2023-11-29 02:07:29 +0100 | vgtw | (~vgtw@user/vgtw) |
2023-11-29 02:07:29 +0100 | Deide | (d0130db69a@user/deide) |
2023-11-29 02:07:29 +0100 | mhatta | (~mhatta@www21123ui.sakura.ne.jp) |
2023-11-29 02:07:29 +0100 | g00gler | (uid125351@id-125351.uxbridge.irccloud.com) |
2023-11-29 02:07:29 +0100 | Katarushisu1 | (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
2023-11-29 02:07:30 +0100 | remedan | (~remedan@ip-94-112-0-18.bb.vodafone.cz) (Max SendQ exceeded) |
2023-11-29 02:07:31 +0100 | superbil | (~superbil@1-34-176-171.hinet-ip.hinet.net) (*.net *.split) |
2023-11-29 02:07:31 +0100 | Axman6 | (~Axman6@user/axman6) (*.net *.split) |
2023-11-29 02:07:44 +0100 | mikess | (~sam@user/mikess) |
2023-11-29 02:09:51 +0100 | Axman6 | (~Axman6@user/axman6) |
2023-11-29 02:09:51 +0100 | superbil | (~superbil@1-34-176-171.hinet-ip.hinet.net) |
2023-11-29 02:09:52 +0100 | NiKaN | (sid385034@id-385034.helmsley.irccloud.com) (Ping timeout: 250 seconds) |
2023-11-29 02:09:54 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.) |
2023-11-29 02:10:18 +0100 | raym | (~ray@user/raym) |
2023-11-29 02:11:44 +0100 | remedan | (~remedan@ip-94-112-0-18.bb.vodafone.cz) |
2023-11-29 02:12:53 +0100 | NiKaN | (sid385034@id-385034.helmsley.irccloud.com) |
2023-11-29 02:13:14 +0100 | cross | (~cross@spitfire.i.gajendra.net) |
2023-11-29 02:13:24 +0100 | rosco | (~rosco@175.136.158.171) |
2023-11-29 02:16:03 +0100 | eL_Bart0 | (eL_Bart0@dietunichtguten.org) |
2023-11-29 02:17:46 +0100 | notzmv | (~zmv@user/notzmv) |
2023-11-29 02:18:06 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 02:19:53 +0100 | misterfish | (~misterfis@84-53-85-146.bbserv.nl) |
2023-11-29 02:22:16 +0100 | emmanuelux_ | (~emmanuelu@user/emmanuelux) |
2023-11-29 02:24:11 +0100 | emmanuelux | (~emmanuelu@user/emmanuelux) (Ping timeout: 260 seconds) |
2023-11-29 02:24:14 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 256 seconds) |
2023-11-29 02:25:23 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 02:26:07 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Remote host closed the connection) |
2023-11-29 02:26:12 +0100 | haskellbridge | (~haskellbr@069-135-003-034.biz.spectrum.com) |
2023-11-29 02:26:12 +0100 | ChanServ | +v haskellbridge |
2023-11-29 02:26:21 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 02:31:07 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 02:32:29 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 02:32:48 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2023-11-29 02:34:11 +0100 | shailangsa | (~shailangs@host109-152-9-157.range109-152.btcentralplus.com) |
2023-11-29 02:34:14 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 02:36:06 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 02:40:40 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2023-11-29 02:42:39 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 268 seconds) |
2023-11-29 02:43:17 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 02:47:37 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 02:50:22 +0100 | trev | (~trev@user/trev) |
2023-11-29 02:53:50 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 02:54:16 +0100 | misterfish | (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 256 seconds) |
2023-11-29 02:56:24 +0100 | nonzen_ | (~nonzen@user/nonzen) (Ping timeout: 252 seconds) |
2023-11-29 02:56:40 +0100 | nonzen | (~nonzen@user/nonzen) |
2023-11-29 02:59:30 +0100 | ubert1 | (~Thunderbi@178.165.189.208.wireless.dyn.drei.com) |
2023-11-29 02:59:59 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 264 seconds) |
2023-11-29 03:00:01 +0100 | ubert | (~Thunderbi@91.141.52.8.wireless.dyn.drei.com) (Ping timeout: 256 seconds) |
2023-11-29 03:00:01 +0100 | ubert1 | ubert |
2023-11-29 03:03:59 +0100 | pointlessslippe1 | (~pointless@212.82.82.3) (Ping timeout: 256 seconds) |
2023-11-29 03:05:56 +0100 | pointlessslippe1 | (~pointless@212.82.82.3) |
2023-11-29 03:08:44 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 03:10:39 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 03:11:29 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 03:14:03 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
2023-11-29 03:14:12 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2023-11-29 03:17:23 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 264 seconds) |
2023-11-29 03:22:48 +0100 | marinelli | (~weechat@gateway/tor-sasl/marinelli) (Remote host closed the connection) |
2023-11-29 03:23:10 +0100 | rosco | (~rosco@175.136.158.171) (Ping timeout: 256 seconds) |
2023-11-29 03:23:22 +0100 | marinelli | (~weechat@gateway/tor-sasl/marinelli) |
2023-11-29 03:23:59 +0100 | rosco | (~rosco@175.136.158.171) |
2023-11-29 03:24:49 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 03:29:10 +0100 | matijja | (~matijja@193.77.181.201) (Ping timeout: 260 seconds) |
2023-11-29 03:29:11 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) |
2023-11-29 03:29:19 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 255 seconds) |
2023-11-29 03:30:00 +0100 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2023-11-29 03:30:58 +0100 | matijja | (~matijja@193.77.181.201) |
2023-11-29 03:32:01 +0100 | xff0x | (~xff0x@ai096045.d.east.v6connect.net) (Ping timeout: 255 seconds) |
2023-11-29 03:32:02 +0100 | Square2 | (~Square4@user/square) |
2023-11-29 03:35:13 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 03:35:46 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2023-11-29 03:36:36 +0100 | Guest3 | (~Guest3@149.159.194.55) |
2023-11-29 03:37:04 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 03:37:38 +0100 | <Guest3> | Why are partial functions bad? I am writing a IO action and trying to decide if I should just use error or if I should use Maybe and let the clients throw the error. |
2023-11-29 03:38:01 +0100 | hgolden | (~hgolden@2603-8000-9d00-3ed1-dd4f-298a-9c49-a0ed.res6.spectrum.com) (Remote host closed the connection) |
2023-11-29 03:38:01 +0100 | <Guest3> | Using Maybe would force all the clients to pattern match |
2023-11-29 03:39:09 +0100 | <geekosaur> | I don't see that as a bad thing |
2023-11-29 03:39:25 +0100 | hgolden | (~hgolden@2603-8000-9d00-3ed1-dd4f-298a-9c49-a0ed.res6.spectrum.com) |
2023-11-29 03:40:19 +0100 | <geekosaur> | if you use `error` and someone does want to catch it, they have to do it in `IO` *and* make sure it is actually executed in the `try` or `handle` so the exception doesn't leak through unevaluated and "go off" somewhere else |
2023-11-29 03:41:11 +0100 | <Guest3> | It is an IO action, so I suppose they have to be in IO to catch it. |
2023-11-29 03:41:39 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 03:41:52 +0100 | <geekosaur> | all exceptions must be caught in `IO` |
2023-11-29 03:42:11 +0100 | <monochrom> | Have you considered defining your own exception to throw so it is easily distinguishable from the millions of other exceptions out there? |
2023-11-29 03:42:13 +0100 | <Guest3> | Yes, but I meant, I am using `error` inside and IO action. |
2023-11-29 03:42:20 +0100 | <[Leary]> | Guest3: Since you're in IO; remove `error` from your list of options and replace it with `throwIO`. |
2023-11-29 03:42:33 +0100 | <[Leary]> | Partial functions are bad, exceptions aren't. |
2023-11-29 03:42:58 +0100 | <Guest3> | Why are partial functions bad? And isn't `error` just throwing an exception? |
2023-11-29 03:43:09 +0100 | <Guest3> | I suppose it just throws a generic exception |
2023-11-29 03:43:28 +0100 | <geekosaur> | there is a difference between synchronous exceptions like thrown by `throwIO` and asynchronous exceptions like thrown by `error` |
2023-11-29 03:43:32 +0100 | <Guest3> | Actually, this is a partial action (not a partial function) |
2023-11-29 03:43:37 +0100 | <monochrom> | That is not how I classify good vs bad. |
2023-11-29 03:43:51 +0100 | <Guest3> | error isn't asynchronous if i recall correctly |
2023-11-29 03:44:11 +0100 | <monochrom> | Making my life harder is bad. After that, making other people's lives harder is bad. |
2023-11-29 03:44:37 +0100 | matijja | (~matijja@193.77.181.201) (Ping timeout: 255 seconds) |
2023-11-29 03:44:54 +0100 | <monochrom> | 1% of the time partial functions make my and people's lives easier. 99% of the time harder. I don't ban partial functions. I ban making lives harder. |
2023-11-29 03:45:01 +0100 | <geekosaur> | but partial functions are bad because they raise exceptions in pure code (not `IO`) and are thus especially difficult to catch because you may have to `deepseq` it inside a `catch`/`handle`/etc. to ensure the exception is actually thrown inside the handler |
2023-11-29 03:45:42 +0100 | <geekosaur> | if it isn't fully evaluated inside the handler, it may leak out and detonate outside the handler |
2023-11-29 03:46:13 +0100 | <Guest3> | ah, laziness |
2023-11-29 03:46:15 +0100 | <monochrom> | Likewise, if I expect other people to catch what I throw, 99% of the time their lives are harder if I throw error which is hugely generic and bland, and then what, they have to parse my string to see it's from me? Why would I inflict this on them? |
2023-11-29 03:46:49 +0100 | <monochrom> | Therefore, I define my own exception type and throw it. Then they have a much easier time checking that it's my custom exception. |
2023-11-29 03:47:11 +0100 | <jackdk> | I have found that avoiding partial functions is much easier than I thought when I first started learning Haskell. Becoming fluent with Functor/Applicative/Monad helped a lot there. |
2023-11-29 03:47:11 +0100 | <zzz> | can i use stm for ipc? |
2023-11-29 03:47:20 +0100 | <Guest3> | monochrom, good point. In my case, I don't expect anyone to catch it. Only possibility is crashing. |
2023-11-29 03:47:21 +0100 | <geekosaur> | and if there is associated data, you can make it part of the exception instead of forcing users to parse it out of the message |
2023-11-29 03:47:27 +0100 | matijja | (~matijja@193.77.181.201) |
2023-11-29 03:47:35 +0100 | <Guest3> | correct |
2023-11-29 03:48:07 +0100 | <Guest3> | zzz, by ipc do you mean across process boundaries? |
2023-11-29 03:48:26 +0100 | <geekosaur> | zzz, only between threads, not processes |
2023-11-29 03:49:54 +0100 | <zzz> | yes. i figured |
2023-11-29 03:50:00 +0100 | <zzz> | thanks |
2023-11-29 03:50:45 +0100 | <zzz> | i'm no t sure which form of ipc to use |
2023-11-29 03:51:15 +0100 | <zzz> | i think i'm on the fence between sockets and named pipes |
2023-11-29 03:51:29 +0100 | <geekosaur> | sockets, if you value your sanity |
2023-11-29 03:51:48 +0100 | <monochrom> | Well, it says i"p"c not i"t"c. :D |
2023-11-29 03:52:34 +0100 | <monochrom> | Is that because socket is bidirectional, pipes are unidirectional and then you need two of them? |
2023-11-29 03:52:38 +0100 | Xyloes | (~wyx@2400:dd01:103a:1012:5923:33ce:7857:fc04) |
2023-11-29 03:52:46 +0100 | <geekosaur> | partially |
2023-11-29 03:53:12 +0100 | <monochrom> | I did inflict "make two pipes per child, there are n children" on my students in the exam. >:) |
2023-11-29 03:53:33 +0100 | <geekosaur> | to use a named pipe reasonably you must open it `O_RDWR` and keep it open for as long as you are running, and have some way other than EOF to detect when another process closes it |
2023-11-29 03:53:52 +0100 | <geekosaur> | if you use EOF and close it, the FIFO is subsequently dead and you have to remove and recreate it |
2023-11-29 03:53:55 +0100 | <monochrom> | Ah right. That one is annoying yeah. |
2023-11-29 03:54:41 +0100 | <zzz> | so sockets |
2023-11-29 03:54:48 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 268 seconds) |
2023-11-29 03:54:59 +0100 | <zzz> | which library is recommended? |
2023-11-29 03:55:10 +0100 | <zzz> | for i"p"c |
2023-11-29 03:56:32 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) |
2023-11-29 03:57:09 +0100 | <zzz> | Network.Socket ? |
2023-11-29 03:57:42 +0100 | <geekosaur> | I don't think there currently exist higher level abstractions for AF_UNIX sockets |
2023-11-29 03:58:02 +0100 | <geekosaur> | there's lots for TCP but not for other uses |
2023-11-29 04:00:10 +0100 | johnw | (~johnw@69.62.242.138) (Quit: ZNC - http://znc.in) |
2023-11-29 04:01:11 +0100 | <geekosaur> | (I'm pretty used to the lower level ones anyway, since I spent years programming in C) |
2023-11-29 04:05:37 +0100 | Xyloes | (~wyx@2400:dd01:103a:1012:5923:33ce:7857:fc04) (Quit: Konversation terminated!) |
2023-11-29 04:06:07 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 04:06:24 +0100 | Xyloes | (~wyx@2400:dd01:103a:1012:5923:33ce:7857:fc04) |
2023-11-29 04:06:42 +0100 | <zzz> | i want high lever. it's a pretty simple use case and i'm just avoiding using a simple text file |
2023-11-29 04:06:45 +0100 | td_ | (~td@i5387092B.versanet.de) (Ping timeout: 256 seconds) |
2023-11-29 04:06:52 +0100 | <zzz> | *level |
2023-11-29 04:07:15 +0100 | <zzz> | i have no intention of exploring this subject deeply atm |
2023-11-29 04:08:16 +0100 | <tabemann> | stupid question about partial functions - how does STM prevent partial functions from raising exceptions and them leaking out from atomically? |
2023-11-29 04:08:21 +0100 | td_ | (~td@i5387091D.versanet.de) |
2023-11-29 04:09:30 +0100 | <tabemann> | i.e. allowing state that shouldn't be visible to become visible to the outside world |
2023-11-29 04:09:57 +0100 | <tabemann> | apparently this issue is a big impediment to the implementation of STM in many programming languages |
2023-11-29 04:10:00 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 04:10:01 +0100 | <zzz> | atomically discards any transaction in the event of an exception |
2023-11-29 04:10:36 +0100 | <zzz> | either it performs all or none |
2023-11-29 04:10:38 +0100 | <tabemann> | zzz: what I mean is because of laziness the exception could escape from the atomically |
2023-11-29 04:11:04 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 04:11:19 +0100 | <zzz> | the entire transaction is rolled back as far as i know |
2023-11-29 04:11:34 +0100 | <tabemann> | to prevent that you'd have to deepseq the value returned from atomically |
2023-11-29 04:11:37 +0100 | <zzz> | but it's easy enough to test |
2023-11-29 04:11:59 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 264 seconds) |
2023-11-29 04:14:34 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5836:1305:ce95:7f7f) (Remote host closed the connection) |
2023-11-29 04:14:48 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5836:1305:ce95:7f7f) |
2023-11-29 04:15:26 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) |
2023-11-29 04:17:25 +0100 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
2023-11-29 04:20:36 +0100 | Katarushisu1 | (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) (Read error: Connection reset by peer) |
2023-11-29 04:22:23 +0100 | Katarushisu1 | (~Katarushi@cpc147790-finc20-2-0-cust502.4-2.cable.virginm.net) |
2023-11-29 04:25:27 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 04:26:06 +0100 | <EvanR> | Guest3, partial functions are just fine as long as no one uses it on the missing parts of the domain! |
2023-11-29 04:26:47 +0100 | <EvanR> | > map head (group "hello world") |
2023-11-29 04:26:48 +0100 | <lambdabot> | "helo world" |
2023-11-29 04:27:18 +0100 | <EvanR> | but this is a big if and isn't tracked by the type system |
2023-11-29 04:28:07 +0100 | marinelli | (~weechat@gateway/tor-sasl/marinelli) (Ping timeout: 240 seconds) |
2023-11-29 04:28:33 +0100 | marinelli | (~weechat@gateway/tor-sasl/marinelli) |
2023-11-29 04:28:51 +0100 | <jackdk> | In your instance, `group` should return `[NonEmpty a]`, right? But the general point stands |
2023-11-29 04:29:12 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 04:29:18 +0100 | <EvanR> | (not that this applies to IO actions which aren't functions and no one would be surprised if they throwIO for some reason) |
2023-11-29 04:29:56 +0100 | <EvanR> | yeah my example in fact has a way to be well typed, terrible example |
2023-11-29 04:30:17 +0100 | edr | (~edr@user/edr) (Quit: Leaving) |
2023-11-29 04:30:17 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 04:30:21 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine) |
2023-11-29 04:31:48 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 268 seconds) |
2023-11-29 04:32:05 +0100 | <probie> | EvanR: There's a pretty spooky way to track this in the type system |
2023-11-29 04:32:12 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2023-11-29 04:35:21 +0100 | ddellacosta | (~ddellacos@ool-44c73d16.dyn.optonline.net) (Ping timeout: 245 seconds) |
2023-11-29 04:37:11 +0100 | <EvanR> | tabemann, if the transaction succeeds the transaction succeeds. Of course it could have set something up which when evaluate crashes whatever thread. Which is why you probably want to evaluate anything you put in an MVar |
2023-11-29 04:37:32 +0100 | ddellacosta | (~ddellacos@ool-44c73d16.dyn.optonline.net) |
2023-11-29 04:37:32 +0100 | <EvanR> | or a TVar |
2023-11-29 04:38:03 +0100 | <EvanR> | but I can see use cases where you don't want to fully evaluate it |
2023-11-29 04:39:29 +0100 | Noob_Programmer | (~Noob_Prog@2409:408d:683:c243:a574:68ee:74be:cb54) |
2023-11-29 04:41:00 +0100 | <tabemann> | https://pastebin.com/zRm42Nvf |
2023-11-29 04:41:22 +0100 | <tabemann> | this somehow doesn't raise an exception |
2023-11-29 04:42:07 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds) |
2023-11-29 04:42:37 +0100 | <tabemann> | because it ought to allow the divide-by-zero to escape the atomically |
2023-11-29 04:42:51 +0100 | <tabemann> | because it is only forced by the "show" outside it |
2023-11-29 04:43:33 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 04:43:41 +0100 | <EvanR> | uh, what does the basically putStrLn (show (1 `div` 0)) do if not crash |
2023-11-29 04:43:49 +0100 | <EvanR> | should crash the thread right |
2023-11-29 04:44:03 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) |
2023-11-29 04:44:09 +0100 | <EvanR> | which is a silent affair by default |
2023-11-29 04:46:13 +0100 | <tabemann> | I added a putStrLn $ show 256 to the loop to make it clear that the loop isn't crashing (because it outputs alternating 1's and 256's) |
2023-11-29 04:46:34 +0100 | <tabemann> | while the main thread is outputting 'foo's |
2023-11-29 04:46:50 +0100 | <EvanR> | % forkIO (print (1 `div` 0)) >> print "ok" >> threadDelay 100000 |
2023-11-29 04:46:50 +0100 | <yahb2> | <interactive>:5:1: error: ; Variable not in scope: forkIO :: IO () -> IO a1 ; ; <interactive>:5:45: error: ; Variable not in scope: threadDelay :: t0 -> IO b |
2023-11-29 04:48:05 +0100 | <Guest3> | it's not crashing because, bar is always 1 |
2023-11-29 04:48:11 +0100 | <[Leary]> | tabemann: (writeTVar foo 0 >> writeTVar foo 1) = writeTVar foo 1 |
2023-11-29 04:48:17 +0100 | Noob_Programmer | (~Noob_Prog@2409:408d:683:c243:a574:68ee:74be:cb54) (Quit: Client closed) |
2023-11-29 04:48:23 +0100 | <Guest3> | oh, wait never mid |
2023-11-29 04:48:35 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
2023-11-29 04:48:46 +0100 | <Guest3> | ah, no, i stand by it. bar is always 1 |
2023-11-29 04:48:56 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) |
2023-11-29 04:49:00 +0100 | <tabemann> | the key thing is that one thread is never seeing the case where foo is 0 in the other thread |
2023-11-29 04:49:18 +0100 | <EvanR> | yeah, why would anyone see 0 |
2023-11-29 04:49:24 +0100 | <tabemann> | i.e. something must be protecting it from seeing this intermediate state and not allowing it to escape |
2023-11-29 04:49:25 +0100 | <Guest3> | yes, because it's a transaction |
2023-11-29 04:49:31 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 255 seconds) |
2023-11-29 04:49:35 +0100 | <EvanR> | hence the atomically |
2023-11-29 04:49:56 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 04:50:00 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 04:50:14 +0100 | <EvanR> | what I thought you were going to try to do was put an exploding value in the TVar |
2023-11-29 04:50:29 +0100 | <tabemann> | this whole exercise was raised by the question of other language's STM implementations, where all kinds of nastiness can occur from things like divide-by-zeros occurring within transactions |
2023-11-29 04:50:50 +0100 | <EvanR> | if divide by zero happens during the transaction, then transaction fails |
2023-11-29 04:51:12 +0100 | <EvanR> | otherwise it may succeed but set some other thread up to crash by e.g. storing a bomb somewhere |
2023-11-29 04:51:24 +0100 | <tabemann> | the key thing I was trying to do is to allow the divide by zero to escape by the divide only being forced later on, outside the transaction |
2023-11-29 04:51:59 +0100 | <monochrom> | This transaction includes only reading bar. |
2023-11-29 04:52:26 +0100 | <Guest3> | tabemann, that's not a problem. |
2023-11-29 04:53:01 +0100 | <monochrom> | Unless you say something like "atomically (if div 1 0 then read/write this else read/write that)" you will not have a division by 0 inside a transaction. |
2023-11-29 04:53:04 +0100 | <tabemann> | to avoid this it must do something like ensure that all variables read before and after the transaction not only having not changed state, but also having never changed state - and changed back - in between |
2023-11-29 04:53:48 +0100 | <EvanR> | stuff you write to a TVar or MVar or Chan etc isn't necessarily evaluated yet |
2023-11-29 04:54:06 +0100 | <EvanR> | certainly a tricky thing which could bite you |
2023-11-29 04:54:21 +0100 | <monochrom> | And pure too. pure doesn't evaluate either. |
2023-11-29 04:55:09 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2023-11-29 04:55:09 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2023-11-29 04:55:10 +0100 | <Guest3> | tabemann, the exception happening later won't affect the transaction. The only side-effect you can do inside an STM transaction is modify TVars |
2023-11-29 04:55:11 +0100 | <tabemann> | monochrom: which I was doing with return (which is pure, but I'm using an older version of Stack because I haven't played with Haskell in ages and did not feel like installing a new version right now) |
2023-11-29 04:55:13 +0100 | <monochrom> | pure (div 1 0), writeTVar v (div 1 0) all do not including performing the division insde the transaction. |
2023-11-29 04:55:27 +0100 | <Guest3> | And you can't modify TVars outside a transaction |
2023-11-29 04:55:34 +0100 | <Guest3> | The type system takes care of this |
2023-11-29 04:56:10 +0100 | <monochrom> | But like I said you can play with a transaction that needs conditional branching that depends on div 1 0. |
2023-11-29 04:57:12 +0100 | <EvanR> | modifyTVar' tv (`div` 0) |
2023-11-29 04:57:12 +0100 | <tabemann> | Guest3: of course |
2023-11-29 04:57:23 +0100 | johnw | (~johnw@69.62.242.138) |
2023-11-29 04:57:38 +0100 | <EvanR> | this will take the liberty of evaluating the division by zero for you now |
2023-11-29 04:57:38 +0100 | <monochrom> | None of this should be surprising. |
2023-11-29 04:57:51 +0100 | <tabemann> | the thing is the point of this was to enable one thread to see another thread's intermediate state |
2023-11-29 04:57:57 +0100 | <EvanR> | without the "prime" you would be writing a bomb to the TVar |
2023-11-29 04:58:12 +0100 | <EvanR> | (if you don't rollback) |
2023-11-29 04:58:17 +0100 | <tabemann> | i.e. make atomically non-atomic |
2023-11-29 04:58:29 +0100 | <EvanR> | what language lets you see STM transactions intermediate state? That sounds broken |
2023-11-29 04:58:40 +0100 | <monochrom> | And Haskell is not nicer or nastier than other languages in this regard because if you insert enough $!'s you can recover other languages' evaluation order. Try pure $! div 1 0. |
2023-11-29 04:59:05 +0100 | <tabemann> | EvanR: that's why STM hasn't really caught on outside of Haskell and Clojure |
2023-11-29 04:59:22 +0100 | <tabemann> | Haskell is uniquely well-suited to STM |
2023-11-29 04:59:26 +0100 | Xyloes | (~wyx@2400:dd01:103a:1012:5923:33ce:7857:fc04) (Remote host closed the connection) |
2023-11-29 04:59:26 +0100 | <monochrom> | All kinds of exceptions can still happen in STM too so what it does in response is already well-defined. |
2023-11-29 04:59:28 +0100 | <EvanR> | because no one implements it correctly? |
2023-11-29 04:59:32 +0100 | ddellacosta | (~ddellacos@ool-44c73d16.dyn.optonline.net) (Quit: WeeChat 4.1.1) |
2023-11-29 04:59:38 +0100 | <EvanR> | I figured clojure was correct |
2023-11-29 05:00:09 +0100 | <tabemann> | EvanR: because most languages provide no mechanism to ensuring the correctness of STM |
2023-11-29 05:00:20 +0100 | <tabemann> | it's up to the programmer to not fubar it |
2023-11-29 05:00:26 +0100 | <EvanR> | well neither does haskell, STM is a GHC feature |
2023-11-29 05:00:52 +0100 | <tabemann> | well yes, but Haskell enables constructing a type system that enforces STM |
2023-11-29 05:00:53 +0100 | <monochrom> | I don't think you put the reason the right way. |
2023-11-29 05:00:55 +0100 | <EvanR> | you can't program it with just forkIO |
2023-11-29 05:01:16 +0100 | <[Leary]> | The real issue that stymies STM in other languages is impurity. Side effects in a transaction will be observed even if the transaction is cancelled. |
2023-11-29 05:01:18 +0100 | <tabemann> | EvanR: exactly |
2023-11-29 05:01:29 +0100 | <tabemann> | [Leary]: precisely |
2023-11-29 05:01:53 +0100 | <monochrom> | I think the right way is this. By analogy to Haskell: Imagine inside atomically you can play with both TVar and IORef. That's what other languages allow, and that's why it becomes problematic. |
2023-11-29 05:02:01 +0100 | <[Leary]> | However, execeptions themselves are not an issue, as the GHC implementation proves. |
2023-11-29 05:02:25 +0100 | <tabemann> | so what I've discovered today is that atomically has some magic that prevents intermediate states from being read, to avoid constructing logic bombs that expose other threads' intemediate states |
2023-11-29 05:02:51 +0100 | <EvanR> | I'm still not sure how the lazy division by zero would expose any intermediate states of anything |
2023-11-29 05:03:06 +0100 | <EvanR> | if you divide by zero in the transaction it is canceled as expected |
2023-11-29 05:03:16 +0100 | <[Leary]> | That's not deep magic, it's the core idea of using atomic transactions (however you implement them). |
2023-11-29 05:03:17 +0100 | <monochrom> | Haskell's solution is to ban IORef inside STM, but still allow it in IO. Clojure's solution is to ban IORef altogether; all mutable vars are TVars. |
2023-11-29 05:04:36 +0100 | <tabemann> | EvanR: laziness would still allow the divide by zero to escape; the magic must be to check all reads before and after to ensure that any updates, even if the actual values haven't changed before and after, abort the transaction |
2023-11-29 05:06:11 +0100 | <EvanR> | your test of trying to read a zero from a TVar which is always left as 1 in the writing transaction just seems to test STM and not any exception case, your writing transaction never attempted to crash |
2023-11-29 05:06:38 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 05:06:53 +0100 | <tabemann> | EvanR: I'm writing alternating 0's and 1's to the TVar |
2023-11-29 05:07:09 +0100 | <tabemann> | in a transaction, such that from the outside PoV the TVar should always be 1 |
2023-11-29 05:07:10 +0100 | <EvanR> | yes but the changes are not visible until after the comment |
2023-11-29 05:07:31 +0100 | <EvanR> | I'm not sure how a division by zero in an unrelated thread would have any effect anyway |
2023-11-29 05:07:48 +0100 | Guest3 | (~Guest3@149.159.194.55) (Quit: Client closed) |
2023-11-29 05:08:35 +0100 | <monochrom> | Sure. Any other transaction reading it will get 1. Albeit after much retries. |
2023-11-29 05:08:52 +0100 | <monochrom> | What is the surprise again? |
2023-11-29 05:09:13 +0100 | <EvanR> | you could have just tested the value for zero and printed an emoji if so |
2023-11-29 05:09:18 +0100 | Guest3 | (~Guest3@149.159.194.55) |
2023-11-29 05:09:20 +0100 | rosco | (~rosco@175.136.158.171) (Quit: leaving) |
2023-11-29 05:09:43 +0100 | <tabemann> | I basically was trying to see whether a naive approach that just catches exceptions within the reading thread is being applied |
2023-11-29 05:10:27 +0100 | <monochrom> | Huh but you wrote no catcher. |
2023-11-29 05:11:01 +0100 | <EvanR> | they mean try to show the runtime system doing something really dumb |
2023-11-29 05:11:05 +0100 | <tabemann> | monochrome: what I meant is whether atomically just relies on catching exceptions and aborting if any are raised |
2023-11-29 05:11:07 +0100 | <monochrom> | Are you sure you didn't mix up "catch" with "throw". |
2023-11-29 05:11:21 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 256 seconds) |
2023-11-29 05:12:02 +0100 | <EvanR> | is there a language which does STM this way? |
2023-11-29 05:12:37 +0100 | <tabemann> | probably most, as most languages aren't lazy |
2023-11-29 05:12:38 +0100 | <EvanR> | catching exceptions in everyone elses thread |
2023-11-29 05:12:53 +0100 | <EvanR> | rather than the thread doing the atomically |
2023-11-29 05:13:04 +0100 | <tabemann> | I mean in the thread doing the atomically |
2023-11-29 05:13:07 +0100 | Alleria | (~JohnGalt@user/alleria) (Read error: Connection reset by peer) |
2023-11-29 05:13:20 +0100 | <EvanR> | oh ok, well you didn't cause an error within the atomically |
2023-11-29 05:14:25 +0100 | <tabemann> | I just confirmed that GHC has magic that prevents intermediate read values from escaping even if no writes are applied out to the target TVar |
2023-11-29 05:14:44 +0100 | <tabemann> | probably in the form of something like an update clock or like |
2023-11-29 05:15:18 +0100 | <EvanR> | no, it just doesn't commit any changes when transactions fail |
2023-11-29 05:16:00 +0100 | <tabemann> | that's what I was trying to disprove |
2023-11-29 05:16:19 +0100 | <tabemann> | that's what I mean by a "naive" approach |
2023-11-29 05:16:33 +0100 | <EvanR> | the naive approach to STM is to just write to memory normally? xD |
2023-11-29 05:16:49 +0100 | <EvanR> | and hope no other threads actually run |
2023-11-29 05:17:23 +0100 | <tabemann> | no, a naive approach to STM is to just ensure that no writes conflict with one another, and no exceptions occur within atomically blocks |
2023-11-29 05:17:48 +0100 | <monochrom> | Don't hope. Enforce. Run the threads with sequential time sharing. |
2023-11-29 05:18:24 +0100 | <EvanR> | it's true that SQL servers come with modes that don't enforce transaction semantics, maybe this is why you're confused |
2023-11-29 05:18:25 +0100 | <monochrom> | This is why a select/poll/event loop does not have to worry about this. >:) |
2023-11-29 05:19:17 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) (Ping timeout: 268 seconds) |
2023-11-29 05:19:17 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 05:19:39 +0100 | <EvanR> | but transaction is supposed to mean any sequence of writes AND reads are consistent within the transaction, as well as only seeing the final state of previous commits |
2023-11-29 05:20:02 +0100 | <tabemann> | EvanR: and that's what I've confirmed here |
2023-11-29 05:20:03 +0100 | Alleria | (~JohnGalt@user/alleria) |
2023-11-29 05:20:19 +0100 | <tabemann> | monochrom: of course there's always Erlang's approach |
2023-11-29 05:20:20 +0100 | <EvanR> | just to clarify, you say clojure is busted? |
2023-11-29 05:20:45 +0100 | <EvanR> | or only busted when they do side effects |
2023-11-29 05:20:50 +0100 | <tabemann> | EvanR: nah, not Clojure, just the millions of STM frameworks which I highly suspect are crap |
2023-11-29 05:21:05 +0100 | <monochrom> | Clojure can't be busted. It lacks one of retry or orElse, I forgot which. |
2023-11-29 05:21:24 +0100 | rosco | (~rosco@175.136.158.171) |
2023-11-29 05:21:33 +0100 | <tabemann> | because they have no means of preventing side effects from within transactions |
2023-11-29 05:21:46 +0100 | <monochrom> | I.e., you can't make more mistakes if you simply omit important features! >:) |
2023-11-29 05:22:23 +0100 | <EvanR> | technically haskell also lets you do non-transactional effects within the transaction |
2023-11-29 05:22:37 +0100 | <tabemann> | EvanR: i.e. unsafePerformIO |
2023-11-29 05:23:01 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 05:23:05 +0100 | <tabemann> | but unsafePerformIO means that you've decided to press the button anyways |
2023-11-29 05:23:28 +0100 | <tabemann> | after that point all bets are off |
2023-11-29 05:23:29 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 05:24:16 +0100 | <EvanR> | I thought that was actually disallowed in stm |
2023-11-29 05:24:35 +0100 | <EvanR> | there's this thing unsafeIOToSTM |
2023-11-29 05:25:06 +0100 | <monochrom> | Yeah you need also that. unsafePerformIO alone is not enough, you don't even have IO inside STM, formally. |
2023-11-29 05:25:07 +0100 | <EvanR> | anyway it comes down to culture again |
2023-11-29 05:25:10 +0100 | <tabemann> | that's when you launch a nuclear strike on your own position to kill all the zombies |
2023-11-29 05:26:01 +0100 | <[Leary]> | atomically-in-atomically is disallowed by the RTS. I don't think it takes issue with just `unsafePerformIO`, though? |
2023-11-29 05:26:09 +0100 | <EvanR> | oh ok |
2023-11-29 05:26:30 +0100 | <EvanR> | it was either atomically inside unsafePerformIO or the other way around that was failing |
2023-11-29 05:26:48 +0100 | <tabemann> | I thought it was atomically within unsafePerformIO that was verboten |
2023-11-29 05:27:10 +0100 | <EvanR> | that direction makes less sense |
2023-11-29 05:27:32 +0100 | <EvanR> | maybe it was transitive nesting of atomically |
2023-11-29 05:29:34 +0100 | waleee | (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 260 seconds) |
2023-11-29 05:31:02 +0100 | <[Leary]> | % atomically (pure $! unsafePerformIO (atomically (pure 0))) |
2023-11-29 05:31:03 +0100 | <yahb2> | *** Exception: Control.Concurrent.STM.atomically was nested |
2023-11-29 05:32:03 +0100 | rosco | (~rosco@175.136.158.171) (Quit: Lost terminal) |
2023-11-29 05:32:28 +0100 | <EvanR> | oh sure, yahb has STM but not forkIO and threadDelay |
2023-11-29 05:32:37 +0100 | <EvanR> | and uPIO |
2023-11-29 05:32:51 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 268 seconds) |
2023-11-29 05:32:53 +0100 | <[Leary]> | I imported them in PM. |
2023-11-29 05:40:20 +0100 | rosco | (~rosco@175.136.158.171) |
2023-11-29 05:43:36 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 05:44:39 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 05:50:43 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 255 seconds) |
2023-11-29 05:53:22 +0100 | aforemny | (~aforemny@i59F516F2.versanet.de) |
2023-11-29 05:53:29 +0100 | aforemny_ | (~aforemny@i59F516E0.versanet.de) (Ping timeout: 252 seconds) |
2023-11-29 06:02:13 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 06:02:52 +0100 | johnw | (~johnw@69.62.242.138) (Quit: ZNC - http://znc.in) |
2023-11-29 06:04:08 +0100 | Guest3 | (~Guest3@149.159.194.55) (Ping timeout: 250 seconds) |
2023-11-29 06:08:23 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 264 seconds) |
2023-11-29 06:14:23 +0100 | Square2 | (~Square4@user/square) (Ping timeout: 264 seconds) |
2023-11-29 06:19:51 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 06:25:53 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 268 seconds) |
2023-11-29 06:27:57 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 06:33:54 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 268 seconds) |
2023-11-29 06:45:55 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 06:51:11 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 245 seconds) |
2023-11-29 07:03:20 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 07:07:26 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds) |
2023-11-29 07:07:51 +0100 | _ht | (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) |
2023-11-29 07:08:25 +0100 | euleritian | (~euleritia@dynamic-046-114-169-147.46.114.pool.telefonica.de) |
2023-11-29 07:09:13 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 256 seconds) |
2023-11-29 07:13:20 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2023-11-29 07:13:30 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-11-29 07:17:14 +0100 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2023-11-29 07:17:14 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2023-11-29 07:17:14 +0100 | finn_elija | FinnElija |
2023-11-29 07:18:10 +0100 | euleritian | (~euleritia@dynamic-046-114-169-147.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2023-11-29 07:18:28 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2023-11-29 07:19:49 +0100 | Alleria | (~JohnGalt@user/alleria) (Read error: Connection reset by peer) |
2023-11-29 07:20:20 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 07:22:18 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
2023-11-29 07:25:16 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-11-29 07:25:57 +0100 | Alleria | (~JohnGalt@user/alleria) |
2023-11-29 07:26:07 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 276 seconds) |
2023-11-29 07:26:26 +0100 | euleritian | (~euleritia@dynamic-046-114-169-147.46.114.pool.telefonica.de) |
2023-11-29 07:26:34 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 255 seconds) |
2023-11-29 07:28:31 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 07:34:20 +0100 | johnw | (~johnw@69.62.242.138) |
2023-11-29 07:34:38 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 260 seconds) |
2023-11-29 07:35:28 +0100 | chomwitt | (~chomwitt@2a02:587:7a10:2a00:1ac0:4dff:fedb:a3f1) |
2023-11-29 07:37:39 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) |
2023-11-29 07:38:26 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
2023-11-29 07:39:01 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-11-29 07:46:29 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 07:48:27 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds) |
2023-11-29 07:52:47 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 264 seconds) |
2023-11-29 07:53:19 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) (Remote host closed the connection) |
2023-11-29 07:53:19 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
2023-11-29 07:53:47 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) |
2023-11-29 07:59:15 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-11-29 08:00:40 +0100 | komikat | (~akshitkr@218.185.248.66) (Ping timeout: 255 seconds) |
2023-11-29 08:03:27 +0100 | acidjnk | (~acidjnk@p200300d6e72b9352dcea2d781ea8e5a4.dip0.t-ipconnect.de) |
2023-11-29 08:04:12 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 08:07:11 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds) |
2023-11-29 08:10:07 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 255 seconds) |
2023-11-29 08:13:57 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 256 seconds) |
2023-11-29 08:14:20 +0100 | harveypwca | (~harveypwc@2601:246:c280:7940:585a:99af:3e4c:209b) |
2023-11-29 08:15:24 +0100 | kenran | (~user@user/kenran) |
2023-11-29 08:17:01 +0100 | misterfish | (~misterfis@84-53-85-146.bbserv.nl) |
2023-11-29 08:19:52 +0100 | mechap | (~mechap@user/mechap) (Quit: WeeChat 4.1.1) |
2023-11-29 08:21:57 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 08:22:09 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2023-11-29 08:23:23 +0100 | rosco | (~rosco@175.136.158.171) (Read error: Connection reset by peer) |
2023-11-29 08:24:22 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
2023-11-29 08:25:34 +0100 | rosco | (~rosco@175.136.158.171) |
2023-11-29 08:25:39 +0100 | rosco | (~rosco@175.136.158.171) (Client Quit) |
2023-11-29 08:25:50 +0100 | rosco | (~rosco@175.136.158.171) |
2023-11-29 08:28:02 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2023-11-29 08:28:11 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 264 seconds) |
2023-11-29 08:29:53 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 08:30:03 +0100 | pr0ton | (~pr0ton@176.254.244.83) (Ping timeout: 261 seconds) |
2023-11-29 08:30:24 +0100 | <srk> | dminuoso_: considered transitioning to dhall and dhall-to-nix? |
2023-11-29 08:35:45 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 252 seconds) |
2023-11-29 08:36:21 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2023-11-29 08:42:25 +0100 | coot | (~coot@89-69-206-216.dynamic.chello.pl) |
2023-11-29 08:43:20 +0100 | Umeaboy | (~Umeaboy@94-255-145-133.cust.bredband2.com) |
2023-11-29 08:43:24 +0100 | <Umeaboy> | Hi! |
2023-11-29 08:44:20 +0100 | <Umeaboy> | Why is there no support for glibc 2.36 in the cabal-install rpm? I see 2.33, 2.34 and 2.38. |
2023-11-29 08:44:49 +0100 | <Umeaboy> | I ran rpm -qpR cabal-install-3.8.1.0-2.fc40.x86_64.rpm to check. |
2023-11-29 08:45:19 +0100 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2023-11-29 08:45:19 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2023-11-29 08:45:19 +0100 | finn_elija | FinnElija |
2023-11-29 08:47:32 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 08:47:55 +0100 | shriekingnoise | (~shrieking@186.137.175.87) (Ping timeout: 255 seconds) |
2023-11-29 08:52:35 +0100 | euleritian | (~euleritia@dynamic-046-114-169-147.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2023-11-29 08:53:04 +0100 | euleritian | (~euleritia@dynamic-046-114-169-147.46.114.pool.telefonica.de) |
2023-11-29 08:53:07 +0100 | fendor | (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c) |
2023-11-29 08:53:21 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 252 seconds) |
2023-11-29 08:53:22 +0100 | euleritian | (~euleritia@dynamic-046-114-169-147.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2023-11-29 08:53:39 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2023-11-29 08:58:40 +0100 | Alatheia | (~Alatheia@176.254.244.83) |
2023-11-29 09:01:24 +0100 | gmg | (~user@user/gehmehgeh) |
2023-11-29 09:03:43 +0100 | cfricke | (~cfricke@user/cfricke) |
2023-11-29 09:05:12 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 09:07:01 +0100 | alp_ | (~alp@2001:861:e3d6:8f80:ba78:18cf:70dd:23bc) |
2023-11-29 09:11:06 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 256 seconds) |
2023-11-29 09:11:16 +0100 | <sclv> | you will have to ask the debian or whatever maintainers. |
2023-11-29 09:11:25 +0100 | <sclv> | ie its a distro question |
2023-11-29 09:13:27 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
2023-11-29 09:15:35 +0100 | kenran` | (~user@user/kenran) |
2023-11-29 09:16:12 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) |
2023-11-29 09:17:23 +0100 | kenran | (~user@user/kenran) (Ping timeout: 264 seconds) |
2023-11-29 09:20:53 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
2023-11-29 09:22:24 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 09:28:16 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 245 seconds) |
2023-11-29 09:31:09 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 09:35:04 +0100 | Jackneill | (~Jackneill@20014C4E1E0B5A0069081ECE081E635B.dsl.pool.telekom.hu) |
2023-11-29 09:36:53 +0100 | idgaen | (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) |
2023-11-29 09:37:22 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 268 seconds) |
2023-11-29 09:44:49 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 09:57:19 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 260 seconds) |
2023-11-29 09:58:16 +0100 | tzh_ | (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz) |
2023-11-29 09:58:51 +0100 | econo_ | (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
2023-11-29 09:59:55 +0100 | lbseale | (~quassel@user/ep1ctetus) (Ping timeout: 256 seconds) |
2023-11-29 10:02:04 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
2023-11-29 10:02:09 +0100 | mikess | (~sam@user/mikess) (Read error: Connection reset by peer) |
2023-11-29 10:06:20 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5836:1305:ce95:7f7f) (Remote host closed the connection) |
2023-11-29 10:06:30 +0100 | komikat | (~akshitkr@218.185.248.66) |
2023-11-29 10:09:35 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 10:11:02 +0100 | CiaoSen | (~Jura@2a05:5800:28a:6100:2a3a:4dff:fe84:dbd5) |
2023-11-29 10:15:35 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) (Ping timeout: 264 seconds) |
2023-11-29 10:24:31 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Remote host closed the connection) |
2023-11-29 10:24:32 +0100 | jrm | (~jrm@user/jrm) (Ping timeout: 268 seconds) |
2023-11-29 10:24:44 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 10:24:59 +0100 | jrm | (~jrm@user/jrm) |
2023-11-29 10:26:09 +0100 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) |
2023-11-29 10:26:27 +0100 | pandry | (~Pandry@93-41-34-64.ip79.fastwebnet.it) |
2023-11-29 10:27:02 +0100 | danza | (~francesco@151.43.234.166) |
2023-11-29 10:28:52 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2023-11-29 10:30:42 +0100 | harveypwca | (~harveypwc@2601:246:c280:7940:585a:99af:3e4c:209b) (Quit: Leaving) |
2023-11-29 10:31:01 +0100 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
2023-11-29 10:31:58 +0100 | danza | (~francesco@151.43.234.166) (Ping timeout: 255 seconds) |
2023-11-29 10:41:48 +0100 | manwithluck | (manwithluc@gateway/vpn/protonvpn/manwithluck) (Ping timeout: 268 seconds) |
2023-11-29 10:42:02 +0100 | manwithluck | (manwithluc@gateway/vpn/protonvpn/manwithluck) |
2023-11-29 10:43:54 +0100 | danse-nr3 | (~danse@151.43.234.166) |
2023-11-29 10:43:57 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5836:1305:ce95:7f7f) |
2023-11-29 10:47:57 +0100 | alp_ | (~alp@2001:861:e3d6:8f80:ba78:18cf:70dd:23bc) (Remote host closed the connection) |
2023-11-29 10:48:14 +0100 | alp_ | (~alp@2001:861:e3d6:8f80:455d:a197:398e:7c06) |
2023-11-29 10:49:26 +0100 | <dminuoso_> | Servant question: Say Im making a typeclass class HasSummary api where toSummary :: Proxy api -> String; instance forall sym ty. KnownSymbol sym => HasSummary (Summary sym :> ty) where toSummary _ = symbolVal (Proxy :: Proxy sym) |
2023-11-29 10:49:53 +0100 | <dminuoso_> | And I hold a generic endpoint record selector in my hand, Im a bit confused how to apply toSummary to that endpoint record selector. |
2023-11-29 10:56:31 +0100 | rosco | (~rosco@175.136.158.171) (Quit: Lost terminal) |
2023-11-29 10:57:26 +0100 | manwithluck | (manwithluc@gateway/vpn/protonvpn/manwithluck) (Ping timeout: 245 seconds) |
2023-11-29 10:58:38 +0100 | manwithluck | (manwithluc@gateway/vpn/protonvpn/manwithluck) |
2023-11-29 10:58:52 +0100 | CiaoSen | (~Jura@2a05:5800:28a:6100:2a3a:4dff:fe84:dbd5) (Ping timeout: 246 seconds) |
2023-11-29 10:59:00 +0100 | __monty__ | (~toonn@user/toonn) |
2023-11-29 11:00:52 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-11-29 11:01:29 +0100 | CiaoSen | (~Jura@5.83.179.237) |
2023-11-29 11:03:38 +0100 | danse-nr3 | (~danse@151.43.234.166) (Read error: Connection reset by peer) |
2023-11-29 11:03:57 +0100 | danse-nr3 | (~danse@151.57.228.14) |
2023-11-29 11:04:50 +0100 | <kuribas> | Welcome to the nastiness that is the Servant implementation. |
2023-11-29 11:10:06 +0100 | chele | (~chele@user/chele) |
2023-11-29 11:11:10 +0100 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) |
2023-11-29 11:12:35 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 264 seconds) |
2023-11-29 11:13:25 +0100 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving) |
2023-11-29 11:14:08 +0100 | Lord_of_Life_ | Lord_of_Life |
2023-11-29 11:23:42 +0100 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 256 seconds) |
2023-11-29 11:34:28 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2023-11-29 11:34:32 +0100 | [_] | (~itchyjunk@user/itchyjunk/x-7353470) |
2023-11-29 11:36:04 +0100 | hamess_ | hamess |
2023-11-29 11:38:14 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 268 seconds) |
2023-11-29 11:38:20 +0100 | shapr | (~user@2600:1700:c640:3100:c355:fe3e:4f9f:d5b6) (Remote host closed the connection) |
2023-11-29 11:38:34 +0100 | shapr | (~user@2600:1700:c640:3100:af48:8802:e8a5:3ea1) |
2023-11-29 11:48:48 +0100 | Xyloes | (~wyx@2400:dd01:103a:1012:5923:33ce:7857:fc04) |
2023-11-29 11:50:10 +0100 | misterfish | (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 255 seconds) |
2023-11-29 11:57:56 +0100 | Philonous | (~Philonous@user/philonous) (Quit: ZNC - https://znc.in) |
2023-11-29 11:58:21 +0100 | Philonous | (~Philonous@user/philonous) |
2023-11-29 11:58:44 +0100 | chele | (~chele@user/chele) (Remote host closed the connection) |
2023-11-29 12:04:45 +0100 | coot | (~coot@89-69-206-216.dynamic.chello.pl) (Ping timeout: 252 seconds) |
2023-11-29 12:04:49 +0100 | coot | (~coot@89-69-206-216.dynamic.chello.pl) |
2023-11-29 12:06:22 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2023-11-29 12:06:42 +0100 | shOkEy | (~shOkEy@178-164-206-123.pool.digikabel.hu) (Ping timeout: 260 seconds) |
2023-11-29 12:08:32 +0100 | shOkEy | (~shOkEy@91-83-3-30.pool.digikabel.hu) |
2023-11-29 12:12:24 +0100 | xff0x | (~xff0x@2405:6580:b080:900:9a48:ce0:12d3:d0ae) |
2023-11-29 12:14:09 +0100 | not_reserved | (~not_reser@45.144.113.234) |
2023-11-29 12:25:02 +0100 | <danse-nr3> | morning all. I think one needs dependent types to get type safety with matrices, do you have a solution you like in a non-dependent haskell library? |
2023-11-29 12:27:15 +0100 | <danse-nr3> | i know it sounds like a contradiction, but i am not sure about the first statement and i am curious about other compromises |
2023-11-29 12:30:55 +0100 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2023-11-29 12:31:45 +0100 | gmg | (~user@user/gehmehgeh) |
2023-11-29 12:35:32 +0100 | <lortabac> | dependent types are needed when you have terms whose type is determined at runtime |
2023-11-29 12:35:57 +0100 | <lortabac> | so for example if the size of the matrix is known statically there is no need for dependent types |
2023-11-29 12:37:00 +0100 | <danse-nr3> | i see, i have a wrong understanding of dependent types then. Any matrix typing you find elegant or nice to work with? |
2023-11-29 12:38:25 +0100 | arahael | (~arahael@119-18-2-212.771202.syd.nbn.aussiebb.net) () |
2023-11-29 12:38:49 +0100 | <danse-nr3> | (i am surprised that lists with encoded length are not more common then, at least i never stumble upon them) |
2023-11-29 12:39:01 +0100 | <lortabac> | if the size of the matrix is only known at runtime, then you need some way to reason generically over any size, and that's where dependent types become useful |
2023-11-29 12:39:54 +0100 | <danse-nr3> | right, but usually the size is known in function signatures (add one to rows, transpose etcetera) |
2023-11-29 12:40:15 +0100 | chele | (~chele@user/chele) |
2023-11-29 12:40:35 +0100 | <lortabac> | I've never worked with matrixes in Haskell, but I suppose there are libraries that do what you are looking for |
2023-11-29 12:42:15 +0100 | rosco | (~rosco@175.136.158.171) |
2023-11-29 12:42:50 +0100 | <danse-nr3> | yes i think i saw some years ago, maybe repa or some custom types for some neural network lib, i don't recall now. I guess a type like `a n -> a (n+1)` cannot be written in vanilla haskell and it requires some extension? |
2023-11-29 12:44:49 +0100 | CiaoSen | (~Jura@5.83.179.237) (Ping timeout: 256 seconds) |
2023-11-29 12:45:07 +0100 | <lortabac> | yes you need TypeFamilies, TypeOperators and maybe more |
2023-11-29 12:45:17 +0100 | <danse-nr3> | cheers lortabac |
2023-11-29 12:47:50 +0100 | <lortabac> | danse-nr3: imagine you want a function 'generateMatrix' that fills a matrix of size NxM with a given value |
2023-11-29 12:48:15 +0100 | <lortabac> | generateMatrix :: Int -> Int -> Matrix n m |
2023-11-29 12:48:21 +0100 | <danse-nr3> | is that where dependent types come in the picture? |
2023-11-29 12:48:35 +0100 | <danse-nr3> | i guess one could have an `n` encoding for ints |
2023-11-29 12:48:38 +0100 | <lortabac> | you need a way to tell the type system that the first Int should be 'n' and the second one should be 'm' |
2023-11-29 12:48:48 +0100 | <lortabac> | but in Haskell you can't |
2023-11-29 12:49:13 +0100 | akegalj | (~akegalj@78-2-198-3.adsl.net.t-com.hr) |
2023-11-29 12:49:30 +0100 | <danse-nr3> | that would be a very long haskell file though, probably unfeasible |
2023-11-29 12:49:49 +0100 | <lortabac> | in a dependently-typed language it would be something like 'generateMatrix : (n : Nat) -> (m : Nat) -> Matrix n m |
2023-11-29 12:50:06 +0100 | <danse-nr3> | yeah makes more sense like this |
2023-11-29 12:52:11 +0100 | <lortabac> | where the type of the first argument is 'Nat' and 'n' is a name that refers to its value |
2023-11-29 12:54:36 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 12:58:58 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 13:00:01 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 13:00:50 +0100 | <bwe> | think of hlint noting those spots in my code that make it probably very slow. is there a tool that does just that? instead of mapM use forM... or is there just a checklist of how to optimise my haskell code "instead ... use" |
2023-11-29 13:00:58 +0100 | <lortabac> | oops the signature should be 'generateMatrix : (n : Nat) -> (m : Nat) -> a -> Matrix n m a' |
2023-11-29 13:01:05 +0100 | <lortabac> | but you got the idea |
2023-11-29 13:02:15 +0100 | <danse-nr3> | yes that syntax is clear |
2023-11-29 13:02:39 +0100 | <bwe> | I know it's very basic but such a kind of list of rules of thumb would make all the difference for me. |
2023-11-29 13:02:39 +0100 | <danse-nr3> | performance is more a matter of semantics bwe, i don't think linting goes that far |
2023-11-29 13:04:05 +0100 | <bwe> | danse-nr3: so, if I'd ask you, which examples of instead … do … can you recall from your very experience? |
2023-11-29 13:04:48 +0100 | <danse-nr3> | the different fold functions, i guess, but nothing to be automated, requires reasoning and understanding |
2023-11-29 13:05:31 +0100 | <bwe> | danse-nr3: so along the lines of avoid iterating by putting everything into memory before giving it to the next function? |
2023-11-29 13:06:34 +0100 | <danse-nr3> | well the considerations explained in wiki.haskell.org/Foldr_Foldl_Foldl' |
2023-11-29 13:09:10 +0100 | <bwe> | so, great, I could find all those spots in my code and choose wisely. that implies mapM for example. Other than the intricacies of the different folds, what should I look at? |
2023-11-29 13:10:48 +0100 | <bwe> | (also, how can I tell which function eventually calls a fold? is it possible to get that answer automated? I assume naïvely that this could be done because the execution does it anyways; but just a naïve approach) |
2023-11-29 13:11:48 +0100 | kenran`` | (~user@user/kenran) |
2023-11-29 13:12:58 +0100 | danse-nr3 | (~danse@151.57.228.14) (Remote host closed the connection) |
2023-11-29 13:13:13 +0100 | Jackneill | (~Jackneill@20014C4E1E0B5A0069081ECE081E635B.dsl.pool.telekom.hu) (Ping timeout: 276 seconds) |
2023-11-29 13:13:16 +0100 | kenran` | (~user@user/kenran) (Ping timeout: 245 seconds) |
2023-11-29 13:13:22 +0100 | danse-nr3 | (~danse@151.57.228.14) |
2023-11-29 13:14:56 +0100 | tremon | (~tremon@83.80.159.219) |
2023-11-29 13:15:23 +0100 | kenran``` | (~user@user/kenran) |
2023-11-29 13:16:13 +0100 | <ski> | "you need a way to tell the type system that the first Int should be 'n' and the second one should be 'm'","but in Haskell you can't" -- you can do existentials |
2023-11-29 13:17:31 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) |
2023-11-29 13:17:59 +0100 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2023-11-29 13:17:59 +0100 | kenran`` | (~user@user/kenran) (Ping timeout: 264 seconds) |
2023-11-29 13:18:22 +0100 | danse-nr3 | (~danse@151.57.228.14) (Ping timeout: 255 seconds) |
2023-11-29 13:18:24 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 13:18:51 +0100 | gmg | (~user@user/gehmehgeh) |
2023-11-29 13:18:53 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 13:22:46 +0100 | kenran``` | kenran |
2023-11-29 13:22:47 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) (Ping timeout: 256 seconds) |
2023-11-29 13:24:03 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
2023-11-29 13:27:11 +0100 | <komikat> | b |
2023-11-29 13:27:43 +0100 | <komikat> | been working with pytorch for sometime, is there any library to do deep learning with in #haskell |
2023-11-29 13:28:30 +0100 | <komikat> | i've been meaning to write a dependency parser for natural languages and wanted to see if i could get that to work with a functional programming language |
2023-11-29 13:37:42 +0100 | Unicorn_Princess | (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
2023-11-29 13:42:27 +0100 | not_reserved | (~not_reser@45.144.113.234) (Quit: Client closed) |
2023-11-29 13:44:24 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 13:44:25 +0100 | jespada | (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) (Ping timeout: 276 seconds) |
2023-11-29 13:50:28 +0100 | remedan | (~remedan@ip-94-112-0-18.bb.vodafone.cz) (Ping timeout: 256 seconds) |
2023-11-29 13:51:20 +0100 | rosco | (~rosco@175.136.158.171) (Quit: Lost terminal) |
2023-11-29 13:52:51 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 13:52:57 +0100 | jespada | (~jespada@cpc121308-nmal25-2-0-cust15.19-2.cable.virginm.net) |
2023-11-29 13:53:01 +0100 | Xyloes | (~wyx@2400:dd01:103a:1012:5923:33ce:7857:fc04) (Quit: Konversation terminated!) |
2023-11-29 13:55:44 +0100 | remedan | (~remedan@ip-94-112-0-18.bb.vodafone.cz) |
2023-11-29 13:56:27 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2023-11-29 14:02:36 +0100 | <bwe> | btw what is the go-to language if I'd seek something like Gofer or Hugs? |
2023-11-29 14:02:57 +0100 | <bwe> | sort of Haskell for educational purposes |
2023-11-29 14:08:53 +0100 | <haskellbridge> | 14<mauke> Isn't hugs just a Haskell interpreter? |
2023-11-29 14:11:59 +0100 | misterfish | (~misterfis@84-53-85-146.bbserv.nl) |
2023-11-29 14:20:56 +0100 | edr | (~edr@user/edr) |
2023-11-29 14:26:24 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2023-11-29 14:30:31 +0100 | Lycurgus | (~georg@user/Lycurgus) |
2023-11-29 14:33:20 +0100 | sawilagar | (~sawilagar@user/sawilagar) |
2023-11-29 14:34:07 +0100 | rosco | (~rosco@175.136.158.171) |
2023-11-29 14:34:30 +0100 | kimiamania46 | (~65804703@user/kimiamania) (Quit: PegeLinux) |
2023-11-29 14:34:50 +0100 | kimiamania46 | (~65804703@user/kimiamania) |
2023-11-29 14:38:07 +0100 | danse-nr3 | (~danse@151.57.228.14) |
2023-11-29 14:39:02 +0100 | CiaoSen | (~Jura@2a05:5800:28a:6100:2a3a:4dff:fe84:dbd5) |
2023-11-29 14:40:22 +0100 | kimiamania46 | (~65804703@user/kimiamania) (Quit: PegeLinux) |
2023-11-29 14:40:54 +0100 | danse-nr3 | (~danse@151.57.228.14) (Remote host closed the connection) |
2023-11-29 14:41:18 +0100 | danse-nr3 | (~danse@151.57.228.14) |
2023-11-29 14:42:47 +0100 | <danse-nr3> | how would you express that with existentials ski? |
2023-11-29 14:43:07 +0100 | kimiamania46 | (~65804703@user/kimiamania) |
2023-11-29 14:43:40 +0100 | akegalj | (~akegalj@78-2-198-3.adsl.net.t-com.hr) (Quit: leaving) |
2023-11-29 14:47:59 +0100 | <danse-nr3> | not any popular one i am afraid komikat |
2023-11-29 14:53:53 +0100 | kimiamania46 | (~65804703@user/kimiamania) (Quit: PegeLinux) |
2023-11-29 14:59:05 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 15:01:11 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 15:02:10 +0100 | kimiamania46 | (~65804703@user/kimiamania) |
2023-11-29 15:02:39 +0100 | Alleria | (~JohnGalt@user/alleria) (Ping timeout: 268 seconds) |
2023-11-29 15:03:50 +0100 | Alleria | (~JohnGalt@user/alleria) |
2023-11-29 15:04:58 +0100 | danse-nr3 | (~danse@151.57.228.14) (Read error: Connection reset by peer) |
2023-11-29 15:05:27 +0100 | danse-nr3 | (~danse@151.35.247.219) |
2023-11-29 15:07:59 +0100 | shriekingnoise | (~shrieking@186.137.175.87) |
2023-11-29 15:16:01 +0100 | swamps | (~swamps@static-a197.Irkutsk.golden.ru) |
2023-11-29 15:16:57 +0100 | swamps | (~swamps@static-a197.Irkutsk.golden.ru) (Client Quit) |
2023-11-29 15:17:36 +0100 | swamps | (~swamps@static-a197.Irkutsk.golden.ru) |
2023-11-29 15:18:18 +0100 | kenran | (~user@user/kenran) (Remote host closed the connection) |
2023-11-29 15:19:16 +0100 | rosco | (~rosco@175.136.158.171) (Quit: Lost terminal) |
2023-11-29 15:19:47 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds) |
2023-11-29 15:20:34 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) |
2023-11-29 15:27:00 +0100 | fendor | (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c) (Remote host closed the connection) |
2023-11-29 15:32:13 +0100 | danse-nr3 | (~danse@151.35.247.219) (Ping timeout: 246 seconds) |
2023-11-29 15:32:43 +0100 | Xyloes | (~wyx@2400:dd01:103a:1012:5923:33ce:7857:fc04) |
2023-11-29 15:33:05 +0100 | Lycurgus | (~georg@user/Lycurgus) (Quit: leaving) |
2023-11-29 15:36:49 +0100 | danse-nr3 | (~danse@151.35.247.219) |
2023-11-29 15:39:48 +0100 | Xyloes | (~wyx@2400:dd01:103a:1012:5923:33ce:7857:fc04) (Quit: Konversation terminated!) |
2023-11-29 15:43:56 +0100 | <komikat> | :( |
2023-11-29 15:47:42 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer) |
2023-11-29 15:49:14 +0100 | <trev> | bwe: you could try idris |
2023-11-29 15:49:58 +0100 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2023-11-29 15:50:07 +0100 | <danse-nr3> | komikat, you could try julia XD |
2023-11-29 15:50:30 +0100 | <komikat> | does julia have types? |
2023-11-29 15:50:48 +0100 | <komikat> | as in strong typing |
2023-11-29 15:51:10 +0100 | <danse-nr3> | i think it does yes |
2023-11-29 15:51:10 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 256 seconds) |
2023-11-29 15:51:37 +0100 | <komikat> | interesting |
2023-11-29 15:53:54 +0100 | seeg123456 | (~seeg12345@64.176.64.83) |
2023-11-29 15:55:01 +0100 | shapr | (~user@2600:1700:c640:3100:af48:8802:e8a5:3ea1) (Remote host closed the connection) |
2023-11-29 15:55:14 +0100 | shapr | (~user@2600:1700:c640:3100:a007:14d5:426f:261d) |
2023-11-29 15:58:57 +0100 | <komikat> | damn "Julia's type system is dynamic, but gains some of the advantages of static type systems by making it possible to indicate that certain values are of specific types" |
2023-11-29 16:00:09 +0100 | <danse-nr3> | yeah, looking at it again, i am not sure the types satisfy your requirements docs.julialang.org/en/v1/manual/types. Also not sure that the language is that functionaly ... someone mentioned julia to me some time ago relating it to haskell, but i am not seeing the connection right now |
2023-11-29 16:00:26 +0100 | <danse-nr3> | *functional |
2023-11-29 16:02:16 +0100 | <danse-nr3> | i was also told that R is quite functional but i don't know it, and it is "dynamically typed" |
2023-11-29 16:03:05 +0100 | <komikat> | ah yeah |
2023-11-29 16:03:28 +0100 | <komikat> | it doesn't seem *purely* functional but at least it doesn't have objects xD like python |
2023-11-29 16:10:38 +0100 | dcoutts | (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Remote host closed the connection) |
2023-11-29 16:10:59 +0100 | dcoutts | (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
2023-11-29 16:16:00 +0100 | ivelten | (~ivelten@2804:82b8:8:ee01:fda6:516:611b:3176) |
2023-11-29 16:22:01 +0100 | mrmr15533 | (~mrmr@user/mrmr) (Ping timeout: 245 seconds) |
2023-11-29 16:22:12 +0100 | mrmr155331 | (~mrmr@user/mrmr) |
2023-11-29 16:24:47 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2023-11-29 16:25:18 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2023-11-29 16:29:42 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds) |
2023-11-29 16:30:18 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2023-11-29 16:31:56 +0100 | <ski> | danse-nr3 : `generateMatrix :: Int -> Int -> a -> exists m n. Matrix n m a' |
2023-11-29 16:32:56 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-11-29 16:33:02 +0100 | <ncf> | that doesn't really express that m and n come from the first two arguments |
2023-11-29 16:33:25 +0100 | dcoutts | (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 276 seconds) |
2023-11-29 16:33:35 +0100 | <ski> | (btw, note that this is weaker than `generateMatrix : (n : Nat) -> (m : Nat) -> a -> Matrix n m a'. basically same thing as `(exists a. P a) -> (exists a. Q a)' being weaker than `forall a. P a -> Q a'. so, it's weaker because it doesn't link the two size arguments, to the corresponding parameters to the return type) |
2023-11-29 16:33:44 +0100 | ystael_ | (~ystael@user/ystael) |
2023-11-29 16:33:44 +0100 | <ski> | right |
2023-11-29 16:33:59 +0100 | ystael | (~ystael@user/ystael) (Ping timeout: 260 seconds) |
2023-11-29 16:34:21 +0100 | ystael_ | ystael |
2023-11-29 16:34:47 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
2023-11-29 16:35:14 +0100 | <ski> | it could still be used, to express that there will be *some* sizes for the resulting matrix. while `generateMatrix :: Int -> Int -> a -> Matrix n m' would be incorrect, as that's saying as the sizes of the resulting matrix will be whatever the caller wants them to be (unrelated to the two size arguments) |
2023-11-29 16:35:54 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) |
2023-11-29 16:35:57 +0100 | <danse-nr3> | interesting, thanks |
2023-11-29 16:37:13 +0100 | <ski> | anyway, the `exists' is obviously pseudo-Haskell. you can encode it in two different ways in Haskell. (a) using `ExistentialQuantification' (imho a misnomer, `ExistentialConstructors' would be better); or (b) using CPS with `Rank2Types' |
2023-11-29 16:38:21 +0100 | <danse-nr3> | i agree that sounds like a misnomer |
2023-11-29 16:38:44 +0100 | <ski> | (a) would be `generateMatrix :: Int -> Int -> a -> SomeMatrix a' where `data SomeMatrix a = forall n m. WrapMatrix (Matrix n m a)' (or `data SomeMatrix :: * -> * where WrapMatrix :: Matrix n m a -> SomeMatrix a', using `GADTSyntax') |
2023-11-29 16:39:27 +0100 | <ski> | (b) would be `withGeneratedMatrix :: Int -> Int -> a -> (forall n m. Matrix n m a -> o) -> o' |
2023-11-29 16:40:36 +0100 | <danse-nr3> | meh, with `exists` it looked way more readable, but maybe this is not such a common use case |
2023-11-29 16:40:44 +0100 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 4.0.5) |
2023-11-29 16:41:14 +0100 | <ski> | yes. that's why i presented it with that pseudo-Haskell syntax first, becauses it's easier to reason about and think about it, in that form |
2023-11-29 16:42:28 +0100 | <ski> | ((a) tends to be better, when you're going to store the result in data-structures. while (b) tends to be better when you're going to use the result directly after the call) |
2023-11-29 16:43:16 +0100 | <ski> | perhaps in some future, we could get actual `exists' syntax .. |
2023-11-29 16:43:30 +0100 | <lortabac> | ski: unless I misunderstood something, this doesn't solve the problem I was talking about |
2023-11-29 16:43:38 +0100 | <ski> | (Mercury has real existential quantification, like that) |
2023-11-29 16:43:47 +0100 | <danse-nr3> | yeah that would be nice |
2023-11-29 16:43:55 +0100 | <danse-nr3> | no it is not the same lortabac but somehow close |
2023-11-29 16:43:58 +0100 | <ski> | it does not solve the problem of connecting the size arguments to the type of the result, no |
2023-11-29 16:44:07 +0100 | <lortabac> | I want the matrix to have size NxM where N and M are the values of the first 2 arguments |
2023-11-29 16:44:12 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2023-11-29 16:44:15 +0100 | <ski> | well, you do get that |
2023-11-29 16:44:21 +0100 | tzh | (~tzh@c-71-193-181-0.hsd1.or.comcast.net) |
2023-11-29 16:44:27 +0100 | <ski> | it's just that you don't statically (in the types) know that that's what you get |
2023-11-29 16:44:31 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2023-11-29 16:45:09 +0100 | <lortabac> | yes, my point was that with dependent types you can encode this piece of information in the types |
2023-11-29 16:45:18 +0100 | <ski> | right |
2023-11-29 16:45:50 +0100 | <lortabac> | (and also that if you don't have a similar use case you don't need full dependent types) |
2023-11-29 16:46:11 +0100 | jmdaemon | (~jmdaemon@user/jmdaemon) (Ping timeout: 245 seconds) |
2023-11-29 16:46:46 +0100 | ivelten | (~ivelten@2804:82b8:8:ee01:fda6:516:611b:3176) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2023-11-29 16:46:59 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-11-29 16:47:26 +0100 | <ski> | you could try something like `generateMatrix :: (KnownNat n,KnownNat m) => p m -> q n -> a -> Matrix n m a' |
2023-11-29 16:48:58 +0100 | Maxdamantus | (~Maxdamant@user/maxdamantus) (Ping timeout: 255 seconds) |
2023-11-29 16:49:00 +0100 | vishnix | (~vishwas@c-73-9-42-9.hsd1.il.comcast.net) |
2023-11-29 16:49:16 +0100 | <ski> | (or, rolling your own singletons, `data Nat = Zero | Succ Nat; data IsNat :: Nat -> * where ZeroS :: IsNat Zero; SuccS :: IsNat n -> IsNat (Succ n)', then `generateMatrix :: IsNat n -> IsNat m -> a -> Matrix n m a') |
2023-11-29 16:49:30 +0100 | vishnix | (~vishwas@c-73-9-42-9.hsd1.il.comcast.net) (Client Quit) |
2023-11-29 16:49:36 +0100 | <lortabac> | I don't think the solution with proxies would be usable if M and N are only known at runtime, for example fetched from a database |
2023-11-29 16:49:38 +0100 | Maxdamantus | (~Maxdamant@user/maxdamantus) |
2023-11-29 16:49:40 +0100 | vishnix | (~vishwas@c-73-9-42-9.hsd1.il.comcast.net) |
2023-11-29 16:49:41 +0100 | ivelten | (~ivelten@2804:82b8:8:ee01:fda6:516:611b:3176) |
2023-11-29 16:53:06 +0100 | <ski> | (the `KnowNat' constraints would be carrying the run-time info. you could then use `natVal :: KnownNat n => proxy n -> Natural', or perhaps `natSing :: KnownNat n => SNat n') |
2023-11-29 16:53:45 +0100 | <c_wraith> | You can use types that are only known at runtime |
2023-11-29 16:53:47 +0100 | <ski> | (the operation that gets the `m' and `n' from the database would use existentials (in either encoding above) |
2023-11-29 16:53:50 +0100 | <ski> | ) |
2023-11-29 16:54:07 +0100 | <lortabac> | I don't think you can fully solve this problem without singletons |
2023-11-29 16:54:26 +0100 | <lortabac> | with the other solutions somewhere you lose information in the types |
2023-11-29 16:54:32 +0100 | <ski> | getDBNat :: ... -> IO (exists n. KnownNat n *> Const n ()) |
2023-11-29 16:55:23 +0100 | <ski> | (with (b), that becomes `with DBNat :: ... -> (forall n. KnownNat n => IO o) -> IO o') |
2023-11-29 16:57:41 +0100 | <lortabac> | if you use existentials, how do you pass the generated matrix to other functions and preserve the sizes in the types? |
2023-11-29 16:57:56 +0100 | <c_wraith> | bizarrely enough, you just do |
2023-11-29 16:58:32 +0100 | <lortabac> | I don't think that is possible without singletons |
2023-11-29 16:58:41 +0100 | <c_wraith> | You have the KnownNat constraint available |
2023-11-29 16:58:49 +0100 | <c_wraith> | you can always lower it to a value when needed |
2023-11-29 16:59:14 +0100 | <c_wraith> | (as long as you are passing the constraint around) |
2023-11-29 16:59:37 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 16:59:41 +0100 | <lortabac> | I'm not sure I follow |
2023-11-29 16:59:58 +0100 | <lortabac> | (forall n. KnownNat n => IO o) the 'n' is lost here |
2023-11-29 17:00:09 +0100 | <c_wraith> | No it's not. |
2023-11-29 17:00:19 +0100 | <c_wraith> | it's right there in the type |
2023-11-29 17:00:21 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 17:00:50 +0100 | <lortabac> | ok let's recapitulate |
2023-11-29 17:01:17 +0100 | <c_wraith> | But you *do* need to use other extensions that allow you to use that formulation usefully |
2023-11-29 17:01:26 +0100 | alp_ | (~alp@2001:861:e3d6:8f80:455d:a197:398e:7c06) (Ping timeout: 256 seconds) |
2023-11-29 17:01:49 +0100 | <c_wraith> | Otherwise you'd end up needing a type more like (forall n. KnownNat n => proxy n -> IO o) |
2023-11-29 17:02:09 +0100 | <lortabac> | I want to fetch M and N from the database, create a (Matrix m n Int) and pass it to a function that expects a matrix, keeping the size information in the types |
2023-11-29 17:02:31 +0100 | <lortabac> | all this without singletons |
2023-11-29 17:03:32 +0100 | <c_wraith> | have you read through GHC.TypeLits? |
2023-11-29 17:04:19 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds) |
2023-11-29 17:04:38 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2023-11-29 17:04:44 +0100 | <lortabac> | oh |
2023-11-29 17:04:54 +0100 | <lortabac> | I wasn't aware that SNat is now in base |
2023-11-29 17:05:02 +0100 | <c_wraith> | you don't even need it |
2023-11-29 17:05:08 +0100 | <c_wraith> | you'd just call someNatVal twice |
2023-11-29 17:05:16 +0100 | <c_wraith> | pattern match on the results, and go |
2023-11-29 17:06:55 +0100 | <lortabac> | interesting |
2023-11-29 17:07:48 +0100 | <c_wraith> | You do lose something over having literals in your types - you can't trivially generate new constraints like (0 < n) => ... |
2023-11-29 17:08:12 +0100 | <c_wraith> | When all you have is KnownNat, that's the only constraint you get. |
2023-11-29 17:08:30 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-11-29 17:13:08 +0100 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) |
2023-11-29 17:13:43 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 255 seconds) |
2023-11-29 17:14:40 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) |
2023-11-29 17:16:02 +0100 | alp_ | (~alp@2001:861:e3d6:8f80:882f:ff0d:da80:ca07) |
2023-11-29 17:16:04 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2023-11-29 17:16:21 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2023-11-29 17:16:46 +0100 | kaol_ | kaol |
2023-11-29 17:18:18 +0100 | <lortabac> | c_wraith: I'm trying to write a minimal example without success |
2023-11-29 17:18:23 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 256 seconds) |
2023-11-29 17:19:12 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) |
2023-11-29 17:19:42 +0100 | <lortabac> | this naive version doesn't compile https://paste.tomsmeding.com/DRwgbFdT |
2023-11-29 17:20:37 +0100 | <lortabac> | ah wait, I think I understand |
2023-11-29 17:20:49 +0100 | <c_wraith> | Oh. That's because KnownNat n doesn't imply KnownNat (n-1) |
2023-11-29 17:22:49 +0100 | <c_wraith> | Though you're also going to need ScopeTypeVariables to talk about n (the type) in the function body like that |
2023-11-29 17:22:56 +0100 | <c_wraith> | *ScopedTypeVariables |
2023-11-29 17:23:00 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
2023-11-29 17:23:05 +0100 | <lortabac> | no, I'm lost |
2023-11-29 17:23:09 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) |
2023-11-29 17:23:09 +0100 | <ski> | the `Nat' `n' in the pattern in `n -> x :< generate (Proxy :: Proxy (n - 1)) x' is also unrelated to the `Nat' `n - 1' in the expressio there |
2023-11-29 17:23:21 +0100 | <c_wraith> | yes, that's why you need ScopedTypeVariables |
2023-11-29 17:23:24 +0100 | <ski> | yes |
2023-11-29 17:23:26 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2023-11-29 17:23:44 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2023-11-29 17:23:52 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) (Ping timeout: 246 seconds) |
2023-11-29 17:23:59 +0100 | <ski> | you need to replace the pattern `pn' with `(pn :: p n)' |
2023-11-29 17:24:40 +0100 | <ski> | or, i suppose, just add `forall p n a. ' to the signature |
2023-11-29 17:24:59 +0100 | <lortabac> | I tried but it still doesn't compile |
2023-11-29 17:25:22 +0100 | <lortabac> | Couldn't match type ‘n’ with ‘0’ |
2023-11-29 17:25:55 +0100 | <lortabac> | anyway I have to go now, I'll try again tomorrow |
2023-11-29 17:26:00 +0100 | <ski> | just matching on `n' will probably not be enough, yea |
2023-11-29 17:26:07 +0100 | <lortabac> | you made me curious :) |
2023-11-29 17:26:31 +0100 | <danse-nr3> | bye lortabac o/ |
2023-11-29 17:26:52 +0100 | lortabac | (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.1.1) |
2023-11-29 17:27:12 +0100 | <c_wraith> | Honestly, that's like the single worst case for Nat, the way GHC works |
2023-11-29 17:27:29 +0100 | <c_wraith> | (yes, I know lortabac is gone) |
2023-11-29 17:27:44 +0100 | <ski> | i suspect they'll need to use `natSing', rather than `natVal', there |
2023-11-29 17:28:45 +0100 | <c_wraith> | I don't think it matters. That definition of generate requires recursive generation of NatVal constraints |
2023-11-29 17:29:04 +0100 | <c_wraith> | GHC makes that painful |
2023-11-29 17:29:33 +0100 | <ski> | (s/NatVal/KnownNat/) |
2023-11-29 17:29:34 +0100 | <ski> | yea |
2023-11-29 17:29:37 +0100 | <c_wraith> | err, yes |
2023-11-29 17:29:46 +0100 | harveypwca | (~harveypwc@2601:246:c280:7940:585a:99af:3e4c:209b) |
2023-11-29 17:30:15 +0100 | <c_wraith> | Amusingly, last time I looked through GHC typechecking plugins, I recall seeing one specifically intended for this purpose |
2023-11-29 17:30:32 +0100 | <ski> | it says |
2023-11-29 17:30:33 +0100 | bgamari_ | (~bgamari@64.223.175.94) |
2023-11-29 17:30:38 +0100 | phma_ | (phma@2001:5b0:210d:4b88:3e7a:d751:236f:1da4) |
2023-11-29 17:30:40 +0100 | <ski> | class KnownNat (n :: Nat) where |
2023-11-29 17:30:44 +0100 | <ski> | GHC.TypeNats.natSing :: GHC.TypeNats.SNat n |
2023-11-29 17:30:48 +0100 | <ski> | but i get nothing for `:i SNat' |
2023-11-29 17:31:12 +0100 | <c_wraith> | are you on a GHC that uses base 4.19? |
2023-11-29 17:31:24 +0100 | <ski> | hm, this was 8.8.4 |
2023-11-29 17:31:37 +0100 | <c_wraith> | Oh, I guess 4.18 is sufficient |
2023-11-29 17:32:20 +0100 | <ski> | if it had something like `data SNat :: Nat -> * where ZeroS :: SNat 0; SuccS :: KnownNat n => SNat n -> SNat (1 + n)', then matching on the `SNat n' would help |
2023-11-29 17:32:20 +0100 | <c_wraith> | but 4.18 means GHC 9.6+ |
2023-11-29 17:32:33 +0100 | bgamari | (~bgamari@64.223.173.10) (Ping timeout: 256 seconds) |
2023-11-29 17:33:10 +0100 | phma | (~phma@host-67-44-208-32.hnremote.net) (Ping timeout: 256 seconds) |
2023-11-29 17:34:03 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 268 seconds) |
2023-11-29 17:35:39 +0100 | <c_wraith> | Hmm. This probably does get a lot easier if you use SNat, but you can probably get away with only doing that internally. |
2023-11-29 17:36:26 +0100 | mrvdb- | (~mrvdb@2001:19f0:5000:8582:5400:ff:fe07:3df5) (Quit: ZNC 1.8.2 - https://znc.in) |
2023-11-29 17:36:28 +0100 | <c_wraith> | Oh, I see. You can also use sameNat |
2023-11-29 17:36:57 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
2023-11-29 17:36:58 +0100 | <ski> | hm, right |
2023-11-29 17:37:17 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) |
2023-11-29 17:37:48 +0100 | <c_wraith> | But yes, this stuff is painful. there's a reason I see it called "hasochism" |
2023-11-29 17:38:59 +0100 | <danse-nr3> | well we were looking for ways to do the thing without the thing (dependent types), so no surprise if it results hacky |
2023-11-29 17:40:44 +0100 | mrvdb | (~mrvdb@185.92.221.186) |
2023-11-29 17:40:50 +0100 | <danse-nr3> | although the lack of `exists` seems to have marked some significant increase in complexity... but maybe that is just my impression because i lost track of the problem afterwards |
2023-11-29 17:41:02 +0100 | mikess | (~sam@user/mikess) |
2023-11-29 17:43:21 +0100 | <c_wraith> | It does add complexity, but it's purely mechanical complexity |
2023-11-29 17:44:00 +0100 | <c_wraith> | the workarounds are known and don't require creativity |
2023-11-29 17:45:11 +0100 | phma_ | phma |
2023-11-29 18:01:47 +0100 | mmhat | (~mmh@p200300f1c71a22b9ee086bfffe095315.dip0.t-ipconnect.de) |
2023-11-29 18:02:27 +0100 | ivelten | (~ivelten@2804:82b8:8:ee01:fda6:516:611b:3176) (Quit: Textual IRC Client: www.textualapp.com) |
2023-11-29 18:04:26 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2023-11-29 18:07:00 +0100 | <c_wraith> | actually, it's worse than I thought. I don't see any way at all to relate n-1 as a value to n-1 as a type, no matter what you know about n as a type |
2023-11-29 18:08:38 +0100 | Alleria | (~JohnGalt@user/alleria) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2023-11-29 18:10:51 +0100 | <c_wraith> | So, like.. you're just going to have to unsafeCoerce, I guess! |
2023-11-29 18:11:58 +0100 | danse-nr3 | (~danse@151.35.247.219) (Ping timeout: 268 seconds) |
2023-11-29 18:12:45 +0100 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2023-11-29 18:18:32 +0100 | danza | (~francesco@151.35.247.219) |
2023-11-29 18:20:02 +0100 | Alleria | (~JohnGalt@user/alleria) |
2023-11-29 18:20:40 +0100 | Alleria | (~JohnGalt@user/alleria) (Client Quit) |
2023-11-29 18:21:20 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2023-11-29 18:21:41 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2023-11-29 18:21:57 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
2023-11-29 18:25:39 +0100 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1)) |
2023-11-29 18:28:08 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 256 seconds) |
2023-11-29 18:28:18 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) |
2023-11-29 18:34:40 +0100 | sawilagar | (~sawilagar@user/sawilagar) (Quit: Leaving) |
2023-11-29 18:36:38 +0100 | Alleria | (~JohnGalt@user/alleria) |
2023-11-29 18:38:20 +0100 | dhil | (~dhil@2001:8e0:2014:3100:8e3a:5299:914c:abf4) |
2023-11-29 18:38:42 +0100 | CiaoSen | (~Jura@2a05:5800:28a:6100:2a3a:4dff:fe84:dbd5) (Ping timeout: 260 seconds) |
2023-11-29 18:39:58 +0100 | cstml | (~cstml@user/cstml) |
2023-11-29 18:40:09 +0100 | sawilagar | (~sawilagar@user/sawilagar) |
2023-11-29 18:41:28 +0100 | Alleria | (~JohnGalt@user/alleria) (Ping timeout: 255 seconds) |
2023-11-29 18:41:28 +0100 | komikat | (~akshitkr@218.185.248.66) (Ping timeout: 255 seconds) |
2023-11-29 18:41:57 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex) |
2023-11-29 18:46:55 +0100 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2023-11-29 18:49:58 +0100 | alp_ | (~alp@2001:861:e3d6:8f80:882f:ff0d:da80:ca07) (Ping timeout: 246 seconds) |
2023-11-29 18:53:30 +0100 | chele | (~chele@user/chele) (Remote host closed the connection) |
2023-11-29 18:54:42 +0100 | shapr | (~user@2600:1700:c640:3100:a007:14d5:426f:261d) (Remote host closed the connection) |
2023-11-29 18:54:56 +0100 | shapr | (~user@2600:1700:c640:3100:f067:6b60:6d79:cd2d) |
2023-11-29 18:55:46 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:5836:1305:ce95:7f7f) (Remote host closed the connection) |
2023-11-29 18:56:01 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f8e2:da48:b27b:3920) |
2023-11-29 19:02:34 +0100 | <c_wraith> | ski: (or anyone else) https://paste.tomsmeding.com/I2hpWpM9 Am I wrong? Can this be done without unsafeCoerce or a type checker plugin? |
2023-11-29 19:03:55 +0100 | danza | (~francesco@151.35.247.219) (Read error: Connection reset by peer) |
2023-11-29 19:04:23 +0100 | qqq | (~qqq@92.43.167.61) |
2023-11-29 19:04:44 +0100 | <c_wraith> | well, ok. it can also be done by changing to an inductive Nat type instead of using a type literal. |
2023-11-29 19:07:00 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2023-11-29 19:07:19 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2023-11-29 19:07:46 +0100 | <dolio> | Yeah, I think the reason you can't do it is because the instances for KnownNat aren't inductive. |
2023-11-29 19:08:49 +0100 | <ski> | `KnownNat n => KnownNat (1 + n)' wouldn't help, would it ? |
2023-11-29 19:09:31 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 245 seconds) |
2023-11-29 19:09:32 +0100 | <dolio> | It would if the continuation had a KnownNat constraint. |
2023-11-29 19:10:06 +0100 | <c_wraith> | which is a fine thing to add. |
2023-11-29 19:11:13 +0100 | <c_wraith> | I'm honestly surprised the SNat stuff didn't have tools to do that |
2023-11-29 19:11:39 +0100 | <c_wraith> | it seems like the right place to put them |
2023-11-29 19:11:40 +0100 | <ski> | how would it help ? |
2023-11-29 19:12:20 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-11-29 19:12:30 +0100 | <c_wraith> | something like SNatPlus :: SNat -> SNat -> SNat |
2023-11-29 19:12:53 +0100 | harveypwca | (~harveypwc@2601:246:c280:7940:585a:99af:3e4c:209b) (Quit: Leaving) |
2023-11-29 19:13:01 +0100 | <dolio> | Because then it would instantiate to `forall n. KnownNat n => List (1 + n) a -> x`, which is used to build the continuation for the recursive call. |
2023-11-29 19:13:16 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f8e2:da48:b27b:3920) (Remote host closed the connection) |
2023-11-29 19:13:37 +0100 | <dolio> | Assuming the cons has length 1 + n. |
2023-11-29 19:14:04 +0100 | <c_wraith> | err. SNat m -> SNat n -> SNat (m + n) |
2023-11-29 19:14:48 +0100 | <c_wraith> | the partial functions would need a more clever type, but it could be done |
2023-11-29 19:15:32 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f8e2:da48:b27b:3920) |
2023-11-29 19:16:12 +0100 | <ski> | replicateExists k e (f :: forall n. KnownNat n => List n a -> o) = replicateExists (k - 1) e ((\ls -> f (e :< ls)) :: forall m. KnownNat m => List m a -> o) |
2023-11-29 19:16:21 +0100 | <dolio> | Oh, but there's another problem. There's no connection between the supplied Integer argument and the type level natural. |
2023-11-29 19:16:41 +0100 | <ski> | right, so `n = m + 1', and given `KnownNat m' we deduce `KnownNat n' |
2023-11-29 19:17:24 +0100 | <c_wraith> | dolio: that doesn't actually matter if the KnownNat constraint is provided to the continuation, thanks to sameNat |
2023-11-29 19:17:46 +0100 | <ski> | dolio : yea, that's what started this conversation branch, more or less |
2023-11-29 19:18:01 +0100 | <dolio> | It matters in replicate, because e.g. `id` isn't a valid continuation. |
2023-11-29 19:18:08 +0100 | <dolio> | It's a skolem escape. |
2023-11-29 19:18:25 +0100 | <c_wraith> | you have to use sameNat and match it Just Refl |
2023-11-29 19:18:27 +0100 | <ski> | right, you must use `n' locally |
2023-11-29 19:18:48 +0100 | <c_wraith> | then you have proven the types are the same, and the skolem is safely trapped |
2023-11-29 19:18:59 +0100 | <dolio> | You have to structure it differently, even if you have the inductive instances. |
2023-11-29 19:19:36 +0100 | danza | (~francesco@151.57.236.24) |
2023-11-29 19:19:52 +0100 | <c_wraith> | I mean, you're correct that you can't use id |
2023-11-29 19:20:12 +0100 | <ski> | (you could still use `WrapList :: KnownNat n => List n a -> SomeList a' as continuation) |
2023-11-29 19:20:14 +0100 | <c_wraith> | but the tools you need are already there so long as the KnownNat constraint is there |
2023-11-29 19:22:52 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 255 seconds) |
2023-11-29 19:23:03 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) |
2023-11-29 19:31:22 +0100 | cstml19 | (~cstml@user/cstml) |
2023-11-29 19:32:40 +0100 | cstml19 | (~cstml@user/cstml) (Client Quit) |
2023-11-29 19:33:28 +0100 | waleee | (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) |
2023-11-29 19:35:20 +0100 | notzmv | (~zmv@user/notzmv) |
2023-11-29 19:39:21 +0100 | <c_wraith> | yeah... the missing part here is that the singletons in GHC.TypeLits are incomplete. You should have operations in the singletons that mirror the type-level operations provided. |
2023-11-29 19:39:23 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-11-29 19:40:30 +0100 | <c_wraith> | but those are missing. as a result, the tools aren't available to reflect between types and values after applying type-level operations |
2023-11-29 19:43:39 +0100 | Umeaboy | (~Umeaboy@94-255-145-133.cust.bredband2.com) (Quit: Leaving) |
2023-11-29 19:46:20 +0100 | AWizzArd | (~code@user/awizzard) |
2023-11-29 19:47:09 +0100 | thegeekinside | (~thegeekin@189.180.53.210) (Remote host closed the connection) |
2023-11-29 19:47:48 +0100 | <AWizzArd> | When using hspec and hedgehog in the same project (using Cabal 3+), hspec seems to be consuming all tests. I am running hedgehog tests in main but they won't start. Does this ring a bell for anyone? |
2023-11-29 19:49:29 +0100 | danza | (~francesco@151.57.236.24) (Ping timeout: 252 seconds) |
2023-11-29 19:49:52 +0100 | <exarkun> | "Consuming"? |
2023-11-29 19:49:54 +0100 | <c_wraith> | .... wait, maybe the tools are there. I need to come back to this later with a fresh pov |
2023-11-29 19:51:45 +0100 | <c_wraith> | whoops. forget later, I got there now. the tools are indeed absent. |
2023-11-29 19:52:27 +0100 | <AWizzArd> | exarkun: my main is essentially: main = do runHspecTess runHedgehogTests (with correct indentation of course). The HH tests never run. Even if they put them before the hspec tests. This is ignored. |
2023-11-29 19:52:37 +0100 | <AWizzArd> | I can even remove runHspecTests and yet still only they run. Only if I put HH tests before and configure one of the hspec tests to fail the HH tests run. |
2023-11-29 19:53:43 +0100 | <AWizzArd> | It seems to me a bit like some Cabal magic possibly. It discovers the hspec tests and runs them and then quits. |
2023-11-29 19:54:32 +0100 | <geekosaur> | sounds more like something is not being rebuilt, especially if you can remove them and they stilll run |
2023-11-29 19:54:55 +0100 | jorik808 | (~jorik808@d51A48920.access.telenet.be) |
2023-11-29 19:55:49 +0100 | euleritian | (~euleritia@dynamic-046-114-032-227.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2023-11-29 19:56:09 +0100 | euleritian | (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
2023-11-29 19:57:10 +0100 | <AWizzArd> | geekosaur: yes, I deleted dist/ and new-dist/ but this didn’t change the outcome. Actually I had only one single hspec test. Now I have two. If I outcomment the hspec tests I still get this result: 1 of 1 test suites (1 of 1 test cases) passed. — it should say 2 tests passed |
2023-11-29 20:00:35 +0100 | marinelli | (~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli) |
2023-11-29 20:03:27 +0100 | <AWizzArd> | I now found a log file that has been created. And the hedegehog tests do run, but they seem to log to that file and not to the screen! |
2023-11-29 20:03:37 +0100 | dcoutts | (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
2023-11-29 20:04:48 +0100 | <geekosaur> | are you using `cabal test`? if so then you want `--test-show-details=streaming` |
2023-11-29 20:06:16 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2023-11-29 20:07:50 +0100 | cstml | (~cstml@user/cstml) (Ping timeout: 260 seconds) |
2023-11-29 20:08:09 +0100 | <AWizzArd> | geekosaur: aah, this displays the result on the screen! |
2023-11-29 20:08:12 +0100 | dcoutts | (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 252 seconds) |
2023-11-29 20:08:18 +0100 | cstml | (~cstml@user/cstml) |
2023-11-29 20:08:20 +0100 | <AWizzArd> | geekosaur: Excellent, thx! |
2023-11-29 20:10:18 +0100 | <AWizzArd> | Is there also some kind of file watching capability built-in? Or would I be best advised to use some Linux tools for this? |
2023-11-29 20:10:35 +0100 | <geekosaur> | I don't think there is |
2023-11-29 20:10:43 +0100 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2023-11-29 20:11:03 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2023-11-29 20:12:34 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f8e2:da48:b27b:3920) (Remote host closed the connection) |
2023-11-29 20:13:44 +0100 | <haskellbridge> | 06<sm> can recommend watchexec |
2023-11-29 20:18:48 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) |
2023-11-29 20:20:10 +0100 | qhong | (~qhong@rescomp-21-400677.stanford.edu) |
2023-11-29 20:20:22 +0100 | <AWizzArd> | haskellbridge: will have a look, thx |
2023-11-29 20:26:23 +0100 | <ski> | s/haskellbridge/sm/ |
2023-11-29 20:27:58 +0100 | ski | idly notes haskellbridge adds ZWSP, not some diacritic |
2023-11-29 20:28:24 +0100 | Feuermagier | (~Feuermagi@user/feuermagier) (Remote host closed the connection) |
2023-11-29 20:35:31 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f8e2:da48:b27b:3920) |
2023-11-29 20:36:40 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 255 seconds) |
2023-11-29 20:42:29 +0100 | cstml | (~cstml@user/cstml) (Quit: WeeChat 3.7.1) |
2023-11-29 20:45:01 +0100 | alp_ | (~alp@2001:861:e3d6:8f80:4342:868e:5cc7:17fd) |
2023-11-29 20:53:36 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f8e2:da48:b27b:3920) (Remote host closed the connection) |
2023-11-29 20:55:53 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2023-11-29 20:58:42 +0100 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2023-11-29 20:59:03 +0100 | <tomsmeding> | ski: I saw some irc user elsewhere claim that that was "conventional" as a friently, i.e. non-notifying, mention |
2023-11-29 20:59:38 +0100 | <tomsmeding> | not that I know how to type that character without going to https://tomsmeding.com/unicode |
2023-11-29 21:00:10 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 21:00:22 +0100 | Pickchea | (~private@user/pickchea) |
2023-11-29 21:01:35 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 21:01:45 +0100 | dcoutts | (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) |
2023-11-29 21:04:48 +0100 | <ski> | tomsmeding : yea. i'm just wondering to what extent it is an issue (compared to the complication it ensues) |
2023-11-29 21:05:30 +0100 | <tomsmeding> | as in, that clients render it incorrectly or something? |
2023-11-29 21:05:45 +0100 | <ski> | e.g. there is no nick "sm" in this channel, only on the other side of the bridge, so in this particular case that argument about non-notifying doesn't apply |
2023-11-29 21:06:08 +0100 | <ski> | (and it does mean that if i search backlog for `<sm>', i won't find those abridged messages) |
2023-11-29 21:07:02 +0100 | <ski> | tomsmeding : no, as in there's no issue with you getting noticed on the other side of the bridge, when saying something, if you're not actually also on the other side of the bridge (with the same nick) |
2023-11-29 21:07:21 +0100 | <tomsmeding> | ski: ah, fair point |
2023-11-29 21:08:07 +0100 | <tomsmeding> | though I believe there are indeed a few people who have a client on both sides of the bridge, at least occasionally |
2023-11-29 21:08:19 +0100 | <ski> | (the ZWSP also renders as an extra unicode modification of the previous glyph, here .. making it looked like a dotted box above the character, which in turn makes it hard to make out the first character, so that i have to copy, and then delete the ZWSP in order to see which nick it's supposed to be) |
2023-11-29 21:08:57 +0100 | <ski> | yes. but the bridge could, conceivably, only add ZWSP for messages from such nicks, and not to messages from all nicks |
2023-11-29 21:08:59 +0100 | <tomsmeding> | ski: that sounds like a renderer problem :D https://ircbrowse.tomsmeding.com/browse/lchaskell?id=1153514#trid1153514 |
2023-11-29 21:09:03 +0100 | <tomsmeding> | true |
2023-11-29 21:09:06 +0100 | <ski> | yes |
2023-11-29 21:10:59 +0100 | <ski> | tomsmeding : oh .. for some reason the log doesn't seem to handle the color code gracefully |
2023-11-29 21:11:09 +0100 | <tomsmeding> | yeah I saw that too |
2023-11-29 21:11:13 +0100 | <tomsmeding> | I'm less concerned about that |
2023-11-29 21:11:32 +0100 | <tomsmeding> | I suspect it's just not interpreting the color code at all and just piping it to the browser, which shrugs and gives you this |
2023-11-29 21:11:38 +0100 | <ski> | (if it just displayed the escape as `C', rather than silently ignoring it, that would be fine) |
2023-11-29 21:12:08 +0100 | <tomsmeding> | yeah the escape byte is there literally in the html |
2023-11-29 21:12:26 +0100 | <tomsmeding> | a \x03 byte |
2023-11-29 21:12:40 +0100 | <EvanR> | > '\3' |
2023-11-29 21:12:41 +0100 | <lambdabot> | '\ETX' |
2023-11-29 21:12:47 +0100 | <tomsmeding> | end-of-text |
2023-11-29 21:12:52 +0100 | <tomsmeding> | ¯\_(ツ)_/¯ |
2023-11-29 21:13:00 +0100 | <ski> | (or `␃', yes) |
2023-11-29 21:13:01 +0100 | <EvanR> | never seen that one before xD |
2023-11-29 21:13:15 +0100 | <tomsmeding> | 03yes you have |
2023-11-29 21:13:19 +0100 | <EvanR> | wtf |
2023-11-29 21:13:46 +0100 | <tomsmeding> | https://modern.ircdocs.horse/formatting.html#color |
2023-11-29 21:13:56 +0100 | ski | 11idly 07glances 13around |
2023-11-29 21:14:18 +0100 | <tomsmeding> | EvanR: this is how haskellbridge does the coloured nicks :p |
2023-11-29 21:15:03 +0100 | <EvanR> | when did all this happen |
2023-11-29 21:15:09 +0100 | <ski> | since mIRC days |
2023-11-29 21:15:21 +0100 | <EvanR> | I'm still recovering from ESC m |
2023-11-29 21:15:21 +0100 | <ski> | it's not anything new |
2023-11-29 21:15:38 +0100 | <ski> | (some of the other markup are new, though) |
2023-11-29 21:15:46 +0100 | <tomsmeding> | bold |
2023-11-29 21:15:59 +0100 | <EvanR> | how are you entering that |
2023-11-29 21:16:03 +0100 | <tomsmeding> | italics are not always supported in terminals |
2023-11-29 21:16:39 +0100 | <tomsmeding> | weechat has a hotkey, 'ctrl-c, c' produces a \x03 byte; but this depends on your client |
2023-11-29 21:16:56 +0100 | <tomsmeding> | so to get bold I type ctrl-c, c, b, o, l, d, ctrl-c, o |
2023-11-29 21:17:12 +0100 | <tomsmeding> | in irssi it's ctrl-c and ctrl-o iirc |
2023-11-29 21:17:20 +0100 | <tomsmeding> | from a previous conversation about this :D |
2023-11-29 21:17:48 +0100 | <[exa]> | oh irc colors are back, 1990 vibes |
2023-11-29 21:17:48 +0100 | <EvanR> | bold |
2023-11-29 21:18:09 +0100 | <EvanR> | I'm left out in the bold |
2023-11-29 21:18:29 +0100 | trev | (~trev@user/trev) (Quit: trev) |
2023-11-29 21:18:40 +0100 | <tomsmeding> | (don't see any control characters, if that was your intention) |
2023-11-29 21:18:46 +0100 | <ski> | (i believe BboldB,_underlinedB,VinverseV are quite old, while ]italicized],FblinkingF,^strukthrough^,QmonospacedQ are newer) |
2023-11-29 21:19:00 +0100 | <tomsmeding> | how much effort took it to enter that |
2023-11-29 21:19:04 +0100 | <ski> | yes |
2023-11-29 21:19:09 +0100 | <tomsmeding> | right |
2023-11-29 21:20:27 +0100 | <ski> | <https://modern.ircdocs.horse/formatting.html#characters>,<https://www.mirc.com/help/html/control_codes.html>,<https://www.mirc.com/colors.html>,<https://web.archive.org/web/20120211151852/http://ircle.com:80/colorfaq.shtml> |
2023-11-29 21:20:40 +0100 | <dminuoso_> | Im getting an error `[...] This makes type inference for inner bindings fragile; either use MonoLocalBinds, or simplify it using the instance` |
2023-11-29 21:20:43 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) |
2023-11-29 21:20:47 +0100 | <ski> | (note that the last link talks about a different (incompatible) color coding scheme) |
2023-11-29 21:21:10 +0100 | <dminuoso_> | Before it just says "The constraint C matches an instance declaration D" |
2023-11-29 21:21:12 +0100 | lbseale | (~quassel@user/ep1ctetus) |
2023-11-29 21:21:29 +0100 | <dminuoso_> | This is quite the terrible diagnostic, it really doesnt tell me whats going on or why its bad |
2023-11-29 21:21:34 +0100 | <tomsmeding> | yeah, I knew which diagnostic that message fragment was from :p |
2023-11-29 21:21:37 +0100 | <tomsmeding> | why it's bad I also don't know |
2023-11-29 21:22:03 +0100 | <geekosaur> | I think it's described in the users guide under MonoLocalBinds |
2023-11-29 21:22:30 +0100 | <ski> | tomsmeding : fwiw, most of the effort there was to not only turn on and off the markup formatting, but also to explicitly display which control codes were needed to do that |
2023-11-29 21:22:47 +0100 | <tomsmeding> | ski: I recognised that, hence my response :p |
2023-11-29 21:24:04 +0100 | ski | idly wonders what `C' and `D' would be, here |
2023-11-29 21:24:23 +0100 | <dminuoso_> | • The constraint ‘GenericMode AsApi’ matches instance GenericMode AsApi -- Defined in ‘Servant.API.Generic’ |
2023-11-29 21:24:29 +0100 | <geekosaur> | https://downloads.haskell.org/ghc/9.8.1/docs/users_guide/exts/let_generalisation.html |
2023-11-29 21:24:39 +0100 | <tomsmeding> | ski: isn't C colour? |
2023-11-29 21:24:56 +0100 | <ski> | yes (but i was speaking of dminuoso_'s issue there) |
2023-11-29 21:25:01 +0100 | <tomsmeding> | ah |
2023-11-29 21:25:36 +0100 | nate4 | (~nate@c-98-45-158-125.hsd1.ca.comcast.net) (Ping timeout: 268 seconds) |
2023-11-29 21:25:55 +0100 | eggplantade | (~Eggplanta@2600:1700:38c5:d800:f8e2:da48:b27b:3920) |
2023-11-29 21:26:12 +0100 | <dminuoso_> | geekosaur: Yeah even with that user guide, I cant figure out whats going on here. |
2023-11-29 21:26:46 +0100 | <dminuoso_> | It feels like "fragility" is something you might find in some exotic paper on the subject. |
2023-11-29 21:27:06 +0100 | <dminuoso_> | I mean yes. the constraint "GenericMode AsApi" matches "instance GenericMode AsApi". |
2023-11-29 21:27:21 +0100 | <dminuoso_> | And "Functor Maybe" matches "instance Functor Maybe" |
2023-11-29 21:27:45 +0100 | <dminuoso_> | The way GHC presents this error, it suggests that constraints matching instances is a deep problem. |
2023-11-29 21:27:51 +0100 | <dminuoso_> | As if this should never occur. |
2023-11-29 21:27:52 +0100 | <ski> | the matrix bridge (in the earlier mode, before the change), would use monospace, i assume for fragments that were entered in some kind of quotes, but then wouldn't use it again to turn it off, but rather just use "turn off all color and markup" (being `O') .. with the result that i could see where the monospaced part started (since my client displayed it as `Q', not understanding that escape code), |
2023-11-29 21:27:58 +0100 | <ski> | while, otoh, not being able to see where it ended (since `O' is recognized) |
2023-11-29 21:28:21 +0100 | <tomsmeding> | I think it's mostly not about trivial constraints like 'Functor Maybe', but more about things like 'Semigroup (Maybe a)', which is apparently (?) more fragile (?) than 'Semigroup a' |
2023-11-29 21:28:45 +0100 | <ski> | `FlexibleConstraints' ? |
2023-11-29 21:28:54 +0100 | <geekosaur> | is either a GADT or a type family involved? I get the impression those are the fragile ones |
2023-11-29 21:29:05 +0100 | <ski> | (er, s/Constraints/Contexts/) |
2023-11-29 21:29:38 +0100 | <dminuoso_> | ski: Its on, yes. My main issue here is just that GHC isnt really communicating whats going on. |
2023-11-29 21:29:51 +0100 | <ski> | yes |
2023-11-29 21:30:07 +0100 | <dminuoso_> | It feels like the condition "constraint C matches instance D" is problematic under a very specific inference... thing. |
2023-11-29 21:30:08 +0100 | <ski> | would be interesting to see a, perhaps minimal, example of this in action |
2023-11-29 21:30:13 +0100 | <tomsmeding> | well, it's communicating that you shouldn't do this, but not why |
2023-11-29 21:30:16 +0100 | <dminuoso_> | But GHC is completely silent on what the "very specific inference thing is" |
2023-11-29 21:30:22 +0100 | <tomsmeding> | yep |
2023-11-29 21:30:35 +0100 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
2023-11-29 21:30:50 +0100 | <dminuoso_> | So Im carrying away "constraints should not match instances", which of course is in direct conflict with "No instance found" errors. |
2023-11-29 21:31:01 +0100 | <dminuoso_> | GHC has a way of driving me crazy sometimes. |
2023-11-29 21:31:11 +0100 | <tomsmeding> | constraints should not be _manually simplifiable using instances_ |
2023-11-29 21:31:14 +0100 | <tomsmeding> | that's what the error is saying |
2023-11-29 21:31:18 +0100 | <tomsmeding> | again, why, I don't know |
2023-11-29 21:32:47 +0100 | <dminuoso_> | Okay as usual, a look inside GHC seems to help |
2023-11-29 21:32:49 +0100 | <dminuoso_> | Note [Simplifiable given constraints] |
2023-11-29 21:33:21 +0100 | <dminuoso_> | Note [Instance and Given overlap] too |
2023-11-29 21:34:15 +0100 | <dminuoso_> | heh! that last note is referenced, but seems to have been lost/deleted. |
2023-11-29 21:34:41 +0100 | <dminuoso_> | Some modules point to GHC.Tc.Solver.Dict, others point to TcInteract |
2023-11-29 21:35:18 +0100 | <dminuoso_> | Ohh! No, it just uses {--} style comments, strange. |
2023-11-29 21:56:45 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 256 seconds) |
2023-11-29 21:57:55 +0100 | shapr | (~user@2600:1700:c640:3100:f067:6b60:6d79:cd2d) (Remote host closed the connection) |
2023-11-29 21:58:08 +0100 | shapr | (~user@2600:1700:c640:3100:cd00:5363:89ce:baba) |
2023-11-29 22:13:24 +0100 | mmhat | (~mmh@p200300f1c71a22b9ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
2023-11-29 22:13:46 +0100 | mmhat | (~mmh@p200300f1c71a22daee086bfffe095315.dip0.t-ipconnect.de) |
2023-11-29 22:17:43 +0100 | _ht | (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht) |
2023-11-29 22:28:47 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2023-11-29 22:38:01 +0100 | terrorjack | (~terrorjac@2a01:4f8:c17:87f8::) (Quit: The Lounge - https://thelounge.chat) |
2023-11-29 22:40:51 +0100 | terrorjack | (~terrorjac@2a01:4f8:c17:87f8::) |
2023-11-29 22:43:36 +0100 | idgaen | (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.1.1) |
2023-11-29 22:48:08 +0100 | dhil | (~dhil@2001:8e0:2014:3100:8e3a:5299:914c:abf4) (Ping timeout: 252 seconds) |
2023-11-29 22:48:08 +0100 | bratwurst | (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) |
2023-11-29 22:53:12 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) |
2023-11-29 22:56:38 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |
2023-11-29 22:57:02 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 252 seconds) |
2023-11-29 23:03:14 +0100 | bratwurst | (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) (Remote host closed the connection) |
2023-11-29 23:06:22 +0100 | chexum_ | (~quassel@gateway/tor-sasl/chexum) |
2023-11-29 23:07:27 +0100 | alp_ | (~alp@2001:861:e3d6:8f80:4342:868e:5cc7:17fd) (Ping timeout: 256 seconds) |
2023-11-29 23:08:00 +0100 | talismanick | (~user@2601:204:ef00:bb0::f34e) |
2023-11-29 23:08:07 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds) |
2023-11-29 23:13:15 +0100 | peterbecich | (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 256 seconds) |
2023-11-29 23:25:11 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 264 seconds) |
2023-11-29 23:30:05 +0100 | Pickchea | (~private@user/pickchea) (Quit: Leaving) |
2023-11-29 23:32:28 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2023-11-29 23:33:15 +0100 | misterfish | (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 268 seconds) |
2023-11-29 23:34:34 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2023-11-29 23:37:21 +0100 | terrorjack | (~terrorjac@2a01:4f8:c17:87f8::) (Quit: The Lounge - https://thelounge.chat) |
2023-11-29 23:37:42 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2023-11-29 23:38:11 +0100 | [_] | (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 260 seconds) |
2023-11-29 23:40:09 +0100 | terrorjack | (~terrorjac@2a01:4f8:c17:87f8::) |
2023-11-29 23:44:54 +0100 | mengu | (~mengu@c83-254-18-254.bredband.tele2.se) |
2023-11-29 23:48:46 +0100 | coot | (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot) |
2023-11-29 23:55:22 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) |
2023-11-29 23:56:04 +0100 | acidjnk | (~acidjnk@p200300d6e72b9352dcea2d781ea8e5a4.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
2023-11-29 23:56:55 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) (Read error: Connection reset by peer) |
2023-11-29 23:57:16 +0100 | JeremyB99 | (~JeremyB99@2600:1702:21b0:a500:6581:2a34:dec3:8883) |