Logs on 2020-11-16 (freenode/#haskell)
| 00:00:01 | × | pleia21 quits (~pleia2@92.223.89.101) () |
| 00:00:59 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 00:01:22 | × | moet quits (~moet@mobile-166-137-178-183.mycingular.net) (Ping timeout: 260 seconds) |
| 00:02:56 | → | justsomeguy joins (~justsomeg@216.186.218.241) |
| 00:02:56 | × | justsomeguy quits (~justsomeg@216.186.218.241) (Changing host) |
| 00:02:56 | → | justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311) |
| 00:03:35 | × | atk quits (~Arch-TK@ircpuzzles/staff/Arch-TK) (Quit: Well this is unexpected.) |
| 00:03:44 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 00:04:28 | → | atk joins (~Arch-TK@ircpuzzles/staff/Arch-TK) |
| 00:10:03 | ← | bangtree parts (~user@50-102-199-84.ekht.in.frontiernet.net) ("ERC (IRC client for Emacs 28.0.50)") |
| 00:11:17 | × | kritzefitz quits (~kritzefit@212.86.56.80) (Quit: Leaving) |
| 00:13:40 | × | andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection) |
| 00:14:58 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds) |
| 00:15:59 | × | christo quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 00:16:04 | → | wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
| 00:16:17 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 00:16:43 | → | andreas303 joins (~andreas@gateway/tor-sasl/andreas303) |
| 00:18:00 | × | Chi1thangoo quits (~Chi1thang@87.112.60.168) (Ping timeout: 256 seconds) |
| 00:19:33 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 00:20:13 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) |
| 00:21:28 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 00:22:41 | × | electricityZZZZ quits (~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net) (Quit: Leaving) |
| 00:22:53 | → | christo joins (~chris@81.96.113.213) |
| 00:24:23 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) |
| 00:24:29 | → | nbloomf joins (~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) |
| 00:25:36 | → | nineonine joins (~textual@S01061cabc0b095f3.vf.shawcable.net) |
| 00:26:23 | × | Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
| 00:27:47 | × | Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Ping timeout: 265 seconds) |
| 00:29:03 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 260 seconds) |
| 00:29:33 | × | hnOsmium0001 quits (uid453710@gateway/web/irccloud.com/x-eerkvmaqmqbakgpb) (Quit: Connection closed for inactivity) |
| 00:30:39 | → | Varis joins (~Tadas@unaffiliated/varis) |
| 00:31:41 | → | hekkaidekapus_ joins (~tchouri@gateway/tor-sasl/hekkaidekapus) |
| 00:34:43 | × | hekkaidekapus quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds) |
| 00:38:42 | → | plutoniix joins (~q@ppp-223-24-167-34.revip6.asianet.co.th) |
| 00:38:51 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 00:39:10 | × | plutoniix quits (~q@ppp-223-24-167-34.revip6.asianet.co.th) (Read error: Connection reset by peer) |
| 00:40:29 | → | plutoniix joins (~q@175.176.222.7) |
| 00:43:22 | <boom> | I want to calculate (λx.λy.x z y)[x y/z] now. What does x y/z mean ? |
| 00:43:36 | <boom> | [x y/z] |
| 00:48:35 | <monochrom> | This depends on authors. Many authors write that to mean "replace z by (x y)". |
| 00:49:02 | <monochrom> | The trouble is the other authors write [z/x y] for that. |
| 00:49:51 | <MarcelineVQ> | oh so it's like, ommiting the := you'd see in places like the wikipedia lambda calculus article |
| 00:49:55 | → | conal joins (~conal@64.71.133.70) |
| 00:49:55 | → | klixto joins (~klixto@130.220.8.140) |
| 00:50:07 | <monochrom> | Metaly, I cannot believe that the text you're reading this from didn't laid out this. |
| 00:50:44 | <monochrom> | I very much prefer [var := expr], yes. It is much much more guessable. |
| 00:52:13 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 256 seconds) |
| 00:52:31 | <monochrom> | My thesis supervisor recognizes that this is formalism going overboard, so he simply writes, e.g., "(λx. x+1) 5 = (substitute 5 for x in x+1)" |
| 00:52:35 | <boom> | Somewhere in my notes its written x[u/x] = u , so i guess you replace x by u |
| 00:53:34 | <boom> | so yeah replace z by (x y) |
| 00:55:26 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 00:56:35 | <monochrom> | MarcelineVQ: A bit of addendum. Omitting := but putting back / in its place. And write in the other order. |
| 00:57:01 | <MarcelineVQ> | well =: looks silly |
| 00:57:08 | <boom> | if i look at λx.λy.x z y the only free variable is z |
| 00:57:50 | <boom> | for some reason the x y in [x y/ z] are free ? |
| 00:57:53 | × | m0rphism quits (~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) (Ping timeout: 256 seconds) |
| 00:58:40 | <boom> | I don't understand why my prof meant |
| 00:58:54 | <monochrom> | Ah, you may have to worry about variable capture, and pretend you're doing instead (λx1.λy1.x1 z y1)[x y/z] |
| 00:58:58 | → | DataComp_ joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) |
| 00:59:07 | × | DataComputist quits (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 260 seconds) |
| 00:59:19 | <monochrom> | Such is the problem with named variables. >:) |
| 00:59:27 | <boom> | yes there is somehting like that |
| 01:00:27 | × | conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
| 01:01:42 | × | lucasb quits (uid333435@gateway/web/irccloud.com/x-vbpjdjtpfxqmyplf) (Quit: Connection closed for inactivity) |
| 01:02:15 | × | gentauro quits (~gentauro@unaffiliated/gentauro) (Read error: Connection reset by peer) |
| 01:02:34 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Ping timeout: 246 seconds) |
| 01:03:09 | → | gentauro joins (~gentauro@unaffiliated/gentauro) |
| 01:06:21 | × | Guest30216 quits (~mengu@84.39.117.57) () |
| 01:09:19 | × | Ariakenom quits (~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se) (Quit: Leaving) |
| 01:10:22 | × | vicfred quits (~vicfred@unaffiliated/vicfred) (Quit: Leaving) |
| 01:11:01 | → | keep_learning joins (~keep_lear@43.231.26.152) |
| 01:11:06 | → | Sgeo_ joins (~Sgeo@ool-18b982ad.dyn.optonline.net) |
| 01:11:32 | × | christo quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 01:12:01 | → | moet joins (~moet@mobile-166-137-178-183.mycingular.net) |
| 01:12:17 | × | keep_learning quits (~keep_lear@43.231.26.152) (Client Quit) |
| 01:12:41 | → | keep_learning joins (~keep_lear@43.231.26.152) |
| 01:13:36 | → | robert___ joins (uid452915@gateway/web/irccloud.com/x-auhharawilekbpts) |
| 01:14:37 | × | Sgeo quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 260 seconds) |
| 01:15:55 | → | christo joins (~chris@81.96.113.213) |
| 01:20:13 | × | solonarv quits (~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
| 01:25:51 | → | m0rphism joins (~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) |
| 01:27:34 | × | jedws quits (~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 01:28:10 | <justsomeguy> | In the paper "Tutorial Introduction to Lambda Calculus", I've seen [x/y] explained as "y is replaced by x for all its occurrences". |
| 01:28:24 | → | nielsonm joins (~nielsonm@84.39.117.57) |
| 01:29:12 | → | dmlloyd_laptop joins (~dmlloyd_l@193.56.252.12) |
| 01:29:27 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 01:31:05 | → | Lord_of_Life_ joins (~Lord@46.217.220.81) |
| 01:32:07 | → | conal joins (~conal@64.71.133.70) |
| 01:33:13 | × | Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 260 seconds) |
| 01:33:21 | <justsomeguy> | Sometimes it frustrating how much of math notations meaning isn't well agreed on, or up to individual interpretation. |
| 01:34:17 | <aoei> | that's weird, i thought humans invented a standard symbolic language for mathematics |
| 01:34:32 | → | hnOsmium0001 joins (uid453710@gateway/web/irccloud.com/x-wwiyyhwyadbuqprb) |
| 01:35:23 | <dolio> | [x/y] is pretty common. It's just not very good notation. |
| 01:35:45 | <dolio> | With just variables, it's not really very clear which thing is being substituted. |
| 01:38:15 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@ppp-223-24-93-183.revip6.asianet.co.th) |
| 01:38:40 | <dolio> | And it's notation that is isolated to things like lambda calculus, so it can't draw on familiarity with notation that's used in actual programming languages. |
| 01:39:06 | <aoei> | ah |
| 01:41:11 | <dolio> | One could argue that 'x := y' is no better if you haven't seen it, but a lot more people have seen things of that sort. |
| 01:43:36 | → | wroathe_ joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 01:43:52 | × | wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 246 seconds) |
| 01:46:54 | × | forell quits (~forell@unaffiliated/forell) (Read error: Connection reset by peer) |
| 01:47:13 | wroathe_ | is now known as wroathe |
| 01:47:48 | ← | robert___ parts (uid452915@gateway/web/irccloud.com/x-auhharawilekbpts) () |
| 01:48:16 | → | forell joins (~forell@unaffiliated/forell) |
| 01:48:55 | × | Lycurgus quits (~niemand@cpe-45-46-134-163.buffalo.res.rr.com) (Quit: Exeunt) |
| 01:52:22 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 265 seconds) |
| 01:57:07 | × | Amras quits (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds) |
| 02:02:29 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 02:03:03 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@ppp-223-24-93-183.revip6.asianet.co.th) (Ping timeout: 256 seconds) |
| 02:05:13 | × | christo quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 02:05:49 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 02:07:09 | → | christo joins (~chris@81.96.113.213) |
| 02:10:49 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
| 02:12:29 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) |
| 02:13:02 | × | m0rphism quits (~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) (Ping timeout: 256 seconds) |
| 02:13:14 | → | wei2912 joins (~wei2912@unaffiliated/wei2912) |
| 02:15:44 | <monochrom> | aoei: The greatest thing about standards is there are so many to choose from! |
| 02:16:32 | <dolio> | I mean, it's also not true that mathematical notation is standardized. |
| 02:17:05 | × | alp quits (~alp@88.126.45.36) (Ping timeout: 240 seconds) |
| 02:17:07 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 246 seconds) |
| 02:17:16 | <dolio> | Which is probably okay, because there's a lot of bad notation out there. |
| 02:17:21 | × | christo quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 02:17:46 | <koz_> | This might be slightly off-topic: how do web frameworks actually implement routing when URLs can have captures (meaning, stuff in the URL which isn't fixed, typically for use as an input into the handler)? |
| 02:18:05 | <koz_> | I'm interested in 'what algorithms/data structures are used to make this not-garbage', but I'm turning up nothing. |
| 02:24:05 | <dsal> | My mqttd SubTree type is similar, except it's always multimatch. The naive thing worked quite well. |
| 02:24:42 | <koz_> | dsal: Link? |
| 02:24:47 | × | mozzarella quits (~sam@unaffiliated/sam113101) (Remote host closed the connection) |
| 02:25:53 | → | mozzarella joins (~sam@unaffiliated/sam113101) |
| 02:25:56 | → | christo joins (~chris@81.96.113.213) |
| 02:26:53 | → | drbean joins (~drbean@TC210-63-209-39.static.apol.com.tw) |
| 02:27:31 | <dsal> | github.com/dustin/mqttd t SubTree |
| 02:27:41 | <dsal> | (sorry: driving) |
| 02:28:04 | <koz_> | Close enough - thanks! |
| 02:28:38 | → | star_cloud joins (~star_clou@ec2-34-217-37-165.us-west-2.compute.amazonaws.com) |
| 02:29:14 | <dsal> | + and # are wildcards and I have to return everything that matches. I don't care about the topics |
| 02:30:12 | × | benjamingr__ quits (uid23465@gateway/web/irccloud.com/x-dkapzzdvbagqfebh) (Quit: Connection closed for inactivity) |
| 02:30:43 | <koz_> | Hmm, now I need a Monoid of the form 'None | One a | TooMany'. |
| 02:31:00 | <dsal> | The point is that I thought I'd need something complicated, but the easy thing worked. Then all my hand-written instances could be derived. I sat down to write difficult code that night. |
| 02:31:10 | × | jduhamel quits (~textual@bras-base-toroon4664w-grc-14-184-145-124-162.dsl.bell.ca) (Ping timeout: 256 seconds) |
| 02:31:16 | <koz_> | dsal: This is exactly what I wanted to see - thanks! |
| 02:31:23 | <dsal> | This was very specific to my mqtt needs |
| 02:31:31 | <dsal> | Ok, I was hoping it'd help |
| 02:34:31 | <koz_> | :t maybe mempty |
| 02:34:32 | <lambdabot> | Monoid b => (a -> b) -> Maybe a -> b |
| 02:34:39 | <koz_> | :t foldMap |
| 02:34:40 | <lambdabot> | (Foldable t, Monoid m) => (a -> m) -> t a -> m |
| 02:34:43 | <koz_> | :D |
| 02:34:55 | <koz_> | % :t foldMap @Maybe |
| 02:34:55 | <yahb> | koz_: Monoid m => (a -> m) -> Maybe a -> m |
| 02:36:30 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
| 02:38:12 | → | toorevitimirp joins (~tooreviti@117.182.180.118) |
| 02:43:59 | × | xff0x quits (~fox@2001:1a81:5263:6400:a8c9:21df:16db:a24a) (Ping timeout: 272 seconds) |
| 02:45:36 | → | xff0x joins (~fox@2001:1a81:529e:a500:712c:5a16:6a4b:9d48) |
| 02:45:47 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 02:47:10 | × | xsperry quits (~as@unaffiliated/xsperry) (Remote host closed the connection) |
| 02:49:14 | × | acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 264 seconds) |
| 02:53:05 | → | guest1116 joins (~user@49.5.6.87) |
| 03:00:01 | × | nielsonm quits (~nielsonm@84.39.117.57) () |
| 03:02:01 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 264 seconds) |
| 03:02:27 | × | dmlloyd_laptop quits (~dmlloyd_l@193.56.252.12) (Remote host closed the connection) |
| 03:06:53 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) |
| 03:07:37 | → | jedws joins (~jedws@101.184.175.183) |
| 03:10:19 | → | kushNYC joins (4620050d@70.32.5.13) |
| 03:11:22 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 246 seconds) |
| 03:13:15 | × | urodna quits (~urodna@unaffiliated/urodna) (Quit: urodna) |
| 03:13:40 | <kushNYC> | Anyone else try to install cross-compiled ghc binaries in iSH for iOS? It’s a musl-based Alpine Linux environment. I get fairly far with installing the i386-musl build from https://github.com/redneb/ghc-alt-libc/releases - but ultimately come up against an error during install of ghc-pkg that eludes me... |
| 03:13:45 | <kushNYC> | ```Installing library in /opt/ghc/lib/ghc-8.10.2/ghc-8.10.2"/opt/ghc/lib/ghc-8.10.2/bin/ghc-pkg" --force --global-package-db "/opt/ghc/lib/ghc-8.10.2/package.conf.d" update rts/dist/package.conf.installghc-pkg: Couldn't open database /opt/ghc/lib/ghc-8.10.2/package.conf.d for modification: {handle: |
| 03:13:45 | <kushNYC> | /opt/ghc/lib/ghc-8.10.2/package.conf.d/package.cache.lock}: hLock: invalid argument (Invalid argument)make[1]: *** [ghc.mk:973: install_packages] Error 1make: *** [Makefile:51: install] Error 2``` |
| 03:14:40 | → | nbloomf joins (~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) |
| 03:14:40 | <kushNYC> | Tried messing with permissions and running ghc-pkg recache to no avail |
| 03:18:12 | × | s00pcan quits (~chris@107.181.165.217) (Ping timeout: 256 seconds) |
| 03:20:03 | → | s00pcan joins (~chris@075-133-056-178.res.spectrum.com) |
| 03:20:09 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 03:24:50 | → | acarrico joins (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
| 03:25:27 | × | christo quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 03:25:50 | × | kushNYC quits (4620050d@70.32.5.13) (Remote host closed the connection) |
| 03:26:25 | × | justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds) |
| 03:31:27 | × | Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
| 03:31:41 | → | Tario joins (~Tario@201.192.165.173) |
| 03:33:00 | → | pehjota1 joins (~pehjota@185.204.1.185) |
| 03:35:05 | × | nexii quits (~user@38-73-246-124.starry-inc.net) (Ping timeout: 240 seconds) |
| 03:35:11 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 03:36:02 | × | renzhi quits (~renzhi@2607:fa49:655f:e600::28da) (Ping timeout: 260 seconds) |
| 03:38:08 | → | falafel_ joins (~falafel@50.216.77.242) |
| 03:39:56 | → | nexii joins (~user@38-73-246-124.starry-inc.net) |
| 03:46:15 | → | justanotheruser joins (~justanoth@unaffiliated/justanotheruser) |
| 03:49:12 | × | conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
| 03:49:35 | × | Tario quits (~Tario@201.192.165.173) (Ping timeout: 256 seconds) |
| 03:50:28 | → | conal_ joins (~conal@64.71.133.70) |
| 03:52:19 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 03:52:43 | × | xerox_ quits (~xerox@unaffiliated/xerox) (Ping timeout: 265 seconds) |
| 03:54:41 | × | theDon quits (~td@94.134.91.56) (Ping timeout: 260 seconds) |
| 03:55:01 | × | nexii quits (~user@38-73-246-124.starry-inc.net) (Read error: Connection reset by peer) |
| 03:55:33 | × | lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Killed (orwell.freenode.net (Nickname regained by services))) |
| 03:55:39 | → | lagothrix joins (~lagothrix@unaffiliated/lagothrix) |
| 03:56:13 | → | xerox_ joins (~xerox@unaffiliated/xerox) |
| 03:56:31 | → | theDon joins (~td@94.134.91.49) |
| 03:57:02 | → | sammuel86 joins (~sammuel86@178.239.168.171) |
| 03:57:33 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 03:59:18 | → | aarvar joins (~foewfoiew@50.35.43.33) |
| 04:00:45 | × | xerox_ quits (~xerox@unaffiliated/xerox) (Ping timeout: 240 seconds) |
| 04:02:22 | → | Tario joins (~Tario@201.192.165.173) |
| 04:05:27 | × | justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds) |
| 04:08:02 | × | conal_ quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
| 04:08:35 | × | crdrost quits (~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) (Quit: This computer has gone to sleep) |
| 04:10:52 | × | servo quits (~servo@41.92.97.254) (Ping timeout: 246 seconds) |
| 04:11:53 | × | texasmynsted quits (~texasmyns@212.102.45.112) (Ping timeout: 260 seconds) |
| 04:12:14 | → | justanotheruser joins (~justanoth@unaffiliated/justanotheruser) |
| 04:16:17 | × | Tario quits (~Tario@201.192.165.173) (Ping timeout: 260 seconds) |
| 04:31:33 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 04:35:51 | → | tenniscp25 joins (~tenniscp2@134.196.209.118) |
| 04:36:12 | × | justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) () |
| 04:38:17 | × | tenniscp25 quits (~tenniscp2@134.196.209.118) (Client Quit) |
| 04:38:47 | → | Amras joins (~Amras@unaffiliated/amras0000) |
| 04:39:02 | × | guest1116 quits (~user@49.5.6.87) (Ping timeout: 260 seconds) |
| 04:44:37 | → | xerox_ joins (~xerox@unaffiliated/xerox) |
| 04:47:59 | × | berberman_ quits (~berberman@unaffiliated/berberman) (Quit: ZNC 1.7.5 - https://znc.in) |
| 04:48:24 | → | berberman joins (~berberman@unaffiliated/berberman) |
| 04:53:42 | × | nineonine quits (~textual@S01061cabc0b095f3.vf.shawcable.net) (Read error: Connection reset by peer) |
| 04:54:58 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) |
| 04:56:02 | × | elliott__ quits (~elliott@pool-108-51-141-12.washdc.fios.verizon.net) (Ping timeout: 265 seconds) |
| 04:57:33 | → | guest1116 joins (~user@49.5.6.87) |
| 04:58:13 | × | Tattletale quits (~Tattletal@unaffiliated/sundancertp) (Quit: rcirc on GNU Emacs 27.1) |
| 05:00:02 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 260 seconds) |
| 05:05:28 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
| 05:06:29 | → | vicfred joins (~vicfred@unaffiliated/vicfred) |
| 05:06:32 | × | Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Read error: Connection reset by peer) |
| 05:07:57 | × | tanuki quits (~quassel@173.168.154.189) (Ping timeout: 260 seconds) |
| 05:09:45 | → | tanuki joins (~quassel@173.168.154.189) |
| 05:11:14 | × | vicfred quits (~vicfred@unaffiliated/vicfred) (Client Quit) |
| 05:15:08 | → | elliott_ joins (~elliott_@pool-108-51-141-12.washdc.fios.verizon.net) |
| 05:15:28 | × | elliott_ quits (~elliott_@pool-108-51-141-12.washdc.fios.verizon.net) (Client Quit) |
| 05:15:31 | hackage | vulkan 3.6.14 - Bindings to the Vulkan graphics API. https://hackage.haskell.org/package/vulkan-3.6.14 (jophish) |
| 05:16:31 | hackage | VulkanMemoryAllocator 0.3.9, vulkan-utils 0.2 (jophish): https://qbin.io/cgi-immune-lgby |
| 05:17:02 | <jophish> | What is this qbin thing? |
| 05:17:26 | × | pehjota1 quits (~pehjota@185.204.1.185) (Remote host closed the connection) |
| 05:17:59 | × | alx741 quits (~alx741@186.178.110.6) (Ping timeout: 256 seconds) |
| 05:18:02 | <Axman6> | probably a link shortening service? |
| 05:18:27 | <Axman6> | looks like a paste service actually |
| 05:18:54 | → | Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas) |
| 05:19:39 | × | gxt quits (~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection) |
| 05:20:24 | → | gxt joins (~gxt@gateway/tor-sasl/gxt) |
| 05:21:10 | × | tanuki quits (~quassel@173.168.154.189) (Ping timeout: 256 seconds) |
| 05:21:45 | <jophish> | weird, I uploaded those three packages at the same time |
| 05:22:43 | × | klixto quits (~klixto@130.220.8.140) (Quit: WeeChat 2.9) |
| 05:22:51 | → | Sanchayan joins (~Sanchayan@171.61.102.109) |
| 05:23:51 | × | Amras quits (~Amras@unaffiliated/amras0000) (Remote host closed the connection) |
| 05:23:59 | → | Amras joins (~Amras@unaffiliated/amras0000) |
| 05:24:20 | → | conal joins (~conal@64.71.133.70) |
| 05:25:47 | × | conal quits (~conal@64.71.133.70) (Client Quit) |
| 05:28:22 | → | day_ joins (~Unknown@unaffiliated/day) |
| 05:29:16 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) |
| 05:29:55 | × | Amras quits (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds) |
| 05:30:11 | × | livvy quits (~livvy@gateway/tor-sasl/livvy) (Remote host closed the connection) |
| 05:30:21 | → | livvy joins (~livvy@gateway/tor-sasl/livvy) |
| 05:30:24 | → | alx741 joins (~alx741@186.178.110.6) |
| 05:31:07 | → | tanuki joins (~quassel@173.168.154.189) |
| 05:31:56 | × | day quits (~Unknown@unaffiliated/day) (Ping timeout: 256 seconds) |
| 05:31:56 | day_ | is now known as day |
| 05:34:08 | × | cp- quits (~cp-@b157153.ppp.asahi-net.or.jp) (Ping timeout: 260 seconds) |
| 05:36:19 | → | boistordu1 joins (boistordum@gateway/shell/matrix.org/x-zpdpvjbuxlhmobsh) |
| 05:38:23 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 05:40:14 | → | cp- joins (~cp-@b157153.ppp.asahi-net.or.jp) |
| 05:41:08 | × | heyj quits (sid171370@gateway/web/irccloud.com/x-sjxjehfsqkhmjbvz) (Read error: Connection reset by peer) |
| 05:41:19 | × | edwinb quits (sid69486@gateway/web/irccloud.com/x-elzwlqpwvreqnrml) (Read error: Connection reset by peer) |
| 05:41:24 | × | adius quits (sid321344@gateway/web/irccloud.com/x-uuhxlducjizxfavl) (Read error: Connection reset by peer) |
| 05:41:25 | × | mpickering quits (sid78412@gateway/web/irccloud.com/x-wtvxaywdclnnytlv) (Read error: Connection reset by peer) |
| 05:41:25 | × | PoliticsII______ quits (sid193551@gateway/web/irccloud.com/x-axomckqlurkcrgnc) (Read error: Connection reset by peer) |
| 05:41:36 | → | edwinb joins (sid69486@gateway/web/irccloud.com/x-ucpbbzlyfldprgqw) |
| 05:41:36 | → | mpickering joins (sid78412@gateway/web/irccloud.com/x-pmxjkbnlbuqckyae) |
| 05:41:42 | → | adius joins (sid321344@gateway/web/irccloud.com/x-qiqazzoasoeaazyv) |
| 05:41:42 | → | PoliticsII______ joins (sid193551@gateway/web/irccloud.com/x-svzvwktexytphjlp) |
| 05:43:28 | → | heyj joins (sid171370@gateway/web/irccloud.com/x-xrqocrtckuflwvgl) |
| 05:43:58 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
| 05:49:21 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) |
| 05:51:38 | × | cp- quits (~cp-@b157153.ppp.asahi-net.or.jp) (Ping timeout: 260 seconds) |
| 05:51:54 | × | ChaiTRex quits (~ChaiTRex@gateway/tor-sasl/chaitrex) (Remote host closed the connection) |
| 05:52:30 | → | ChaiTRex joins (~ChaiTRex@gateway/tor-sasl/chaitrex) |
| 05:52:54 | × | Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 256 seconds) |
| 05:53:58 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 260 seconds) |
| 05:55:07 | × | acidjnk_new quits (~acidjnk@p200300d0c718f605045012e87868ed0b.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 05:56:39 | → | cp- joins (~cp-@b157153.ppp.asahi-net.or.jp) |
| 05:57:24 | <dminuoso> | % data Foo = Foo { foo, bar :: Int } |
| 05:57:24 | <yahb> | dminuoso: |
| 05:57:35 | <dminuoso> | Uh oh. This is permitted. :< |
| 05:57:40 | <dminuoso> | % :t foo |
| 05:57:41 | <yahb> | dminuoso: Foo -> Int |
| 06:00:01 | × | sammuel86 quits (~sammuel86@178.239.168.171) () |
| 06:09:11 | × | _xor quits (~xor@74.215.46.133) (Quit: brb) |
| 06:10:42 | → | _xor joins (~xor@74.215.46.133) |
| 06:13:58 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 06:15:04 | → | RandIter joins (~RandIter@178.162.212.214) |
| 06:18:06 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal) |
| 06:18:21 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 06:29:52 | × | justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds) |
| 06:31:09 | <moet> | is there some requirement that a typeclass have a concrete (*) type? |
| 06:31:41 | <moet> | >:kind! Num |
| 06:31:53 | × | GuerrillaMonkey quits (~Jeanne-Ka@66.115.189.224) (Ping timeout: 260 seconds) |
| 06:32:05 | <moet> | ok, the bot doesn't like that but it prints 'Num :: * -> Constraint' for me |
| 06:32:24 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:32:44 | → | pavonia_ joins (~user@unaffiliated/siracusa) |
| 06:33:16 | <moet> | is there any trick defining instances of standard classes over a closed set of types (lifted by datakinds) .. eg.. 'data T = A | B' |
| 06:33:49 | <moet> | instance Num 'A where ... fails because `'A :: T` but `Num :: * -> Constraint` |
| 06:34:04 | × | towel quits (~towel@unaffiliated/towel) (Quit: ZNC - https://znc.in) |
| 06:34:05 | × | {abby} quits (~{abby}@unaffiliated/demhydraz) (Quit: Ping timeout (120 seconds)) |
| 06:34:11 | → | {abby}2 joins (~{abby}@unaffiliated/demhydraz) |
| 06:34:38 | × | guest1116 quits (~user@49.5.6.87) (Ping timeout: 265 seconds) |
| 06:35:02 | → | towel joins (~towel@unaffiliated/towel) |
| 06:35:07 | × | pavonia quits (~user@unaffiliated/siracusa) (Ping timeout: 260 seconds) |
| 06:35:09 | pavonia_ | is now known as pavonia |
| 06:38:47 | <moet> | nevermind.. the problem was a stuck type family upstream .. |
| 06:39:43 | → | coot_ joins (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) |
| 06:40:43 | × | coot quits (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 256 seconds) |
| 06:40:44 | coot_ | is now known as coot |
| 06:41:12 | × | Sanchayan quits (~Sanchayan@171.61.102.109) (Quit: leaving) |
| 06:41:26 | <moet> | now i have questions about stuck type families if anybody has their polykinds hat on |
| 06:41:32 | → | quarters joins (~quarters@unaffiliated/quarters) |
| 06:41:40 | <moet> | otherwise i'll just figure it out |
| 06:43:05 | <quarters> | hello. I'm following http://learnyouahaskell.com/syntax-in-functions and noticed that type declarations are shown above every function. Is this something that can be replicated in the ghci repl? when I try it, I get <interactive>:18:1: error: |
| 06:43:05 | <quarters> | • No instance for (Show (Integer -> String)) |
| 06:43:05 | <quarters> | arising from a use of ‘print’ |
| 06:43:05 | <quarters> | (maybe you haven't applied a function to enough arguments?) |
| 06:43:06 | <quarters> | • In a stmt of an interactive GHCi command: print it |
| 06:43:30 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) |
| 06:43:30 | × | matthew- quits (~matthew@smtp.wellquite.org) (Ping timeout: 272 seconds) |
| 06:43:50 | → | matthew- joins (~matthew@smtp.wellquite.org) |
| 06:47:12 | <moet> | quarters: yes, there are two ways https://termbin.com/zngt |
| 06:47:47 | <moet> | quarters: one is to type a one-liner lambda on the rhs of a let, parenthesize the whole lambda, and then give it a type |
| 06:47:52 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
| 06:48:05 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 256 seconds) |
| 06:48:14 | <moet> | quarters: the other is to write a multi-line-function just as you would in a file, by preceding it with :{ and then following it with :} |
| 06:48:24 | <moet> | see the paste at https://termbin.com/zngt |
| 06:48:37 | → | Sanchayan joins (~Sanchayan@171.61.102.109) |
| 06:49:34 | <quarters> | moet: awesome. thank you! |
| 06:50:01 | × | falafel_ quits (~falafel@50.216.77.242) (Ping timeout: 264 seconds) |
| 06:52:58 | <moet> | does making a type-family have a result of kind `k` automatically make the type family "stuck"? is there a way to inspect the result? |
| 06:55:03 | <Axman6> | :kind! should show you it in as evaluated for as possible |
| 06:55:19 | → | justanotheruser joins (~justanoth@unaffiliated/justanotheruser) |
| 06:55:32 | <Axman6> | (that's probably not a precide definition of what it does, but :kind! is probably what you're after) |
| 06:56:02 | → | avn joins (~avn@78-56-108-78.static.zebra.lt) |
| 06:56:22 | → | santa_1 joins (~santa_@185.163.110.116) |
| 06:58:19 | <moet> | Axman6: hrm.. that tool does help me to identify the problem but my question is more about what the meaning of a polymorphic typeclass is |
| 06:58:37 | <moet> | Axman6: if you have a sec, take a look at this minimal example: https://termbin.com/n79h |
| 06:59:13 | <moet> | in the example, i've made a type family that seems to be useless, because it is stuck due to its polymorphic result |
| 07:00:48 | <dminuoso> | moet: No, typeclasses can have instances for non-* types as well. See Functor |
| 07:01:12 | <dminuoso> | Oh, scrolled up again. |
| 07:01:52 | <Axman6> | this is definitely beyond my knowledge of these things |
| 07:02:07 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: leaving) |
| 07:02:51 | <moet> | dminuoso: heh, yeah, i realized the issue with that typeclass was actually the stuck type family not resolving to the type which matched the typeclass :) |
| 07:03:09 | <moet> | Axman6: thanks for taking a look anyhow.. it's beyond my knowledge too! |
| 07:03:17 | <dminuoso> | Im surprised this typechecks at all |
| 07:03:37 | <dminuoso> | Or kindchecks, rather |
| 07:04:10 | <moet> | dminuoso: it does admittedly require like 4 extensions |
| 07:04:27 | <keltono> | try `:t funcName` |
| 07:04:35 | <keltono> | whoops, wrong channel |
| 07:04:41 | <dminuoso> | moet: which ones? |
| 07:04:48 | <dminuoso> | TypeFamilies and PolyKinds presumably |
| 07:04:50 | <dminuoso> | Which else? |
| 07:04:56 | <moet> | DataKinds and KindSignatures |
| 07:05:08 | <dminuoso> | Ah, well those make sense too |
| 07:05:12 | <moet> | Though DataKinds is probably only because i used tuple on RHS |
| 07:05:15 | <dminuoso> | Right |
| 07:05:25 | <dminuoso> | You could alternatively say |
| 07:05:32 | <dminuoso> | % type family TF (a :: *) :: k |
| 07:05:32 | <yahb> | dminuoso: |
| 07:05:40 | <dminuoso> | % type instance TF Bool = Type |
| 07:05:40 | <yahb> | dminuoso: ; <interactive>:102:25: error:; Ambiguous occurrence `Type'; It could refer to; either `Language.Haskell.TH.Type', imported from `Language.Haskell.TH' (and originally defined in `Language.Haskell.TH.Syntax'); or `Data.Kind.Type', imported from `Data.Kind' (and originally defined in `GHC.Types') |
| 07:05:57 | <dminuoso> | % type instance TF Bool = Data.Kind.Type |
| 07:05:57 | <yahb> | dminuoso: |
| 07:06:02 | <dminuoso> | % type instance TF Int = Data.Kind.Type -> Data.Kind.Type |
| 07:06:03 | <yahb> | dminuoso: |
| 07:07:42 | <moet> | % :kind! TF Bool |
| 07:07:43 | <yahb> | moet: k; = TF Bool |
| 07:07:47 | <moet> | % :kind! TF Int |
| 07:07:47 | <yahb> | moet: k; = TF Int |
| 07:07:52 | <moet> | also stuck? |
| 07:08:06 | <dminuoso> | I dont think "stuck" is the right terminology here |
| 07:08:19 | <dminuoso> | % :kind! TF Int |
| 07:08:19 | <yahb> | dminuoso: forall {k}. k; = TF Int |
| 07:08:33 | <dminuoso> | (I added :set -fprint-explicit-foralls in a query) |
| 07:08:46 | <dminuoso> | So it returns a polymorphic kind |
| 07:08:58 | <moet> | yes, i think it's because k cannot be both * and (* -> *) at the sametime |
| 07:09:04 | <dminuoso> | The confusing thing is why the tf instances type check at all, because `Type` is certainly *not* polymorphic |
| 07:09:46 | <dminuoso> | But then again, I only know how you can have polymorphic kinds in negative positions (say like Const) |
| 07:09:54 | <dminuoso> | Or *polymorphic types rather |
| 07:10:18 | <dminuoso> | Let's say we did |
| 07:10:29 | <dminuoso> | % data C (forall k. t :: k) = C |
| 07:10:30 | <yahb> | dminuoso: ; <interactive>:111:9: error:; Unexpected type `forall k. t :: k'; In the data declaration for `C'; A data declaration should have form; data C a = ... |
| 07:11:02 | <dminuoso> | Oh that's not allowed? |
| 07:11:37 | <glguy> | % :kind! TF Bool :: * |
| 07:11:37 | <yahb> | glguy: *; = * |
| 07:11:48 | <glguy> | % :kind! [TF Bool] |
| 07:11:48 | <yahb> | glguy: *; = [*] |
| 07:12:11 | <moet> | % :kind! [TF Int] |
| 07:12:11 | <yahb> | moet: *; = [* -> *] |
| 07:12:15 | <moet> | oh, wow.. |
| 07:12:17 | <dminuoso> | Is it possible this tyfam crosses universes and returns a proper kind? |
| 07:12:29 | <dminuoso> | (Sort of TypeInType) |
| 07:12:50 | <dminuoso> | No this is still weird |
| 07:12:51 | <glguy> | You have to know the desired result kind to know which TF instance to use |
| 07:13:14 | <glguy> | % type instance TF Bool = (->) |
| 07:13:14 | <yahb> | glguy: |
| 07:13:18 | <dminuoso> | glguy: What's the meaning of `TF Bool` without a kind signature then? |
| 07:14:10 | <dminuoso> | % type instance TF Bool = Int |
| 07:14:10 | <yahb> | dminuoso: ; <interactive>:103:15: error:; Conflicting family instance declarations:; TF Bool = * -- Defined at <interactive>:103:15; TF Bool = Int -- Defined at <interactive>:123:15 |
| 07:14:12 | <dminuoso> | % type instance TF Bool = Const |
| 07:14:13 | <yahb> | dminuoso: ; <interactive>:119:15: error:; Conflicting family instance declarations:; TF Bool = (->) -- Defined at <interactive>:119:15; forall {k}. TF Bool = Const -- Defined at <interactive>:124:15 |
| 07:14:14 | <dminuoso> | Oh |
| 07:14:18 | <glguy> | % :kind! TF Bool :: * -> * -> * |
| 07:14:18 | <yahb> | glguy: * -> * -> *; = (->) |
| 07:14:32 | <glguy> | % :kind! TF Bool :: * |
| 07:14:32 | <yahb> | glguy: *; = * |
| 07:14:35 | <dminuoso> | Interesting, so this tyfam is essentially parametrized over not just a type, but a kind as well? |
| 07:15:07 | <glguy> | Yeah, this is relying on PolyKinds to work |
| 07:15:30 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:15:42 | × | mrchampion quits (~mrchampio@216-211-57-41.dynamic.tbaytel.net) (Ping timeout: 256 seconds) |
| 07:16:20 | <moet> | soo.... this makes sense, kinda .. the result is polymorphic so we need to either infer or annotate the result for it to be computed |
| 07:16:25 | <dminuoso> | Is this interaction documented anywhere in the GHC manual? I cant seem to find a reference in either the tyfam nor polykinds sections |
| 07:17:45 | × | Deide quits (~Deide@217.155.19.23) (Quit: Seeee yaaaa) |
| 07:18:25 | → | cosimone joins (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) |
| 07:18:41 | <moet> | glguy: dminuoso: thanks |
| 07:19:19 | → | bitmagie joins (~Thunderbi@200116b806468f00a548803c2a7d669f.dip.versatel-1u1.de) |
| 07:20:00 | <dminuoso> | glguy, moet: Ah I think I found a reference. It's a bit short but it's there https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/poly_kinds.html?highlight=polykinds#kind-inference-in-closed-type-families |
| 07:20:06 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 07:20:12 | <dminuoso> | So these are called "kind-indexed type families" |
| 07:20:53 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 07:21:07 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 07:21:44 | → | chele joins (~chele@ip5b416ea2.dynamic.kabel-deutschland.de) |
| 07:22:09 | <moet> | i see that; it's rather brief... thank yo |
| 07:22:57 | <moet> | since my only purpose was to create typeclass instances of the RHS of this type family, it's not going to work i think.. i'll take to take another approach! |
| 07:26:35 | → | guest1116 joins (~user@49.5.6.87) |
| 07:27:05 | × | ericsagn1 quits (~ericsagne@2405:6580:0:5100:903c:6f64:11e3:36e2) (Ping timeout: 272 seconds) |
| 07:28:20 | → | mrchampion joins (~mrchampio@216-26-218-246.dynamic.tbaytel.net) |
| 07:28:26 | × | Lowl3v3l quits (~Lowl3v3l@dslb-002-203-195-108.002.203.pools.vodafone-ip.de) (Ping timeout: 260 seconds) |
| 07:29:14 | → | Lowl3v3l joins (~Lowl3v3l@dslb-002-203-195-108.002.203.pools.vodafone-ip.de) |
| 07:33:40 | × | Sgeo_ quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer) |
| 07:35:06 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 07:35:59 | → | thc202 joins (~thc202@unaffiliated/thc202) |
| 07:36:47 | → | invaser joins (~Thunderbi@31.148.23.125) |
| 07:37:38 | → | danvet joins (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) |
| 07:39:05 | → | ericsagn1 joins (~ericsagne@2405:6580:0:5100:1774:2bb5:b05f:edf1) |
| 07:40:03 | → | asheshambasta joins (~user@ptr-e1lysawl9rr13i61o92.18120a2.ip6.access.telenet.be) |
| 07:40:31 | <glguy> | What was the original thing you were trying to do? |
| 07:43:03 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
| 07:44:34 | × | bitmagie quits (~Thunderbi@200116b806468f00a548803c2a7d669f.dip.versatel-1u1.de) (Quit: bitmagie) |
| 07:45:58 | × | cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 07:47:50 | → | gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh) |
| 07:49:46 | → | dhouthoo joins (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) |
| 07:50:02 | → | bahamas joins (~lucian@unaffiliated/bahamas) |
| 07:52:43 | <bahamas> | how do I get out of multiline mode in ghci? meaning, I just pasted a multiline string and noticed that the prompt changed from "ghci> " to "Prelude|". using the command `:unset +m` didn't change the prompt |
| 07:53:12 | ← | zopsi_ parts (zopsi@2600:3c00::f03c:91ff:fe14:551f) () |
| 07:54:21 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:54:49 | <dminuoso> | bahamas: :unset +m works for me |
| 07:55:01 | <dminuoso> | bahamas: Perhaps this only works outside a multiline block? |
| 07:56:01 | <bahamas> | dminuoso: ok, I found that Ctrl+D gets me back to `ghci> `. but the variable that I defined in the multiline mode is not available anymore |
| 07:56:30 | <dminuoso> | bahamas: Oh you mean manually leave a multiline block? |
| 07:56:41 | <bahamas> | I basically have a multiline string that I want to clean. |
| 07:56:57 | <bahamas> | that's what I'm trying to accomplish |
| 07:57:05 | × | Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
| 07:59:07 | × | xff0x quits (~fox@2001:1a81:529e:a500:712c:5a16:6a4b:9d48) (Ping timeout: 260 seconds) |
| 07:59:31 | <dminuoso> | % (&) = fromIntegral |
| 07:59:31 | <yahb> | dminuoso: |
| 07:59:35 | <dminuoso> | % (10&) |
| 07:59:36 | <yahb> | dminuoso: 10 |
| 07:59:55 | <dminuoso> | Finally a non annoying way to use fromIntegral and realToFrac :> |
| 07:59:59 | → | xff0x joins (~fox@2001:1a81:529e:a500:a7e0:336:a54e:d7a5) |
| 08:00:33 | × | jedws quits (~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 08:00:49 | <bahamas> | ok, I guess multiline mode doesn't help with multiline strings |
| 08:01:07 | × | Merfont quits (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection) |
| 08:01:28 | → | Merfont joins (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) |
| 08:02:15 | → | jedws joins (~jedws@101.184.175.183) |
| 08:02:28 | → | Stanley00 joins (~stanley00@unaffiliated/stanley00) |
| 08:04:19 | <yushyin> | dminuoso: lol |
| 08:05:48 | × | jedws quits (~jedws@101.184.175.183) (Client Quit) |
| 08:06:36 | → | Varis joins (~Tadas@unaffiliated/varis) |
| 08:08:36 | → | alp joins (~alp@2a01:e0a:58b:4920:8cf5:bc2e:8b7a:9a8e) |
| 08:08:52 | → | Amras joins (~Amras@unaffiliated/amras0000) |
| 08:09:02 | × | p8m quits (p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 260 seconds) |
| 08:09:18 | → | zopsi joins (zopsi@2600:3c00::f03c:91ff:fe14:551f) |
| 08:11:25 | × | cosimone quits (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone) |
| 08:11:38 | → | jedws joins (~jedws@101.184.175.183) |
| 08:15:01 | × | polyphem quits (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (Quit: WeeChat 2.9) |
| 08:15:22 | <merijn> | dminuoso: I will haunt your dreams >.< |
| 08:16:04 | <merijn> | bahamas: tbh, I would just abandon multiline ghci use entirely, any "support" for it was ad hoc hacked into it |
| 08:17:31 | → | jespada joins (~jespada@90.254.245.49) |
| 08:19:49 | → | p8m joins (p8m@gateway/vpn/protonvpn/p8m) |
| 08:20:15 | × | gxt quits (~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection) |
| 08:21:01 | → | gxt joins (~gxt@gateway/tor-sasl/gxt) |
| 08:25:53 | → | benjamingr__ joins (uid23465@gateway/web/irccloud.com/x-hiupvfuftqbhepbs) |
| 08:28:11 | × | recon_-_ quits (~quassel@2602:febc:0:b6::6ca2) (Quit: No Ping reply in 180 seconds.) |
| 08:29:00 | → | Kaeipi joins (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) |
| 08:29:27 | → | recon_- joins (~quassel@2602:febc:0:b6::6ca2) |
| 08:29:33 | × | Merfont quits (~Kaiepi@nwcsnbsc03w-47-55-225-82.dhcp-dynamic.fibreop.nb.bellaliant.net) (Read error: Connection reset by peer) |
| 08:30:20 | → | idhugo joins (~idhugo@users-1190.st.net.au.dk) |
| 08:30:56 | → | mputz joins (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) |
| 08:31:31 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) |
| 08:33:45 | × | nados quits (~dan@69-165-210-185.cable.teksavvy.com) (Ping timeout: 260 seconds) |
| 08:34:54 | × | jedws quits (~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 08:36:49 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Ping timeout: 264 seconds) |
| 08:38:22 | × | drbean quits (~drbean@TC210-63-209-39.static.apol.com.tw) (Ping timeout: 256 seconds) |
| 08:40:13 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 08:42:47 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 08:48:54 | × | cyphase quits (~cyphase@unaffiliated/cyphase) (Ping timeout: 272 seconds) |
| 08:52:57 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 08:55:07 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer) |
| 08:57:35 | → | cyphase joins (~cyphase@unaffiliated/cyphase) |
| 08:57:46 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
| 08:58:37 | → | borne joins (~fritjof@200116b864b5430099e934deb93b1409.dip.versatel-1u1.de) |
| 09:00:01 | × | santa_1 quits (~santa_@185.163.110.116) () |
| 09:00:04 | × | DeadComaGrayce[m quits (commagra1@gateway/shell/matrix.org/x-azdmcqjbsmchjvtv) (Quit: Idle for 30+ days) |
| 09:00:06 | × | wrunt[m] quits (wruntmatri@gateway/shell/matrix.org/x-fajabshtqlxbdigd) (Quit: Idle for 30+ days) |
| 09:00:33 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 09:01:43 | × | cheater quits (~user@unaffiliated/cheater) (Quit: (BitchX) "got bitchx?") |
| 09:04:03 | → | britva joins (~britva@31-10-157-156.cgn.dynamic.upc.ch) |
| 09:04:29 | → | cfricke joins (~cfricke@unaffiliated/cfricke) |
| 09:04:56 | → | solonarv joins (~solonarv@astrasbourg-653-1-156-155.w90-6.abo.wanadoo.fr) |
| 09:05:32 | <moet> | glguy: ah, i'll have to get back to you on that tomorrow.. |
| 09:06:05 | → | kuribas joins (~user@ptr-25vy0iaahu2pezvpnfb.18120a2.ip6.access.telenet.be) |
| 09:07:14 | <Ivan__1> | q |
| 09:07:17 | × | Ivan__1 quits (~yudin@gw.mat.uc.pt) (Quit: leaving) |
| 09:07:38 | → | christo joins (~chris@81.96.113.213) |
| 09:11:12 | <runeks> | Anyone know a mirror for https://downloads.haskell.org/~ghc/8.8.3/ghc-8.8.3-x86_64-apple-darwin.tar.xz? I'm getting 20-30 KB/s from that link... |
| 09:11:16 | → | cheater joins (~user@unaffiliated/cheater) |
| 09:11:56 | <dminuoso> | runeks: https://distfiles.macports.org/ghc/ |
| 09:12:04 | <dminuoso> | Be sure to check the signatures against the ones from haskell.org |
| 09:12:42 | × | cheater quits (~user@unaffiliated/cheater) (Read error: Connection reset by peer) |
| 09:13:25 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Ping timeout: 240 seconds) |
| 09:14:04 | <runeks> | @dminuoso Thank you! I checked the hash and it matches that of the haskell.org file. |
| 09:14:04 | <lambdabot> | Unknown command, try @list |
| 09:14:06 | → | enoq joins (~textual@194-208-146-143.lampert.tv) |
| 09:14:16 | <runeks> | dminuoso: Thank you! I checked the hash and it matches that of the haskell.org file. |
| 09:16:25 | × | Guest2620 quits (~Christoph@chezlefab.net) (Ping timeout: 264 seconds) |
| 09:16:25 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer) |
| 09:16:33 | → | stilgart joins (~Christoph@chezlefab.net) |
| 09:17:01 | × | orzo quits (joe@lasker.childrenofmay.org) (Ping timeout: 264 seconds) |
| 09:17:01 | × | peutri quits (~peutri@ns317027.ip-94-23-46.eu) (Ping timeout: 264 seconds) |
| 09:17:10 | → | peutri joins (~peutri@ns317027.ip-94-23-46.eu) |
| 09:17:10 | → | orzo joins (joe@lasker.childrenofmay.org) |
| 09:17:49 | × | guest1116 quits (~user@49.5.6.87) (Ping timeout: 246 seconds) |
| 09:18:02 | × | moet quits (~moet@mobile-166-137-178-183.mycingular.net) (Ping timeout: 272 seconds) |
| 09:18:02 | × | seveg quits (~gabriel@2a02-ab04-0249-8d00-7d49-c4e2-4790-91c2.dynamic.v6.chello.sk) (Ping timeout: 264 seconds) |
| 09:18:26 | <dminuoso> | merijn: What can I say, my code is plastered with putWord8/putWord16be/putWord32be |
| 09:18:40 | <dminuoso> | And sadly I cant track Word8/Word16/Word32 cleanly through |
| 09:19:27 | <dminuoso> | So what I realistically do is, I keep them as Word32 and narrow wherever. Validation before serialization will catch potential bugs here. |
| 09:19:33 | × | hnOsmium0001 quits (uid453710@gateway/web/irccloud.com/x-wwiyyhwyadbuqprb) (Quit: Connection closed for inactivity) |
| 09:19:52 | × | berberman quits (~berberman@unaffiliated/berberman) (Ping timeout: 260 seconds) |
| 09:20:05 | → | seveg joins (~gabriel@188-167-252-154.dynamic.chello.sk) |
| 09:20:13 | → | berberman joins (~berberman@unaffiliated/berberman) |
| 09:21:53 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 09:22:37 | → | m0rphism joins (~m0rphism@HSI-KBW-095-208-098-207.hsi5.kabel-badenwuerttemberg.de) |
| 09:23:35 | → | fendor joins (~fendor@178.115.131.226.wireless.dyn.drei.com) |
| 09:23:44 | × | lxsameer quits (~lxsameer@unaffiliated/lxsameer) (Ping timeout: 272 seconds) |
| 09:25:35 | <merijn> | Hopefully ;) |
| 09:25:35 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) |
| 09:27:08 | → | o1lo01ol1o joins (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) |
| 09:27:21 | → | cheater joins (~user@unaffiliated/cheater) |
| 09:28:22 | × | Amras quits (~Amras@unaffiliated/amras0000) (Ping timeout: 260 seconds) |
| 09:29:02 | <dminuoso> | Well, for deserialization I could use int-cast I guess |
| 09:30:35 | → | Franciman joins (~francesco@host-82-56-223-169.retail.telecomitalia.it) |
| 09:33:48 | × | o1lo01ol1o quits (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) (Remote host closed the connection) |
| 09:34:38 | → | Amras joins (~Amras@unaffiliated/amras0000) |
| 09:36:00 | → | lxsameer joins (lxsameer@gateway/vpn/protonvpn/lxsameer) |
| 09:36:48 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer) |
| 09:37:45 | × | Cale quits (~cale@cpef48e38ee8583-cm0c473de9d680.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds) |
| 09:37:49 | × | acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 265 seconds) |
| 09:37:58 | × | jzl quits (~jzl@unaffiliated/jzl) (Ping timeout: 260 seconds) |
| 09:38:11 | → | acarrico joins (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
| 09:38:32 | → | jzl joins (~jzl@2607:5300:60:1422::1) |
| 09:38:32 | × | jzl quits (~jzl@2607:5300:60:1422::1) (Changing host) |
| 09:38:32 | → | jzl joins (~jzl@unaffiliated/jzl) |
| 09:40:12 | → | Cale joins (~cale@cpef48e38ee8583-cm0c473de9d680.cpe.net.cable.rogers.com) |
| 09:40:42 | × | bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds) |
| 09:42:11 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 09:43:17 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 09:46:20 | → | grimgnr joins (~user@94.19.246.43) |
| 09:48:04 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 09:48:21 | × | zebrag quits (~inkbottle@aaubervilliers-654-1-73-14.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
| 09:48:42 | → | zebrag joins (~inkbottle@aaubervilliers-654-1-73-14.w86-212.abo.wanadoo.fr) |
| 09:48:50 | → | bahamas joins (~lucian@unaffiliated/bahamas) |
| 09:51:48 | → | guest1116 joins (~user@49.5.6.87) |
| 10:01:36 | → | Martinsos joins (~user@cpe-188-129-116-164.dynamic.amis.hr) |
| 10:01:59 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Ping timeout: 265 seconds) |
| 10:04:30 | × | tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer) |
| 10:05:06 | → | tromp joins (~tromp@dhcp-077-249-230-040.chello.nl) |
| 10:05:31 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) |
| 10:07:31 | → | tromp_ joins (~tromp@dhcp-077-249-230-040.chello.nl) |
| 10:07:31 | × | tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Read error: Connection reset by peer) |
| 10:09:57 | <Martinsos> | Hi all! I am not so new to Haskell, but I am new to IRC - any best practices to share on how to get most of haskell IRC channel? I am usually on reddit but I heard haskell IRC channel is the best place to learn/ask. I am right now using ERC in Emacs, but I am not sure how to go about it since I can't see the old messages -> do you have IRC turned on all the time? Do you also use ERC in Emacs or do you use smth else? What is your |
| 10:09:57 | <Martinsos> | workflow about participating in IRC while also getting stuff done? Thanks! |
| 10:11:28 | <merijn> | Some people stay logged in all the time via a "bouncer" (basically a VPS forwarding to your local machine), but personally I just treat IRC as transient, there is not much point in attempting to keep up with everything that happens |
| 10:11:48 | → | boxscape joins (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) |
| 10:11:51 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Read error: Connection reset by peer) |
| 10:11:52 | × | lxsameer quits (lxsameer@gateway/vpn/protonvpn/lxsameer) (Ping timeout: 256 seconds) |
| 10:14:57 | <Martinsos> | merijn: do you keep it open in separate window, or if you are using it through emacs do you just keep the buffer in the background and open it every so and so? |
| 10:15:34 | <merijn> | I don't use emacs at all :p I just have it open in a seperate tmux window |
| 10:16:26 | <[exa]> | Martinsos: I got permanently running irssi on a server, connecting just with ssh+tmux |
| 10:16:45 | <Martinsos> | merijn: ok great, thanks a lot :)! I also just realized there are logs at tunes.org, so that is also useful. |
| 10:16:58 | <merijn> | Also https://ircbrowse.tomsmeding.com/haskell |
| 10:17:01 | <Martinsos> | merijn++ |
| 10:17:37 | × | invaser quits (~Thunderbi@31.148.23.125) (Ping timeout: 264 seconds) |
| 10:17:38 | <Martinsos> | @karma Martinsos |
| 10:17:38 | <lambdabot> | You have a karma of 0 |
| 10:17:50 | <Martinsos> | @karma merijn |
| 10:17:50 | <lambdabot> | merijn has a karma of 76 |
| 10:18:48 | <Martinsos> | [exa]++ |
| 10:19:23 | × | rprije quits (~rprije@124.148.131.132) (Ping timeout: 260 seconds) |
| 10:21:14 | <[exa]> | Martinsos: worry not, karma tracks itself here |
| 10:21:54 | <Martinsos> | [exa]: Aha, what do you mean by that, how does it track itself? |
| 10:24:27 | <boxscape> | @hoogle (a -> b) -> (a -> c) -> a -> (b, c) |
| 10:24:28 | <lambdabot> | Data.Tuple.Extra (&&&) :: (a -> b) -> (a -> c) -> a -> (b, c) |
| 10:24:28 | <lambdabot> | Extra (&&&) :: (a -> b) -> (a -> c) -> a -> (b, c) |
| 10:24:28 | <lambdabot> | Control.Wire.Core (&&&!) :: (a -> b) -> (a -> c) -> (a -> (b, c)) |
| 10:24:31 | → | acidjnk_new joins (~acidjnk@p200300d0c718f648045012e87868ed0b.dip0.t-ipconnect.de) |
| 10:24:39 | <boxscape> | hmm it doesn't find the Arrow one |
| 10:25:58 | → | lxsameer joins (~lxsameer@unaffiliated/lxsameer) |
| 10:28:52 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Ping timeout: 256 seconds) |
| 10:28:53 | <boxscape> | @pl \(^.) -> ((^.bla) &&& (^.foo)) |
| 10:28:53 | <lambdabot> | (line 1, column 3): |
| 10:28:53 | <lambdabot> | unexpected "^" |
| 10:28:53 | <lambdabot> | expecting pattern |
| 10:29:01 | <boxscape> | this is a lambdabot restriction, right? |
| 10:29:09 | <boxscape> | or pointless restriction, rather |
| 10:30:33 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 10:30:50 | × | hidedagger quits (~nate@unaffiliated/hidedagger) (Quit: WeeChat 2.9) |
| 10:32:59 | <merijn> | pl is rather dumb |
| 10:33:07 | <merijn> | It doesn't properly parse Haskell, iirc |
| 10:33:51 | <boxscape> | I see |
| 10:35:04 | <merijn> | > (\(^.) -> 5 ^. 3) (+) |
| 10:35:07 | <lambdabot> | 8 |
| 10:35:12 | <merijn> | Seems to work :) |
| 10:37:02 | × | w1gz quits (~do@159.89.11.133) (Quit: WeeChat 2.9) |
| 10:40:28 | <Martinsos> | > 314 + 42 |
| 10:40:31 | <lambdabot> | 356 |
| 10:44:23 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 10:44:45 | → | vonfry joins (~user@116.236.75.207) |
| 10:44:45 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer) |
| 10:45:18 | → | subttle joins (~anonymous@unaffiliated/subttle) |
| 10:46:52 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) |
| 10:48:55 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 10:49:27 | {abby}2 | is now known as {abby} |
| 10:50:52 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 10:52:03 | × | olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection) |
| 10:52:05 | → | bidabong joins (uid272474@gateway/web/irccloud.com/x-baxncysxwetsxiet) |
| 10:52:23 | → | Feuermagier joins (~Feuermagi@213.178.26.41) |
| 10:57:41 | × | guest1116 quits (~user@49.5.6.87) (Remote host closed the connection) |
| 10:57:50 | → | LKoen joins (~LKoen@9.253.88.92.rev.sfr.net) |
| 10:58:16 | → | jaspervdj joins (~jaspervdj@213.55.241.138) |
| 10:58:43 | → | w1gz joins (~do@159.89.11.133) |
| 11:01:09 | × | Martinsos quits (~user@cpe-188-129-116-164.dynamic.amis.hr) (Remote host closed the connection) |
| 11:01:14 | × | alp quits (~alp@2a01:e0a:58b:4920:8cf5:bc2e:8b7a:9a8e) (Ping timeout: 264 seconds) |
| 11:01:25 | → | jakob_ joins (~textual@p200300f49f1622008dbefd778746ea7f.dip0.t-ipconnect.de) |
| 11:01:38 | → | Martinsos joins (~user@cpe-188-129-116-164.dynamic.amis.hr) |
| 11:03:22 | × | LKoen quits (~LKoen@9.253.88.92.rev.sfr.net) (Remote host closed the connection) |
| 11:03:41 | ← | Martinsos parts (~user@cpe-188-129-116-164.dynamic.amis.hr) () |
| 11:03:53 | → | Martinsos joins (~user@cpe-188-129-116-164.dynamic.amis.hr) |
| 11:04:04 | × | christo quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 11:04:59 | → | LKoen joins (~LKoen@9.253.88.92.rev.sfr.net) |
| 11:05:04 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer) |
| 11:06:23 | × | wei2912 quits (~wei2912@unaffiliated/wei2912) (Remote host closed the connection) |
| 11:08:57 | → | christo joins (~chris@81.96.113.213) |
| 11:11:10 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 11:13:25 | × | mputz quits (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Ping timeout: 264 seconds) |
| 11:13:31 | × | christo quits (~chris@81.96.113.213) (Ping timeout: 265 seconds) |
| 11:19:19 | → | alp joins (~alp@2a01:e0a:58b:4920:1c72:d61a:7e48:b350) |
| 11:22:48 | × | britva quits (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep) |
| 11:23:33 | × | bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 260 seconds) |
| 11:26:04 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer) |
| 11:27:08 | → | britva joins (~britva@31-10-157-156.cgn.dynamic.upc.ch) |
| 11:31:06 | → | cosimone joins (~cosimone@5.171.26.79) |
| 11:31:30 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 11:31:34 | × | andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection) |
| 11:32:16 | × | vonfry quits (~user@116.236.75.207) (Remote host closed the connection) |
| 11:32:36 | → | knupfer joins (~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) |
| 11:33:04 | × | knupfer quits (~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) (Client Quit) |
| 11:33:15 | → | Tario joins (~Tario@201.192.165.173) |
| 11:34:40 | → | andreas303 joins (~andreas@gateway/tor-sasl/andreas303) |
| 11:35:57 | → | knupfer joins (~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) |
| 11:38:27 | → | cgfuh joins (~cgfuh@181.167.191.58) |
| 11:38:35 | × | Unhammerd quits (~Unhammer@gateway/tor-sasl/unhammer) (Remote host closed the connection) |
| 11:38:43 | → | mirrorbird joins (~psutcliff@176.227.57.79) |
| 11:39:33 | → | Unhammerd joins (~Unhammer@gateway/tor-sasl/unhammer) |
| 11:40:14 | × | berberman quits (~berberman@unaffiliated/berberman) (Ping timeout: 264 seconds) |
| 11:41:05 | → | berberman joins (~berberman@unaffiliated/berberman) |
| 11:42:47 | × | ericsagn1 quits (~ericsagne@2405:6580:0:5100:1774:2bb5:b05f:edf1) (Ping timeout: 260 seconds) |
| 11:47:26 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer) |
| 11:51:02 | × | Martinsos quits (~user@cpe-188-129-116-164.dynamic.amis.hr) (Ping timeout: 256 seconds) |
| 11:51:11 | × | hekkaidekapus_ quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Quit: hekkaidekapus_) |
| 11:51:48 | → | wi[m] joins (w1gzmatrix@gateway/shell/matrix.org/x-xtlrgyxrbktyedto) |
| 11:52:32 | → | hekkaidekapus joins (~tchouri@gateway/tor-sasl/hekkaidekapus) |
| 11:53:50 | × | sh9 quits (~sh9@softbank060116136158.bbtec.net) (Quit: WeeChat 2.8) |
| 11:53:58 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 11:54:49 | → | ericsagn1 joins (~ericsagne@2405:6580:0:5100:1e63:f75b:d40e:f87e) |
| 12:04:07 | × | cheater quits (~user@unaffiliated/cheater) (Ping timeout: 260 seconds) |
| 12:04:30 | hackage | Z-Data 0.1.9.0 - Array, vector and text https://hackage.haskell.org/package/Z-Data-0.1.9.0 (winterland) |
| 12:05:56 | × | cosimone quits (~cosimone@5.171.26.79) (Quit: cosimone) |
| 12:06:03 | → | cheater joins (~user@unaffiliated/cheater) |
| 12:07:52 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer) |
| 12:08:21 | × | mirrorbird quits (~psutcliff@176.227.57.79) (Quit: Leaving) |
| 12:09:36 | → | DavidEichmann joins (~david@62.110.198.146.dyn.plus.net) |
| 12:13:17 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 12:15:43 | → | Martinsos joins (~user@cpe-188-129-116-164.dynamic.amis.hr) |
| 12:22:29 | × | knupfer quits (~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) (Quit: knupfer) |
| 12:23:33 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Ping timeout: 256 seconds) |
| 12:24:32 | → | sh9 joins (~sh9@softbank060116136158.bbtec.net) |
| 12:25:17 | → | invaser joins (~Thunderbi@31.148.23.125) |
| 12:28:10 | × | Stanley00 quits (~stanley00@unaffiliated/stanley00) (Remote host closed the connection) |
| 12:29:12 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer) |
| 12:32:44 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@ppp-223-24-151-50.revip6.asianet.co.th) |
| 12:34:40 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 12:38:01 | → | Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas) |
| 12:43:30 | hackage | vulkan 3.6.15 - Bindings to the Vulkan graphics API. https://hackage.haskell.org/package/vulkan-3.6.15 (jophish) |
| 12:46:08 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 12:47:52 | × | carlomagno quits (~cararell@148.87.23.8) (Remote host closed the connection) |
| 12:48:30 | hackage | hpqtypes-extras 1.10.3.0 - Extra utilities for hpqtypes library https://hackage.haskell.org/package/hpqtypes-extras-1.10.3.0 (arybczak) |
| 12:49:15 | → | ulidtko joins (~ulidtko@193.111.48.79) |
| 12:50:05 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds) |
| 12:52:51 | × | Sanchayan quits (~Sanchayan@171.61.102.109) (Quit: leaving) |
| 12:53:14 | × | plutoniix quits (~q@175.176.222.7) (Quit: Leaving) |
| 12:54:39 | → | texasmynsted joins (~texasmyns@212.102.45.103) |
| 12:58:03 | → | mputz joins (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) |
| 13:01:52 | × | justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds) |
| 13:04:28 | → | urodna joins (~urodna@unaffiliated/urodna) |
| 13:07:56 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@ppp-223-24-151-50.revip6.asianet.co.th) (Ping timeout: 272 seconds) |
| 13:09:36 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Read error: Connection reset by peer) |
| 13:10:58 | × | Rudd0 quits (~Rudd0@185.189.115.103) (Ping timeout: 260 seconds) |
| 13:13:26 | × | LKoen quits (~LKoen@9.253.88.92.rev.sfr.net) (Ping timeout: 256 seconds) |
| 13:14:05 | → | LKoen joins (~LKoen@9.253.88.92.rev.sfr.net) |
| 13:14:18 | → | whatisRT joins (~whatisRT@ip5b416a33.dynamic.kabel-deutschland.de) |
| 13:15:01 | → | Yumasi joins (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) |
| 13:17:07 | → | knupfer joins (~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) |
| 13:17:12 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 13:19:44 | <tomjaguarpaw> | Can I disable the garbage collector temporarily at run time and then re-enable by running some IO action? |
| 13:20:03 | <merijn> | tomjaguarpaw: Not really |
| 13:20:09 | <merijn> | tomjaguarpaw: Why? |
| 13:20:15 | <tomjaguarpaw> | For benchmarking |
| 13:20:30 | <tomjaguarpaw> | or at least to determine whether it's GC that's taking time in my benchmarks |
| 13:20:35 | <merijn> | tomjaguarpaw: You can *force* a collection ahead of time |
| 13:20:45 | × | britva quits (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep) |
| 13:20:53 | <tomjaguarpaw> | Hmm, OK, that will be a good start |
| 13:21:01 | <merijn> | tomjaguarpaw: That's what criterion does. Fully evaluate all data structures before benchmark, then trigger GC explicitly, then benchmark |
| 13:21:09 | <merijn> | Which should make major collections unlikely |
| 13:21:23 | <tomjaguarpaw> | How do I do that? |
| 13:21:29 | <merijn> | @Hoogle performGC |
| 13:21:30 | <lambdabot> | Maybe you meant: hoogle google |
| 13:21:33 | <merijn> | @hoogle performGC |
| 13:21:33 | <lambdabot> | System.Mem performGC :: IO () |
| 13:21:33 | <lambdabot> | BasePrelude performGC :: IO () |
| 13:21:33 | <lambdabot> | Pipes.Concurrent performGC :: IO () |
| 13:23:15 | → | britva joins (~britva@31-10-157-156.cgn.dynamic.upc.ch) |
| 13:23:30 | <tomjaguarpaw> | merijn: Cool, thanks! I will give it a go. |
| 13:23:41 | <merijn> | tomjaguarpaw: You can study how criterion works too |
| 13:23:49 | <merijn> | (or just use criterion if possible :p) |
| 13:26:16 | × | vjoki quits (vjoki@2a00:d880:3:1::fea1:9ae) (Quit: ...) |
| 13:26:57 | → | vjoki joins (vjoki@2a00:d880:3:1::fea1:9ae) |
| 13:27:08 | → | justanotheruser joins (~justanoth@unaffiliated/justanotheruser) |
| 13:27:38 | × | rdivacky quits (~rdivacky@212.96.173.4) (Read error: Connection reset by peer) |
| 13:27:54 | → | rdivacky joins (~rdivacky@212.96.173.4) |
| 13:27:54 | × | lockshaw quits (~lockshaw@165.22.163.71) (Quit: ZNC 1.7.2+deb3 - https://znc.in) |
| 13:29:04 | → | Guest2830 joins (~geekosaur@84.39.117.57) |
| 13:33:31 | → | lockshaw joins (~lockshaw@165.22.163.71) |
| 13:34:03 | → | Aquazi joins (uid312403@gateway/web/irccloud.com/x-nsgilupshvjjyzul) |
| 13:34:09 | → | geekosaur joins (82659a09@host154-009.vpn.uakron.edu) |
| 13:38:17 | lep-delete | is now known as test |
| 13:38:36 | test | is now known as lep-delete |
| 13:40:30 | hackage | git-annex 8.20201116 - manage files with git, without checking their contents into git https://hackage.haskell.org/package/git-annex-8.20201116 (JoeyHess) |
| 13:41:22 | × | toorevitimirp quits (~tooreviti@117.182.180.118) (Ping timeout: 246 seconds) |
| 13:41:34 | → | raichoo joins (~raichoo@dslb-088-077-025-015.088.077.pools.vodafone-ip.de) |
| 13:41:52 | → | toorevitimirp joins (~tooreviti@117.182.180.118) |
| 13:47:45 | × | knupfer quits (~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
| 13:48:36 | → | ggole joins (~ggole@2001:8003:8119:7200:a813:5a33:e96f:8fc6) |
| 13:49:25 | × | Yumasi quits (~guillaume@pop.92-184-106-1.mobile.abo.orange.fr) (Ping timeout: 264 seconds) |
| 13:49:53 | → | Yumasi joins (~guillaume@static-176-175-104-214.ftth.abo.bbox.fr) |
| 13:52:21 | → | bahamas joins (~lucian@unaffiliated/bahamas) |
| 13:53:27 | × | RandIter quits (~RandIter@178.162.212.214) (Remote host closed the connection) |
| 13:53:43 | → | Sanchayan joins (~Sanchayan@171.61.102.109) |
| 13:56:32 | → | Sgeo joins (~Sgeo@ool-18b982ad.dyn.optonline.net) |
| 14:00:58 | × | acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 246 seconds) |
| 14:02:41 | × | invaser quits (~Thunderbi@31.148.23.125) (Ping timeout: 265 seconds) |
| 14:02:58 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) |
| 14:03:23 | → | servo joins (~servo@41.92.32.131) |
| 14:03:24 | × | servo quits (~servo@41.92.32.131) (Max SendQ exceeded) |
| 14:03:33 | → | cinimod_ joins (uid93893@gateway/web/irccloud.com/x-jjuixteopossqepf) |
| 14:03:47 | → | servo joins (~servo@41.92.32.131) |
| 14:03:48 | × | servo quits (~servo@41.92.32.131) (Max SendQ exceeded) |
| 14:04:12 | → | servo joins (~servo@41.92.32.131) |
| 14:04:13 | × | servo quits (~servo@41.92.32.131) (Max SendQ exceeded) |
| 14:04:34 | → | servo joins (~servo@41.92.97.254) |
| 14:04:35 | × | servo quits (~servo@41.92.97.254) (Max SendQ exceeded) |
| 14:04:56 | → | servo joins (~servo@41.92.97.254) |
| 14:04:57 | × | servo quits (~servo@41.92.97.254) (Max SendQ exceeded) |
| 14:05:00 | → | christo joins (~chris@81.96.113.213) |
| 14:05:16 | → | nbloomf joins (~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) |
| 14:05:20 | → | servo joins (~servo@41.92.97.254) |
| 14:05:21 | × | servo quits (~servo@41.92.97.254) (Max SendQ exceeded) |
| 14:05:46 | → | servo joins (~servo@41.92.32.131) |
| 14:05:47 | × | servo quits (~servo@41.92.32.131) (Max SendQ exceeded) |
| 14:06:09 | → | servo joins (~servo@41.92.97.254) |
| 14:06:10 | × | servo quits (~servo@41.92.97.254) (Max SendQ exceeded) |
| 14:06:32 | → | hyperisco joins (~hyperisco@d192-186-117-226.static.comm.cgocable.net) |
| 14:06:36 | → | servo joins (~servo@41.92.32.131) |
| 14:06:37 | × | servo quits (~servo@41.92.32.131) (Max SendQ exceeded) |
| 14:07:00 | → | servo joins (~servo@41.92.97.254) |
| 14:08:09 | × | Jajik quits (xchlup2@gateway/shell/fi.muni.cz/x-dpprselxanrtxlgk) (Quit: Ping timeout (120 seconds)) |
| 14:08:22 | → | Jajik joins (xchlup2@gateway/shell/fi.muni.cz/x-jfxvsfpdsqpqvolb) |
| 14:09:05 | → | acarrico joins (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
| 14:09:22 | → | mmfood joins (~mmfood@81-232-132-159-no64.tbcn.telia.com) |
| 14:11:11 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 14:11:39 | × | cinimod_ quits (uid93893@gateway/web/irccloud.com/x-jjuixteopossqepf) () |
| 14:11:53 | → | cinimod_ joins (uid93893@gateway/web/irccloud.com/x-wrzxrzpvqphwukyg) |
| 14:13:30 | × | Kaivo quits (~Kaivo@104-200-86-99.mc.derytele.com) (Quit: WeeChat 2.9) |
| 14:13:40 | → | xsperry joins (~as@unaffiliated/xsperry) |
| 14:15:50 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
| 14:19:18 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 14:19:43 | × | Martinsos quits (~user@cpe-188-129-116-164.dynamic.amis.hr) (Ping timeout: 260 seconds) |
| 14:19:59 | × | Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
| 14:25:26 | <kuribas> | How do I model some subtype relation with classes? For example A contains some B, B contains some C, then I want a function that gives me all C in A. |
| 14:25:40 | → | p-core joins (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) |
| 14:25:55 | <kuribas> | like "allChildren someA @C" |
| 14:26:15 | <kuribas> | I could do this with overlapping type-classes, but they aren't recommended? |
| 14:26:36 | <merijn> | kuribas: tbh, what your asking also sounds "not recommended" :p |
| 14:27:07 | <kuribas> | merijn: so you would model every combination of subsets? |
| 14:27:30 | <merijn> | You're going to have to get a lot more specific about what that even means :) |
| 14:27:46 | × | gxt quits (~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection) |
| 14:28:51 | → | Stanley00 joins (~stanley00@unaffiliated/stanley00) |
| 14:28:58 | <kuribas> | well in lisp we have (select :park :sensor-box), and it would return all sensor-boxes in a park. |
| 14:29:06 | → | gxt joins (~gxt@gateway/tor-sasl/gxt) |
| 14:29:08 | <geekosaur> | ti sounded more like generics than classes to me |
| 14:30:33 | → | knupfer joins (~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) |
| 14:31:05 | <kuribas> | merijn: or you would explicitly compose them? |
| 14:31:32 | <kuribas> | like parkInverters >>> inverterSensorBoxes |
| 14:31:38 | × | jchia quits (~jchia@58.32.36.109) (*.net *.split) |
| 14:31:38 | × | TMA quits (tma@twin.jikos.cz) (*.net *.split) |
| 14:31:38 | × | jdt quits (~jdt@208.85.233.130) (*.net *.split) |
| 14:31:38 | × | adamCS quits (~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com) (*.net *.split) |
| 14:31:38 | × | Ranhir quits (~Ranhir@157.97.53.139) (*.net *.split) |
| 14:31:38 | × | qz quits (~quetzal@li272-85.members.linode.com) (*.net *.split) |
| 14:31:38 | × | [exa] quits (exa@unaffiliated/exa/x-5381537) (*.net *.split) |
| 14:31:38 | × | ring0` quits (~ringo@unaffiliated/ring0/x-8667941) (*.net *.split) |
| 14:31:38 | × | kqr quits (~kqr@vps.xkqr.org) (*.net *.split) |
| 14:31:49 | → | [exa] joins (exa@srv3.blesmrt.net) |
| 14:31:54 | → | qz joins (~quetzal@li272-85.members.linode.com) |
| 14:31:54 | → | jdt joins (~jdt@208.85.233.130) |
| 14:31:59 | → | adamCS joins (~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com) |
| 14:32:03 | → | TMA joins (tma@twin.jikos.cz) |
| 14:32:05 | → | Ranhir joins (~Ranhir@157.97.53.139) |
| 14:32:12 | <merijn> | kuribas: Are you maybe (accidentally) trying to reinvent the cursor stuff from xml-conduit? |
| 14:32:18 | → | ring0` joins (~ringo@unaffiliated/ring0/x-8667941) |
| 14:32:18 | → | kqr joins (~kqr@vps.xkqr.org) |
| 14:32:43 | → | jchia joins (~jchia@45.32.62.73) |
| 14:33:11 | <kuribas> | well, I have a containment relation. |
| 14:33:22 | <merijn> | kuribas: https://hackage.haskell.org/package/xml-conduit-1.8.0.1/docs/Text-XML-Cursor.html |
| 14:33:26 | × | Stanley00 quits (~stanley00@unaffiliated/stanley00) (Ping timeout: 272 seconds) |
| 14:33:46 | <merijn> | This handles exactly queries like "all XML tags with property Y starting from node X" style queries |
| 14:33:56 | <merijn> | Which sounds similar to what you're doing? |
| 14:34:04 | <kuribas> | merijn: yeah |
| 14:34:11 | <kuribas> | merijn: but this goes to the DB |
| 14:35:06 | → | renzhi joins (~renzhi@2607:fa49:655f:e600::28da) |
| 14:35:31 | <kuribas> | merijn: another example is a class relationship. Let's say I have a "attribute" type. (Attribute class tp), meaning I can extract a value of "tp" from an object of type "Object class" |
| 14:35:54 | <kuribas> | So "get :: Object class -> Attribute class tp -> m tp" |
| 14:36:08 | <kuribas> | But class has superclasses. |
| 14:36:32 | × | christo quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 14:37:03 | <kuribas> | so I want "get :: SuperClassOf class2 class1 => Object class1 -> Attribute class2 tp -> m tp" |
| 14:37:16 | <kuribas> | but then that only works if I use overlapping instances. |
| 14:37:29 | <merijn> | I would personally never contemplate going this route |
| 14:37:31 | <kuribas> | to get the transitive closure of superclasses. |
| 14:37:38 | <kuribas> | merijn: which route would you go then. |
| 14:37:40 | <merijn> | This'll all end in tears |
| 14:37:58 | <kuribas> | tell me which route well end in happiness |
| 14:38:07 | <merijn> | I don't really know what I *would* do, because I've never attempted this |
| 14:38:34 | × | cgfuh quits (~cgfuh@181.167.191.58) (Quit: WeeChat 2.9) |
| 14:38:40 | → | elfets joins (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) |
| 14:38:47 | <merijn> | kuribas: I would probably try and encode the accesors as a GADT and then just have transformers that can map them to their containing objects |
| 14:38:47 | → | Chi1thangoo joins (~Chi1thang@87.112.60.168) |
| 14:38:50 | <kuribas> | of course I could invent a "fancy haskell" solution, using type level lists, etc... |
| 14:39:20 | <merijn> | Any sort of "inheritance" style design with typeclasses always ends in cryptic errors, overlapping/incoherent instance nightmares, etc. |
| 14:39:49 | → | cgfuh joins (~cgfuh@181.167.191.58) |
| 14:40:45 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 14:41:24 | <kuribas> | merijn: I could make a custom type error |
| 14:41:40 | <merijn> | If "Attribute class tp" was a datatype with just the explicit function to make the appropriate lookup you can then define a Category and Profunctor instance and then generalising is just contramap the class type to the more general type |
| 14:41:46 | → | Tario joins (~Tario@201.192.165.173) |
| 14:42:02 | × | toorevitimirp quits (~tooreviti@117.182.180.118) (Ping timeout: 264 seconds) |
| 14:42:08 | <tomjaguarpaw> | Can I get access to RTS statistics at run time? I would like to see if it really is garbage collection that is causing my strange performance. |
| 14:42:14 | <merijn> | tomjaguarpaw: Yes |
| 14:42:23 | <tomjaguarpaw> | Where do I look for those? |
| 14:42:29 | <merijn> | tomjaguarpaw: Somewhere in the GHC.* modules in base |
| 14:42:51 | <kuribas> | merijn: you mean explicit subtyping? |
| 14:43:05 | × | geekosaur quits (82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection) |
| 14:43:12 | <merijn> | I mean "forgetting the term subtyping entirely" |
| 14:43:39 | <kuribas> | like: asClass :: IsSubClass a b => Attribute a tp -> Attribute b tp |
| 14:43:53 | <kuribas> | merijn: the model is already subtyped, I cannot change that. |
| 14:44:03 | <tomjaguarpaw> | Hmm GHC.Stats, I guess |
| 14:44:10 | <merijn> | Except, if Attribute is a datatype and has a profunctor instance then you don't even need IsSubClass or anything |
| 14:44:16 | <merijn> | You just need a function "a -> b" |
| 14:45:02 | <kuribas> | merijn: but class is just a phantom type to ensure you don't send an attribute to the wrong object. |
| 14:45:30 | <kuribas> | merijn: so a function a -> b is impossible. |
| 14:46:03 | <kuribas> | a and b are uninhabited |
| 14:46:05 | → | christo joins (~chris@81.96.113.213) |
| 14:47:34 | × | jchia quits (~jchia@45.32.62.73) (Remote host closed the connection) |
| 14:47:36 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 14:47:56 | → | jchia joins (~jchia@45.32.62.73) |
| 14:48:09 | × | Sanchayan quits (~Sanchayan@171.61.102.109) (Quit: leaving) |
| 14:48:12 | <merijn> | So, that just means you can't use profunctor. You can define a Convertible type with phantom attributes (probably as GADT or data family?) and then have "Convert a b -> Attribute a tp -> Attribute b tp" or something? |
| 14:49:12 | × | jchia quits (~jchia@45.32.62.73) (Remote host closed the connection) |
| 14:49:29 | <kuribas> | what's so bad about overlapping instances? |
| 14:49:33 | → | avdb joins (~avdb@ip-62-235-12-238.dsl.scarlet.be) |
| 14:49:58 | <hekkaidekapus> | tomjaguarpaw: 1) ghc -O2 -eventlog M.hs 2) ./M +RTS -lau 3) Roam Hackage searching the best events analyser for your liking. |
| 14:50:02 | × | acidjnk_new quits (~acidjnk@p200300d0c718f648045012e87868ed0b.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 14:50:08 | → | jchia joins (~jchia@58.32.36.109) |
| 14:51:12 | × | alp quits (~alp@2a01:e0a:58b:4920:1c72:d61a:7e48:b350) (Ping timeout: 260 seconds) |
| 14:51:26 | <hekkaidekapus> | tomjaguarpaw: <https://www.well-typed.com/blog/2019/09/eventful-ghc/> |
| 14:52:23 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 14:52:49 | <merijn> | kuribas: Instance selection is implementation defined and may change depending on which instances are defined/exposed in your dependencies |
| 14:53:10 | <kuribas> | merijn: they are all predefined |
| 14:53:29 | <merijn> | hekkaidekapus: THat's not at runtime, though |
| 14:53:36 | <merijn> | hekkaidekapus: At least not *within* the code |
| 14:54:34 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Ping timeout: 260 seconds) |
| 14:54:43 | <hekkaidekapus> | merijn: Not within the code but profiling an executable for GC events may be more helpful. |
| 14:55:05 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@ppp-27-55-82-144.revip3.asianet.co.th) |
| 14:57:00 | hackage | prolude 0.0.0.8 - ITProTV's custom prelude https://hackage.haskell.org/package/prolude-0.0.0.8 (goolord) |
| 14:57:43 | → | nados joins (~dan@69-165-210-185.cable.teksavvy.com) |
| 14:59:14 | → | invaser joins (~Thunderbi@31.148.23.125) |
| 15:00:01 | × | Guest2830 quits (~geekosaur@84.39.117.57) () |
| 15:00:32 | × | xff0x quits (~fox@2001:1a81:529e:a500:a7e0:336:a54e:d7a5) (Ping timeout: 260 seconds) |
| 15:00:46 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 15:00:50 | × | jakob_ quits (~textual@p200300f49f1622008dbefd778746ea7f.dip0.t-ipconnect.de) (Quit: Textual IRC Client: www.textualapp.com) |
| 15:00:56 | × | cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9) |
| 15:01:00 | → | __monty__ joins (~toonn@unaffiliated/toonn) |
| 15:04:03 | × | gxt quits (~gxt@gateway/tor-sasl/gxt) (Ping timeout: 240 seconds) |
| 15:04:20 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@ppp-27-55-82-144.revip3.asianet.co.th) (Ping timeout: 256 seconds) |
| 15:04:59 | <magicman> | The fact that Data.Map.Merge.{Lazy,Strict} exist makes me happy. Thanks to whomever did this. I don't know how long they've been there, but they're great. |
| 15:06:02 | × | invaser quits (~Thunderbi@31.148.23.125) (Ping timeout: 264 seconds) |
| 15:06:08 | <merijn> | I think micro-optimising that stuff in containers is David Feuer's baby? |
| 15:07:40 | → | jedws joins (~jedws@101.184.175.183) |
| 15:09:59 | → | lucasb joins (uid333435@gateway/web/irccloud.com/x-ezcrumvhrckwfdja) |
| 15:12:39 | → | xff0x joins (~fox@2001:1a81:529e:a500:a7e0:336:a54e:d7a5) |
| 15:13:22 | → | albert joins (~albert@user-5-173-8-190.play-internet.pl) |
| 15:13:53 | → | invaser joins (~Thunderbi@31.148.23.125) |
| 15:15:40 | × | idhugo quits (~idhugo@users-1190.st.net.au.dk) (Ping timeout: 265 seconds) |
| 15:17:48 | → | kritzefitz joins (~kritzefit@212.86.56.80) |
| 15:20:39 | <siraben> | Why would you need both lazy and strict map merging? |
| 15:21:27 | <merijn> | siraben: If you need to combine values for existing keys then how you do that depends on whether you have a strict or lazy map :p |
| 15:22:14 | <siraben> | I see. Does Data.Map default to strict or lazy? |
| 15:22:40 | <merijn> | Data.Map exports lazy |
| 15:22:55 | <merijn> | You need to import Data.Map.Strict for strict |
| 15:22:58 | <siraben> | I see. |
| 15:23:19 | <merijn> | (Note that the datatype is the same in both modules, only the functions chance) |
| 15:23:21 | × | jedws quits (~jedws@101.184.175.183) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 15:24:13 | <siraben> | I've used IntMap to represent the store in a Scheme interpreter. Is that best strict or lazy? |
| 15:25:42 | → | cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net) |
| 15:26:34 | <merijn> | siraben: The Map itself is always strict, so strict/lazy refers to the elements stored in it. So lazy map stores the (lazy, unevaluated) computation as value, whereas strict will store the evaluated thing as value |
| 15:27:09 | <merijn> | So if you have a map storing "small" values (like Int) and you know that computing the value is cheap and/or you will always use all values, then you probably want strict |
| 15:27:13 | × | acarrico quits (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 264 seconds) |
| 15:27:51 | × | thunderrd quits (~thunderrd@183.182.111.169) (*.net *.split) |
| 15:28:38 | → | vacm joins (~vacwm@70.23.92.191) |
| 15:28:53 | <siraben> | The IntMap can be strict but grow unbounded in size right? |
| 15:29:02 | <merijn> | because storing an int obviously costs less space than an arbitrary thunk |
| 15:29:19 | <siraben> | https://github.com/siraben/r5rs-denot/blob/126031d43b222dd1056f93e8fa078317c8701d2d/src/SchemeTypes.hs#L107 |
| 15:29:22 | <merijn> | siraben: strict just means that "values are evaluated to WHNF when you insert them" |
| 15:29:50 | <siraben> | Sounds like I'd want a strict IntMap then since these values are Scheme values or functions |
| 15:30:34 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 15:30:41 | → | Ariakenom joins (~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se) |
| 15:31:00 | × | mmfood quits (~mmfood@81-232-132-159-no64.tbcn.telia.com) (Quit: Leaving) |
| 15:31:53 | <tomjaguarpaw> | I've just noticed something very amusing. I can't pass +RTS to my executable when invoking cabal v2-exec because it as swallowed by cabal itself. |
| 15:32:46 | <merijn> | tomjaguarpaw: Use -- before the +RTS |
| 15:33:10 | <merijn> | tomjaguarpaw: So "cabal v2-exec myexe -- +RTS ..." |
| 15:33:45 | <reactormonk> | I'm on "which recursion scheme function do I use?". I've got Recursive / Corecursive instances over my AST. I wanna change an annotation (and its type). That annotation depends on the value of the current node and its leaves. |
| 15:33:59 | → | thunderrd joins (~thunderrd@183.182.111.169) |
| 15:34:34 | <merijn> | tomjaguarpaw: Someone already thought of and solved that problem ;) |
| 15:35:05 | <tomjaguarpaw> | What a clever person. And if there are two levels of nesting, -- -- ? |
| 15:35:13 | <tomjaguarpaw> | I just used -with-rtsopts :D |
| 15:36:51 | <merijn> | tomjaguarpaw: No clue, I've never had that problem nested doubly before :p |
| 15:36:51 | × | knupfer quits (~Thunderbi@dynamic-046-114-148-109.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
| 15:37:37 | → | gxt joins (~gxt@gateway/tor-sasl/gxt) |
| 15:38:28 | → | da39a3ee5e6b4b0d joins (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) |
| 15:45:31 | hackage | Z-Data 0.1.9.1 - Array, vector and text https://hackage.haskell.org/package/Z-Data-0.1.9.1 (winterland) |
| 15:48:00 | × | pavonia quits (~user@unaffiliated/siracusa) (Quit: Bye!) |
| 15:48:05 | <kuribas> | merijn: I can make this work without overlapping instances. It's just more ugly. |
| 15:48:29 | <kuribas> | merijn: I would need a extra phantom type in the multiparam typeclass |
| 15:48:44 | <kuribas> | merijn: A boolean to signify "stop searching" |
| 15:48:45 | × | jespada quits (~jespada@90.254.245.49) (Ping timeout: 240 seconds) |
| 15:50:11 | → | jespada joins (~jespada@90.254.245.49) |
| 15:50:14 | → | hnOsmium0001 joins (uid453710@gateway/web/irccloud.com/x-zpttjkkcshfghzwp) |
| 15:51:27 | × | albert quits (~albert@user-5-173-8-190.play-internet.pl) (Quit: Leaving) |
| 15:51:37 | × | ericsagn1 quits (~ericsagne@2405:6580:0:5100:1e63:f75b:d40e:f87e) (Ping timeout: 260 seconds) |
| 15:53:40 | → | idhugo joins (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) |
| 15:56:42 | → | GothAlice1 joins (~GothAlice@178.162.212.214) |
| 15:58:49 | → | Martinsos joins (~user@cpe-188-129-116-164.dynamic.amis.hr) |
| 15:59:14 | × | servo quits (~servo@41.92.97.254) (Remote host closed the connection) |
| 15:59:15 | → | conal joins (~conal@64.71.133.70) |
| 15:59:43 | × | conal quits (~conal@64.71.133.70) (Client Quit) |
| 16:00:01 | → | carlomagno joins (~cararell@148.87.23.10) |
| 16:01:06 | × | mputz quits (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Ping timeout: 265 seconds) |
| 16:01:21 | → | Rudd0 joins (~Rudd0@185.189.115.103) |
| 16:03:02 | → | ericsagn1 joins (~ericsagne@2405:6580:0:5100:af5d:a404:2c6:5e7e) |
| 16:04:55 | → | royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
| 16:05:41 | <dminuoso> | 15:43:39 kuribas | like: asClass :: IsSubClass a b => Attribute a tp -> Attribute b tp |
| 16:05:46 | <dminuoso> | kuribas: Take a look at optics |
| 16:05:57 | <dminuoso> | They implement a hierarchy with subtyping, supported by type families |
| 16:06:20 | <dminuoso> | Including utilities to calculate least upper bounds |
| 16:06:29 | → | alp joins (~alp@2a01:e0a:58b:4920:e453:474f:9209:5f93) |
| 16:06:30 | <dminuoso> | See |
| 16:06:32 | <dminuoso> | https://hackage.haskell.org/package/optics-core-0.3.0.1/docs/Optics-Internal-Optic-Subtyping.html#t:Is |
| 16:06:32 | × | p-core quits (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Remote host closed the connection) |
| 16:06:35 | <dminuoso> | https://hackage.haskell.org/package/optics-core-0.3.0.1/docs/Optics-Internal-Optic-Subtyping.html#t:Join |
| 16:06:48 | <dminuoso> | And https://hackage.haskell.org/package/optics-core-0.3.0.1/docs/Optics-Internal-Optic.html#v:castOptic |
| 16:06:49 | × | idhugo quits (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Ping timeout: 264 seconds) |
| 16:07:04 | → | justsomeguy joins (~justsomeg@2603:9000:960a:fc00:c4d2:5b73:c7b7:3a2b) |
| 16:07:04 | × | justsomeguy quits (~justsomeg@2603:9000:960a:fc00:c4d2:5b73:c7b7:3a2b) (Changing host) |
| 16:07:04 | → | justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311) |
| 16:07:21 | <dminuoso> | (It's very boilerplaty, but it works because the hierarchy is pretty much fixed in size.) |
| 16:09:09 | × | bahamas quits (~lucian@unaffiliated/bahamas) (Quit: leaving) |
| 16:10:05 | <kuribas> | dminuoso: actually, that should work for my case! |
| 16:10:34 | → | mirrorbird joins (~psutcliff@89.40.182.152) |
| 16:11:05 | <kuribas> | I don't even need type families IMO... |
| 16:11:46 | × | avdb quits (~avdb@ip-62-235-12-238.dsl.scarlet.be) (Ping timeout: 256 seconds) |
| 16:11:56 | <dminuoso> | Depends on what your goals are. Here, the Join type family is useful because if you compose two optics, the resulting optic is their least upper bound |
| 16:12:13 | <dminuoso> | (i.e. A_Prism composed with A_Lens gives you An_AffineFold) |
| 16:12:40 | → | idhugo joins (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) |
| 16:13:42 | × | zfnmxt quits (~zfnmxt@unaffiliated/zfnmxt) (Quit: Bye!) |
| 16:13:50 | <kuribas> | instance IsA k k; IsA MySubClass b => instance IsA b MyClass |
| 16:14:30 | <kuribas> | ah no, that's overlapping... |
| 16:14:32 | → | zfnmxt joins (~zfnmxt@unaffiliated/zfnmxt) |
| 16:21:59 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 16:22:12 | × | xff0x quits (~fox@2001:1a81:529e:a500:a7e0:336:a54e:d7a5) (Ping timeout: 260 seconds) |
| 16:22:24 | → | lottaquestions_ joins (~nick@2607:fa49:5040:d100:54ba:4f0:c193:a93d) |
| 16:22:43 | × | mirrorbird quits (~psutcliff@89.40.182.152) (Quit: Leaving) |
| 16:22:52 | → | xff0x joins (~fox@2001:1a81:529e:a500:93fd:46ff:4df5:fd50) |
| 16:24:01 | ← | lottaquestions_ parts (~nick@2607:fa49:5040:d100:54ba:4f0:c193:a93d) ("Konversation terminated!") |
| 16:24:31 | → | cads2 joins (~cads@ip-64-72-99-232.lasvegas.net) |
| 16:25:03 | → | Sgeo_ joins (~Sgeo@ool-18b982ad.dyn.optonline.net) |
| 16:27:25 | × | Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 240 seconds) |
| 16:28:25 | × | Sgeo quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 264 seconds) |
| 16:29:58 | <tomjaguarpaw> | Hmm, so according to getRTSStats GC is taking a lot (80%) of the time of the function I want to benchmark |
| 16:30:20 | <kuribas> | dminuoso: nevermind, these are generated, I could as well generate instance for every possible superclass. |
| 16:30:24 | <tomjaguarpaw> | Well, about 3% for small input data and 80% for large input data (the input data are expression trees) |
| 16:31:04 | <Uniaika> | tomjaguarpaw: :o |
| 16:31:27 | <dminuoso> | kuribas: Im not telling you this is how you should do it, just as an inspiration perhaps. |
| 16:31:43 | <dminuoso> | The underlying implementation works because the inheritance is given by constraint mixing. |
| 16:32:00 | <dminuoso> | (So castOptic relies on constraint implications to work properly) |
| 16:33:01 | <dminuoso> | class Is k l where implies :: (Constraints k p => r) -> (Constraints l p => r) |
| 16:33:12 | <kuribas> | dminuoso: looks complicated ... |
| 16:33:34 | <dminuoso> | kuribas: Well the idea is rather simple really |
| 16:33:46 | <Uniaika> | tomjaguarpaw: would you need mutable datastructures? |
| 16:34:04 | <dminuoso> | kuribas: Handwavingly, an optic is something of type: type Optic c s t a b = forall p. c p => p a b -> p s t |
| 16:34:07 | <kuribas> | dminuoso: so my solution would verbose but simple: data SomeClass; instance IsSubClass SomeClass SuperClass; instance IsSubClass SomeClass SuperClassOfSuperClass |
| 16:34:12 | <dminuoso> | Where c is some constraints |
| 16:34:24 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
| 16:34:32 | × | chele quits (~chele@ip5b416ea2.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
| 16:34:54 | <dminuoso> | So `type Lens s t a b = forall p. Strong p => p a b -> p s t` |
| 16:35:12 | <dminuoso> | And `type Prism s t a b = forall p. Choice p => p a b -> p s t` |
| 16:35:28 | <kuribas> | for a funny definition of "simple" |
| 16:35:31 | <dminuoso> | Hold on! |
| 16:35:54 | <kuribas> | dminuoso: you don't need to convince me, this is meant for haskell newbees. |
| 16:36:12 | <dminuoso> | `type AffineTraversal s t a b = forall p. Visiting p => p a b -> p s t` |
| 16:36:13 | → | avdb joins (~avdb@ip-213-49-61-183.dsl.scarlet.be) |
| 16:36:16 | <dminuoso> | kuribas: The idea now is: |
| 16:36:49 | <dminuoso> | Strong and Choice give you Visiting. |
| 16:38:07 | <dminuoso> | Because: class (Choice p, Strong p) => Visiting p |
| 16:39:18 | → | electricityZZZZ joins (~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net) |
| 16:41:48 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 256 seconds) |
| 16:43:01 | <dminuoso> | kuribas: *sorry there was a typo. The other way around, Visibility implies Choice and Strong. |
| 16:43:40 | × | idhugo quits (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Read error: Connection reset by peer) |
| 16:43:42 | → | Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) |
| 16:44:13 | → | idhugo joins (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) |
| 16:44:15 | <kuribas> | dminuoso: that's hardly easy... |
| 16:44:19 | <dminuoso> | So if you plug in something that gives Visiting, then you can also treat this as Choice and Strong |
| 16:44:46 | <kuribas> | I just feel that most of what is in lens is fluff |
| 16:44:50 | × | christo quits (~chris@81.96.113.213) (Remote host closed the connection) |
| 16:44:50 | × | da39a3ee5e6b4b0d quits (~da39a3ee5@cm-171-98-76-220.revip7.asianet.co.th) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 16:44:58 | <kuribas> | it's nice, and cool it's possible, but not that necessary |
| 16:45:19 | <kuribas> | there's a small core which is very useful, like lenses, prisms, traversals |
| 16:48:40 | × | vacm quits (~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 16:49:34 | → | nbloomf joins (~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) |
| 16:50:06 | → | conal joins (~conal@64.71.133.70) |
| 16:50:10 | <tomjaguarpaw> | Uniaika: I'm not sure what you mean "Would I need mutable datastructures". Everything I am doing is without mutation |
| 16:50:21 | <kuribas> | dminuoso: if I want to put emphasis on the benefits of haskell to a non-haskell programmer, and I show them this, they think I am crazy. |
| 16:50:24 | <tomjaguarpaw> | Are you saying mutable data structures could cause less garbage? |
| 16:51:19 | <merijn> | tomjaguarpaw: Are you, by any chance, using the threaded runtime system? |
| 16:51:25 | <Uniaika> | tomjaguarpaw: well, if you're applying a lot of transformations on an immutable datastructure, it produces a lot of garbage, right? |
| 16:51:27 | <tomjaguarpaw> | Not knowingly |
| 16:51:40 | <merijn> | Uniaika: That's not really relevant, though |
| 16:51:43 | <tomjaguarpaw> | I don't have "-threaded" in my cabal file |
| 16:51:46 | <Uniaika> | merijn: alright |
| 16:51:48 | <merijn> | Uniaika: GC time doesn't scale with amount of garbage |
| 16:51:59 | <Uniaika> | merijn: oh? my bad :) |
| 16:52:01 | <merijn> | Uniaika: GHC's GC scales with "amount of non-garbage" |
| 16:52:08 | <kuribas> | but ghc is optimized for lots of garbage. |
| 16:52:18 | <justsomeguy> | What does the “temp->data = value;” in the code sample here https://en.wikipedia.org/wiki/Linked_list#Singly_linked_lists mean? Is this like “data.value = temp”, where ``data.value`` is a record data with a field value? |
| 16:52:20 | <tomjaguarpaw> | I have large amounts of non-garbage, but perhaps only 1GB |
| 16:52:23 | <kuribas> | using mutable data can be even worse. |
| 16:52:24 | <merijn> | Uniaika: For exactly this reason, lazy evaluation produces *tons* of garbage :) |
| 16:52:44 | <merijn> | tomjaguarpaw: Oh, yes, that can hurt you |
| 16:52:48 | <Uniaika> | kuribas: TIL, thanks for correcting me |
| 16:53:00 | <Uniaika> | merijn: I'm interested in knowing more about how non-garbage affects GC times |
| 16:53:02 | <merijn> | tomjaguarpaw: Is this large amount constant during most of your application? |
| 16:53:10 | × | royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
| 16:53:27 | <tomjaguarpaw> | No, it's the benchmark input data |
| 16:53:43 | <tomjaguarpaw> | So I generate something that's about 1 GB, run a function on it, GOTO 10 |
| 16:53:49 | × | jlamothe quits (~jlamothe@198.251.55.207) (Quit: leaving) |
| 16:53:52 | <merijn> | Uniaika: GHC uses a "copy & compact" collector, so when GC is triggered, we allocate a new heap and copy all "live" (i.e. non-garbage) data to the new heap, and then throw away the entire old heap |
| 16:54:10 | <merijn> | Uniaika: So if there's only 20 bytes of live data and 20 GB of garbage, you only copy 20 bytes and are done |
| 16:54:35 | <Uniaika> | oh my, this is indeed genius when you have lots of garbage |
| 16:54:39 | <merijn> | tomjaguarpaw: Ok, rephrase, this input should be independent of your benchmark, yes |
| 16:54:44 | <merijn> | Uniaika: It has some other benefits too |
| 16:54:58 | <tomjaguarpaw> | What do you mean by "independent"? |
| 16:55:36 | <merijn> | Uniaika: One problem with many GC solutions is "fragmentation" i.e. if all your data is scattered throughout your memory, it can be hard to find space to allocate huge chunks. Compacting avoids this by resulting in zero fragmentation |
| 16:56:02 | <merijn> | tomjaguarpaw: Well, you can use a compact region to GC you 1 GB ahead of time and make future GC (during your benchmark) essentially free |
| 16:56:30 | <merijn> | Uniaika: There's another benefit. If all data in your heap is compact at the start of your heap, your allocator becomes *really* cheap |
| 16:56:37 | <tomjaguarpaw> | Interesting. I have never done that. |
| 16:56:50 | <tomjaguarpaw> | That sounds nice. |
| 16:57:01 | hackage | lz4-hs 0.1.5.1 - lz4 bindings for Haskell https://hackage.haskell.org/package/lz4-hs-0.1.5.1 (vmchale) |
| 16:57:05 | × | enoq quits (~textual@194-208-146-143.lampert.tv) (Quit: Textual IRC Client: www.textualapp.com) |
| 16:57:21 | <merijn> | Uniaika: Basically, your allocator is just "a pointer to the end of the current use region of the heap", allocation is just "increment pointer by 20 bytes". Which is good because lazy languages don't just produce a lot of garbage, they allocate a lot too |
| 16:58:06 | <merijn> | tomjaguarpaw: Basically, you GC an entire chunk of data into a separate compact region and instead of copying the data on every GC, it only copies the entry point to the region |
| 16:58:36 | <merijn> | tomjaguarpaw: https://tech.channable.com/posts/2020-04-07-lessons-in-managing-haskell-memory.html |
| 16:58:38 | → | vacm joins (~vacwm@70.23.92.191) |
| 16:59:18 | <tomjaguarpaw> | Cool, thanks merijn! That could be very handy. Right now I am measuring GC time and subtracting it :P |
| 17:00:08 | <merijn> | tomjaguarpaw: It will obviously slow down your overall time to run the benchmarks (if you use data only once and need to copy all of it first, that's slower). But it's deterministic at least |
| 17:00:29 | → | knupfer joins (~Thunderbi@200116b82cb80f00d4db69fffe520a17.dip.versatel-1u1.de) |
| 17:00:29 | × | knupfer quits (~Thunderbi@200116b82cb80f00d4db69fffe520a17.dip.versatel-1u1.de) (Client Quit) |
| 17:00:31 | × | conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
| 17:00:43 | → | knupfer joins (~Thunderbi@i5E86B4E0.versanet.de) |
| 17:01:31 | × | Amras quits (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds) |
| 17:01:53 | × | justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds) |
| 17:02:01 | <tomjaguarpaw> | I don't really mind that. Copying the data will be quick compared to running the function. |
| 17:02:51 | → | cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
| 17:03:44 | → | kritzefitz_ joins (~kritzefit@212.86.56.80) |
| 17:03:50 | → | idhugo_ joins (~idhugo@80-62-116-202-mobile.dk.customer.tdc.net) |
| 17:04:01 | <glguy> | Anyone what the complexity is of ghc-compat's compactAdd? I'm wondering if it has to copy the whole compact region or if it is able to add incrementally |
| 17:04:31 | <merijn> | glguy: Sounds like a question for #ghc :) |
| 17:04:45 | × | quarters quits (~quarters@unaffiliated/quarters) (Ping timeout: 240 seconds) |
| 17:06:05 | × | Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
| 17:06:50 | × | idhugo quits (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Ping timeout: 265 seconds) |
| 17:07:48 | × | incertia quits (~incertia@d60-65-215-180.col.wideopenwest.com) (Ping timeout: 265 seconds) |
| 17:10:43 | → | p-core joins (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) |
| 17:11:06 | × | Ariakenom quits (~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se) (Read error: Connection reset by peer) |
| 17:11:21 | → | geekosaur joins (82659a09@host154-009.vpn.uakron.edu) |
| 17:11:25 | <Martinsos> | I read that ghc recently added a new type of GC, "incremental", that works in a different fashion and should help with avoiding big spikes of GC. How does that fit into the discussion? Can we choose which one we use? Does it affect the strategies around GC? |
| 17:11:51 | <merijn> | Martinsos: There is a new GC in recent GHCs yes |
| 17:11:51 | → | idhugo__ joins (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) |
| 17:12:15 | <merijn> | Martinsos: The answer is the if you do not require stable latency, the default one is probably best |
| 17:12:19 | → | Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas) |
| 17:12:26 | × | asheshambasta quits (~user@ptr-e1lysawl9rr13i61o92.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
| 17:12:50 | → | incertia joins (~incertia@d60-65-215-180.col.wideopenwest.com) |
| 17:13:02 | × | knupfer quits (~Thunderbi@i5E86B4E0.versanet.de) (Ping timeout: 272 seconds) |
| 17:14:17 | <Martinsos> | merijn: Makes sense! I am planning to try to build a game as a side project, in Haskell, so that is why I was reading about GC - this new GC should be better for games if I got it correctly, to avoid sudden loss of ticks/frames. So I guess we need to set some flag to use non-default one? |
| 17:14:52 | × | idhugo_ quits (~idhugo@80-62-116-202-mobile.dk.customer.tdc.net) (Ping timeout: 246 seconds) |
| 17:15:12 | <merijn> | Martinsos: It'd be better for games, yes. Although, honestly I don't think the latency guaranteed by the new GC is good enough for high FPS games |
| 17:15:41 | <merijn> | At least, not without managing the amount of live data, etc. manually |
| 17:17:32 | → | christo joins (~chris@81.96.113.213) |
| 17:18:04 | <Martinsos> | merijn: Cool! I am aware Haskell is probably not the best choice for high FPS games due to GC, C++ would or some lower language would be better choice, but I doubt my game will require that level of performance so it should be fine, and I am excited about modeling everything in Haskell. |
| 17:18:20 | <merijn> | Martinsos: The max pause time for the new one is 20ms, but a 60 FPS framerate gives you 16.6ms *max* per frame |
| 17:19:04 | <merijn> | Martinsos: OTOH, you could consider writing a dedicated render loop in C that talkes with Haskell code implementing game logic |
| 17:19:19 | <merijn> | Then you might get logic pauses, without hitting framerate |
| 17:19:37 | <Martinsos> | Right, I was hoping I could extract some parts into C if needed! |
| 17:19:59 | × | hekkaidekapus quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Remote host closed the connection) |
| 17:20:18 | <merijn> | And also, just because you *can* hit that latency, doesn't mean you will. If your gamestate is small even the regular collector might be good enough |
| 17:20:24 | → | hekkaidekapus joins (~tchouri@gateway/tor-sasl/hekkaidekapus) |
| 17:21:53 | <Martinsos> | Sure, the game will be 2D with lightweight graphics so I don't think it should be an issue. If it will be it will at least be an opportunity to learn more about GC :D. |
| 17:22:02 | × | christo quits (~chris@81.96.113.213) (Ping timeout: 256 seconds) |
| 17:22:24 | → | justanotheruser joins (~justanoth@unaffiliated/justanotheruser) |
| 17:26:37 | × | kuribas quits (~user@ptr-25vy0iaahu2pezvpnfb.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3)) |
| 17:29:54 | → | hexreel joins (~h@2600:1700:28e2:14d0:b0ee:1522:822e:a283) |
| 17:30:17 | → | Tario joins (~Tario@201.192.165.173) |
| 17:31:30 | → | conal joins (~conal@64.71.133.70) |
| 17:35:43 | × | borne quits (~fritjof@200116b864b5430099e934deb93b1409.dip.versatel-1u1.de) (Ping timeout: 272 seconds) |
| 17:36:12 | → | conal_ joins (~conal@107.181.166.220) |
| 17:36:20 | → | royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
| 17:36:30 | × | conal quits (~conal@64.71.133.70) (Ping timeout: 260 seconds) |
| 17:37:12 | × | Aquazi quits (uid312403@gateway/web/irccloud.com/x-nsgilupshvjjyzul) (Quit: Connection closed for inactivity) |
| 17:38:51 | → | Iceland_jack joins (~user@31.124.48.169) |
| 17:41:25 | × | hiroaki quits (~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
| 17:42:45 | → | hiroaki joins (~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de) |
| 17:45:57 | × | conal_ quits (~conal@107.181.166.220) (Quit: Computer has gone to sleep.) |
| 17:48:33 | → | crdrost joins (~crdrost@2601:646:8280:85f0:51fc:6f63:a768:a428) |
| 17:49:02 | → | christo joins (~chris@81.96.113.213) |
| 17:49:36 | × | avdb quits (~avdb@ip-213-49-61-183.dsl.scarlet.be) (Read error: Connection reset by peer) |
| 17:50:23 | × | ChaiTRex quits (~ChaiTRex@gateway/tor-sasl/chaitrex) (Ping timeout: 240 seconds) |
| 17:50:31 | → | avdb joins (~avdb@ip-213-49-61-183.dsl.scarlet.be) |
| 17:50:59 | → | conal joins (~conal@64.71.133.70) |
| 17:51:28 | × | conal quits (~conal@64.71.133.70) (Client Quit) |
| 17:52:15 | → | conal joins (~conal@64.71.133.70) |
| 17:52:45 | → | ChaiTRex joins (~ChaiTRex@gateway/tor-sasl/chaitrex) |
| 17:53:05 | × | christo quits (~chris@81.96.113.213) (Ping timeout: 240 seconds) |
| 17:53:25 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
| 17:53:26 | × | hekkaidekapus quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Remote host closed the connection) |
| 17:53:35 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 17:53:49 | → | hekkaidekapus joins (~tchouri@gateway/tor-sasl/hekkaidekapus) |
| 17:55:35 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 17:56:01 | → | otulp joins (~otulp@ti0187q162-6038.bb.online.no) |
| 17:57:02 | × | Varis quits (~Tadas@unaffiliated/varis) (Ping timeout: 264 seconds) |
| 17:58:42 | → | jlamothe joins (~jlamothe@198.251.55.207) |
| 17:58:47 | × | justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) (Ping timeout: 260 seconds) |
| 18:00:01 | × | GothAlice1 quits (~GothAlice@178.162.212.214) () |
| 18:00:25 | × | xff0x quits (~fox@2001:1a81:529e:a500:93fd:46ff:4df5:fd50) (Ping timeout: 272 seconds) |
| 18:01:04 | → | xff0x joins (~fox@2001:1a81:529e:a500:b7fe:796e:1fbb:7036) |
| 18:01:42 | × | crdrost quits (~crdrost@2601:646:8280:85f0:51fc:6f63:a768:a428) (Ping timeout: 260 seconds) |
| 18:02:27 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 18:03:04 | → | moet joins (~moet@mobile-166-137-177-145.mycingular.net) |
| 18:04:28 | → | crdrost joins (~crdrost@c-98-207-102-156.hsd1.ca.comcast.net) |
| 18:08:52 | → | Wood joins (~wood@2001:d08:1003:2574:5caf:6abd:a992:e5a2) |
| 18:08:52 | × | coot quits (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
| 18:09:12 | → | coot joins (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) |
| 18:10:42 | × | boxscape quits (54a35f37@gateway/web/cgi-irc/kiwiirc.com/ip.84.163.95.55) (Ping timeout: 256 seconds) |
| 18:12:13 | × | conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
| 18:13:04 | → | howdoi joins (uid224@gateway/web/irccloud.com/x-pvtzxvglhmvabpwf) |
| 18:13:57 | × | Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
| 18:14:27 | → | conal joins (~conal@64.71.133.70) |
| 18:15:18 | ← | hexreel parts (~h@2600:1700:28e2:14d0:b0ee:1522:822e:a283) () |
| 18:17:28 | × | avdb quits (~avdb@ip-213-49-61-183.dsl.scarlet.be) (Quit: avdb) |
| 18:17:43 | × | cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 260 seconds) |
| 18:18:19 | → | chaosmasttter joins (~chaosmast@p200300c4a73c52016862557d78ae998a.dip0.t-ipconnect.de) |
| 18:19:32 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds) |
| 18:22:40 | → | Frost joins (~Frost@185.163.110.116) |
| 18:22:46 | × | cads2 quits (~cads@ip-64-72-99-232.lasvegas.net) (Read error: Connection reset by peer) |
| 18:22:50 | × | conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
| 18:23:38 | → | cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net) |
| 18:24:29 | × | alp quits (~alp@2a01:e0a:58b:4920:e453:474f:9209:5f93) (Ping timeout: 272 seconds) |
| 18:24:33 | → | conal joins (~conal@64.71.133.70) |
| 18:26:04 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 18:30:36 | <sm[m]> | people making "normal" (non-AAA, non-huge) games have said even the standard GC was not a problem |
| 18:31:15 | → | buterthebuddha joins (~user@35.1.134.251) |
| 18:32:56 | × | otulp quits (~otulp@ti0187q162-6038.bb.online.no) (Quit: Lost terminal) |
| 18:35:19 | → | Varis joins (~Tadas@unaffiliated/varis) |
| 18:36:42 | × | idhugo__ quits (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Ping timeout: 260 seconds) |
| 18:37:30 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 18:38:06 | × | vacm quits (~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 18:41:26 | × | Unhammerd quits (~Unhammer@gateway/tor-sasl/unhammer) (Remote host closed the connection) |
| 18:42:04 | → | Unhammerd joins (~Unhammer@gateway/tor-sasl/unhammer) |
| 18:43:38 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 18:45:53 | → | AlterEgo- joins (~ladew@124-198-158-163.dynamic.caiway.nl) |
| 18:47:56 | → | mwehner joins (~martin@li910-8.members.linode.com) |
| 18:48:09 | <edwardk> | merijn: i figure if i'm going to write a game in haskell i'm probably aiming for 30fps and doing a bit of lerping over the last two physics frames (using an approach by gafferongames) to try to hit anything higher. |
| 18:48:50 | <merijn> | edwardk: I'd probably consider is an excuse to finally learn Rust :p |
| 18:48:59 | <edwardk> | Martinsos: for 2d, especially with fairly tightly designed game logic and an eye towards unboxing you'll likely be okay |
| 18:49:33 | × | p-core quits (~Thunderbi@2001:718:1e03:5128:2ab7:7f35:48a1:8515) (Remote host closed the connection) |
| 18:49:55 | → | vacm joins (~vacwm@70.23.92.191) |
| 18:50:19 | <edwardk> | merijn: heh i was working on a toy project to do something in a browser and was going to drive it with ghcjs, so i first stopped and wrote the most optimized version of the basic code path i could in javascript to see if i could even get the gc pauses down to an acceptable level. then i never got around to writing the haskell version. |
| 18:50:41 | <edwardk> | and then davean decided to do something else anyways so it died =P |
| 18:50:42 | × | LKoen quits (~LKoen@9.253.88.92.rev.sfr.net) (Remote host closed the connection) |
| 18:51:09 | → | motherfsck joins (~motherfsc@unaffiliated/motherfsck) |
| 18:51:16 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 18:52:23 | <edwardk> | hah, it still runs. http://ekmett.github.io/arcade/static/ loads in chrome, wasd, 1-9 spawns stuff, 0 wipes it all out, mouse grabs, q/e raises lowers what you have grabbed. c and b show some debugging info, the menus are basically nonsense. |
| 18:52:37 | <edwardk> | iirc it doesn't work in firefox |
| 18:52:49 | <bollu> | does anyone have references to haskell codebases other than GHC that do a lot of analysis / transformations on an AST? |
| 18:53:40 | <merijn> | bollu: "literally every compiler written in Haskell"? ;) |
| 18:53:45 | <bollu> | merijn yes, which ones? ;) |
| 18:53:50 | <bollu> | ermine doesn't do many transformations |
| 18:54:00 | <merijn> | What does Idris do? |
| 18:54:06 | <davean> | edwardk: ... that causes 'lens' |
| 18:54:08 | <edwardk> | especially in the haskell codebase that we never finished |
| 18:54:09 | <bollu> | good question. I should check |
| 18:54:22 | <davean> | edwardk: The project litterly became 'lens' and there was no way lens was getting done in time :-p |
| 18:54:43 | <edwardk> | davean: nah, lens was done first. the game engine lens came out of was ~5 years before this |
| 18:54:52 | <edwardk> | THAT one wasn't getting done on time =) |
| 18:55:03 | <merijn> | edwardk: I think games pretty much the only reason I'd use Rust, because for the rest of the stuff I ever write GHC's GC is perfectly fine :p |
| 18:55:07 | <bollu> | hm seems like idris2 is self hosted |
| 18:55:17 | <bollu> | so I gotta read the original idris if I want to get a sense of Haskellisms |
| 18:55:23 | <edwardk> | but yeah. rust has me super jealous at times. i look at makepad and weep. |
| 18:55:45 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Remote host closed the connection) |
| 18:55:49 | → | Deide joins (~Deide@217.155.19.23) |
| 18:56:04 | <davean> | I'm sad at the state of wasm, particularly because its the new JVM |
| 18:56:07 | <merijn> | bollu: Agda? But that's not very optimising I guess? |
| 18:56:08 | → | vicfred joins (~vicfred@unaffiliated/vicfred) |
| 18:56:14 | <edwardk> | https://makepad.nl/ is written in rust, as an editor for rust, compiling to either native of web assembly, renders using shaders compiled from rust... |
| 18:56:21 | <davean> | I strongly back having a good wasm backend soon. |
| 18:56:41 | × | britva quits (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep) |
| 18:56:59 | <edwardk> | the idealized form of a haskell version of the same thing would be a ratsnest of EDSLs that aren't quite up to the same task |
| 18:57:27 | → | Ariakenom joins (~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se) |
| 18:57:31 | <davean> | Yah, rust has a MUCH better compilation story. |
| 18:57:34 | <edwardk> | heck, the makepad stuff can even use webxr to render as a vr scene at this point |
| 18:58:02 | <merijn> | davean: Their compile times seem to be about as bad as GHC, though :p |
| 18:58:08 | <davean> | merijn: eh, so what? |
| 18:58:10 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 18:58:13 | <edwardk> | merijn: idris 2 has much better compile times |
| 18:58:27 | <edwardk> | or do you mean rust? |
| 18:58:32 | <merijn> | edwardk: Wait, we were talking about Rust, no? |
| 18:58:44 | <edwardk> | ah, thought you might be replying to bollu still |
| 18:58:45 | → | jamm_ joins (~jamm@unaffiliated/jamm) |
| 18:58:55 | <davean> | merijn: I'd be happy to give GHC a few CPU-months if I could get 10% better optimization. |
| 18:58:59 | <merijn> | davean: I'm an ADHD millenial, I ain't got the patience for that >.< |
| 18:59:15 | <bollu> | merijn yeah, I don't think Agda "does much" with the AST. I could be wrong |
| 18:59:52 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds) |
| 19:00:13 | → | wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
| 19:00:15 | <davean> | merijn: --pay-for-it-to-be-faster $2000 |
| 19:00:41 | <merijn> | davean: I'm a millenial, I ain't got any money ;) |
| 19:00:47 | → | Tario joins (~Tario@201.192.165.173) |
| 19:01:00 | × | jespada quits (~jespada@90.254.245.49) (Quit: Leaving) |
| 19:01:03 | <davean> | merijn: not if you pay for the hosts to run slow code you won't! |
| 19:01:26 | <edwardk> | davean: i'm still working on that fungibility of compilation performance story =P |
| 19:01:28 | <monochrom> | Oh haha great, in-compiler purchase, "us$0.99 for 1 percentile speedup" |
| 19:01:44 | × | geekosaur quits (82659a09@host154-009.vpn.uakron.edu) (Ping timeout: 245 seconds) |
| 19:01:49 | <merijn> | davean: See, I've got a super good lifehack to work around that! |
| 19:02:01 | <monochrom> | The best of both worlds of FOSS and capitalism. Thanks merijn for the great idea. >:) |
| 19:02:05 | <merijn> | davean: I just don't host or run any code, because of the aforementioned lack of money ;) |
| 19:02:33 | <davean> | What annoys me is when type checking gets slow. |
| 19:02:35 | <edwardk> | monochrom: if we have to compile in the cloud and try a rather non-trivial number of constructions using lots of machines that isn't actually an unreasonable approach. it has been kind of my mental model for a while now. |
| 19:02:43 | <davean> | I very rarely want to compile my code, I often want to type check it. |
| 19:03:12 | × | berberman quits (~berberman@unaffiliated/berberman) (Ping timeout: 260 seconds) |
| 19:03:21 | <dolio> | It sounds unreasonable to me. |
| 19:03:23 | <edwardk> | "how do i spin up 10k machines on tasks like program synthesis and verification and spend them efficiently?" is very much in my line of research. |
| 19:03:37 | → | berberman joins (~berberman@unaffiliated/berberman) |
| 19:03:41 | <electricityZZZZ> | edwardk: oh hey, can we dm regarding that? |
| 19:03:43 | <monochrom> | Err I mean davean! Thanks davean for the great idea >:) |
| 19:03:58 | <edwardk> | electricityZZZZ: we can, today is going to be a bit busy for me, but i'll try to respond as i can |
| 19:04:03 | <electricityZZZZ> | cool |
| 19:04:25 | <davean> | monochrom: I'm already on that idea :-p |
| 19:04:46 | <edwardk> | in any event, let's just say that existing cloud hosting providers get pissy about providing for that much burst traffic =P |
| 19:05:10 | × | elfets quits (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving) |
| 19:05:32 | <davean> | edwardk: not QUITE true |
| 19:05:48 | <monochrom> | davean: -fno-code helps for just checking syntax and types. |
| 19:05:57 | <davean> | monochrom: I'm aware, I do that all the time :) |
| 19:06:03 | <davean> | As I said, I almost never compile my code. |
| 19:06:11 | <davean> | Compiling is for releasing! |
| 19:06:17 | <monochrom> | Although, in the framework of cabal, it is annoying to manually switch it on and off and on again and off again... |
| 19:06:18 | <edwardk> | davean: i spent much of the last year wrestling with AWS, google cloud, etc. trying to get them to let me exchange money for goods and services. |
| 19:06:29 | <edwardk> | it appears that capitalism has yet to reach the cloud. |
| 19:06:41 | <davean> | edwardk: Spot market man. |
| 19:06:53 | <monochrom> | Haha great, "compiling is for releasing!" is even stronger than "if it type-checks it's correct". |
| 19:08:00 | → | otulp joins (~otulp@ti0187q162-6038.bb.online.no) |
| 19:08:29 | × | raichoo quits (~raichoo@dslb-088-077-025-015.088.077.pools.vodafone-ip.de) (Quit: Lost terminal) |
| 19:09:17 | <monochrom> | For it means you don't even test your ship/release/deployment step. "I'll gen code on the shipment day!" |
| 19:09:43 | <davean> | No, you gen code and run the tests and release. |
| 19:09:59 | <edwardk> | davean: yeah. you just need to beg and plead until they give you access to it at any meaningful capacity. |
| 19:10:16 | <edwardk> | MIRI has good access to these things, but I was originally doing this on my private accounts |
| 19:10:19 | <monochrom> | "You know what, this is an open-source project 'release' just means posting the source code on github, so I won't even need to gen code" |
| 19:11:01 | × | moet quits (~moet@mobile-166-137-177-145.mycingular.net) (Ping timeout: 264 seconds) |
| 19:11:12 | <monochrom> | "This is known as proof erasure in type theory." >:) |
| 19:12:34 | → | argent0 joins (~argent0@168.227.98.83) |
| 19:13:36 | × | kritzefitz quits (~kritzefit@212.86.56.80) (Ping timeout: 256 seconds) |
| 19:13:40 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 19:14:51 | <monochrom> | burst traffic sounds like analogous to electricity industry's notion of inductive load |
| 19:14:53 | × | subttle quits (~anonymous@unaffiliated/subttle) (Quit: leaving) |
| 19:15:16 | × | kritzefitz_ quits (~kritzefit@212.86.56.80) (Ping timeout: 246 seconds) |
| 19:15:37 | → | kritzefitz_ joins (~kritzefit@fw-front.credativ.com) |
| 19:20:13 | <dminuoso> | edwardk: Hiya, a while ago you noted that the main problem witch catching pure exceptions with unsafePerformIO was that "it isn't monotone", followed by a remark "in [pure code] if you make your inputs more defined all that can happen is that at worst your output becomes more defined. in a world with catchPure that is no longer the case" |
| 19:20:22 | → | idhugo__ joins (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) |
| 19:20:31 | <dminuoso> | I have a vague idea, but I wanted to clarify. What exactly do you mean by monotonicity here? |
| 19:21:33 | <monochrom> | if input is more defined, then output stays the same or is more defined. For example doesn't change sideways. |
| 19:22:17 | × | conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
| 19:22:46 | <monochrom> | For example suppose you have a function f, and f bottom = 4 : bottom, f (1 : bottom) = 4 : 5 : bottom, that's OK, so far so good. |
| 19:23:01 | <monochrom> | On the input side, 1:bottom is more defined than bottom. |
| 19:23:17 | <monochrom> | On the output side, 4:5:bottom is more defined than 4:bottom. |
| 19:23:55 | <monochrom> | But if you have g such that g bottom = 4 : bottom, g (1:bottom) = []. Now that's bad. |
| 19:24:50 | <dminuoso> | How exactly is that bad? |
| 19:25:31 | <monochrom> | [] is not more defined than 4:bottom. |
| 19:25:40 | <monochrom> | Intuitively, it's a sideway change. |
| 19:25:42 | → | acidjnk_new joins (~acidjnk@p200300d0c718f648045012e87868ed0b.dip0.t-ipconnect.de) |
| 19:27:32 | <monochrom> | Technically, "more defined" for [Integer] is defined by: the smallest relation that satisfies: everything is equal to or more defined than bottom; x:y is equal to or more defined than a:b iff x is equal to or more defined than a and y is equal to or more defined than b. |
| 19:27:58 | <edwardk> | dminuoso: this is really the fundamental difference between _|_ and NULL. You can check for null. So you have to worry about NULL being a semantically distinguishable element at every step in your program. Boolean would then have 3 values, True, False, NULL. IN haskell. If a function gives an answer for _|_ it has to give an answer that is 'at least as defined' if you give it True or False, because _|_ is less defined than either. |
| 19:28:00 | → | geekosaur joins (82659a09@host154-009.vpn.uakron.edu) |
| 19:28:27 | <monochrom> | https://en.wikibooks.org/wiki/Haskell/Denotational_semantics is a good explanation, except it is wrong about "there is a bottom type". |
| 19:28:42 | → | Amras joins (~Amras@unaffiliated/amras0000) |
| 19:28:46 | <Rembane> | The table flip operator, because it looks like a flipped table and it flips the table. |
| 19:28:49 | <edwardk> | it means if you feed a program a partially defined input and get an answer, making the input more defined never hurts you. |
| 19:29:50 | × | wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Quit: leaving) |
| 19:30:07 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Quit: Lost terminal) |
| 19:30:10 | → | wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
| 19:31:23 | <monochrom> | Perhaps you're wondering why we care about this relation. |
| 19:31:26 | <dolio> | The point of things containing ⊥ in denotational semantics is to be approximations of more-defined things. That way you can reason about behavior of infinite things by approximating them with partial definitions. |
| 19:31:42 | × | thaumavorio quits (~thaumavor@thaumavor.io) (Quit: ZNC 1.7.1 - https://znc.in) |
| 19:31:44 | <dolio> | But if you can observe ⊥ and act differently, then that is out the window. It's just a different value. |
| 19:31:48 | <edwardk> | dolio++ |
| 19:32:13 | <monochrom> | We use bottom to also stand for: The computer doesn't give an answer for now, but perhaps if you throw more computing resource, the computer can finally figure out the answer. |
| 19:32:28 | <dolio> | Then it's just side effects. |
| 19:32:54 | → | conal joins (~conal@64.71.133.70) |
| 19:33:05 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 19:33:16 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Client Quit) |
| 19:33:42 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 19:33:52 | <monochrom> | And even: the computer doesn't give an answer now because the input is incomplete for now. Perhaps if the incomplete part of the input arrives later, the computer can also figure out more of the output. |
| 19:34:28 | <monochrom> | That would be a model for a function that transduces an input lazy list to an output lazy list, for example. |
| 19:34:46 | → | thaumavorio joins (~thaumavor@thaumavor.io) |
| 19:34:51 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Client Quit) |
| 19:35:16 | → | LKoen joins (~LKoen@9.253.88.92.rev.sfr.net) |
| 19:35:24 | <dolio> | And essentially, you should not care about behavior on ⊥ in Haskell in itself, but because it is a methodology for thinking about the behavior on more-defined values. |
| 19:35:29 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 19:35:40 | <dolio> | Thinking about ⊥ tells you about how well-defined values are demanded and whatnot. |
| 19:35:55 | × | aarvar quits (~foewfoiew@50.35.43.33) (Ping timeout: 246 seconds) |
| 19:35:58 | <monochrom> | So "f bottom" means none of the input has arrived yet, but how much f can start working right away? |
| 19:36:56 | <wz1000> | You also lose the ability to do topology in Haskell |
| 19:36:56 | <monochrom> | And "f (1: bottom)" means OK one cons cell has arrived, now f can possibly do a bit more work before it's stuck again needing the rest of the input. |
| 19:37:45 | <bollu> | wz1000 wdym? |
| 19:38:06 | <wz1000> | functions are no longer continuous |
| 19:38:14 | <monochrom> | In the case of g, it means g can start outputing the 1st cons cell of the output lazy list right away without needing input, but once you provide some input, it says "I withdraw my previous output, I change my mind, it's the empty list now" |
| 19:38:24 | → | quarters joins (~quarters@104-0-129-162.lightspeed.irvnca.sbcglobal.net) |
| 19:38:28 | × | thaumavorio quits (~thaumavor@thaumavor.io) (Client Quit) |
| 19:38:35 | <wz1000> | bollu: https://www.cs.bham.ac.uk/~mhe/papers/entcs87.pdf |
| 19:38:52 | → | avdb joins (~avdb@ip-213-49-61-183.dsl.scarlet.be) |
| 19:39:16 | → | thaumavorio joins (~thaumavor@thaumavor.io) |
| 19:39:45 | × | nullheroes quits (~danielvu@168.235.66.22) (Quit: WeeChat 2.9) |
| 19:39:59 | → | ashbreeze joins (~mark@184-157-32-219.dyn.centurytel.net) |
| 19:40:11 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Client Quit) |
| 19:40:38 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 19:42:13 | × | _ashbreeze_ quits (~mark@72-161-252-32.dyn.centurytel.net) (Ping timeout: 246 seconds) |
| 19:43:36 | → | luke joins (~luke@bitnomial/staff/luke) |
| 19:44:31 | → | aarvar joins (~foewfoiew@50.35.43.33) |
| 19:44:32 | → | sondr3 joins (54d33884@cm-84.211.56.132.getinternet.no) |
| 19:44:50 | × | aarvar quits (~foewfoiew@50.35.43.33) (Remote host closed the connection) |
| 19:45:29 | <sondr3> | drive-by question: is it possible to use the new-* cabal commands by default when using cabal? |
| 19:45:49 | → | hidedagger joins (~nate@unaffiliated/hidedagger) |
| 19:46:13 | × | ystael quits (~ystael@209.6.50.55) (Ping timeout: 260 seconds) |
| 19:46:18 | <monochrom> | Yes if your cabal-install version is 3.0 or 3.2 or 3.4 |
| 19:46:40 | <bollu> | wz1000 sure I've read it |
| 19:46:51 | <bollu> | wz1000 we need bottoms to get the semi decidability structure |
| 19:46:59 | <bollu> | wz1000 so I'm not sure what you mean that we lose topology? |
| 19:47:06 | <merijn> | monochrom: 3.4 is rather hard, considering that's not released yet :p |
| 19:47:23 | <wz1000> | bollu: I mean if you make bottom observable |
| 19:47:32 | <bollu> | wz1000 ah OK, sure. |
| 19:47:35 | <bollu> | :) |
| 19:47:39 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 19:47:45 | × | conal quits (~conal@64.71.133.70) (Ping timeout: 240 seconds) |
| 19:47:47 | <sondr3> | thanks monochrom, I couldn't find much by searching |
| 19:48:41 | <merijn> | sondr3: You should upgrade to 3.0 or 3.2 anyway if you use v2-build, there's been a bunch of improvements and bugfixes in those two versions |
| 19:48:57 | × | Franciman quits (~francesco@host-82-56-223-169.retail.telecomitalia.it) (Quit: Leaving) |
| 19:49:48 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 19:49:52 | <sondr3> | I'm on 3.2 already, just haven't been following the Haskell world closely for a while :) Thanks |
| 19:49:53 | → | mputz joins (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) |
| 19:49:55 | × | vicfred quits (~vicfred@unaffiliated/vicfred) (Quit: Leaving) |
| 19:51:45 | <sondr3> | Is it then possible to run my executable with cabal run automatically and not have it include the test suite? |
| 19:52:59 | → | conal joins (~conal@66.115.176.210) |
| 19:53:21 | <merijn> | "maybe?" I'm not quite sure what you mean? |
| 19:53:23 | ski | . o O ( non-monotonic logics ) |
| 19:53:46 | <dminuoso> | monochrom: Okay, so some reasoning level I understand what monotonicity means. I just fail to see the impact of breaking that. |
| 19:54:59 | <monochrom> | Suppose mylazylist is a lazy list, but when evaluated it takes a while to emit the next cons cell and number. |
| 19:55:02 | <sondr3> | I get a "cabal: The run command is for running a single executable at once. [...]" message, saying it includes the executable and the test suite, I want cabal run to only run the executable |
| 19:55:05 | <dminuoso> | Naively, I'd just say "So say I have some `f :: String -> Int` that perhaps failed, it'd be *very* annoying to have to fix their code for a lack of Maybe, or feed IO through potentially half my program just to deal with it sensibly. This idea of monotonicity seems more like philosophical beauty than something I would care about |
| 19:55:32 | <monochrom> | print (f mylazylist) makes sense. print (g mylazylist) doesn't. |
| 19:55:48 | <merijn> | sondr3: What's the exact command you write? |
| 19:56:11 | <sondr3> | merijn: cabal run |
| 19:56:34 | <merijn> | sondr3: A package can have many executables in it, the intended use is "cabal run yourExeName" |
| 19:57:02 | <dminuoso> | 20:23:55 monochrom | But if you have g such that g bottom = 4 : bottom, g (1:bottom) = []. Now that's bad. |
| 19:57:04 | <dminuoso> | Mmm |
| 19:57:07 | <ski> | (in logic programming, you have an analogue of non-monotonic functions : non-steadfast predicates/relations. if you provide more information (in parameters) upfront to it, it can suddenly gain solutions which are not substitution instances of the ones it had with only less information available. it's generally agreed that this hurts reasonability / predictive power) |
| 19:57:43 | <dminuoso> | monochrom: Are you referring to the same f and g you introduced at the beginning? |
| 19:58:18 | <monochrom> | "print (f mylazlist)" can do this: print 4 right away, then wait for mylazylist to spit out its first item 1, then print 5 when that happens. |
| 19:58:37 | × | ericsagn1 quits (~ericsagne@2405:6580:0:5100:af5d:a404:2c6:5e7e) (Ping timeout: 260 seconds) |
| 19:58:41 | <monochrom> | "print (g mylazylist)" cannot do this unless it can roll back time or output transactions. |
| 19:58:44 | <dminuoso> | I mean the only reason you're saying "it doesn't make sense" is because your equating "bottom induced by infinite computation" and "bottom as pure exceptions" |
| 19:58:51 | <monochrom> | Yes, same f and g. |
| 19:58:52 | <dminuoso> | catchPure only deals with the latter |
| 19:59:04 | <dminuoso> | On a technical level, catchPure doesn't break g. |
| 19:59:12 | × | Wood quits (~wood@2001:d08:1003:2574:5caf:6abd:a992:e5a2) (Ping timeout: 260 seconds) |
| 19:59:14 | → | pavonia joins (~user@unaffiliated/siracusa) |
| 19:59:18 | <dminuoso> | It just ruins your paradise of perfect symmetry and beauty |
| 19:59:30 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Quit: Lost terminal) |
| 19:59:57 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 19:59:58 | <dminuoso> | Because `f (g mylazylist)` would just print [] and be done with it |
| 20:00:05 | <dminuoso> | After a while. |
| 20:00:08 | <sondr3> | merijn: fair, it's just annoying since I don't care about the test-suite when I do cabal run :) |
| 20:00:38 | <merijn> | sondr3: If you write out the name you shouldn't get that, but if you wanna frequently test an executable while developing I've got a lifehack for you |
| 20:01:06 | → | gstv joins (59e9c219@89-233-194-25.cust.bredband2.com) |
| 20:01:13 | → | juuandyy joins (~juuandyy@90.166.144.65) |
| 20:01:34 | <merijn> | sondr3: https://paste.tomsmeding.com/9sTHIIML adjust the path to cabal.project file and executable name as needed, and done! |
| 20:01:45 | × | bidabong quits (uid272474@gateway/web/irccloud.com/x-baxncysxwetsxiet) (Quit: Connection closed for inactivity) |
| 20:02:02 | × | conal quits (~conal@66.115.176.210) (Quit: Computer has gone to sleep.) |
| 20:02:17 | <sondr3> | merijn: awesome, thanks |
| 20:02:33 | <merijn> | sondr3: For my own programs I have a shell script like that in my path so I can conveniently test/use them while developing, automatically compiling the latest version and then running |
| 20:03:18 | × | revprez_anzio quits (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Ping timeout: 260 seconds) |
| 20:03:39 | → | revprez_anzio joins (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) |
| 20:04:02 | × | vacm quits (~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 20:04:14 | → | batuhan35 joins (9f920e61@159.146.14.97) |
| 20:05:05 | → | vacm joins (~vacwm@70.23.92.191) |
| 20:05:11 | × | ph88 quits (~ph88@2a02:8109:9e00:7e5c:64a6:6e00:3dc3:e56a) (Ping timeout: 272 seconds) |
| 20:05:18 | × | avdb quits (~avdb@ip-213-49-61-183.dsl.scarlet.be) (Quit: avdb) |
| 20:06:00 | → | conal joins (~conal@66.115.176.210) |
| 20:06:32 | <dolio> | dminuoso: The justification for 'pure exceptions' is that they are equated with non-terminatiaon bottom. |
| 20:06:48 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 20:07:04 | <dolio> | At least as far as the pure calculus is concerned. |
| 20:07:30 | ← | batuhan35 parts (9f920e61@159.146.14.97) () |
| 20:07:35 | × | sondr3 quits (54d33884@cm-84.211.56.132.getinternet.no) (Remote host closed the connection) |
| 20:07:49 | × | gstv quits (59e9c219@89-233-194-25.cust.bredband2.com) (Remote host closed the connection) |
| 20:08:39 | → | knupfer joins (~Thunderbi@200116b82cb80f0020dbfffffeb9f29f.dip.versatel-1u1.de) |
| 20:08:39 | × | knupfer quits (~Thunderbi@200116b82cb80f0020dbfffffeb9f29f.dip.versatel-1u1.de) (Client Quit) |
| 20:08:53 | → | knupfer joins (~Thunderbi@i5E86B4E0.versanet.de) |
| 20:09:52 | × | idhugo__ quits (~idhugo@80-62-116-101-mobile.dk.customer.tdc.net) (Ping timeout: 246 seconds) |
| 20:10:38 | × | thaumavorio quits (~thaumavor@thaumavor.io) (Quit: ZNC 1.7.1 - https://znc.in) |
| 20:10:50 | → | ericsagn1 joins (~ericsagne@2405:6580:0:5100:465:234f:7cb8:28a5) |
| 20:11:04 | → | falafel joins (~falafel@2600:1007:b0ad:6e87:7811:313f:d0f3:f9f4) |
| 20:11:32 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Read error: Connection reset by peer) |
| 20:11:49 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 20:14:44 | × | jamm_ quits (~jamm@unaffiliated/jamm) (Remote host closed the connection) |
| 20:15:17 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Client Quit) |
| 20:18:51 | <monochrom> | dminuoso: Yes OK, it is a more complicated model, but it can work. |
| 20:19:26 | <dminuoso> | monochrom: I want to stress that Im not arguing why `catchPure` is fine, just trying to understand why there's this strong opposition. |
| 20:21:04 | × | falafel quits (~falafel@2600:1007:b0ad:6e87:7811:313f:d0f3:f9f4) (Read error: Connection reset by peer) |
| 20:21:28 | <monochrom> | I still like the simpler model most of the time. When in the rare cases I can benefit from the complication, I would rather use explicit Maybe's so it is a non-pervasive opt-in system. |
| 20:21:49 | → | alp joins (~alp@2a01:e0a:58b:4920:d8db:f457:3fb6:53df) |
| 20:22:06 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 20:23:19 | <dminuoso> | monochrom: the thing is just, it seems as if the argument is: introducing `catchPure` would allow for "non-sensical" g |
| 20:23:35 | <dminuoso> | Which is a non-issue, because catchPure couldn't (possibly) solve the halting problem |
| 20:24:40 | <dminuoso> | I get how it would break monotonicity (meaning more defined inputs do not create more defined outputs), but perhaps Im just not seeing the value of that possible reasoning |
| 20:24:42 | × | juuandyy quits (~juuandyy@90.166.144.65) (Quit: Konversation terminated!) |
| 20:25:00 | <dminuoso> | That is, is there a motivating example where its useful to think `oh, if I make this input more defined, the output becomes more defined` |
| 20:25:34 | <dminuoso> | So far Im getting the impression this is just some "academic purity" in the way of "a practical function" |
| 20:26:02 | <dolio> | Once you have side effects, you start having to worry about exact evaluation orders. |
| 20:26:03 | × | dhouthoo quits (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.9) |
| 20:26:07 | <dolio> | That's not academic. |
| 20:26:39 | <dminuoso> | Sure, but there's no side effects in pure code. |
| 20:26:55 | <dolio> | There are once you can catch exceptions and look at them. |
| 20:27:26 | <monochrom> | You have a pervasive exception system, that's what it is. As usual, the price for a pervasive exception system is documentation: For each value, you have to tell the user: if some input throws an exception, what do you do? and under what circumstance you will throw exceptions. |
| 20:28:31 | <monochrom> | This community is already pretty unhappy that most IO actions are pretty undocumented on the pretty anticipated IO exceptions. |
| 20:28:42 | <monochrom> | Now imagine bringing that to all of Prelude. |
| 20:28:44 | × | ggole quits (~ggole@2001:8003:8119:7200:a813:5a33:e96f:8fc6) (Quit: Leaving) |
| 20:28:55 | <dminuoso> | But.. I just stumbled over a very convincing example of dfeuer that suggests catchPure is really bad |
| 20:28:58 | × | quarters quits (~quarters@104-0-129-162.lightspeed.irvnca.sbcglobal.net) (Changing host) |
| 20:28:58 | → | quarters joins (~quarters@unaffiliated/quarters) |
| 20:29:16 | <dminuoso> | (let a = a in a) `seq` error "hallo!" |
| 20:29:32 | <monochrom> | Oh that one is even more sinister. |
| 20:29:35 | → | vicfred joins (~vicfred@unaffiliated/vicfred) |
| 20:29:51 | <dminuoso> | And he says that in the presence of catchPure this could *sometimes* be defined, othertimes not.. |
| 20:29:58 | → | kritzefitz joins (~kritzefit@212.86.56.80) |
| 20:30:15 | <dolio> | Yeah, because GHC also assumes that 'pure exceptions' are equal to non-termination. |
| 20:30:16 | <dminuoso> | (obviously, because seq makes no assumption about the ordering) |
| 20:30:46 | <monochrom> | "div 1 0" is the kind that we all agree is an exception, the only contention is on language design: should this be bottom or not. |
| 20:30:51 | <dminuoso> | dolio: I think its not even that, Id say it's just because `seq` does not guarantee the left side to be evaluated first. |
| 20:31:05 | <dminuoso> | So its up to whatever the implementation does in the situation |
| 20:31:21 | <dminuoso> | (Which could vary from place to place if the optimizer was up for it) |
| 20:31:48 | <monochrom> | "a = a" is a non-termination that is clearly bottom but some compiler optimization can make it detectable, so now you're looking at fragile code optimization getting turned on or off. |
| 20:32:00 | × | fendor quits (~fendor@178.115.131.226.wireless.dyn.drei.com) (Remote host closed the connection) |
| 20:32:04 | <dminuoso> | oh, or that |
| 20:33:05 | → | fendor joins (~fendor@178.115.131.226.wireless.dyn.drei.com) |
| 20:35:19 | <dolio> | Anyhow, if you're just using it to paper over a poorly designed API, then that's one thing. |
| 20:35:52 | <dolio> | That can't really be justified as treating pure exceptions as actual control flow pervasively. |
| 20:36:36 | → | cosimone joins (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) |
| 20:36:41 | <dminuoso> | Right. It's just that edward made that comment a while ago, and it kept lingering in my head because I couldn't quite argue to myself why he was right. |
| 20:36:52 | <_deepfire> | Is there a way to pass 'ghci' flags, when it's invoked via cabal repl? |
| 20:37:17 | <merijn> | --repl-options |
| 20:37:28 | × | vicfred quits (~vicfred@unaffiliated/vicfred) (Quit: Leaving) |
| 20:37:42 | × | xff0x quits (~fox@2001:1a81:529e:a500:b7fe:796e:1fbb:7036) (Ping timeout: 260 seconds) |
| 20:37:56 | → | boxscape joins (86ab2c1f@gateway/web/cgi-irc/kiwiirc.com/ip.134.171.44.31) |
| 20:38:16 | <dminuoso> | But this last example is motivating enough to me. An example of how/why `catchPure` could have a bad impact on my quality of life |
| 20:38:21 | → | xff0x joins (~fox@2001:1a81:529e:a500:7f56:5167:60df:e24a) |
| 20:38:40 | <dolio> | Yeah, just `let a = a in a` can get you unpredictable results. |
| 20:38:48 | <dminuoso> | Right |
| 20:39:12 | <dminuoso> | Having fallen prey to not respecting the unsafeness of unsafePerformIO once makes me appreciate being careful to do things in pure code you're not supposed to. |
| 20:40:06 | <_deepfire> | merijn: I'm using cabal 3.0, but cabal repl TARGET -O0 --repl-options=-ghci-script=.ghci.local -- doesn't have effect |
| 20:40:09 | × | thc202 quits (~thc202@unaffiliated/thc202) (Quit: thc202) |
| 20:40:43 | <dminuoso> | monochrom, dolio, edwardk: Thank you all for your insights and arguments. |
| 20:40:57 | × | Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
| 20:41:12 | <merijn> | _deepfire: Maybe "cabal repl" does something else that renders -ghci-script in effective |
| 20:42:00 | <_deepfire> | merijn: thank you, nevertheless -- I've missed that option in the long list of cabal's options.. : -) |
| 20:42:26 | × | luke quits (~luke@bitnomial/staff/luke) (Quit: sleep) |
| 20:42:27 | <merijn> | _deepfire: I know that because the original way was using --ghc-options and I broke that :p |
| 20:43:01 | <_deepfire> | merijn: Oh, yes, I've tried --ghc-options and --ghci-options (which is logical, but doesn't parse..) |
| 20:43:47 | → | Varis joins (~Tadas@unaffiliated/varis) |
| 20:47:41 | <monochrom> | Hey --repl-option=-fdefer-type-errors solves my problem, it doesn't [re-]build every hackaage dependency. Thanks merijn |
| 20:50:03 | <monochrom> | To be fair, manually entering ":set -fdefer-type-error" isn't that bad. |
| 20:50:39 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 20:50:43 | × | knupfer quits (~Thunderbi@i5E86B4E0.versanet.de) (Ping timeout: 256 seconds) |
| 20:50:53 | Lord_of_Life_ | is now known as Lord_of_Life |
| 20:51:25 | × | Iceland_jack quits (~user@31.124.48.169) (Ping timeout: 240 seconds) |
| 20:55:20 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 20:55:26 | × | Jesin quits (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Quit: Leaving) |
| 20:57:17 | × | mputz quits (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz) |
| 20:57:33 | → | olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber) |
| 20:57:42 | <tomjaguarpaw> | c |
| 20:58:09 | <koz_> | I'm in 'StateT s (Either e) a', and have a function 'f :: s -> Either e s'. Is there something similar to 'modify' that would let me pass 'f', to produce a result of type 'StateT s (Either e) ()'? |
| 20:58:16 | <merijn> | monochrom: That's why I added --repl-options :p |
| 20:58:42 | <monochrom> | Oh you. Many thanks and <3 <3 <3 |
| 20:58:46 | <merijn> | monochrom: I added flag filtering for ghc-options so the world wouldn't be rebuild, then that broke ghci's use of ghc-options, so I added --repl-options to fix it |
| 20:59:06 | <merijn> | repl-options never hit the configuration/hash and thus won't affect dependencies |
| 20:59:19 | <monochrom> | Yeah, I notice that cabal build --ghc-option=-ferror-span does not affect the hash. |
| 20:59:26 | × | wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 264 seconds) |
| 20:59:30 | <merijn> | monochrom: It's a bit hacky and ad hoc atm |
| 20:59:30 | → | wroathe_ joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 20:59:57 | <merijn> | It makes for an impressive "power of monoids" showcase, though ;) |
| 21:00:01 | × | Frost quits (~Frost@185.163.110.116) () |
| 21:00:09 | <monochrom> | That one I understand. I am thankful for the dirty but necessary work. |
| 21:01:00 | <merijn> | monochrom: If you notice something rebuilding that you think shouldn't you should make a Cabal issue and tag me in it |
| 21:01:08 | → | ystael joins (~ystael@160.sub-174-242-87.myvzw.com) |
| 21:01:08 | <merijn> | monochrom: https://github.com/haskell/cabal/blob/master/Cabal/src/Distribution/Simple/Program/GHC.hs#L49-L304 ;) |
| 21:01:41 | <monochrom> | Oh, the only current one that affects me is https://github.com/haskell/cabal/issues/6906 |
| 21:02:07 | <merijn> | I'm particularly proud of the 'from' and 'to' version checks and how they combine monoidally |
| 21:02:08 | <monochrom> | because I would love so much to have ~/.cabal/config contain "ghc-options: -haddock" |
| 21:02:37 | × | invaser quits (~Thunderbi@31.148.23.125) (Ping timeout: 256 seconds) |
| 21:02:42 | <merijn> | And I still think we need "Monoid m => Bool -> m -> m" in base, but it's hard to find a good name for it |
| 21:03:01 | <merijn> | I've been using various versions of mif, mwhen, etc. in my own code, but a good name is hard |
| 21:03:30 | <int-e> | :t StateT . (((,) () <$>) .) |
| 21:03:31 | <lambdabot> | Functor m => (s -> m s) -> StateT s m () |
| 21:04:14 | <koz_> | int-e: Lol, that's impressively APLy. Thanks! |
| 21:04:56 | <koz_> | We should add that to transformers as 'modifyInner'. |
| 21:05:02 | <koz_> | Or modifyM or something. |
| 21:05:18 | × | wroathe_ quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds) |
| 21:06:23 | × | coot quits (~coot@37.30.49.253.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
| 21:06:29 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 21:07:08 | × | geekosaur quits (82659a09@host154-009.vpn.uakron.edu) (Remote host closed the connection) |
| 21:07:47 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 21:08:57 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 21:11:09 | <int-e> | :t \f -> traverse lift (Identity f) >>= put . runIdentity -- hmm |
| 21:11:10 | <lambdabot> | (MonadTrans t, Monad m, MonadState s (t m)) => m s -> t m () |
| 21:11:47 | <koz_> | That's the mtl version. :P |
| 21:12:00 | hackage | phonetic-languages-examples 0.6.0.0 - A generalization of the uniqueness-periods-vector-examples functionality. https://hackage.haskell.org/package/phonetic-languages-examples-0.6.0.0 (OleksandrZhabenko) |
| 21:12:50 | × | wpcarro quits (sid397589@gateway/web/irccloud.com/x-yrrbrsudnjmjbakp) (Read error: Connection reset by peer) |
| 21:13:06 | → | wpcarro joins (sid397589@gateway/web/irccloud.com/x-jyvrhcovkjnuufaq) |
| 21:13:10 | × | ryjm quits (sid383513@gateway/web/irccloud.com/x-aavthkgvqaggakcc) (Ping timeout: 256 seconds) |
| 21:13:16 | × | natim87 quits (sid286962@gateway/web/irccloud.com/x-uifctbbgftadercs) (Read error: Connection reset by peer) |
| 21:13:16 | × | ReinH__ quits (sid179972@gateway/web/irccloud.com/x-sdlypohklafvyaji) (Read error: Connection reset by peer) |
| 21:13:24 | × | aristid quits (sid1599@gateway/web/irccloud.com/x-ckvrkhwfnpsjpxkc) (Read error: Connection reset by peer) |
| 21:13:24 | × | bradparker quits (sid262931@gateway/web/irccloud.com/x-hcrjjmdklhbtocmc) (Read error: Connection reset by peer) |
| 21:13:27 | → | natim87 joins (sid286962@gateway/web/irccloud.com/x-mexmpkxgonbwfktv) |
| 21:13:33 | × | Cir0X quits (sid221743@gateway/web/irccloud.com/x-ouxxoxkrtirtgzgf) (Read error: Connection reset by peer) |
| 21:13:35 | → | aristid joins (sid1599@gateway/web/irccloud.com/x-ieumvqzkylmookgw) |
| 21:13:37 | × | benwr____ quits (sid372383@gateway/web/irccloud.com/x-ygzdfppyyhwzwtmh) (Read error: Connection reset by peer) |
| 21:13:37 | × | d0liver quits (sid363046@gateway/web/irccloud.com/x-kkcazzfyjgmdigdk) (Read error: Connection reset by peer) |
| 21:13:38 | → | bradparker joins (sid262931@gateway/web/irccloud.com/x-nbpjheuowgmlbzcp) |
| 21:13:41 | × | banjiewen_ quits (sid115913@gateway/web/irccloud.com/x-pwjllhheogrzlube) (Read error: Connection reset by peer) |
| 21:13:44 | → | benwr____ joins (sid372383@gateway/web/irccloud.com/x-wqbchwbubajgshwl) |
| 21:13:45 | → | ryjm joins (sid383513@gateway/web/irccloud.com/x-xyruibfadgkaupwy) |
| 21:13:50 | → | Cir0X joins (sid221743@gateway/web/irccloud.com/x-mvlinpkrmvmsfsvf) |
| 21:13:56 | → | d0liver joins (sid363046@gateway/web/irccloud.com/x-lvzpszsyngerfkjs) |
| 21:13:58 | → | banjiewen_ joins (sid115913@gateway/web/irccloud.com/x-jwitackpjevkejhs) |
| 21:14:09 | → | ReinH__ joins (sid179972@gateway/web/irccloud.com/x-ujhxicmjajcluchu) |
| 21:15:24 | × | royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
| 21:15:50 | → | royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
| 21:17:13 | <int-e> | :t (>>= modify) . traverse lift -- ah, that's it. |
| 21:17:14 | <lambdabot> | (MonadState s (t m), Traversable ((->) s), MonadTrans t, Monad m) => (s -> m s) -> t m () |
| 21:17:29 | <quarters> | I was wondering if anyone can recommend any site that help a noob like myself build out a minimal web app like on http://todomvc.com/ |
| 21:17:36 | × | ystael quits (~ystael@160.sub-174-242-87.myvzw.com) (Read error: Connection reset by peer) |
| 21:17:40 | × | conal quits (~conal@66.115.176.210) (Quit: Computer has gone to sleep.) |
| 21:17:42 | × | cosimone quits (~cosimone@2001:b07:ae5:db26:d849:743b:370b:b3cd) (Quit: cosimone) |
| 21:17:52 | <koz_> | int-e: The 'Traversable ((->) s)' constraint is a bit onerous, surely? |
| 21:18:14 | <int-e> | indeed |
| 21:18:28 | <int-e> | never mind then, I give up. |
| 21:18:38 | <koz_> | The others were good, though. |
| 21:18:50 | → | Jesin joins (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) |
| 21:18:51 | <koz_> | I mean, if you wanna APL it, you can probably run attempt #2 through @pl. |
| 21:18:54 | × | Jesin quits (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Remote host closed the connection) |
| 21:19:01 | <koz_> | @pl \f -> traverse lift (Identity f) >>= put . runIdentity |
| 21:19:01 | <lambdabot> | (put . runIdentity =<<) . traverse lift . Identity |
| 21:19:06 | <quarters> | a haskell noob, rather. I noticed that there isn't a haskell version on that site and while I can try for something similar like the scala one, I figured that wouldn't give me the exposure to the tooling used for building out a haskell backed todo list web app |
| 21:19:16 | → | cosimone joins (~cosimone@93-47-228-249.ip115.fastwebnet.it) |
| 21:19:26 | <int-e> | koz_: #2 didn't quite have the right type |
| 21:19:43 | <koz_> | int-e: Ah, yeah, upon further reading I can see why. |
| 21:20:02 | → | Boomerang joins (~Boomerang@xd520f68c.cust.hiper.dk) |
| 21:20:13 | × | royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 246 seconds) |
| 21:20:40 | <int-e> | :t \f -> get >>= \s -> traverse lift (Identity (f s)) >>= put . runIdentity -- and this is beginning to look awfully clumsy |
| 21:20:41 | <lambdabot> | (MonadState s (t m), Monad m, MonadTrans t) => (s -> m s) -> t m () |
| 21:21:01 | <int-e> | @pl \f -> get >>= \s -> traverse lift (Identity (f s)) >>= put . runIdentity |
| 21:21:01 | <lambdabot> | (get >>=) . flip flip (put . runIdentity) . (((>>=) . traverse lift . Identity) .) |
| 21:21:09 | <int-e> | eww. |
| 21:21:20 | <koz_> | Dat flip . flip. |
| 21:21:26 | <koz_> | I mean, 'flip flip'. |
| 21:21:39 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 21:21:58 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Client Quit) |
| 21:22:31 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 21:22:45 | <Flonk> | Say I have a simple BST (https://hastebin.com/bexopesayo.hs) with an insert function. If the element is already in the tree I'd like to save space and return the original tree - at the moment I'm creating a lot of duplicate nodes which is unneccessary. What programming pattern am I looking for? |
| 21:23:08 | <int-e> | :t \f -> get >>= \s -> lift (f s) >>= put -- yeah the whole traverse idea is just stupid, I guess |
| 21:23:10 | <lambdabot> | (MonadState s (t m), Monad m, MonadTrans t) => (s -> m s) -> t m () |
| 21:23:16 | <Flonk> | Feels similar to exceptions in imperative languages. |
| 21:24:13 | <int-e> | @pl \f -> get >>= \s -> lift (f s) >>= put |
| 21:24:13 | <lambdabot> | (get >>=) . flip flip put . (((>>=) . lift) .) |
| 21:24:21 | <int-e> | still double-flipping |
| 21:24:40 | <int-e> | flipping out, with a typo? |
| 21:25:00 | <koz_> | int-e: flipTable = flip flip |
| 21:25:17 | <koz_> | :t flip flip |
| 21:25:18 | <lambdabot> | b -> (a -> b -> c) -> a -> c |
| 21:25:31 | <koz_> | Feels like there should be a bird for this. |
| 21:26:01 | <int-e> | hmm, flipping the bird? |
| 21:26:06 | × | Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 260 seconds) |
| 21:26:14 | → | Jesin joins (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) |
| 21:26:34 | <koz_> | The all-new Yelling Bird combinator. |
| 21:27:34 | <int-e> | koz_: I'm still wondering whether there's something more natural for this. Or perhaps some obscure lens approach... |
| 21:28:00 | → | ystael joins (~ystael@160.sub-174-242-87.myvzw.com) |
| 21:28:23 | → | conal joins (~conal@66.115.176.210) |
| 21:28:50 | → | moet joins (~moet@mobile-166-137-178-187.mycingular.net) |
| 21:28:56 | → | mputz joins (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) |
| 21:29:43 | × | Boomerang quits (~Boomerang@xd520f68c.cust.hiper.dk) (Quit: Leaving) |
| 21:29:59 | × | ystael quits (~ystael@160.sub-174-242-87.myvzw.com) (Read error: Connection reset by peer) |
| 21:30:07 | → | elfets joins (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) |
| 21:30:16 | → | Boomerang joins (~Boomerang@xd520f68c.cust.hiper.dk) |
| 21:32:37 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 21:32:39 | → | vicfred joins (~vicfred@unaffiliated/vicfred) |
| 21:34:51 | × | chaosmasttter quits (~chaosmast@p200300c4a73c52016862557d78ae998a.dip0.t-ipconnect.de) (Quit: WeeChat 2.9) |
| 21:35:06 | ← | wtw parts (~wtw@unaffiliated/wtw) () |
| 21:37:59 | × | Inoperable quits (~PLAYER_1@fancydata.science) (Excess Flood) |
| 21:38:14 | → | britva joins (~britva@31-10-157-156.cgn.dynamic.upc.ch) |
| 21:39:02 | → | machined1od joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 21:39:07 | × | Ariakenom quits (~Ariakenom@h-82-196-111-82.NA.cust.bahnhof.se) (Read error: Connection reset by peer) |
| 21:39:21 | × | machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Remote host closed the connection) |
| 21:39:36 | × | machined1od quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Remote host closed the connection) |
| 21:39:51 | × | mputz quits (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) (Quit: mputz) |
| 21:40:00 | <dolio> | :t \f -> state (fmap ((,) ()) . f) |
| 21:40:02 | <lambdabot> | MonadState ((), b) m => (((), b) -> (a, b)) -> m a |
| 21:40:15 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 21:40:15 | <eacameron> | Question about TH. I barely know how to get my way around TH. Some libraries (here, postgresql-simple-interpolate) offer intelligent Haskell splicing into quasiquoters and they use haskell-ext-meta/etc. to parse the haskell code. This has numerous downsides though as the parser isn't aware of the all the extensions etc in the file using the QQ. However the thought came to me: Why parse these splices at all? |
| 21:40:31 | <dolio> | Oh, that won't work, right. |
| 21:40:34 | <eacameron> | Can't I just take them out and put them in a let binding with a new name and then use the name when building the string later? |
| 21:40:38 | → | ystael joins (~ystael@160.sub-174-242-87.myvzw.com) |
| 21:41:13 | × | boom quits (56ca6780@lfbn-lyo-1-7-128.w86-202.abo.wanadoo.fr) (Remote host closed the connection) |
| 21:41:52 | <eacameron> | This presupposes I'm able to take raw strings in the QQ as supplied by the user and then tell TH: Just splat this verbatim into the output. |
| 21:42:42 | → | falafel joins (~falafel@2600:1007:b0ad:6e87:7811:313f:d0f3:f9f4) |
| 21:42:58 | × | AlterEgo- quits (~ladew@124-198-158-163.dynamic.caiway.nl) (Quit: Leaving) |
| 21:43:31 | <Boomerang> | TH doesn't let you "splat" raw strings, you have to build the AST of the Haskell you want to generate |
| 21:44:14 | × | ystael quits (~ystael@160.sub-174-242-87.myvzw.com) (Read error: Connection reset by peer) |
| 21:44:55 | <eacameron> | Boomerang: Well that sucks :P |
| 21:45:50 | <Boomerang> | It does have tools to make it easier, special TH QuasiQuotes [e| ... |], [t| ... |], ... |
| 21:46:14 | → | Inoperable joins (~PLAYER_1@fancydata.science) |
| 21:46:15 | <eacameron> | Boomerang: Yeah sounds like at that point I'd need Template template haskell... |
| 21:46:48 | <Boomerang> | It might be possible/already exists, but I don't know of such a library |
| 21:47:18 | × | falafel quits (~falafel@2600:1007:b0ad:6e87:7811:313f:d0f3:f9f4) (Read error: Connection reset by peer) |
| 21:50:55 | × | britva quits (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep) |
| 21:54:01 | → | britva joins (~britva@31-10-157-156.cgn.dynamic.upc.ch) |
| 21:55:29 | → | royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
| 21:55:36 | × | DTZUZU quits (~DTZUZU@207.81.171.116) (Remote host closed the connection) |
| 21:55:52 | → | DTZUZU joins (~DTZUZU@207.81.171.116) |
| 21:56:08 | → | ebf0 joins (~ebf0@184.75.221.35) |
| 21:56:44 | → | oish joins (~charlie@228.25.169.217.in-addr.arpa) |
| 21:59:44 | → | borne joins (~fritjof@200116b864b5430099e934deb93b1409.dip.versatel-1u1.de) |
| 22:00:32 | × | jaspervdj quits (~jaspervdj@213.55.241.138) (Quit: leaving) |
| 22:00:33 | × | royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 260 seconds) |
| 22:03:46 | → | nagisa joins (~Android@198-84-255-4.cpe.teksavvy.com) |
| 22:03:47 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 22:06:24 | → | Feuermagier_ joins (~Feuermagi@213.178.26.41) |
| 22:07:15 | × | Lord_of_Life quits (~Lord@46.217.220.81) (Excess Flood) |
| 22:07:43 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 22:07:54 | × | Feuermagier quits (~Feuermagi@213.178.26.41) (Read error: Connection reset by peer) |
| 22:08:37 | → | wildtrees joins (wildtrees@gateway/vpn/protonvpn/wildtrees) |
| 22:10:08 | → | Lord_of_Life joins (~Lord@46.217.220.81) |
| 22:10:08 | × | Lord_of_Life quits (~Lord@46.217.220.81) (Changing host) |
| 22:10:08 | → | Lord_of_Life joins (~Lord@unaffiliated/lord-of-life/x-0885362) |
| 22:10:55 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:12:28 | <monochrom> | wz1000: Thanks for the synthetic topology link, I also get interested. |
| 22:14:32 | → | rprije joins (~rprije@124.148.131.132) |
| 22:14:40 | → | royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
| 22:16:15 | <wz1000> | monochrom: to model everything with the full expressive power you also need unamb, which is implemented using unsafePerformIO: https://hackage.haskell.org/package/unamb-0.2.7/docs/Data-Unamb.html |
| 22:17:04 | <ski> | @hackage lvish |
| 22:17:04 | <lambdabot> | https://hackage.haskell.org/package/lvish |
| 22:17:20 | × | __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving) |
| 22:17:52 | <ski> | (Escardó's work's interesting, yes) |
| 22:21:23 | × | LKoen quits (~LKoen@9.253.88.92.rev.sfr.net) (Read error: Connection reset by peer) |
| 22:21:41 | → | LKoen joins (~LKoen@9.253.88.92.rev.sfr.net) |
| 22:24:45 | ski | . o O ( "Abstract Stone Duality" by Paul Taylor at <https://www.paultaylor.eu/~pt/ASD/> ) |
| 22:27:37 | × | hyperisco quits (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 256 seconds) |
| 22:30:13 | × | alp quits (~alp@2a01:e0a:58b:4920:d8db:f457:3fb6:53df) (Ping timeout: 272 seconds) |
| 22:30:58 | × | Yumasi quits (~guillaume@static-176-175-104-214.ftth.abo.bbox.fr) (Ping timeout: 272 seconds) |
| 22:31:29 | × | Amras quits (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds) |
| 22:36:28 | × | brettgilio quits (~brettgili@brettgilio.com) (Remote host closed the connection) |
| 22:36:32 | × | joeytwiddle quits (~joeytwidd@162.243.115.31) (Quit: ZNC - http://znc.in) |
| 22:36:45 | × | Cathy quits (~Cathy@unaffiliated/cathy) (Ping timeout: 240 seconds) |
| 22:36:47 | × | sulu quits (~sulu@unaffiliated/sulu) (Quit: No Ping reply in 180 seconds.) |
| 22:36:52 | × | nagisa quits (~Android@198-84-255-4.cpe.teksavvy.com) (Quit: -a- IRC for Android 2.1.58) |
| 22:37:15 | → | joeytwiddle joins (~joeytwidd@162.243.115.31) |
| 22:37:45 | × | luigy quits (~luigy@104.236.106.229) (Ping timeout: 240 seconds) |
| 22:38:03 | → | sulu joins (~sulu@unaffiliated/sulu) |
| 22:38:19 | → | luigy joins (~luigy@104.236.106.229) |
| 22:38:25 | × | peutri quits (~peutri@ns317027.ip-94-23-46.eu) (Ping timeout: 240 seconds) |
| 22:38:33 | → | peutri joins (~peutri@ns317027.ip-94-23-46.eu) |
| 22:38:38 | → | Cathy joins (~Cathy@unaffiliated/cathy) |
| 22:38:52 | → | brettgilio joins (~brettgili@brettgilio.com) |
| 22:44:12 | × | britva quits (~britva@31-10-157-156.cgn.dynamic.upc.ch) (Quit: This computer has gone to sleep) |
| 22:46:23 | → | inkbottle joins (~inkbottle@aaubervilliers-654-1-89-20.w86-212.abo.wanadoo.fr) |
| 22:47:22 | × | zebrag quits (~inkbottle@aaubervilliers-654-1-73-14.w86-212.abo.wanadoo.fr) (Ping timeout: 246 seconds) |
| 22:47:58 | → | ystael joins (~ystael@209.6.50.55) |
| 22:48:31 | inkbottle | is now known as zebrag |
| 22:51:43 | → | TxBiGuy joins (~coffee2th@172-125-238-23.lightspeed.rcsntx.sbcglobal.net) |
| 22:51:49 | × | TxBiGuy quits (~coffee2th@172-125-238-23.lightspeed.rcsntx.sbcglobal.net) (Remote host closed the connection) |
| 22:54:17 | × | danvet quits (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds) |
| 22:56:07 | × | royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
| 22:56:33 | → | royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
| 22:56:59 | × | kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection) |
| 22:57:01 | × | stree quits (~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net) (Quit: Caught exception) |
| 22:57:01 | × | star_cloud quits (~star_clou@ec2-34-217-37-165.us-west-2.compute.amazonaws.com) (Remote host closed the connection) |
| 22:57:19 | → | stree joins (~stree@50-108-72-205.adr01.mskg.mi.frontiernet.net) |
| 22:57:31 | × | conal quits (~conal@66.115.176.210) (Quit: Computer has gone to sleep.) |
| 22:58:17 | × | [exa] quits (exa@srv3.blesmrt.net) (Changing host) |
| 22:58:17 | → | [exa] joins (exa@unaffiliated/exa/x-5381537) |
| 22:58:25 | → | star_cloud joins (~star_clou@ec2-34-217-37-165.us-west-2.compute.amazonaws.com) |
| 22:59:25 | <sshine> | hm. apparently the 'data-fix' package doesn't have a 'para'. |
| 23:00:14 | × | zoran119 quits (~zoran119@124-169-22-52.dyn.iinet.net.au) (Read error: Connection reset by peer) |
| 23:00:29 | × | LKoen quits (~LKoen@9.253.88.92.rev.sfr.net) (Remote host closed the connection) |
| 23:00:52 | × | Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
| 23:00:52 | <sshine> | before the package gave its combinators funny new names, it only had 'cata', 'ana' and 'hylo'. |
| 23:01:16 | → | TxBiGuy joins (~coffee2th@172-125-238-23.lightspeed.rcsntx.sbcglobal.net) |
| 23:01:56 | <sshine> | I'm wondering if I should just ditch 'data-fix' and go back to a regular, recursive ADT, or try 'recursion-schemes'. |
| 23:02:48 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 23:02:49 | × | TxBiGuy quits (~coffee2th@172-125-238-23.lightspeed.rcsntx.sbcglobal.net) (Client Quit) |
| 23:02:52 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 23:03:16 | → | TxBiGuy joins (~coffee2th@172-125-238-23.lightspeed.rcsntx.sbcglobal.net) |
| 23:03:28 | → | Varis joins (~Tadas@unaffiliated/varis) |
| 23:03:30 | <sshine> | another peculiar thing is that if I only want to match one level deep, and not recursively, it seems that I need to do 'Fix.foldFix $ \case { Foo{} -> ...; Bar{} -> ... }' and I suppose that since I'm not referring to the recursive parameters of Foo and Bar, they are lazily discarded? |
| 23:04:10 | × | TxBiGuy quits (~coffee2th@172-125-238-23.lightspeed.rcsntx.sbcglobal.net) (Remote host closed the connection) |
| 23:04:47 | → | conal joins (~conal@66.115.176.210) |
| 23:05:03 | × | ebf0 quits (~ebf0@184.75.221.35) (Ping timeout: 272 seconds) |
| 23:05:56 | × | fendor quits (~fendor@178.115.131.226.wireless.dyn.drei.com) (Remote host closed the connection) |
| 23:09:37 | → | pavonia_ joins (~user@unaffiliated/siracusa) |
| 23:09:49 | → | mputz joins (~Thunderbi@dslb-084-058-211-084.084.058.pools.vodafone-ip.de) |
| 23:10:38 | × | kritzefitz_ quits (~kritzefit@fw-front.credativ.com) (Remote host closed the connection) |
| 23:11:10 | × | lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Ping timeout: 246 seconds) |
| 23:11:37 | × | pavonia quits (~user@unaffiliated/siracusa) (Ping timeout: 264 seconds) |
| 23:11:38 | pavonia_ | is now known as pavonia |
| 23:15:50 | → | pavonia_ joins (~user@unaffiliated/siracusa) |
| 23:17:07 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds) |
| 23:18:02 | → | wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
| 23:18:23 | → | christo joins (~chris@81.96.113.213) |
| 23:18:34 | × | pavonia quits (~user@unaffiliated/siracusa) (Ping timeout: 260 seconds) |
| 23:18:45 | pavonia_ | is now known as pavonia |
| 23:19:37 | × | oish quits (~charlie@228.25.169.217.in-addr.arpa) (Ping timeout: 272 seconds) |
| 23:22:56 | → | nbloomf joins (~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) |
| 23:23:31 | hackage | nix-tree 0.1.2.0 - Interactively browse a Nix store paths dependencies https://hackage.haskell.org/package/nix-tree-0.1.2.0 (utdemir) |
| 23:24:23 | <dolio> | Was there some recent blog post somewhere hyping up recursion schemes or something? |
| 23:24:39 | × | gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving) |
| 23:26:05 | <dolio> | Recursion schemes are the things people working on dependent type theory try very hard to avoid having to use. :þ |
| 23:28:37 | × | conal quits (~conal@66.115.176.210) (Quit: Computer has gone to sleep.) |
| 23:29:10 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 23:30:42 | → | ph88 joins (~ph88@2a02:8109:9e00:7e5c:bc50:2174:75e6:7e22) |
| 23:30:47 | <aoei> | monochrom: lmao (sorry late reply, but you deserve the lols) |
| 23:30:48 | → | conal joins (~conal@66.115.176.210) |
| 23:31:01 | <dsal> | The paper was from nearly 30 years ago. It should be the new hotness any day now. |
| 23:31:13 | × | royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
| 23:31:41 | → | royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
| 23:32:19 | <dolio> | I think it's part of a general fallacy among some Haskellers that things that closely match the categorical presentation are automatically nicer. But that is false. |
| 23:33:05 | <dolio> | In fact, one of the reasons category theorists look for certain structures in categories is so that they can use languages that look more like type/set theory to reason about them. |
| 23:33:50 | × | `slikts quits (~nelabs@wikipedia/reinis) (Ping timeout: 246 seconds) |
| 23:33:59 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 23:34:06 | → | Aquazi joins (uid312403@gateway/web/irccloud.com/x-paizsduyeybkbeqa) |
| 23:34:20 | <dsal> | I didn't get very far in my recent recursion excursion. Part of the problem is Foldable and Traversable do a lot of the magic. The other is that my use case and uses are just slightly weird. I can't even remember how, but when I sit down to do something interesting, it's always, "Oh yeah, this is why that won't work." |
| 23:34:46 | <dsal> | It doesn't help that my implementation is complete and already quite tidy. |
| 23:34:47 | → | mananamenos joins (~mananamen@84.122.202.215.dyn.user.ono.com) |
| 23:34:57 | → | shrug joins (~shrug@178.239.168.171) |
| 23:35:26 | → | lagothrix joins (~lagothrix@unaffiliated/lagothrix) |
| 23:36:43 | × | royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 272 seconds) |
| 23:37:28 | × | hiroaki quits (~hiroaki@ip4d168e73.dynamic.kabel-deutschland.de) (Ping timeout: 272 seconds) |
| 23:37:34 | <dolio> | Recursion schemes can give elegant presentations of some things, don't get me wrong. But there's a reason people came up with recursion and pattern matching, and try to justify them in terms of things like folds. |
| 23:38:38 | → | `slikts joins (~nelabs@wikipedia/reinis) |
| 23:39:43 | <hololeap> | learning how to think of something from different angles is beneficial, even if the benefits aren't obvious. it gives you more flexibility in your thinking |
| 23:41:17 | <hololeap> | i think a lot of people learn about recursion-schemes because it is a different angle to dealing with recursion than what they are used to, and after learning it realize that it's not that useful in and of itself. but learning about it isn't a waste of time imo. |
| 23:41:25 | <dolio> | Yeah, they're cool to study. At least the original paper or two. |
| 23:41:49 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 23:42:03 | <dolio> | I think the fact that there are many papers introducing new schemes for recursive definitions that the previous ones didn't handle well is also telling. |
| 23:43:33 | × | boxscape quits (86ab2c1f@gateway/web/cgi-irc/kiwiirc.com/ip.134.171.44.31) (Ping timeout: 256 seconds) |
| 23:43:40 | × | vacm quits (~vacwm@70.23.92.191) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 23:44:31 | → | superstar64 joins (6ccefa7c@108-206-250-124.lightspeed.miamfl.sbcglobal.net) |
| 23:44:51 | <dolio> | Anyhow, I ask because it seems that lately there are a lot of 'which recursion-schemes pacakge should I use' type questions here, which I would expect because someone famous said to use one. :) |
| 23:44:54 | × | conal quits (~conal@66.115.176.210) (Quit: Computer has gone to sleep.) |
| 23:45:13 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 23:47:20 | × | Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:48:44 | → | ronbrz joins (~ronbrz@207.229.174.134) |
| 23:50:38 | <sshine> | dolio, I don't know if recursion schemes were recently hyped up :) |
| 23:51:16 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
| 23:51:40 | <sshine> | dolio, I guess I had to try for myself that this was a bit of a bother the moment I ran into a recursion scheme that the library (data-fix) didn't support. |
| 23:52:06 | <dsal> | I was looking at recursion-schemes recently just because it was on my mind and I had a road trip, so I was trying to find explanations I could listen to. The concepts make plenty of sense. I've just not actually applied them to anything. |
| 23:52:08 | <sshine> | dolio, I did ask which of the two to use a few weeks ago. |
| 23:52:12 | × | nbloomf quits (~nbloomf@2600:1700:ad14:3020:8491:5fed:8d7f:daad) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 23:54:28 | <sshine> | dolio, "there's a reason people came up with recursion and pattern matching": well, you'd still be using pattern matching with data-fix. just not arbitrarily deep. and I guess you wouldn't be using arbitrary recursion much like a foldr wouldn't let you... so as long as you're fine with recursion constrained to certain schemes, it shouldn't make a big difference. except, yeah, suddenly I need to match two |
| 23:54:34 | <sshine> | levels deep in my tree and I can't. >_< |
| 23:55:14 | <sshine> | I think I'm just going to slowly back out and say that I had my experience with it. :) |
| 23:55:44 | <sshine> | I'd switch from 'data-fix' to 'recursion-schemes' if it weren't because I think that this didn't just prove that I'm spending more energy rather than less. |
| 23:56:06 | <dolio> | sshine: Yeah, I'm sure there's a something-morphism named for matching two levels deep. :) |
| 23:56:08 | <sshine> | (also, this being totally researchy, I don't really mind that, it could have been a golden discovery since I happened to actually understand it.) |
| 23:56:21 | <sshine> | dolio, para. it's in recursion-schemes, but not in data-fix. |
| 23:56:36 | <dolio> | Well, para gives you the whole underlying value. |
| 23:56:39 | <sshine> | sure |
| 23:57:00 | <dolio> | You can publish another paper for one that only gives you the immediate level. :P |
| 23:57:02 | <sshine> | I mean... I think they're somehow equivalent, so I could *make* a two-level-deep scheme from 'cata'. |
| 23:57:02 | → | conal joins (~conal@66.115.176.210) |
| 23:57:29 | <sshine> | and I could make it contain a whole bunch of '.'s and 'Fix . fmap f . fmap fmap fmap fmap' |
| 23:57:42 | <superstar64> | if it's complicated, why not use vanilla recursion? |
| 23:57:46 | <dolio> | Anyhow, recursion-schemes is probably fine for para, but I wouldn't hesitate to define some pattern synonyms for the one-step match. |
| 23:57:51 | <sshine> | superstar64, that. |
| 23:58:14 | <dolio> | Or just ditch the `Fix` version of the type if it's not paying off. |
| 23:58:42 | <sshine> | dolio, yeah, I ended up defining a bunch of synonyms for my tree, which wasn't less work but made me recall one professor saying you actually want an abstract tree, and I realized, once I did all that boilerplate work, I could actually replace 'data-fix' with anything and not touch the synonyms. |
| 23:58:50 | <sshine> | dolio, I'm gonna. |
| 23:59:13 | → | Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas) |
| 23:59:29 | <sshine> | superstar64, I was trying to find out if it was complicated. it sort of is. :-D |
| 23:59:45 | → | royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
All times are in UTC on 2020-11-16.