2020-09-17 00:00:11 +0200 | banner | (~banner@116-255-17-98.ip4.superloop.com) |
2020-09-17 00:00:49 +0200 | Rudd0 | (~Rudd0@185.189.115.98) |
2020-09-17 00:02:11 +0200 | danvet | (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds) |
2020-09-17 00:02:17 +0200 | hekkaidekapus | (~tchouri@gateway/tor-sasl/hekkaidekapus) (Remote host closed the connection) |
2020-09-17 00:02:17 +0200 | tomboy64 | (~tomboy64@gateway/tor-sasl/tomboy64) (Remote host closed the connection) |
2020-09-17 00:02:45 +0200 | hekkaidekapus | (~tchouri@gateway/tor-sasl/hekkaidekapus) |
2020-09-17 00:02:59 +0200 | tomboy64 | (~tomboy64@gateway/tor-sasl/tomboy64) |
2020-09-17 00:02:59 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds) |
2020-09-17 00:03:13 +0200 | frdg | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) |
2020-09-17 00:03:54 +0200 | <frdg> | what is a nice way to visit every element in a list and perform an IO () on every visit? |
2020-09-17 00:04:07 +0200 | <monochrom> | mapM_ |
2020-09-17 00:04:18 +0200 | <frdg> | ok |
2020-09-17 00:04:36 +0200 | WeaponX | (~WeaponX@178.239.173.252) |
2020-09-17 00:04:46 +0200 | <monochrom> | Example: mapM_ putStrLn ["1st line", "2nd line"] |
2020-09-17 00:04:48 +0200 | kritzefitz | (~kritzefit@212.86.56.80) (Remote host closed the connection) |
2020-09-17 00:06:20 +0200 | WeaponX | (~WeaponX@178.239.173.252) (Quit: Leaving) |
2020-09-17 00:06:26 +0200 | MorrowM | (~max@147.161.8.74) (Ping timeout: 258 seconds) |
2020-09-17 00:06:32 +0200 | <hpc> | it may also be more comfortable to do forM_ ["1st line", "2nd line"] $ do {...} |
2020-09-17 00:06:50 +0200 | HarveyPwca | (~HarveyPwc@c-98-220-98-201.hsd1.il.comcast.net) |
2020-09-17 00:07:53 +0200 | <monochrom> | you missed a lambda. forM_ ["1st line", "2nd line"] $ \x -> do {...} |
2020-09-17 00:08:04 +0200 | rihards | (~rihards@balticom-142-78-50.balticom.lv) (Quit: rihards) |
2020-09-17 00:09:02 +0200 | irc_user | (uid423822@gateway/web/irccloud.com/x-cbxmaikgpxapbiip) |
2020-09-17 00:09:20 +0200 | rihards | (~rihards@balticom-142-78-50.balticom.lv) |
2020-09-17 00:09:56 +0200 | <hpc> | oh yeah, i did |
2020-09-17 00:11:59 +0200 | <Boarders> | I was getting a seg fault in my code which read from a file of size 10^9 bytes into a buffer which went away when I upgraded from ghc-8.6.5 to ghc-8.10.1. Does anyone know of any change that could have caused that? I was also using SIMD operations if that is even slightly relevant. |
2020-09-17 00:12:07 +0200 | rihards | (~rihards@balticom-142-78-50.balticom.lv) (Client Quit) |
2020-09-17 00:12:33 +0200 | <Graypup_> | Boarders, it would probably be very computationally unpleasant but you could bisect it :P |
2020-09-17 00:13:09 +0200 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) |
2020-09-17 00:13:42 +0200 | <monochrom> | Knowing how ghc-8.8.x fares may help. |
2020-09-17 00:14:35 +0200 | <Boarders> | I was hoping someone familiar with gritter details of ghc dev might have some hunches for the answer |
2020-09-17 00:14:36 +0200 | carlomagno | (~cararell@inet-hqmc01-o.oracle.com) (Remote host closed the connection) |
2020-09-17 00:14:39 +0200 | carlomagno1 | (~cararell@inet-hqmc02-o.oracle.com) |
2020-09-17 00:15:41 +0200 | <sm[m]> | Boarders: maybe check changelogs between the ghc versions and between the package versions |
2020-09-17 00:15:52 +0200 | whataday | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2020-09-17 00:16:28 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 00:16:33 +0200 | <Graypup_> | what did my debugging book say .... "quit thinking and look" |
2020-09-17 00:16:44 +0200 | frdg | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) (Remote host closed the connection) |
2020-09-17 00:16:59 +0200 | whataday | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2020-09-17 00:17:53 +0200 | whataday | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Read error: Connection reset by peer) |
2020-09-17 00:18:59 +0200 | whataday | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2020-09-17 00:19:20 +0200 | mananamenos | (~mananamen@84.122.202.215.dyn.user.ono.com) |
2020-09-17 00:19:21 +0200 | mananamenos | (~mananamen@84.122.202.215.dyn.user.ono.com) (Read error: Connection reset by peer) |
2020-09-17 00:19:28 +0200 | hackage | orthotope 0.1.0.0 - Multidimensional arrays inspired by APL https://hackage.haskell.org/package/orthotope-0.1.0.0 (LennartAugustsson) |
2020-09-17 00:20:15 +0200 | mdunnio | (~mdunnio@208.59.170.5) |
2020-09-17 00:21:29 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 260 seconds) |
2020-09-17 00:23:05 +0200 | banner | (~banner@116-255-17-98.ip4.superloop.com) (Ping timeout: 272 seconds) |
2020-09-17 00:23:26 +0200 | g-belmonte | (~g-belmont@2804:14c:8786:9312:3638:eaf5:dc36:146d) (Quit: Leaving) |
2020-09-17 00:24:49 +0200 | lembot | (~lembot@179.8.176.163) (Ping timeout: 264 seconds) |
2020-09-17 00:24:59 +0200 | mdunnio | (~mdunnio@208.59.170.5) (Ping timeout: 272 seconds) |
2020-09-17 00:26:48 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds) |
2020-09-17 00:27:56 +0200 | aarvar | (~foewfoiew@50.35.43.33) |
2020-09-17 00:28:33 +0200 | asdfasdfasdf | (339a7d12@51.154.125.18) (Remote host closed the connection) |
2020-09-17 00:30:19 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 00:32:46 +0200 | rprije | (~rprije@27.143.220.203.dial.dynamic.acc01-myal-dub.comindico.com.au) |
2020-09-17 00:33:09 +0200 | josh | (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (K-Lined) |
2020-09-17 00:34:29 +0200 | wroathe | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 00:37:01 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 00:37:21 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 00:37:43 +0200 | oo_miguel | (~miguel@89-72-187-203.dynamic.chello.pl) |
2020-09-17 00:37:43 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) (Remote host closed the connection) |
2020-09-17 00:38:02 +0200 | gmt | (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 260 seconds) |
2020-09-17 00:39:40 +0200 | tom__ | (~tom@host86-169-79-54.range86-169.btcentralplus.com) |
2020-09-17 00:39:43 +0200 | zincy__ | (~tom@2a00:23c8:970a:3501:38a6:4546:df42:c1cb) (Remote host closed the connection) |
2020-09-17 00:47:55 +0200 | grant | (~dead10cc@2607:fea8:2c60:2d2:b401:59a1:1f1b:bfe) |
2020-09-17 00:50:38 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 260 seconds) |
2020-09-17 00:51:56 +0200 | dead10cc | (~dead10cc@2607:fea8:2c60:2d2:b401:59a1:1f1b:bfe) (Ping timeout: 240 seconds) |
2020-09-17 00:52:46 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 00:55:17 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 00:57:17 +0200 | sfvm | (~sfvm@37.228.215.148) |
2020-09-17 00:57:30 +0200 | acidjnk_new3 | (~acidjnk@p200300d0c736587164f46f145ae9b6a7.dip0.t-ipconnect.de) |
2020-09-17 00:57:55 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 00:57:59 +0200 | Turmfalke | (~user@unaffiliated/siracusa) (Quit: Bye!) |
2020-09-17 00:58:57 +0200 | DavidEichmann | (~david@43.240.198.146.dyn.plus.net) (Ping timeout: 258 seconds) |
2020-09-17 00:59:57 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds) |
2020-09-17 01:00:02 +0200 | grant | (~dead10cc@2607:fea8:2c60:2d2:b401:59a1:1f1b:bfe) ("Konversation terminated!") |
2020-09-17 01:00:23 +0200 | acidjnk_new2 | (~acidjnk@p200300d0c73658171887db1a128e4af1.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
2020-09-17 01:00:32 +0200 | lep-delete | (~lep@94.31.82.44) |
2020-09-17 01:03:15 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) |
2020-09-17 01:03:34 +0200 | shutdown_-h_now | (~arjan@2001:1c06:2d0b:2312:81d1:c87b:121a:a256) (Ping timeout: 244 seconds) |
2020-09-17 01:04:25 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Ping timeout: 240 seconds) |
2020-09-17 01:05:30 +0200 | __Joker | (~Joker@180.151.106.108) |
2020-09-17 01:09:47 +0200 | __Joker | (~Joker@180.151.106.108) (Ping timeout: 240 seconds) |
2020-09-17 01:10:17 +0200 | Tops2 | (~Tobias@dyndsl-095-033-025-182.ewe-ip-backbone.de) (Ping timeout: 246 seconds) |
2020-09-17 01:12:21 +0200 | wroathe | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
2020-09-17 01:12:29 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
2020-09-17 01:13:30 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 01:16:27 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 01:18:10 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 01:19:25 +0200 | falafel | (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 240 seconds) |
2020-09-17 01:21:25 +0200 | __Joker | (~Joker@180.151.106.108) |
2020-09-17 01:21:28 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 272 seconds) |
2020-09-17 01:21:40 +0200 | Cthalupa | (~cthulhu@47.186.39.187) (Ping timeout: 256 seconds) |
2020-09-17 01:22:59 +0200 | xerox_ | (~xerox@unaffiliated/xerox) (Ping timeout: 240 seconds) |
2020-09-17 01:23:23 +0200 | mitchellsalad_ | (uid40617@gateway/web/irccloud.com/x-wopqfurhxhollxgh) |
2020-09-17 01:24:21 +0200 | Cthalupa | (~cthulhu@47.186.39.187) |
2020-09-17 01:24:55 +0200 | board_control | (~board_con@50-46-195-209.evrt.wa.frontiernet.net) |
2020-09-17 01:26:06 +0200 | __Joker | (~Joker@180.151.106.108) (Ping timeout: 260 seconds) |
2020-09-17 01:28:13 +0200 | lembot | (~lembot@179.8.176.163) |
2020-09-17 01:28:28 +0200 | darjeeling_ | (~darjeelin@115.215.41.222) (Ping timeout: 256 seconds) |
2020-09-17 01:30:21 +0200 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 244 seconds) |
2020-09-17 01:31:25 +0200 | borne | (~fritjof@200116b864b6860060095f4622ae75c8.dip.versatel-1u1.de) (Ping timeout: 240 seconds) |
2020-09-17 01:34:08 +0200 | son0p | (~son0p@181.136.122.143) (Quit: Lost terminal) |
2020-09-17 01:34:24 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 01:34:30 +0200 | oo_miguel | (~miguel@89-72-187-203.dynamic.chello.pl) (Quit: WeeChat 2.3) |
2020-09-17 01:35:55 +0200 | raehik | (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net) (Ping timeout: 272 seconds) |
2020-09-17 01:35:59 +0200 | faker | (bd0f81a2@189.15.129.162) (Remote host closed the connection) |
2020-09-17 01:38:30 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 01:39:10 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 01:40:21 +0200 | asan | (~yan4138@114.84.148.80) (Ping timeout: 272 seconds) |
2020-09-17 01:40:36 +0200 | asan | (~yan4138@114.84.148.87) |
2020-09-17 01:40:39 +0200 | z0 | (~z0@bl15-162-186.dsl.telepac.pt) |
2020-09-17 01:43:43 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2020-09-17 01:44:45 +0200 | Qez | (52249602@cpc142018-dudl15-2-0-cust513.16-1.cable.virginm.net) |
2020-09-17 01:45:24 +0200 | ddere | (uid110888@gateway/web/irccloud.com/x-hxjfplopujbdeyav) |
2020-09-17 01:49:27 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 01:49:40 +0200 | darjeeling_ | (~darjeelin@115.215.41.222) |
2020-09-17 01:52:32 +0200 | fresheyeball | (~isaac@c-71-237-105-37.hsd1.co.comcast.net) (Quit: WeeChat 2.7.1) |
2020-09-17 01:54:25 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 240 seconds) |
2020-09-17 01:54:44 +0200 | Synthetica | (uid199651@gateway/web/irccloud.com/x-phuwzqugvujuneob) (Quit: Connection closed for inactivity) |
2020-09-17 01:55:12 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 01:58:17 +0200 | xerox_ | (~xerox@unaffiliated/xerox) |
2020-09-17 02:00:02 +0200 | Suntop1 | (~Suntop@217.146.82.202) () |
2020-09-17 02:00:11 +0200 | ryansmccoy | (~ryansmcco@193.37.254.27) |
2020-09-17 02:00:13 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 264 seconds) |
2020-09-17 02:01:45 +0200 | Qez | (52249602@cpc142018-dudl15-2-0-cust513.16-1.cable.virginm.net) (Ping timeout: 245 seconds) |
2020-09-17 02:02:42 +0200 | jumper149 | (~jumper149@ip185225.wh.uni-hannover.de) (Quit: WeeChat 2.9) |
2020-09-17 02:07:40 +0200 | twopoint718 | (~cjw@fsf/member/twopoint718) (Quit: Textual IRC Client: www.textualapp.com) |
2020-09-17 02:11:51 +0200 | wroathe_ | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-09-17 02:13:17 +0200 | wroathe | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 02:13:34 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 02:15:51 +0200 | mariatsji | (~mariatsji@155.84-234-177.customer.lyse.net) |
2020-09-17 02:16:04 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 02:16:20 +0200 | josh | (~josh@c-67-164-104-206.hsd1.ca.comcast.net) |
2020-09-17 02:16:23 +0200 | wroathe_ | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 02:16:30 +0200 | ryansmccoy | (~ryansmcco@193.37.254.27) (Ping timeout: 260 seconds) |
2020-09-17 02:16:38 +0200 | <glguy> | Hi, josh. Glad you could make it. |
2020-09-17 02:18:06 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-09-17 02:20:22 +0200 | mariatsji | (~mariatsji@155.84-234-177.customer.lyse.net) (Ping timeout: 272 seconds) |
2020-09-17 02:20:42 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 02:21:06 +0200 | mdunnio | (~mdunnio@208.59.170.5) |
2020-09-17 02:23:32 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 02:24:47 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 02:26:04 +0200 | mdunnio | (~mdunnio@208.59.170.5) (Ping timeout: 272 seconds) |
2020-09-17 02:27:33 +0200 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) |
2020-09-17 02:29:52 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 272 seconds) |
2020-09-17 02:32:14 +0200 | <lc_> | what's up justanotheruser. How ya been? |
2020-09-17 02:32:50 +0200 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 02:34:55 +0200 | frdg | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) |
2020-09-17 02:35:01 +0200 | spew | (uid195861@gateway/web/irccloud.com/x-hbqiwomwemzgybnr) (Quit: Connection closed for inactivity) |
2020-09-17 02:36:56 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 02:38:54 +0200 | gmt | (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) |
2020-09-17 02:40:31 +0200 | Tuplanolla | (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Ping timeout: 272 seconds) |
2020-09-17 02:41:22 +0200 | eric_ | (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) |
2020-09-17 02:41:47 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 02:42:59 +0200 | HarveyPwca | (~HarveyPwc@c-98-220-98-201.hsd1.il.comcast.net) (Quit: Leaving) |
2020-09-17 02:43:36 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 02:43:37 +0200 | <sshine> | monochrom, is there a good reason to use forM_ instead of for_? |
2020-09-17 02:43:50 +0200 | <monochrom> | No. |
2020-09-17 02:44:05 +0200 | <sshine> | ok, so it was just for the mapM_ <-> forM_ correspondence. |
2020-09-17 02:44:25 +0200 | <sshine> | :t for_ |
2020-09-17 02:44:27 +0200 | <lambdabot> | (Foldable t, Applicative f) => t a -> (a -> f b) -> f () |
2020-09-17 02:44:50 +0200 | eric | (~eric@2804:431:c7d4:b75:f492:17b0:3087:5bcd) (Ping timeout: 244 seconds) |
2020-09-17 02:45:03 +0200 | <monochrom> | It's simpler than that. Different people learned different names, and first impressions are always the strongest. |
2020-09-17 02:45:37 +0200 | <dolio> | I learned all the names before Applicative even existed, but I like the Applicative names better. :þ |
2020-09-17 02:45:38 +0200 | <ski> | `Applicative' wasn't superclass of `Monad', back then |
2020-09-17 02:46:30 +0200 | <monochrom> | Always look for human factors and social reasons before looking for technical reasons. |
2020-09-17 02:46:45 +0200 | <monochrom> | Programmers are artisan humans not scientific robots. |
2020-09-17 02:47:00 +0200 | <monochrom> | Oh I do wish programmers were scientific robots. |
2020-09-17 02:47:36 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
2020-09-17 02:47:38 +0200 | <justanotheruser> | lc_: hi whos this |
2020-09-17 02:48:10 +0200 | <lc_> | just a friendly guy |
2020-09-17 02:48:20 +0200 | <justanotheruser> | ok |
2020-09-17 02:48:22 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds) |
2020-09-17 02:50:40 +0200 | <sshine> | I consider myself better of being a bayesian inference machine. |
2020-09-17 02:50:50 +0200 | <monochrom> | Another good example is why Prelude has the head-tail couple, and why tail [] = undefined, and why they are neither a safeHead-safeTail couple nor a "listAnalysis z _ [] = z; listAnalysis _ f (x:xs) = f x xs" function like maybe and either. |
2020-09-17 02:50:52 +0200 | <sshine> | I get to defy logic in completely subjective corner cases. |
2020-09-17 02:51:01 +0200 | <sshine> | robots are doomed to repeat their program. |
2020-09-17 02:52:15 +0200 | <monochrom> | It is because when the committee formed and sat down to write Prelude, the lot of them was from Lisp backgrounds and their first instinct was to replicate Lisp's car and cdr. |
2020-09-17 02:53:01 +0200 | <monochrom> | And because of that background, they totally expected the head-tail couple would be very popular among users. |
2020-09-17 02:53:04 +0200 | <sshine> | I thought the Lisp guys branched off to form the ML cult of which Haskell is more closely related? |
2020-09-17 02:53:22 +0200 | <monochrom> | It is clearly technically inferior, and equally clearly socially popular. |
2020-09-17 02:53:27 +0200 | <sshine> | SML has hd/tl, too. |
2020-09-17 02:54:19 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-09-17 02:55:55 +0200 | <monochrom> | And I guess s/scientific robots/utilitarian robots/ |
2020-09-17 02:56:11 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 02:58:36 +0200 | Plazma | (~Plazma@freenode/staff-emeritus/plazma) |
2020-09-17 02:59:33 +0200 | <monochrom> | ML taught us the valuable lesson that pattern matching trumps head-tail, and after you have pattern matching you can pretty much throw away head-tail. A committee for a new language and its new library, having their chance to start from a clean slate, if they had really learned that lesson, you would think they would reflect this new value by omitting head-tail in their clean slate new library no? |
2020-09-17 02:59:42 +0200 | falafel | (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
2020-09-17 02:59:44 +0200 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 244 seconds) |
2020-09-17 03:00:18 +0200 | banner | (~banner@116-255-17-98.ip4.superloop.com) |
2020-09-17 03:00:30 +0200 | <monochrom> | That they totally (anti-pun!) didn't do it shows that the influence of social inertia trumps the influence of technical superiority. |
2020-09-17 03:00:54 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 03:03:00 +0200 | <josh> | thanks, glguy. Glad to be here |
2020-09-17 03:03:51 +0200 | <Plazma> | apologies if this has been brought up before or beaten to death but i came across this - https://www.stephendiehl.com/posts/crypto.html and it seems to be more of a negative against the community vs the language itself.. or did i read it incorrectly |
2020-09-17 03:05:24 +0200 | <sm[m]> | Plazma: there's some discussion of it on /r/haskell and hacker news |
2020-09-17 03:05:41 +0200 | <josh> | "the influence of social inertia trumps the influence of technical superiority" is the story of my Haskell life |
2020-09-17 03:06:05 +0200 | banner | (~banner@116-255-17-98.ip4.superloop.com) (Remote host closed the connection) |
2020-09-17 03:06:31 +0200 | <Plazma> | i didn't realize social stuff was such a key part of using/loving a language |
2020-09-17 03:06:36 +0200 | <Axman6> | it's negative about a view of some of the industrial uses of Haskell. I happen to work for a company which is using blockchain/DLT to build non-cryptocurrency stuff so I found the lumping of everyone with anyone who had anything to do with blockchain pretty disappointing and somewhat uninformed (though that's the same of most discussions of blockchain, everyone thinks it means cryptocurrency and boiling the oceans) |
2020-09-17 03:07:33 +0200 | <Plazma> | Axman6: i've not worked with blockchain but i collaborate with some blockchain folks also (i'm a quantum guy) , and it's a similar story,, they aren't all trying to necessarily start their own cryptocurrency |
2020-09-17 03:07:38 +0200 | elliott_ | (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net) (Read error: Connection reset by peer) |
2020-09-17 03:07:40 +0200 | <Plazma> | many are just exploring the waters |
2020-09-17 03:07:52 +0200 | <MarcelineVQ> | It barely mentions haskell and baffles me why it's called a haskell elephant |
2020-09-17 03:07:59 +0200 | elliott_ | (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net) |
2020-09-17 03:08:11 +0200 | <monochrom> | Hey I heard lately that Microsoft is going to be literally boiling the ocean, or at least seas, by putting data centres undersea. |
2020-09-17 03:08:13 +0200 | <Axman6> | Plazma: it's not, I think a lot of the community found the article pretty extreme, particularly when the targer was IOHK, possibly (IMO) one of the least bad players in the cryptocurrency market. (I don't work for IOHK, but do know several people who do) |
2020-09-17 03:08:33 +0200 | <Plazma> | MarcelineVQ: see that'w hat i noticed too.. like what the actual hell is he going on about haskell ? he's not.. |
2020-09-17 03:08:46 +0200 | <Axman6> | monochrom: heating the oceans is much more efficient if we avoid the wasteful atmospheric warming step :P |
2020-09-17 03:09:12 +0200 | <monochrom> | The benefit is 90% reduction in failure rate. |
2020-09-17 03:09:23 +0200 | <Plazma> | thermal physics is a signed integer, so we just need to heat it so much it rolls over to cooling through natural means |
2020-09-17 03:09:54 +0200 | systemhalted | (~aqualogic@71-129-231-253.lightspeed.rcsntx.sbcglobal.net) |
2020-09-17 03:09:56 +0200 | <monochrom> | It looks like the new failure rate is so slow, they won't bother to repair a failed unit, just submerge a new one. |
2020-09-17 03:10:08 +0200 | <monochrom> | s/slow/low/ |
2020-09-17 03:10:15 +0200 | jedws | (~jedws@101.184.189.58) |
2020-09-17 03:10:53 +0200 | systemhalted | (~aqualogic@71-129-231-253.lightspeed.rcsntx.sbcglobal.net) (Remote host closed the connection) |
2020-09-17 03:11:13 +0200 | <MarcelineVQ> | "why crypto is badong" would have been a better, though less publicly shared, title |
2020-09-17 03:11:33 +0200 | xff0x_ | (~fox@2001:1a81:52d0:6b00:7599:d48:f5dc:5fef) (Ping timeout: 272 seconds) |
2020-09-17 03:11:34 +0200 | <Plazma> | Axman6: yea i mean a source i trust sent me that basically telling me to stay away from haskell or learning it, but it makes no mention of haskell really , at all as a language .. just that some guy may have used some shit for it to do shady things |
2020-09-17 03:11:40 +0200 | <MarcelineVQ> | "I don't like that some effort in haskell goes towards crypto currencies" ok. "haskell as an ecosystem and community has sold its soul to the devil" umm... |
2020-09-17 03:12:12 +0200 | <Axman6> | Plazma: your friend seems equally uninformed then :P |
2020-09-17 03:12:26 +0200 | <Plazma> | i mean malware is often written in C/win32 api stuff, someitmes C++ for ransomware, but we don't chastise C++ for that, we chastise it for every other reason |
2020-09-17 03:12:41 +0200 | <Plazma> | i mostly just wanted to make sure i didn't misinterpret it |
2020-09-17 03:12:51 +0200 | <Plazma> | Axman6: he didn't convince me at all with that article |
2020-09-17 03:12:57 +0200 | xff0x_ | (~fox@2001:1a81:5306:e200:7599:d48:f5dc:5fef) |
2020-09-17 03:13:05 +0200 | <Axman6> | there are definitely better technological and community reasons to avoid Haskell than some companies are using it for cryptocurrency development |
2020-09-17 03:13:44 +0200 | <monochrom> | We chastise C for the equal and opposite reason. That C makes it easy to write programs that are vulnerable. |
2020-09-17 03:14:24 +0200 | <Plazma> | monochrom: exactly.. scanf() just to name a simple/easy one |
2020-09-17 03:14:35 +0200 | <monochrom> | I.e., while we don't chastise C for aggressors being written in C, we do chastise C for victims being written in C. |
2020-09-17 03:14:47 +0200 | <monochrom> | Hey wait a second, does that count as blaming the victim? >:) |
2020-09-17 03:14:52 +0200 | <Axman6> | for me, a big one is we seem to really struggle to develop projects as a community, we rely on a lot of single person efforts (edwardk's bus factor is astronomical). One of the few prohjects I've seen do a decent job in Haskell as building some sort of community is Servant |
2020-09-17 03:15:16 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 03:15:19 +0200 | <Plazma> | monochrom: you're not on trial here :) |
2020-09-17 03:15:30 +0200 | da39a3ee5e6b4b0d | (~textual@2403:6200:8876:37d7:7100:a9d6:e349:d9ad) |
2020-09-17 03:15:38 +0200 | <Axman6> | like I look at Rust and they seem be quite good at having projects which the community contributes to and progress is made quite quickly |
2020-09-17 03:15:46 +0200 | <Plazma> | ahh i see |
2020-09-17 03:16:04 +0200 | <Plazma> | i guess that's whewre community is kind of important.. |
2020-09-17 03:16:51 +0200 | <Axman6> | we do have an incredibly supportive community though, people will fall over themselves to help you learn something |
2020-09-17 03:17:48 +0200 | <MarcelineVQ> | Even into a pit of spikes |
2020-09-17 03:18:04 +0200 | <Axman6> | We're also starting to see some decent commercial use and support |
2020-09-17 03:19:59 +0200 | bitmagie | (~Thunderbi@200116b8063aa600b5d933e791b8d0ae.dip.versatel-1u1.de) |
2020-09-17 03:20:52 +0200 | <Plazma> | so i guess in short that article is an opinion piece and worthless for most things |
2020-09-17 03:20:56 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 03:21:27 +0200 | <Axman6> | that depends on your opinion I think :) |
2020-09-17 03:21:52 +0200 | <Plazma> | i'm new so i don't have any , but the fact they don't mention anything remotely technical it's just some dribble to me |
2020-09-17 03:22:03 +0200 | bitmagie | (~Thunderbi@200116b8063aa600b5d933e791b8d0ae.dip.versatel-1u1.de) (Client Quit) |
2020-09-17 03:22:09 +0200 | <MarcelineVQ> | For me there's nothing specific enough to be useful _about haskell_ in that article |
2020-09-17 03:22:09 +0200 | <Plazma> | no offense to the guy personaly, i'm sure he's great and accomplished |
2020-09-17 03:22:15 +0200 | __Joker | (~Joker@180.151.106.108) |
2020-09-17 03:23:51 +0200 | <Axman6> | it's not like all of the sommercial use of Haskell is in cryptocurrencies either, by a long shot. there's quite a lot of use in finance., Facebook has their spam detection system written in it, GitHub are using it for their new Semantic (IIRC) project, and several sproduct and contract companies |
2020-09-17 03:24:31 +0200 | <Axman6> | Plazma: Don't write off everything he's written because of that article though, his What I Wish I Knew When Learning Haskell is incredibly valuable |
2020-09-17 03:24:48 +0200 | <Plazma> | Axman6: yea actually i just discovered that too and was probably going to learn haskell better from it |
2020-09-17 03:24:48 +0200 | elliott_ | (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net) (Read error: Connection reset by peer) |
2020-09-17 03:24:57 +0200 | <Plazma> | and some of his stuff and his company seem pretty legit |
2020-09-17 03:25:07 +0200 | <Plazma> | he probably was just upset about that and wrote it |
2020-09-17 03:25:24 +0200 | <Plazma> | he's not at all saying "don't learn haskell because of this" either, so |
2020-09-17 03:25:31 +0200 | elliott_ | (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net) |
2020-09-17 03:25:31 +0200 | <Plazma> | my friend was probably just being overly opininoated |
2020-09-17 03:25:37 +0200 | <Plazma> | (he told me to learn nim instead) |
2020-09-17 03:26:41 +0200 | RusAlex | (~Chel@unaffiliated/rusalex) (Ping timeout: 244 seconds) |
2020-09-17 03:26:45 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
2020-09-17 03:26:58 +0200 | __Joker | (~Joker@180.151.106.108) (Ping timeout: 260 seconds) |
2020-09-17 03:27:44 +0200 | RusAlex | (~Chel@unaffiliated/rusalex) |
2020-09-17 03:28:45 +0200 | aenesidemus | (~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net) (Read error: Connection reset by peer) |
2020-09-17 03:29:15 +0200 | bakabiel | (~bakabiel@79.104.200.71) |
2020-09-17 03:29:29 +0200 | <jchia> | That article overgeneralizes things. Just because some 'crypto' stuff is bad doesn't mean all crypto stuff is bad. Just because some Haskell users do bad things doesn't mean the Haskell 'community' is bad. We don't do that kind of generalization for other languages. I don't understand how smart people can make this kind of overgeneralization mistakes. |
2020-09-17 03:29:53 +0200 | banner | (~banner@116-255-17-98.ip4.superloop.com) |
2020-09-17 03:30:22 +0200 | urodna | (~urodna@unaffiliated/urodna) (Quit: urodna) |
2020-09-17 03:30:26 +0200 | <Plazma> | jchia: yea that's my conclusion too.. doesn't really make a lot of sense to me either |
2020-09-17 03:30:42 +0200 | darjeeling_ | (~darjeelin@115.215.41.222) (Ping timeout: 260 seconds) |
2020-09-17 03:30:53 +0200 | jbarnette | (~jbarnette@185.204.1.185) |
2020-09-17 03:31:40 +0200 | <monochrom> | Programmers seem to be more overgeneralizing than other people. |
2020-09-17 03:32:09 +0200 | <Plazma> | i'm going to assume he was just emotional and upset and wrote it |
2020-09-17 03:32:10 +0200 | <monochrom> | For example consider the "software engineer makes toaster" joke. |
2020-09-17 03:32:11 +0200 | <Plazma> | and it got traction |
2020-09-17 03:32:27 +0200 | <Plazma> | all i know is bread goes in, toast comes out... you can't explain that , man |
2020-09-17 03:32:34 +0200 | elliott_ | (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net) (Ping timeout: 272 seconds) |
2020-09-17 03:32:58 +0200 | bakabiel | (~bakabiel@79.104.200.71) (Client Quit) |
2020-09-17 03:33:16 +0200 | wei2912 | (~wei2912@unaffiliated/wei2912) |
2020-09-17 03:33:24 +0200 | <monochrom> | No no, it's a joke along the line of "a physicist, an engineer, and a programmer are each asked to make a toaster". |
2020-09-17 03:33:26 +0200 | elliott_ | (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net) |
2020-09-17 03:33:26 +0200 | banner | (~banner@116-255-17-98.ip4.superloop.com) (Remote host closed the connection) |
2020-09-17 03:33:47 +0200 | <Axman6> | "Programmers seem to be more overgeneralizing than other people." so meta |
2020-09-17 03:33:55 +0200 | <monochrom> | hahaha busted |
2020-09-17 03:34:08 +0200 | <jchia> | he did say 'seems' |
2020-09-17 03:34:26 +0200 | <sm[m]> | Axman6: there's good team work going on with ide tools lately |
2020-09-17 03:34:36 +0200 | <monochrom> | So the joke goes on to say something funny but pretty OK on how a physicist would make a toaster, and how an engineer would make a toaster. |
2020-09-17 03:34:57 +0200 | <sm[m]> | volunteer, gsoc, and company driven |
2020-09-17 03:35:02 +0200 | <MarcelineVQ> | I just go down to the local library and use their toaster. |
2020-09-17 03:36:02 +0200 | <monochrom> | The punchline is a very long sentence about how a programmer does it by going way overboard with the OOP kind of overgeneralization, plus a prophetic addition that the toast also connects to the Internet. (This joke was decades before the IoT movement.) |
2020-09-17 03:36:41 +0200 | <monochrom> | a long sentence basically enumerating everything one does in OOP |
2020-09-17 03:36:44 +0200 | <Axman6> | sm[m]: yeah that's true |
2020-09-17 03:37:02 +0200 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) |
2020-09-17 03:37:06 +0200 | <sm[m]> | also haven't ghc, cabal, stack, hackage all involved quite a lot of cooperation |
2020-09-17 03:37:38 +0200 | <Plazma> | monochrom: yo dawg i heard you like OOP and python so we put abstract classes in your classes , but they're not interfaces, but they are.. |
2020-09-17 03:37:47 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 03:38:11 +0200 | __Joker | (~Joker@180.151.106.108) |
2020-09-17 03:40:12 +0200 | <monochrom> | Also consider that programmers have this saying "YAGNI" and other professions don't. |
2020-09-17 03:40:41 +0200 | <monochrom> | We have it because we're doing poorly so we need this saying to warn ourselves. |
2020-09-17 03:41:03 +0200 | <monochrom> | Other professions don't have it because they're already doing it right and don't need a warning. |
2020-09-17 03:41:11 +0200 | <sm[m]> | KISS is a common saying |
2020-09-17 03:41:35 +0200 | acidjnk_new3 | (~acidjnk@p200300d0c736587164f46f145ae9b6a7.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
2020-09-17 03:41:52 +0200 | <monochrom> | Well yeah OK so everyone else has one saying, we have two, we are still worse. |
2020-09-17 03:42:16 +0200 | <monochrom> | Consider the possibility that KISS is not strong enough for us. |
2020-09-17 03:42:31 +0200 | kleisli_ | (~kleisli@172-8-147-49.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 265 seconds) |
2020-09-17 03:42:42 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds) |
2020-09-17 03:43:13 +0200 | __Joker | (~Joker@180.151.106.108) (Ping timeout: 272 seconds) |
2020-09-17 03:45:15 +0200 | MarcelineVQ | learns the term yagni |
2020-09-17 03:45:50 +0200 | <sm[m]> | Axman6: but I would agree that things usually don't seem to evolve very fast |
2020-09-17 03:47:16 +0200 | <sm[m]> | that seems to be the Haskell way, often - it takes longer to build, but also lasts longer with less rework & maintenance ? |
2020-09-17 03:47:51 +0200 | <sm[m]> | When tooling finally matures, perhaps that will change ? |
2020-09-17 03:49:07 +0200 | <monochrom> | From what I saw, it doesn't take longer to build. Look at tomsmeding's paste site. |
2020-09-17 03:49:10 +0200 | <sm[m]> | or.. the rust army is just much much bigger ? or.. they have more of an engineering and shipping focus ? |
2020-09-17 03:49:47 +0200 | <monochrom> | But whenever more than one author is involved, it takes longer to reach consensus, because there are always more than one elegant way to do it, and they aren't compatible. |
2020-09-17 03:50:30 +0200 | <sm[m]> | So we're like Lisp ? :-/ |
2020-09-17 03:51:12 +0200 | <monochrom> | Yes in this aspect. |
2020-09-17 03:51:22 +0200 | <monochrom> | No in how many compilers to choose from. |
2020-09-17 03:52:32 +0200 | <sm[m]> | monochrom: maybe as our libs, architectures, patterns mature, this will improve ? |
2020-09-17 03:54:03 +0200 | <monochrom> | I wouldn't hold my breath. |
2020-09-17 03:54:37 +0200 | Amras | (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds) |
2020-09-17 03:55:32 +0200 | <monochrom> | Some convergence did happen in the past. transformers and mtl were in competition a long time ago, but one day they agreed to a partition of roles and worked together. |
2020-09-17 03:56:03 +0200 | <monochrom> | pipes and conduit, I predict them to stay that way forever. |
2020-09-17 03:56:12 +0200 | <monochrom> | cabal and stack, I predict them to stay that way forever. |
2020-09-17 03:57:55 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 03:58:07 +0200 | falafel | (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 244 seconds) |
2020-09-17 03:58:13 +0200 | <monochrom> | Although, the pipes-conduit dichotomy is already a vast improvement compared to the long gone days of 3 choices of iteratees, 2 choices of enumeratees, and 5 choices of something in between. |
2020-09-17 03:59:10 +0200 | lembot | (~lembot@179.8.176.163) (Ping timeout: 272 seconds) |
2020-09-17 04:00:20 +0200 | <sm[m]> | Yup |
2020-09-17 04:00:43 +0200 | ransom | (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) |
2020-09-17 04:00:51 +0200 | <sm[m]> | also, higher level frameworks will continue to improve |
2020-09-17 04:02:20 +0200 | <sm[m]> | I think the ide tools are going to be impactful, they will attract more devs |
2020-09-17 04:04:03 +0200 | <sm[m]> | vs code with hls 0.4 really works and is a real step up IME |
2020-09-17 04:06:04 +0200 | Gurkenglas | (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 260 seconds) |
2020-09-17 04:07:55 +0200 | theDon | (~td@94.134.91.86) (Ping timeout: 272 seconds) |
2020-09-17 04:08:20 +0200 | kleisli_ | (~kleisli@2605:e000:1804:94c6:68bd:9d76:dbd8:24e7) |
2020-09-17 04:09:38 +0200 | theDon | (~td@94.134.91.55) |
2020-09-17 04:09:44 +0200 | shadowdaemon | (~user@unaffiliated/shadowdaemon) (Remote host closed the connection) |
2020-09-17 04:15:00 +0200 | lagothrix | (~lagothrix@unaffiliated/lagothrix) (Killed (tolkien.freenode.net (Nickname regained by services))) |
2020-09-17 04:15:08 +0200 | lagothrix | (~lagothrix@unaffiliated/lagothrix) |
2020-09-17 04:15:46 +0200 | <sshine> | yes |
2020-09-17 04:16:00 +0200 | <sshine> | I didn't have to manually compile a file and copy it into VSCode's directory! |
2020-09-17 04:17:55 +0200 | howdoi | (uid224@gateway/web/irccloud.com/x-udrxcrwykbilfjcr) (Quit: Connection closed for inactivity) |
2020-09-17 04:20:35 +0200 | drbean | (~drbean@TC210-63-209-98.static.apol.com.tw) |
2020-09-17 04:21:56 +0200 | mdunnio | (~mdunnio@208.59.170.5) |
2020-09-17 04:22:55 +0200 | shafox | (~shafox@106.51.234.111) |
2020-09-17 04:27:02 +0200 | mdunnio | (~mdunnio@208.59.170.5) (Ping timeout: 272 seconds) |
2020-09-17 04:27:07 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) (Remote host closed the connection) |
2020-09-17 04:27:42 +0200 | nineonine | (~nineonine@216.81.48.202) (Remote host closed the connection) |
2020-09-17 04:31:55 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 04:32:51 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds) |
2020-09-17 04:35:26 +0200 | tylerjl | (~leothrix@elastic/staff/leothrix) |
2020-09-17 04:36:55 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 240 seconds) |
2020-09-17 04:38:07 +0200 | leothrix | (~leothrix@elastic/staff/leothrix) (Ping timeout: 240 seconds) |
2020-09-17 04:39:32 +0200 | asan | (~yan4138@114.84.148.87) () |
2020-09-17 04:39:56 +0200 | asan | (~yan4138@114.84.148.87) |
2020-09-17 04:40:01 +0200 | <frdg> | how can I go from `Functor f => f (g (a)) -> g a` without pattern matching ? |
2020-09-17 04:40:17 +0200 | <frdg> | err and `Functor g` |
2020-09-17 04:40:36 +0200 | <c_wraith> | You can't just collapse them for any old pair of functors |
2020-09-17 04:40:57 +0200 | <frdg> | oh |
2020-09-17 04:41:55 +0200 | <frdg> | what about Traversables? |
2020-09-17 04:42:25 +0200 | <c_wraith> | :t sequenceA |
2020-09-17 04:42:27 +0200 | <lambdabot> | (Traversable t, Applicative f) => t (f a) -> f (t a) |
2020-09-17 04:42:35 +0200 | <c_wraith> | that's as close as they'll get you |
2020-09-17 04:42:51 +0200 | <frdg> | hmm |
2020-09-17 04:43:16 +0200 | <ski> | @type asum |
2020-09-17 04:43:18 +0200 | <lambdabot> | (Foldable t, Alternative f) => t (f a) -> f a |
2020-09-17 04:44:11 +0200 | <frdg> | this should work. |
2020-09-17 04:44:14 +0200 | <c_wraith> | Oh, yeah. If Alternative is good enough, that works |
2020-09-17 04:45:31 +0200 | exodrifter | (adacad5d@cpe-173-172-173-93.tx.res.rr.com) |
2020-09-17 04:46:25 +0200 | robotmay | (~beepboop@80.172.187.81.in-addr.arpa) (Quit: No Ping reply in 180 seconds.) |
2020-09-17 04:47:08 +0200 | <exodrifter> | Does anyone happen to know if there's a Storable instance of Text floating around out there or how you'd generally represent UTF-8 in an FFI interface? |
2020-09-17 04:47:58 +0200 | robotmay | (~beepboop@80.172.187.81.in-addr.arpa) |
2020-09-17 04:48:37 +0200 | <c_wraith> | text isn't even UTF-8 |
2020-09-17 04:49:24 +0200 | <exodrifter> | oh, unicode and utf-8 are not the same thing? |
2020-09-17 04:49:30 +0200 | <c_wraith> | nope |
2020-09-17 04:49:36 +0200 | <c_wraith> | unicode is a character set |
2020-09-17 04:49:44 +0200 | <c_wraith> | utf8 is one way of encoding that character set in bytes |
2020-09-17 04:50:43 +0200 | <exodrifter> | ah, I see. I assumed Text was UTF8 because of decodeUtf8, but that's just what character set to use for the bytestring |
2020-09-17 04:50:55 +0200 | <c_wraith> | exactly |
2020-09-17 04:51:15 +0200 | <c_wraith> | well. just what encoding to use for the bytestring. |
2020-09-17 04:51:35 +0200 | <exodrifter> | yeah. what does it mean for Text to be unicode then? is it not any particular character set until you decide to encode it? |
2020-09-17 04:52:04 +0200 | <c_wraith> | unicode is a character set. How the characters are represented inside a computer is an implementation detail |
2020-09-17 04:52:58 +0200 | <c_wraith> | There are a bunch of ways to serialize it that are standardizes, though. UTF-8, UTF-16, and UCS4 are the options that give you the full unicode character set. |
2020-09-17 04:53:03 +0200 | <c_wraith> | *standardized |
2020-09-17 04:53:17 +0200 | <exodrifter> | so if i wanted to, say, encode a text into a utf-8 bytestring then marshall that representation out using FFI -- that wouldn't necessarily work because the memory representation might be different? |
2020-09-17 04:53:23 +0200 | <dolio> | You could represent it other ways in a bytestring, too. |
2020-09-17 04:53:47 +0200 | <dolio> | But you'd need to be careful. |
2020-09-17 04:53:50 +0200 | <c_wraith> | Right. You should go through an explicit conversion to the correct encoding you want in a ByteString, then use useAsCString for the bytestring |
2020-09-17 04:54:42 +0200 | machinedgod | (~machinedg@d67-193-126-196.home3.cgocable.net) (Ping timeout: 260 seconds) |
2020-09-17 04:54:57 +0200 | <exodrifter> | well, i want to have a foreign function call the haskell code, not the other way around, so useAsCString wouldn't work for what i'm trying to do. |
2020-09-17 04:55:04 +0200 | <c_wraith> | Ah, ok. |
2020-09-17 04:55:29 +0200 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2020-09-17 04:55:45 +0200 | <exodrifter> | dolio: what do you mean exactly? represent it in what other ways? |
2020-09-17 04:56:21 +0200 | <dolio> | You could have UTF-16 in a byte string, but each byte would be half of one of the basic units of the encoding. |
2020-09-17 04:56:51 +0200 | <dolio> | Also it probably gives you more ways to mess up the endianness. |
2020-09-17 04:56:59 +0200 | <exodrifter> | Ah, okay, yeah that makes sense |
2020-09-17 04:57:25 +0200 | nineonine | (~nineonine@216-19-190-182.dyn.novuscom.net) |
2020-09-17 04:58:22 +0200 | <exodrifter> | so if the way the UTF-8 is represented is an implementation detail, is there then no way to marshall a UTF-8 string without implementing a decoder in the foreign code that knows how it's represented in haskell? |
2020-09-17 04:59:32 +0200 | <dolio> | The foreign function is going to need to know the encoding used. |
2020-09-17 04:59:44 +0200 | exodrifter | (adacad5d@cpe-173-172-173-93.tx.res.rr.com) (Remote host closed the connection) |
2020-09-17 04:59:48 +0200 | <dolio> | If it's UTF-8, it'll need to know that. |
2020-09-17 05:00:01 +0200 | jbarnette | (~jbarnette@185.204.1.185) () |
2020-09-17 05:00:51 +0200 | exodrifter | (adacad5d@cpe-173-172-173-93.tx.res.rr.com) |
2020-09-17 05:00:55 +0200 | alp_ | (~alp@2a01:e0a:58b:4920:557f:9e9f:2eef:4c23) |
2020-09-17 05:01:38 +0200 | nineonine | (~nineonine@216-19-190-182.dyn.novuscom.net) (Ping timeout: 246 seconds) |
2020-09-17 05:01:58 +0200 | <exodrifter> | Hmm, okay. So if it knew the bytes were UTF-8, then it should be fine? I'm not sure if the UTF-8 standard defines how it would be represented in memory... |
2020-09-17 05:02:18 +0200 | <dolio> | UTF-8 is a particular way of storing unicode. |
2020-09-17 05:03:27 +0200 | <exodrifter> | Yes, so does that apply to in-memory? I'm aware that it would work for files, since i can usually open UTF-8 documents regardless of what computer i'm on. |
2020-09-17 05:03:37 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 05:03:57 +0200 | <dolio> | It can be stored that way in memory, too. But Text doesn't. |
2020-09-17 05:04:53 +0200 | <exodrifter> | sure. So I just need to encode the text into a UTF-8 bytestring, then figure out how to convert the bytestring into a CString, and that should work it sounds like |
2020-09-17 05:04:55 +0200 | <dolio> | That's one of the resons there's `decodeUtf8` |
2020-09-17 05:05:10 +0200 | <dolio> | Yeah, probably. |
2020-09-17 05:05:39 +0200 | <dolio> | Although C doesn't necessarily know anything about UTF-8. That'd be up to libraries. |
2020-09-17 05:06:20 +0200 | <exodrifter> | yeah, that makes sense. But, I'm assuming that if the user was using a library that had the equivalent of decodeUtf8 it should work |
2020-09-17 05:06:55 +0200 | <exodrifter> | It's too bad ByteString doesn't expose a function that lets you return the CString... I'm looking at the implementation of it and i suuuuure don't understand it yet |
2020-09-17 05:06:57 +0200 | <dolio> | And e.g. all sorts of Microsoft stuff uses UTF-16, I think. |
2020-09-17 05:07:29 +0200 | <exodrifter> | I think i am satisfied limiting my use case to UTF-8. |
2020-09-17 05:08:09 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) |
2020-09-17 05:08:19 +0200 | <dolio> | Yeah, that's pretty safe. |
2020-09-17 05:09:21 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
2020-09-17 05:09:48 +0200 | <exodrifter> | oh -- i guess i don't really want a CString since I don't want to be limited by ascii. I want to return something more like an array of bytes or something. |
2020-09-17 05:10:45 +0200 | <exodrifter> | ...wait, that is what byte is in c isn't it. |
2020-09-17 05:10:47 +0200 | <dolio> | I think CString is a char pointer. |
2020-09-17 05:10:58 +0200 | <exodrifter> | yeah, it's a char* |
2020-09-17 05:14:19 +0200 | <exodrifter> | okay i think I know what i need to do. Thanks dolio & c_wraith <3 |
2020-09-17 05:19:58 +0200 | hackage | smash-lens 0.1.0.1 - Optics for the `smash` library https://hackage.haskell.org/package/smash-lens-0.1.0.1 (topos) |
2020-09-17 05:20:58 +0200 | hackage | smash-optics 0.1.0.1 - Optics for the `smash` library using `optics-core` https://hackage.haskell.org/package/smash-optics-0.1.0.1 (topos) |
2020-09-17 05:22:04 +0200 | finkata- | (~dpetrov@83.222.188.39) |
2020-09-17 05:26:06 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 05:26:18 +0200 | eric_ | (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) (Remote host closed the connection) |
2020-09-17 05:29:23 +0200 | mdunnio | (~mdunnio@208.59.170.5) |
2020-09-17 05:30:04 +0200 | sagax | (~sagax_nb@213.138.71.146) (Ping timeout: 260 seconds) |
2020-09-17 05:31:07 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds) |
2020-09-17 05:35:18 +0200 | toorevitimirp | (~tooreviti@117.182.182.33) |
2020-09-17 05:37:48 +0200 | elliott_ | (~elliott_@pool-71-114-77-65.washdc.fios.verizon.net) (Quit: Quit) |
2020-09-17 05:37:51 +0200 | worc3131 | (~quassel@2a02:c7f:c026:9500:7d0b:65d0:38a4:4786) (Ping timeout: 272 seconds) |
2020-09-17 05:38:12 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) (Remote host closed the connection) |
2020-09-17 05:38:34 +0200 | gmt | (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 260 seconds) |
2020-09-17 05:39:04 +0200 | __Joker | (~Joker@180.151.106.108) |
2020-09-17 05:39:10 +0200 | mdunnio | (~mdunnio@208.59.170.5) (Ping timeout: 256 seconds) |
2020-09-17 05:39:58 +0200 | hackage | base16-bytestring 1.0.0.0 - RFC 4648-compliant Base16 encodings for ByteStrings https://hackage.haskell.org/package/base16-bytestring-1.0.0.0 (topos) |
2020-09-17 05:40:32 +0200 | board_control | (~board_con@50-46-195-209.evrt.wa.frontiernet.net) (Quit: Leaving) |
2020-09-17 05:40:49 +0200 | finkata- | (~dpetrov@83.222.188.39) (Remote host closed the connection) |
2020-09-17 05:42:33 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 05:43:32 +0200 | __Joker | (~Joker@180.151.106.108) (Ping timeout: 256 seconds) |
2020-09-17 05:44:50 +0200 | <lemmih> | topos: Woo, version 1. |
2020-09-17 05:45:37 +0200 | ransom | (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-09-17 05:45:38 +0200 | <MarcelineVQ> | the madlad |
2020-09-17 05:46:24 +0200 | ransom | (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) |
2020-09-17 05:46:55 +0200 | <topos> | lemmih completely cleared out the backlog, basically rewrote the library and achieved some multipliers on performance |
2020-09-17 05:46:58 +0200 | <topos> | so i'm happy |
2020-09-17 05:48:00 +0200 | <exodrifter> | that sounds great! |
2020-09-17 05:48:37 +0200 | alp_ | (~alp@2a01:e0a:58b:4920:557f:9e9f:2eef:4c23) (Ping timeout: 272 seconds) |
2020-09-17 05:53:50 +0200 | <lateef> | hi does anyone know how to use tasty-discover with the rerun ingredient. can't find any examples |
2020-09-17 05:54:17 +0200 | finkata- | (~dpetrov@83.222.188.39) |
2020-09-17 05:54:52 +0200 | finkata- | finkata |
2020-09-17 05:54:56 +0200 | __Joker | (~Joker@180.151.106.108) |
2020-09-17 05:55:24 +0200 | da39a3ee5e6b4b0d | (~textual@2403:6200:8876:37d7:7100:a9d6:e349:d9ad) (Ping timeout: 244 seconds) |
2020-09-17 05:55:28 +0200 | finkata | (~dpetrov@83.222.188.39) (Remote host closed the connection) |
2020-09-17 05:55:38 +0200 | wei2912 | (~wei2912@unaffiliated/wei2912) (Quit: Lost terminal) |
2020-09-17 05:56:54 +0200 | finkata | (~dpetrov@83.222.188.39) |
2020-09-17 06:00:01 +0200 | __Joker | (~Joker@180.151.106.108) (Ping timeout: 272 seconds) |
2020-09-17 06:00:15 +0200 | banner | (~banner@116-255-17-98.ip4.superloop.com) |
2020-09-17 06:00:24 +0200 | banner | (~banner@116-255-17-98.ip4.superloop.com) (Client Quit) |
2020-09-17 06:00:48 +0200 | andreas303 | (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection) |
2020-09-17 06:01:24 +0200 | jneira | (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206) (Ping timeout: 258 seconds) |
2020-09-17 06:02:11 +0200 | Jeanne-Kamikaze | (~Jeanne-Ka@107.152.99.41) |
2020-09-17 06:02:28 +0200 | <Axman6> | topos: how many GB/s? :) |
2020-09-17 06:02:33 +0200 | polyphem | (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (Ping timeout: 272 seconds) |
2020-09-17 06:02:48 +0200 | <koz_> | Axman6: The only measure that counts. :P |
2020-09-17 06:02:50 +0200 | <topos> | ugh. i had that number at one point. hang on |
2020-09-17 06:02:57 +0200 | finkata | (~dpetrov@83.222.188.39) (Remote host closed the connection) |
2020-09-17 06:02:57 +0200 | <Axman6> | koz_: of course |
2020-09-17 06:03:10 +0200 | <koz_> | topos: Over 9000. :P |
2020-09-17 06:03:13 +0200 | <Axman6> | though, speed for small strings is probably more important |
2020-09-17 06:03:45 +0200 | unlink__ | (~unlink2@p200300ebcf25bd0068eb9d9c94da2a17.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
2020-09-17 06:06:39 +0200 | andreas303 | (~andreas@gateway/tor-sasl/andreas303) |
2020-09-17 06:07:55 +0200 | falafel | (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
2020-09-17 06:08:47 +0200 | irc_user | (uid423822@gateway/web/irccloud.com/x-cbxmaikgpxapbiip) (Quit: Connection closed for inactivity) |
2020-09-17 06:10:09 +0200 | mirrorbird | (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) (Ping timeout: 272 seconds) |
2020-09-17 06:10:34 +0200 | da39a3ee5e6b4b0d | (~textual@2403:6200:8876:37d7:55fb:4d37:ffc2:715b) |
2020-09-17 06:10:52 +0200 | mirrorbird | (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) |
2020-09-17 06:11:57 +0200 | jneira | (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206) |
2020-09-17 06:12:25 +0200 | testing_kirc | (~testing_k@047-024-136-070.res.spectrum.com) |
2020-09-17 06:13:23 +0200 | testing_kirc | (~testing_k@047-024-136-070.res.spectrum.com) (Remote host closed the connection) |
2020-09-17 06:15:16 +0200 | __Joker | (~Joker@180.151.106.108) |
2020-09-17 06:15:34 +0200 | sdx23 | (~sdx23@unaffiliated/sdx23) (Ping timeout: 260 seconds) |
2020-09-17 06:15:38 +0200 | kleisli_ | (~kleisli@2605:e000:1804:94c6:68bd:9d76:dbd8:24e7) (Ping timeout: 244 seconds) |
2020-09-17 06:16:18 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) |
2020-09-17 06:17:01 +0200 | day_ | (~Unknown@unaffiliated/day) |
2020-09-17 06:17:05 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2020-09-17 06:19:57 +0200 | dbmikus | (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) |
2020-09-17 06:20:19 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 06:20:37 +0200 | day | (~Unknown@unaffiliated/day) (Ping timeout: 264 seconds) |
2020-09-17 06:20:38 +0200 | day_ | day |
2020-09-17 06:20:55 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Ping timeout: 272 seconds) |
2020-09-17 06:21:37 +0200 | <topos> | Axman6 https://pastebin.com/LEs9sBTx |
2020-09-17 06:21:55 +0200 | <topos> | here's a bench of the old algo vs. the new algo for 1gb |
2020-09-17 06:22:00 +0200 | nineonine | (~nineonine@216-19-190-182.dyn.novuscom.net) |
2020-09-17 06:22:54 +0200 | <topos> | encode is ~1GB/s, decode ~0.5GB/s compared to ~350MB/s (old encode) and ~120MB/s (old decode) |
2020-09-17 06:23:31 +0200 | <koz_> | topos: So roughly threefold? |
2020-09-17 06:23:34 +0200 | <koz_> | That's pretty damn good. |
2020-09-17 06:23:38 +0200 | <topos> | yeah |
2020-09-17 06:23:48 +0200 | <topos> | between 3-5 depending on the length of the bytestring |
2020-09-17 06:23:50 +0200 | ddellacosta | (~dd@86.106.121.168) (Ping timeout: 260 seconds) |
2020-09-17 06:24:01 +0200 | <topos> | the old algo would degrade for larger bytestrings |
2020-09-17 06:24:29 +0200 | <topos> | the new one is a steady ratio of encode ~ 2xdecode |
2020-09-17 06:24:56 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds) |
2020-09-17 06:25:26 +0200 | <topos> | which makes sense because all you're doing in the encode step is reading a byte, munging it into two and writing it, where the decode case requires reading two, munging it, and then writing one |
2020-09-17 06:25:34 +0200 | <topos> | oo. sorry for pinging whoever that was |
2020-09-17 06:27:36 +0200 | banner | (~banner@116-255-17-98.ip4.superloop.com) |
2020-09-17 06:27:42 +0200 | <Axman6> | that's their problem :) |
2020-09-17 06:28:22 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) |
2020-09-17 06:28:29 +0200 | ransom | (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-09-17 06:29:20 +0200 | banner | (~banner@116-255-17-98.ip4.superloop.com) (Client Quit) |
2020-09-17 06:29:23 +0200 | <Axman6> | I really want to make this code work a word at a time... |
2020-09-17 06:29:25 +0200 | falafel | (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 240 seconds) |
2020-09-17 06:29:42 +0200 | jjj | (~jjj@195.206.169.184) |
2020-09-17 06:29:52 +0200 | GuerrillaMonkey | (~Jeanne-Ka@107.152.99.41) |
2020-09-17 06:31:04 +0200 | <topos> | Axman6 i'd like to as well. The best I can think of is to make use of SIMD instructions, because at this point we can't do any better without the benefit of being able to multiple words into a single instruction |
2020-09-17 06:31:35 +0200 | <topos> | but also, this code is dead. I'm not working on it anymore. It was strictly fanservice, and I'm encouraging everyone to move to https://hackage.haskell.org/package/base16 |
2020-09-17 06:31:56 +0200 | jedws | (~jedws@101.184.189.58) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-09-17 06:32:00 +0200 | <topos> | if you want to contribute a SIMD version or AVX2 support, be my guest |
2020-09-17 06:32:06 +0200 | <topos> | it won't happen on base16-bytestring tho |
2020-09-17 06:32:21 +0200 | <Axman6> | you should have a ook at the PR I had on the text-utf8 repo for faster take/drop/indexing, it was roughly 100x faster than the streaming implementation and pretty much branchless |
2020-09-17 06:32:28 +0200 | <topos> | ooo |
2020-09-17 06:32:28 +0200 | Jeanne-Kamikaze | (~Jeanne-Ka@107.152.99.41) (Ping timeout: 260 seconds) |
2020-09-17 06:32:39 +0200 | Jeanne-Kamikaze | (~Jeanne-Ka@static-198-54-131-92.cust.tzulo.com) |
2020-09-17 06:32:47 +0200 | <Axman6> | but I never finished it off and it was probably too unclear to be maintainable |
2020-09-17 06:32:54 +0200 | <topos> | https://github.com/text-utf8/text-utf8/pull/11 this guy? |
2020-09-17 06:33:05 +0200 | <koz_> | topos: What're the numbers on that one? |
2020-09-17 06:33:28 +0200 | <topos> | koz_ which one? |
2020-09-17 06:33:33 +0200 | <koz_> | base16 |
2020-09-17 06:33:43 +0200 | <koz_> | For the same bench as you did for base16-bytestring. |
2020-09-17 06:33:54 +0200 | <Axman6> | topos: https://github.com/text-utf8/text-utf8/pull/1 |
2020-09-17 06:33:54 +0200 | <topos> | ah i implemented the same algorithm |
2020-09-17 06:33:58 +0200 | <topos> | so roughly the same |
2020-09-17 06:34:09 +0200 | <topos> | ooo |
2020-09-17 06:34:15 +0200 | sumo_r | (0ec9fb69@14-201-251-105.tpgi.com.au) |
2020-09-17 06:35:29 +0200 | GuerrillaMonkey | (~Jeanne-Ka@107.152.99.41) (Ping timeout: 272 seconds) |
2020-09-17 06:35:31 +0200 | <koz_> | Axman6: Is text-utf8 still a live project? |
2020-09-17 06:35:41 +0200 | <Axman6> | I believe so... |
2020-09-17 06:36:00 +0200 | <topos> | koz_ the only difference is that I provide a nicer general interface and more support for different types like Text, ShortText, and SHortByteString |
2020-09-17 06:36:07 +0200 | mrte | (~mrt@p4fcabee7.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
2020-09-17 06:36:21 +0200 | <siraben> | Does MTL use strict or lazy state monad by default? |
2020-09-17 06:36:33 +0200 | <siraben> | Is strict just better space usage wise than lazy? |
2020-09-17 06:36:56 +0200 | <topos> | Axman6 this is cool stuff :) |
2020-09-17 06:37:03 +0200 | <Axman6> | hasn't been touched in a while though, hvr would be the best one to answer whether it's live though |
2020-09-17 06:37:31 +0200 | <topos> | siraben lazy state - https://github.com/haskell/mtl/blob/master/Control/Monad/State.hs |
2020-09-17 06:37:33 +0200 | <Axman6> | siraben: I believe lazy is the default, but that should be easy to check in the source |
2020-09-17 06:37:54 +0200 | <siraben> | Ah I see. When should I use strict/lazy state? I've been using lazy all along then. |
2020-09-17 06:37:56 +0200 | <koz_> | I always specify Control.Monad.State.Strict just to be safe when I import. |
2020-09-17 06:38:09 +0200 | <Axman6> | the differences between lazy and strict is... one is lazy and one is strict, they have different semantics and there are things you can do in the lazy one which you can't do in the strict one |
2020-09-17 06:38:11 +0200 | <koz_> | (better be explicit, even if it's just for other folks reading) |
2020-09-17 06:38:28 +0200 | <topos> | but remember, Strict is better in some ways, but remember that strict state is (confusingly) not strict in its setting, so you still need to `put $! <thing>` if you need it evaluated |
2020-09-17 06:38:48 +0200 | <topos> | i munged sentences sorry |
2020-09-17 06:39:56 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) (Remote host closed the connection) |
2020-09-17 06:40:25 +0200 | <siraben> | I see. |
2020-09-17 06:40:35 +0200 | <siraben> | And what's the difference between Control.Monad.Error and Control.Monad.Except? |
2020-09-17 06:40:52 +0200 | <sumo_r> | Hi all, does anyone know what the ghcxxxx.exe file created in AppData\Local\Temp on windows by cabal repl are? M365 just flagged one of those (ghcbdbc.exe) as Wacatac malware and our admin pinged me for more details |
2020-09-17 06:40:59 +0200 | <topos> | siraben error is deprecated, use except |
2020-09-17 06:41:12 +0200 | <topos> | https://hackage.haskell.org/package/mtl-2.2.2/docs/Control-Monad-Error.html |
2020-09-17 06:41:16 +0200 | <topos> | top of the haddocks |
2020-09-17 06:42:05 +0200 | <siraben> | Right |
2020-09-17 06:42:18 +0200 | <siraben> | I was surprised to see Error so high up: https://www.sciencedirect.com/science/article/pii/S0167642320301313 |
2020-09-17 06:42:21 +0200 | <siraben> | Must be legacy |
2020-09-17 06:42:25 +0200 | Sunblaze21 | (~sanjay@116.72.71.64) |
2020-09-17 06:43:05 +0200 | <siraben> | Most commonly used monads are (most to least order) State, Trans, Reader, Error, Writer, RWS, Identity, Cont, List, Except |
2020-09-17 06:43:24 +0200 | <topos> | very interesting study thanks. I could actually use this info |
2020-09-17 06:44:15 +0200 | <siraben> | Turns out not many people use alternative monad transformer libraries |
2020-09-17 06:44:43 +0200 | sumo_r9 | (0ec9fb69@14-201-251-105.tpgi.com.au) |
2020-09-17 06:45:25 +0200 | <dolio> | All the stuff that used Error before it was deprecated didn't just disappear from hackage. |
2020-09-17 06:45:55 +0200 | sumo_r | (0ec9fb69@14-201-251-105.tpgi.com.au) (Ping timeout: 245 seconds) |
2020-09-17 06:46:00 +0200 | Jeanne-Kamikaze | (~Jeanne-Ka@static-198-54-131-92.cust.tzulo.com) (Quit: Leaving) |
2020-09-17 06:46:45 +0200 | <siraben> | When does it deprecated? |
2020-09-17 06:46:49 +0200 | <siraben> | s/does/was |
2020-09-17 06:48:12 +0200 | <koz_> | Also why? |
2020-09-17 06:48:17 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) |
2020-09-17 06:49:12 +0200 | drbean | (~drbean@TC210-63-209-98.static.apol.com.tw) (Quit: ZNC 1.8.2+cygwin1 - https://znc.in) |
2020-09-17 06:50:18 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 06:50:20 +0200 | <dolio> | I'm not sure. But it probably hasn't been as long since it was deprecated as the (relevant) time before yet. |
2020-09-17 06:50:25 +0200 | wavemode | (~wavemode@097-070-075-143.res.spectrum.com) (Ping timeout: 240 seconds) |
2020-09-17 06:51:41 +0200 | <siraben> | Why is continuation monad second least used? |
2020-09-17 06:51:58 +0200 | ransom | (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) |
2020-09-17 06:52:01 +0200 | <topos> | presumably because you have to define an additional `Error` class instance in order to use your errors, which was spurious |
2020-09-17 06:52:23 +0200 | asan | (~yan4138@114.84.148.87) (Ping timeout: 258 seconds) |
2020-09-17 06:52:48 +0200 | <topos> | siraben because continuations are hard to get right, and also have very specific use cases that don't often intersect with industry |
2020-09-17 06:53:05 +0200 | <siraben> | Oops I should correct my list, the actual list is State, Reader, Trans, Error, Writer, Identity, RWS, Except, Cont, List |
2020-09-17 06:53:05 +0200 | kleisli_ | (~kleisli@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) |
2020-09-17 06:53:11 +0200 | <siraben> | Figure 9b |
2020-09-17 06:53:16 +0200 | <siraben> | topos: I see |
2020-09-17 06:53:31 +0200 | asan | (~yan4138@124.78.128.72) |
2020-09-17 06:53:38 +0200 | <koz_> | siraben: Cont is very powerful - it can implement all the others - but that's usually overkill. |
2020-09-17 06:53:56 +0200 | <siraben> | Yeah, there's a great blog post on reimplementing other monads from Cont |
2020-09-17 06:54:45 +0200 | <dolio> | It's kind of misleading to say Cont can implement the others. |
2020-09-17 06:54:49 +0200 | elliott_ | (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) |
2020-09-17 06:54:56 +0200 | <koz_> | dolio: In what sense is it misleading? |
2020-09-17 06:55:34 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2020-09-17 06:55:40 +0200 | <dolio> | Because the way you implement them uses different Cont monads depending on which ones you're embeding. |
2020-09-17 06:56:46 +0200 | <dolio> | You choose a different `r`. |
2020-09-17 06:56:47 +0200 | <topos> | callCC @Identity @a @⊥ what could go wrong |
2020-09-17 06:58:08 +0200 | asan | (~yan4138@124.78.128.72) (Ping timeout: 260 seconds) |
2020-09-17 06:59:10 +0200 | lucid_0x80 | (~lucid_0x8@188.253.232.35) |
2020-09-17 07:01:06 +0200 | <davean> | topos: It does exactly what it says it does, whats the problem? |
2020-09-17 07:02:07 +0200 | <topos> | No problem here. Constructivists be damned |
2020-09-17 07:03:02 +0200 | elliott_ | (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) (Quit: WeeChat 2.9) |
2020-09-17 07:03:08 +0200 | <davean> | If you want to complain so much topos, make me a way to record all your issues. |
2020-09-17 07:03:24 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 07:03:26 +0200 | <siraben> | Should I be creating my own monads more? I usually just use an MTL monad and be done with it. |
2020-09-17 07:03:30 +0200 | elliott_ | (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) |
2020-09-17 07:03:42 +0200 | <siraben> | Or some combination of MTL monads |
2020-09-17 07:03:43 +0200 | <davean> | siraben: it varies. Generally you can make your own monad out of MTL's |
2020-09-17 07:03:45 +0200 | <topos> | Who's complaining davean? I accept LEM as my lord and savior |
2020-09-17 07:04:01 +0200 | <siraben> | GeneralizedNewtypeDeriving FTW |
2020-09-17 07:04:03 +0200 | <davean> | siraben: Often making your own typeclass for them is whats really valuable. |
2020-09-17 07:04:18 +0200 | <davean> | But not all important monads can be created via composing MTL |
2020-09-17 07:04:24 +0200 | <siraben> | davean: any good examples on that? |
2020-09-17 07:04:52 +0200 | <siraben> | That's one gap in the literature, books talk about monads and monad transformers but I haven't read material on modeling effects using custom monad typeclasses. |
2020-09-17 07:05:00 +0200 | <davean> | siraben: PlanT in 'machines' |
2020-09-17 07:05:08 +0200 | solonarv | (~solonarv@astrasbourg-653-1-186-165.w90-13.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
2020-09-17 07:05:27 +0200 | <davean> | http://hackage.haskell.org/package/machines-0.7/docs/Data-Machine-Plan.html#t:Plan |
2020-09-17 07:05:44 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) |
2020-09-17 07:05:46 +0200 | <davean> | I was doing on to thread parallelism through too today. |
2020-09-17 07:06:01 +0200 | <siraben> | Huh, this looks exactly like ReqT from Oleg's work |
2020-09-17 07:06:18 +0200 | <davean> | Usually if you're writing your own monad though not composing MTL you're doing something "interesting" that would get reused elsewhere. |
2020-09-17 07:06:27 +0200 | <davean> | Not always but its a good predictor |
2020-09-17 07:07:02 +0200 | <davean> | siraben: I'd say usually you write your own when you care about semantics, not capabilities, but thats not well defined. |
2020-09-17 07:07:35 +0200 | exodrifter | (adacad5d@cpe-173-172-173-93.tx.res.rr.com) (Remote host closed the connection) |
2020-09-17 07:08:26 +0200 | isovector1 | (~isovector@172.103.216.166.cable.tpia.cipherkey.com) (Quit: Leaving) |
2020-09-17 07:09:09 +0200 | asan | (~yan4138@124.78.5.33) |
2020-09-17 07:09:46 +0200 | <davean> | siraben: did that make sense? |
2020-09-17 07:10:05 +0200 | <siraben> | davean: what do you mean by capabilities? |
2020-09-17 07:10:28 +0200 | <davean> | "Get access to Disk" "Ask about a value" |
2020-09-17 07:10:30 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 260 seconds) |
2020-09-17 07:10:54 +0200 | <siraben> | Ah, I see. |
2020-09-17 07:11:01 +0200 | jedws | (~jedws@101.184.189.58) |
2020-09-17 07:11:05 +0200 | <siraben> | And semantics here as in PL semantics? |
2020-09-17 07:11:10 +0200 | Lord_of_Life_ | (~Lord@unaffiliated/lord-of-life/x-0885362) |
2020-09-17 07:11:21 +0200 | <davean> | semantics: "Do monadic things sequentually, but applicative things on a thread pool of a given size" |
2020-09-17 07:11:37 +0200 | Lord_of_Life | (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 264 seconds) |
2020-09-17 07:12:12 +0200 | <davean> | yah, semantics are about how you do the computation |
2020-09-17 07:12:29 +0200 | <davean> | hence PlanT as an example |
2020-09-17 07:12:32 +0200 | Lord_of_Life_ | Lord_of_Life |
2020-09-17 07:12:42 +0200 | <davean> | topos: slap me around and say something a little tighter? |
2020-09-17 07:13:20 +0200 | topos | slaps davean |
2020-09-17 07:13:23 +0200 | <topos> | something a little tighter |
2020-09-17 07:13:42 +0200 | <davean> | Cont is the exception |
2020-09-17 07:13:46 +0200 | <davean> | that does anything, badly. |
2020-09-17 07:14:12 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) (Ping timeout: 256 seconds) |
2020-09-17 07:14:25 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 07:14:40 +0200 | <siraben> | One issue I've had with effects was trying to convert my Scheme interpreter to a monadic version |
2020-09-17 07:14:41 +0200 | <siraben> | https://github.com/siraben/r5rs-denot/blob/fba3b49d88c6d7c4e7a2cff302589a669a4fdb88/src/SchemeEval… |
2020-09-17 07:15:01 +0200 | Foritus | (~buggery@cpc91334-watf11-2-0-cust153.15-2.cable.virginm.net) (Read error: Connection reset by peer) |
2020-09-17 07:15:22 +0200 | Kaiepi | (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection) |
2020-09-17 07:15:39 +0200 | Kaiepi | (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net) |
2020-09-17 07:15:44 +0200 | <siraben> | I tried something like, Except over Reader over Cont over State, but the Except <> Cont interaction didn't work out |
2020-09-17 07:16:06 +0200 | <siraben> | In a sense I don't want Haskell's full range of continuations, just the Scheme continuations, if that makes sense |
2020-09-17 07:16:06 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 07:16:07 +0200 | dansho | (~dansho@ip68-108-167-185.lv.lv.cox.net) |
2020-09-17 07:16:20 +0200 | <davean> | siraben: That sure is a scheme interpriter that reads like scheme! |
2020-09-17 07:16:47 +0200 | <siraben> | davean: Heh, it was converted directly from the denotational semantics of R5RS |
2020-09-17 07:16:59 +0200 | <davean> | I ... could have guessed |
2020-09-17 07:17:20 +0200 | Foritus | (~buggery@cpc91334-watf11-2-0-cust153.15-2.cable.virginm.net) |
2020-09-17 07:18:12 +0200 | <siraben> | Maybe it was someone here who mentioned that they were working a similar project and was planning to encapsulate primitive operations in a typeclass |
2020-09-17 07:18:35 +0200 | <siraben> | Like a CSEK machine. |
2020-09-17 07:18:37 +0200 | <siraben> | CESK* |
2020-09-17 07:19:11 +0200 | __Joker | (~Joker@180.151.106.108) (Ping timeout: 272 seconds) |
2020-09-17 07:19:49 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 272 seconds) |
2020-09-17 07:20:11 +0200 | <siraben> | Hm, http://matt.might.net/articles/cesk-machines/ |
2020-09-17 07:20:48 +0200 | <topos> | i mean, edwardk's been doing some of that with his livestreaming. I'm working on a machine based on matt might's abstract abstract interpreters work as well |
2020-09-17 07:20:51 +0200 | justanotheruser | (~justanoth@unaffiliated/justanotheruser) |
2020-09-17 07:21:00 +0200 | <edwardk> | i need to stream again |
2020-09-17 07:21:12 +0200 | <siraben> | edwardk: streaming on twitch? |
2020-09-17 07:21:39 +0200 | elliott_ | (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) (Quit: WeeChat 2.9) |
2020-09-17 07:21:58 +0200 | <edwardk> | yeah, i moved and never bothered to get set back up |
2020-09-17 07:22:17 +0200 | <siraben> | topos: are you referring to http://matt.might.net/papers/might2010free.pdf ? |
2020-09-17 07:22:19 +0200 | elliott_ | (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) |
2020-09-17 07:22:47 +0200 | <siraben> | Wow, that circular dependence in figure 1 is exactly the issue I came across |
2020-09-17 07:22:48 +0200 | <topos> | yeah |
2020-09-17 07:23:28 +0200 | <topos> | but this one http://matt.might.net/papers/vanhorn2010abstract.pdf |
2020-09-17 07:23:39 +0200 | <topos> | it's all gravy tho |
2020-09-17 07:24:03 +0200 | <edwardk> | siraben: that interpreter is nice and direct |
2020-09-17 07:24:40 +0200 | <siraben> | edwardk: the r5rs-denot one? |
2020-09-17 07:24:53 +0200 | <edwardk> | capturing scheme continuations in a CESK machine is super simple. Capture K, restore K,. |
2020-09-17 07:24:58 +0200 | <edwardk> | yeah |
2020-09-17 07:25:07 +0200 | <siraben> | Thanks. |
2020-09-17 07:26:43 +0200 | elliott_ | (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) (Client Quit) |
2020-09-17 07:26:54 +0200 | eric | (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) |
2020-09-17 07:26:57 +0200 | <siraben> | topos: interesting paper |
2020-09-17 07:27:23 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 07:27:41 +0200 | elliott_ | (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) |
2020-09-17 07:28:01 +0200 | Guest74761 | (sid13060@gateway/web/irccloud.com/x-rcuirdcnfpfdubdp) () |
2020-09-17 07:28:27 +0200 | dsal | (sid13060@gateway/web/irccloud.com/x-pvmusdavojjxflwa) |
2020-09-17 07:28:38 +0200 | <siraben> | These techniques, do they carry over to compilation as well? I haven't looked much into abstract interpretation. |
2020-09-17 07:28:52 +0200 | dsal | Guest85365 |
2020-09-17 07:30:25 +0200 | __Joker | (~Joker@180.151.106.108) |
2020-09-17 07:32:06 +0200 | eric | (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) (Ping timeout: 244 seconds) |
2020-09-17 07:33:23 +0200 | Guest85365 | dsal |
2020-09-17 07:34:10 +0200 | <edwardk> | abstract interpretation can be a good first step towards compilation, as you get a sense of what cases are and aren't possible in each use site |
2020-09-17 07:34:19 +0200 | ransom | (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-09-17 07:34:47 +0200 | <edwardk> | there's another paper by van horn and might on abstract abstract machines, that i'm particularly fond of |
2020-09-17 07:34:48 +0200 | <edwardk> | https://arxiv.org/pdf/1007.4446.pdf |
2020-09-17 07:34:59 +0200 | <edwardk> | that paper is the one that made abstract interpretation finally gel for me |
2020-09-17 07:35:01 +0200 | falafel | (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
2020-09-17 07:35:16 +0200 | __Joker | (~Joker@180.151.106.108) (Ping timeout: 260 seconds) |
2020-09-17 07:36:45 +0200 | <siraben> | edwardk: Heh, the notation looks somewhat intimidating |
2020-09-17 07:37:19 +0200 | <edwardk> | all the greek letters and hats? |
2020-09-17 07:39:26 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2020-09-17 07:39:34 +0200 | <edwardk> | the paper starts with a CEK machine, which you can squint at a krivine machine and see, adds a store, moves continuations into the store, then starts to play with what happens if you make the store, etc. less accurate approximations. |
2020-09-17 07:40:09 +0200 | <siraben> | Ok, so on closer inspection it may be tractable for me. |
2020-09-17 07:40:12 +0200 | lc_ | (~lc@94.198.42.164) (Ping timeout: 272 seconds) |
2020-09-17 07:41:29 +0200 | <Axman6> | topos: for the encode loop, have you tried the version which just does the maths to compute the hex character for the nibble? |
2020-09-17 07:41:39 +0200 | mitchellsalad_ | (uid40617@gateway/web/irccloud.com/x-wopqfurhxhollxgh) (Quit: Connection closed for inactivity) |
2020-09-17 07:43:06 +0200 | ransom | (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) |
2020-09-17 07:43:30 +0200 | ransom | (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Client Quit) |
2020-09-17 07:43:39 +0200 | <edwardk> | one thing all these papers on quantitative type theory seem to sweep under the rug is how much harder it makes inference for things like what to instantiate meta variables to. |
2020-09-17 07:44:06 +0200 | <edwardk> | (just to mention a frustraton that is on y mind) |
2020-09-17 07:44:25 +0200 | <siraben> | edwardk: what paper are you reading? |
2020-09-17 07:44:52 +0200 | <edwardk> | well. i've been trying to build a little "ELF" style logical framework with quantitative type theory bolted in. |
2020-09-17 07:45:40 +0200 | <siraben> | Quantitative type theory differs from linear type theories in what way? |
2020-09-17 07:46:58 +0200 | <edwardk> | the papers in question are https://personal.cis.strath.ac.uk/conor.mcbride/PlentyO-CR.pdf which came first https://bentnib.org/quantitative-type-theory.pdf which fixed it up. then abel and bernardy which gave us the formulation for linear haskell, https://wg28.mpi-sws.org/technical-presentations/files/cfdb7_uploads/1584070624-w28-qtt-zion.pdf and finally the choudhury et al paper |
2020-09-17 07:46:58 +0200 | <edwardk> | https://richarde.dev/papers/2020/quantitative/quantitative.pdf |
2020-09-17 07:47:06 +0200 | <edwardk> | but the gist is this |
2020-09-17 07:47:08 +0200 | <edwardk> | take your type theory |
2020-09-17 07:47:11 +0200 | mrte | (~mrt@p4fcabee7.dip0.t-ipconnect.de) |
2020-09-17 07:47:11 +0200 | <edwardk> | look at the environments |
2020-09-17 07:47:26 +0200 | <topos> | Axman6 yeah |
2020-09-17 07:47:27 +0200 | <edwardk> | you have Gamma, x : T |
2020-09-17 07:47:31 +0200 | <shafox> | Anyone can share their ~/.cabal/config file. I want to know what I can do with all the options. |
2020-09-17 07:47:49 +0200 | <edwardk> | add a member of some semiring with nice properties to the : annotating each typing judgment |
2020-09-17 07:48:05 +0200 | <edwardk> | e.g. you might choose the semiring to have 0 for erased, 1 for present |
2020-09-17 07:48:26 +0200 | elliott_ | (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) (Ping timeout: 272 seconds) |
2020-09-17 07:48:42 +0200 | <edwardk> | and then you run through all the usual rules of type theory, treating environments as semimodules (like vector spaces) over this scalar semiring |
2020-09-17 07:48:47 +0200 | <edwardk> | why? |
2020-09-17 07:48:53 +0200 | <topos> | Axman6 when i benched, computing the modulus was faster than doing yet another index look up on a different table. but i have come a long way with it and i might need to revisit |
2020-09-17 07:49:01 +0200 | <edwardk> | you get to use this to compute erasure for one. |
2020-09-17 07:49:35 +0200 | <edwardk> | but if you replace the semiring with {0,1,many} with 1+1=many, you get something like linear haskell |
2020-09-17 07:49:40 +0200 | <edwardk> | but you can pick all sorts of other semirings |
2020-09-17 07:49:57 +0200 | <edwardk> | e.g. just using the natural numbers would get you something like granule where you get exact usage counts of all variables |
2020-09-17 07:50:09 +0200 | <siraben> | Oh that's fascinating, so the resource usage is determined by the chosen semiring? |
2020-09-17 07:50:16 +0200 | <topos> | Axman6 sorry - wires crossed. i can get rid of that shift, yeah |
2020-09-17 07:50:30 +0200 | <edwardk> | or using {0,1,affine,relevant,unrestricted} you can get something like david walker's post in "Advanced Topics in Types and Programming Languages" |
2020-09-17 07:50:32 +0200 | <edwardk> | yeah |
2020-09-17 07:50:54 +0200 | <edwardk> | i've been using a semiring with 6 elements, rather than those 5. {0,1,affine,relevant,STRICT,unrestricted} |
2020-09-17 07:51:02 +0200 | <edwardk> | where strict and relevance are closely related but not the same |
2020-09-17 07:52:04 +0200 | mrte | (~mrt@p4fcabee7.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2020-09-17 07:52:16 +0200 | <edwardk> | in my toy type theory 1, strict, relevant all act as the dividing line at which i no longer have thunks in my data types. 0 doesn't exist at all in the result, and affine/unrestricted are lazy |
2020-09-17 07:53:08 +0200 | <edwardk> | and 1 + 1 is relevant, but 1 + affine = strict rather than unrestricted like it'd be in the 5 point semiring above |
2020-09-17 07:53:28 +0200 | ggole | (~ggole@2001:8003:8119:7200:7c4d:5b32:3cf7:fd63) |
2020-09-17 07:53:30 +0200 | <edwardk> | strictness then becomes the claim that you will definitely consume at least one of the copies of the thing you passed out to a bunch of sites |
2020-09-17 07:53:40 +0200 | <edwardk> | where relevance is the claim you will consume ALL of them |
2020-09-17 07:55:31 +0200 | <edwardk> | the dividing line is something like how relevance _could_ be managed by something that basically copied each A and made two of them and passed each out. Then relevance/linear in that universe would have you delete the structure when you're done. affine would still need the gc to help to know how to deal with something that was dropped, alternately you could maybe refine the notion of affine in that semiring to have versions that both |
2020-09-17 07:55:32 +0200 | <edwardk> | supported unrestricted style dropping and ones that used an explicit finalizer to free like rust |
2020-09-17 07:56:17 +0200 | <edwardk> | anything stuffed in a linear/relevant resource can get sort of freely added to some kind of gc root list, and you then don't even need to walk the relevant/linear stuff |
2020-09-17 07:56:32 +0200 | <edwardk> | because you know it'll be consumed (and hence removed from the global gc root list) eventually |
2020-09-17 07:56:51 +0200 | <edwardk> | this is a very resource-centric view, but one i've been playing with since i first found haskell |
2020-09-17 07:57:02 +0200 | <edwardk> | qtt gave me the right framework, i was missing the + for the semiring |
2020-09-17 07:58:10 +0200 | <edwardk> | now, this is still missing a last component, which is a notion of uniqueness, linearity says the consumer will definitely use up the thing, uniqueness says that you are being handed the only copy, and that the producer hasn't passed around any pointers to anybody else |
2020-09-17 07:58:32 +0200 | lucid_0x80 | (~lucid_0x8@188.253.232.35) (Quit: Leaving) |
2020-09-17 07:58:41 +0200 | <edwardk> | but the quantitative type theory stuff basically doesn't prejudge too much what the semiring means |
2020-09-17 07:58:45 +0200 | <edwardk> | it is more of a formal tool |
2020-09-17 07:59:11 +0200 | <edwardk> | and your semantics then clears up what you mean, the choudhury et al paper at the end of the reading list i dumped is actually quite clear. |
2020-09-17 07:59:23 +0200 | <Axman6> | topos: nibbleChar :: Word8 -> Word8; nibbleChar (W8# n) = W8# (int2Word# (word2Int# n +# (48# +# ((geWord# n 10##) *# 39#)))) |
2020-09-17 08:00:02 +0200 | jjj | (~jjj@195.206.169.184) () |
2020-09-17 08:00:07 +0200 | <siraben> | edwardk: that is fascinating. do you have a repository for this? |
2020-09-17 08:00:14 +0200 | <edwardk> | anyways my general problem is this for a _ in my toy type theory i usually drop in a meta variable. |
2020-09-17 08:00:33 +0200 | <edwardk> | github.com/ekmett/haskell has been where i've been scribbling thoughts, but i don't have any of the qtt stuff committed yet, it breaks the whole toy |
2020-09-17 08:00:56 +0200 | toorevitimirp | (~tooreviti@117.182.182.33) (Ping timeout: 260 seconds) |
2020-09-17 08:01:15 +0200 | <Axman6> | topos: using that makes converting it to work a word at a time "trivial" |
2020-09-17 08:01:24 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2020-09-17 08:02:31 +0200 | <edwardk> | for a meta variable the way i handle it is i look around at all the locally bound variables where i created and placed the meta variable and i just build a meta variable that gets all those as arguments. \x y z. foo M -- where M could reference x y and z requires M to know about contexts, and is messy, so instead I make it \x y z. foo (M x y z). Now if M instantiates to a constant valued function that ignores its arguments, the |
2020-09-17 08:02:31 +0200 | <edwardk> | normalization done by my unification engine gets me the answer i want. |
2020-09-17 08:02:38 +0200 | <edwardk> | but here I don't know the usage data for M. |
2020-09-17 08:02:42 +0200 | <siraben> | edwardk: this metavariable is not the same as a type variable? |
2020-09-17 08:02:48 +0200 | <edwardk> | which mucks with my ability to do type inference |
2020-09-17 08:02:52 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) |
2020-09-17 08:03:12 +0200 | <edwardk> | meta variables here are like holes in the program. 'please put here the only thing that makes sense' |
2020-09-17 08:03:36 +0200 | <siraben> | Oh, nice style for a repository. I might steal that, hehe. Maintaining separate repositories is annoying for small projects. |
2020-09-17 08:03:53 +0200 | <siraben> | Right, I'm thinking of like Coq's metavariables then, ?A |
2020-09-17 08:04:09 +0200 | <edwardk> | yeah. these are little existential holes |
2020-09-17 08:04:13 +0200 | <siraben> | I use _ quite a lot when I want Coq to infer it |
2020-09-17 08:04:32 +0200 | <siraben> | rewrite (mul_assoc _ b c) |
2020-09-17 08:04:37 +0200 | <edwardk> | and they come up a bunch when you just write something like id :: {A} A -> A |
2020-09-17 08:05:22 +0200 | <siraben> | Yes |
2020-09-17 08:05:25 +0200 | hvr | (~hvr@haskell/developer/hvr) (Ping timeout: 272 seconds) |
2020-09-17 08:05:34 +0200 | <edwardk> | i have an implicit argument A there. great, but it really took id : {A : _} A -> A, and then when elaboration happened it expanded _ to a meta variable, and figured out that it should be 'type' |
2020-09-17 08:05:35 +0200 | sfvm | (~sfvm@37.228.215.148) (Quit: off to the basement, mixing up the medicine) |
2020-09-17 08:06:19 +0200 | <Axman6> | topos: magic numbers in there are 48 = '0', 39 = 'a' - '0' - 10 |
2020-09-17 08:06:53 +0200 | <edwardk> | the general model is something like start out with a surface language with a bunch of extra nonsense and file locations and stuff in it, convert to some internal representation used for elaboration that has all these meta variables in it, then crush them out and you get the final 'core' equivalent. |
2020-09-17 08:07:01 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:99ca:18ad:4e5f:ffdf) (Remote host closed the connection) |
2020-09-17 08:07:34 +0200 | rihards | (~rihards@balticom-142-78-50.balticom.lv) |
2020-09-17 08:07:37 +0200 | <edwardk> | typechecking/inference produces terms in the elaboration form as witnesses that a given source term has a type |
2020-09-17 08:07:46 +0200 | <edwardk> | but source terms have all sorts of extra bells and whistles. |
2020-09-17 08:07:51 +0200 | <edwardk> | like in haskell we have where vs. let |
2020-09-17 08:08:00 +0200 | <edwardk> | complex patterns, top level decls... |
2020-09-17 08:08:37 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 08:08:51 +0200 | knupfer | (~Thunderbi@mue-88-130-61-060.dsl.tropolys.de) |
2020-09-17 08:09:41 +0200 | <edwardk> | anyways, right now i'm currently wrestling with how to get resource usage constraints on each of my meta variables right, because _normally_ i can just sprinkle them around in my terms, but now i have a problem. their usage of resources affects how many resources i have to typecheck the _rest_ of the term. |
2020-09-17 08:10:21 +0200 | <edwardk> | so i could try to carefully dance around and use up all the other resources and give them what is left, but i don't _really_ have a subtraction for resources (i'm in a semiring) |
2020-09-17 08:10:43 +0200 | <edwardk> | i could also do something like first typecheck in the boring {0,1} presence/absence semiring, use that to flesh out my metas |
2020-09-17 08:11:35 +0200 | <edwardk> | and then try to use backwards the fact that i have a semiring homomorphism from my final semiring to that semiring, and try to use that to 'redo' the job now that i actually have a sort of minimal bottom up chunk of resource usage data to go off |
2020-09-17 08:11:49 +0200 | gnumonik | (~gnumonik@c-73-170-91-210.hsd1.ca.comcast.net) |
2020-09-17 08:12:04 +0200 | <siraben> | Hmm, seems tricky. I have no idea how semirings work when applied in a type theoretic context yet. |
2020-09-17 08:12:19 +0200 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
2020-09-17 08:13:11 +0200 | <edwardk> | if you look at https://richarde.dev/papers/2020/quantitative/quantitative.pdf in figure 1, the rule for ST-App is my bane |
2020-09-17 08:13:21 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds) |
2020-09-17 08:13:52 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) |
2020-09-17 08:14:13 +0200 | shafox | (~shafox@106.51.234.111) (Remote host closed the connection) |
2020-09-17 08:14:34 +0200 | shafox | (~shafox@106.51.234.111) |
2020-09-17 08:14:59 +0200 | <edwardk> | because you have to infer the type of (f) in (f x), then use that to get the usage information for the application rule. but if f is a meta variable then we have no usage to use to fill in |
2020-09-17 08:15:52 +0200 | <edwardk> | the fact that these judgments tend to be written in a style where it isn't clear how to infer rather than just check doesn't help the story |
2020-09-17 08:15:58 +0200 | <siraben> | These typing rules don't seem to have meta variables, you added them? |
2020-09-17 08:16:02 +0200 | dhouthoo | (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) |
2020-09-17 08:16:09 +0200 | <Axman6> | anyone know of a tool which accepts assembly and can give you how much instruction level parallelism it might have? |
2020-09-17 08:16:55 +0200 | <siraben> | I meant like, meta variables being part of the source language, not in the meta language used to describe the language (which does have meta variables) |
2020-09-17 08:16:57 +0200 | <edwardk> | correct. because i need inference and inference wants to put little holes in various places. (also that type theory in that figure is non-dependent, and mine is dependently typed) |
2020-09-17 08:17:12 +0200 | ChaiTRex | (~ChaiTRex@gateway/tor-sasl/chaitrex) (Remote host closed the connection) |
2020-09-17 08:17:18 +0200 | <siraben> | Have you thought about using bidirectional type inference? |
2020-09-17 08:17:26 +0200 | ddere | (uid110888@gateway/web/irccloud.com/x-hxjfplopujbdeyav) (Quit: Connection closed for inactivity) |
2020-09-17 08:17:26 +0200 | <siraben> | That's a technique I learned recently, very useful. |
2020-09-17 08:17:27 +0200 | <edwardk> | this is in a bidirectional type checker =) |
2020-09-17 08:17:44 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) (Quit: I quit (╯°□°)╯︵ ┻━┻) |
2020-09-17 08:17:48 +0200 | <siraben> | Where are the inferred vs. checked types then? |
2020-09-17 08:17:50 +0200 | incognito9999 | (~incognito@hwsrv-648981.hostwindsdns.com) (Ping timeout: 256 seconds) |
2020-09-17 08:18:01 +0200 | ChaiTRex | (~ChaiTRex@gateway/tor-sasl/chaitrex) |
2020-09-17 08:18:31 +0200 | <edwardk> | https://github.com/AndrasKovacs/implicit-fun-elaboration/blob/master/fcif/Elaboration.hs#L513 -- here's a version from andras kovacs |
2020-09-17 08:19:26 +0200 | danvet | (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) |
2020-09-17 08:19:30 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) |
2020-09-17 08:19:32 +0200 | danvet_ | (~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453) |
2020-09-17 08:19:33 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) |
2020-09-17 08:19:44 +0200 | hvr | (~hvr@haskell/developer/hvr) |
2020-09-17 08:19:45 +0200 | danvet_ | (~danvet@2a02:168:57f4:0:5f80:650d:c6e6:3453) (Client Quit) |
2020-09-17 08:20:01 +0200 | <edwardk> | that is in the 'infer' case for app, which delegates to an infer for the function, notice how it has to manufacture a couple of meta variables |
2020-09-17 08:20:34 +0200 | <edwardk> | (notice there is a separate 'check' and infer and check bounce back and forth, bidirectional style |
2020-09-17 08:20:49 +0200 | <siraben> | Heh, going straight for the IO monad |
2020-09-17 08:20:53 +0200 | <siraben> | Right |
2020-09-17 08:21:28 +0200 | <edwardk> | yeah andras runs in strict haskell and does evil things for IO |
2020-09-17 08:21:43 +0200 | <edwardk> | I use slightly less evil things, but then unsafeInterleaveIO all over the same code =P |
2020-09-17 08:22:00 +0200 | kori | (~kori@2804:14c:85a3:9105::1000) |
2020-09-17 08:22:00 +0200 | kori | (~kori@2804:14c:85a3:9105::1000) (Changing host) |
2020-09-17 08:22:00 +0200 | kori | (~kori@arrowheads/kori) |
2020-09-17 08:22:11 +0200 | <edwardk> | i've been basing things pretty closely on his work because he gets some pretty great type inference |
2020-09-17 08:22:26 +0200 | <edwardk> | e.g. he can handle the runST $ do ... stuff without any magic rule for $. |
2020-09-17 08:22:44 +0200 | <edwardk> | so i more or less grabbed that wholesale |
2020-09-17 08:23:59 +0200 | <siraben> | Wow, he has an elaboration-zoo repo as well |
2020-09-17 08:24:17 +0200 | falafel | (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Remote host closed the connection) |
2020-09-17 08:24:18 +0200 | <edwardk> | if you rip out all the exotic Tel, PiTel, LamTel, Rec. stuff out of his type theory he gets a pretty good baseline typechecker (modulo the usual sort of implicit reordering that agda does) |
2020-09-17 08:24:33 +0200 | dansho | (~dansho@ip68-108-167-185.lv.lv.cox.net) (Remote host closed the connection) |
2020-09-17 08:24:44 +0200 | falafel | (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
2020-09-17 08:24:47 +0200 | dansho | (~dansho@ip68-108-167-185.lv.lv.cox.net) |
2020-09-17 08:24:48 +0200 | <edwardk> | We talked quite a bit at ICFP and it served as a good forcing function for me to stop dilly-dallying with other ways to do this, and just raid his toolbox for tricks |
2020-09-17 08:25:11 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection) |
2020-09-17 08:25:42 +0200 | echoreply | (~echoreply@unaffiliated/echoreply) (Quit: WeeChat 1.9.1) |
2020-09-17 08:25:50 +0200 | <edwardk> | my usecase is a bit weird |
2020-09-17 08:26:01 +0200 | <edwardk> | i'm currently trying to do this to build a "logical framework" like LF |
2020-09-17 08:26:13 +0200 | echoreply | (~echoreply@unaffiliated/echoreply) |
2020-09-17 08:26:15 +0200 | <edwardk> | but with the qtt bits sprinkled on top |
2020-09-17 08:26:49 +0200 | <edwardk> | LF is what you get if you take a dependent type theory, lop it off at the knees and stunt its growth. |
2020-09-17 08:27:18 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) |
2020-09-17 08:27:25 +0200 | Cale | (~cale@CPEf48e38ee8583-CM0c473de9d680.cpe.net.cable.rogers.com) (Ping timeout: 246 seconds) |
2020-09-17 08:28:10 +0200 | <edwardk> | you remove all the bits that have to do with sigma, maybe cripple pi so you can make types that depend on terms but not use other things, force yourself to only have terms, types and kinds, and no universe tower, don't bother making traditional data types and induction principles and the like. |
2020-09-17 08:28:27 +0200 | Neuromancer | (~Neuromanc@unaffiliated/neuromancer) (Ping timeout: 240 seconds) |
2020-09-17 08:28:37 +0200 | <edwardk> | which seems like an awful lot of surgery to do |
2020-09-17 08:29:03 +0200 | <edwardk> | but once you've butcher the type system in this way, it becomes really easy to reason about HOAS. |
2020-09-17 08:30:06 +0200 | <edwardk> | e.g. you can define tm : type; lam : (tm -> tm) -> tm; app : tm -> tm -> tm -- and have a higher order abstract syntax for terms. and you can know that that function from tm -> tm in lam just places the argument somewhere, BECAUSE IT CANT PATTERN MATCH ON IT. |
2020-09-17 08:30:14 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 272 seconds) |
2020-09-17 08:30:16 +0200 | josh | (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Remote host closed the connection) |
2020-09-17 08:30:22 +0200 | <edwardk> | so you write your semantics in this logical framework and what have you |
2020-09-17 08:31:01 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) (Quit: I quit (╯°□°)╯︵ ┻━┻) |
2020-09-17 08:31:07 +0200 | <edwardk> | and then reason about meta theorems about what you wrote, and those are simplified by the fact that the language the code manipulating your terms or judging things about your terms was written in is comparatively simple |
2020-09-17 08:31:37 +0200 | <edwardk> | i figured i'd share because you started from 'hey i wrote down the denotational semantics of r5rs and ran them' |
2020-09-17 08:32:18 +0200 | kori | (~kori@arrowheads/kori) (Quit: WeeChat 2.8) |
2020-09-17 08:32:27 +0200 | <edwardk> | normally to work with syntax tree representations you have to go off and fight with debruijn indices/levels or use 'parametric hoas' or use a library like bound or unbound or nominal or name... |
2020-09-17 08:32:39 +0200 | <edwardk> | but each of those complicate reasoning about the program that manipulates those terms |
2020-09-17 08:32:43 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) |
2020-09-17 08:32:52 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 08:33:15 +0200 | josh | (~josh@c-67-164-104-206.hsd1.ca.comcast.net) |
2020-09-17 08:33:25 +0200 | <siraben> | Thanks, that was insightful. |
2020-09-17 08:33:26 +0200 | <edwardk> | so the old-school bob harper way to handle that was to build a crippled but still usable type system that was good enough for building up those judgments |
2020-09-17 08:33:54 +0200 | <siraben> | Capture-avoiding substitution is a mess, I've recently using de bruijn to implement a linearly typed lambda calculus. |
2020-09-17 08:33:57 +0200 | josh | (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Remote host closed the connection) |
2020-09-17 08:34:05 +0200 | finkata | (~dpetrov@83.222.188.39) |
2020-09-17 08:34:14 +0200 | incognito9999 | (~incognito@hwsrv-648981.hostwindsdns.com) |
2020-09-17 08:34:14 +0200 | <siraben> | Thinking about implementing lambda pi from https://www.andres-loeh.de/LambdaPi/LambdaPi.pdf |
2020-09-17 08:34:17 +0200 | __Joker | (~Joker@180.151.106.108) |
2020-09-17 08:34:31 +0200 | josh | (~josh@c-67-164-104-206.hsd1.ca.comcast.net) |
2020-09-17 08:34:43 +0200 | <edwardk> | i've been playing with ways to extend an LF, because, say, working on a language that has linear types in LF is awful. your binding forms don't match the host LF's binding forms in how they are managed and so all of a sudden you're stuck in debruijn hell... in a crippled type theory |
2020-09-17 08:34:44 +0200 | <siraben> | edwardk: do you know if tagless final can be used to implement dependently typed languages? |
2020-09-17 08:34:55 +0200 | josh | (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Read error: Connection reset by peer) |
2020-09-17 08:35:39 +0200 | <edwardk> | but if the lf itself has qtt, then it becomes pretty easy to reason about any language that uses a binding form that has constraints that look like any subsemiring of the ones offered by the host language. |
2020-09-17 08:35:50 +0200 | <edwardk> | (there was some work on linear logical frameworks in the 90s) |
2020-09-17 08:35:58 +0200 | <edwardk> | the answer is a hard 'sorta' |
2020-09-17 08:36:12 +0200 | <edwardk> | so lets use the running example of an LF |
2020-09-17 08:36:16 +0200 | <edwardk> | because its on my brain |
2020-09-17 08:36:23 +0200 | <edwardk> | here we have 'dependent types' where types can depend on terms |
2020-09-17 08:37:12 +0200 | <edwardk> | i wrote some code the other day and posted it to twitter for how to do typed "normalization-by-evaluation" |
2020-09-17 08:37:35 +0200 | <edwardk> | https://gist.github.com/ekmett/6c64c3815f9949d067d8f9779e2347ef |
2020-09-17 08:38:14 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
2020-09-17 08:38:18 +0200 | <edwardk> | if you look at the very bottom of that code id_, k, kid_ are id, const, and const id in the little toy 'untyped except i happen to be borrowing haskell's types' typed language. |
2020-09-17 08:38:37 +0200 | <edwardk> | basically Val represents terms crushed down to normal form. |
2020-09-17 08:38:44 +0200 | <edwardk> | and expressions allows for you to be sloppier |
2020-09-17 08:39:02 +0200 | Cale | (~cale@CPEf48e38ee8583-CM0c473de9d680.cpe.net.cable.rogers.com) |
2020-09-17 08:39:11 +0200 | <edwardk> | nf takes an expression to a val, which is internally representing something in beta normal form, and then converts the val back to an expr which happens to be in beta normal form |
2020-09-17 08:39:37 +0200 | <edwardk> | so what does this have to do with dependently typed languages? this is clearly an untyped language |
2020-09-17 08:39:45 +0200 | <edwardk> | well, haskelly-typed |
2020-09-17 08:40:09 +0200 | <edwardk> | well, an old paper of conal elliott's (maybe his thesis, i forget) introduced a notion of 'approximately well typed' programs |
2020-09-17 08:40:57 +0200 | <edwardk> | which is to say if you run through an LF and rip out all the dependent bits, turning [| Pi x : A. B |]. into [| A |] -> [| A |] ... |
2020-09-17 08:41:05 +0200 | <edwardk> | er B |
2020-09-17 08:41:21 +0200 | <edwardk> | then you get a non-dependently typed approxmation of the types in the LF |
2020-09-17 08:41:48 +0200 | <edwardk> | and termination of unification, etc. in the LF is sort of governed by termination of it for this crippled type |
2020-09-17 08:42:11 +0200 | ystael | (~ystael@209.6.50.55) (Ping timeout: 240 seconds) |
2020-09-17 08:42:28 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) (Quit: I quit (╯°□°)╯︵ ┻━┻) |
2020-09-17 08:42:53 +0200 | <edwardk> | so if you were working with something in the LF corner of the lambda cube where you have limited dependent types? then you can use what host language types those types erased to and have an 'approximately well typed' scheme for working with it, implemented finally tagless style |
2020-09-17 08:43:33 +0200 | <edwardk> | but the finally-tagless bits? i personally tend to go for heavier tagged deep embeddings because i find they are really frustrating to work with when you want sweeter sugar |
2020-09-17 08:43:33 +0200 | ystael | (~ystael@209.6.50.55) |
2020-09-17 08:43:50 +0200 | <edwardk> | er they here being finally tagless |
2020-09-17 08:43:52 +0200 | <siraben> | That makes sense |
2020-09-17 08:44:15 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) |
2020-09-17 08:44:18 +0200 | <edwardk> | http://www.cse.chalmers.se/~josefs/publications/svenningsson2015combining.pdf is a paper on how to do typed EDSLs that I rather like |
2020-09-17 08:44:31 +0200 | <edwardk> | iceland jack posted a link to it the other day on twitter and it reminded me of its existence |
2020-09-17 08:44:48 +0200 | <edwardk> | in theory a version of that that is 'approximately well typed' could work for an LF. |
2020-09-17 08:45:06 +0200 | <edwardk> | so that gives the 'can i get the types right' answer with a sort of strong maybe. |
2020-09-17 08:45:21 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) (Client Quit) |
2020-09-17 08:46:03 +0200 | <edwardk> | for working with dependent types in general i tend to stick to real syntax trees and libraries like bound. |
2020-09-17 08:46:33 +0200 | <edwardk> | https://hub.darcs.net/dolio/upts/browse/Language/UPTS/SyntaxTree.hs#39 is an example of a small pure type system with universe polymorphism by dolio that uses bound |
2020-09-17 08:46:38 +0200 | <siraben> | I haven't used the bound library before, will it handle the scoping and substitution for me? |
2020-09-17 08:46:43 +0200 | <edwardk> | yeah |
2020-09-17 08:47:05 +0200 | <edwardk> | your Term type becomes a monad, using (>>=) for substitution. |
2020-09-17 08:47:15 +0200 | <edwardk> | and Scope () Term becomes 'and i need an extra bound variable' |
2020-09-17 08:47:20 +0200 | <MarcelineVQ> | is the purpose of that 'approximately well typed' to check if something could be correct, with less work, before you check fully? |
2020-09-17 08:47:23 +0200 | <edwardk> | and you use >>>= to walk over that |
2020-09-17 08:47:28 +0200 | <edwardk> | MarcelineVQ: yeah |
2020-09-17 08:47:37 +0200 | <edwardk> | catch most of the stupid programmer bugs |
2020-09-17 08:47:40 +0200 | <edwardk> | basically a form of lint |
2020-09-17 08:48:27 +0200 | <edwardk> | maybe if you cps transformed everything you could get into a state where you could do reflection to create the types off terms locally that you'd need... or you could wait for richard to finish dependent hakell |
2020-09-17 08:48:29 +0200 | <edwardk> | er haskell |
2020-09-17 08:48:49 +0200 | borne | (~fritjof@200116b8641fc4005e981dab12496c3b.dip.versatel-1u1.de) |
2020-09-17 08:49:00 +0200 | xff0x_ | (~fox@2001:1a81:5306:e200:7599:d48:f5dc:5fef) (Ping timeout: 244 seconds) |
2020-09-17 08:49:14 +0200 | knupfer | (~Thunderbi@mue-88-130-61-060.dsl.tropolys.de) (Ping timeout: 272 seconds) |
2020-09-17 08:49:14 +0200 | <edwardk> | https://hub.darcs.net/dolio/upts/browse/Language/UPTS/SyntaxTree.hs#73 see how the >>>= is used for the body of the lambda? |
2020-09-17 08:49:49 +0200 | <siraben> | Ah |
2020-09-17 08:49:50 +0200 | <edwardk> | https://www.schoolofhaskell.com/user/edwardk/bound is an article i wrote on bound |
2020-09-17 08:50:07 +0200 | xff0x_ | (~fox@2001:1a81:5306:e200:5d84:8198:9ead:fb9f) |
2020-09-17 08:50:15 +0200 | <siraben> | great, saved. |
2020-09-17 08:50:20 +0200 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) () |
2020-09-17 08:50:30 +0200 | <edwardk> | the key is that when you need a Term and have a Scope () Term you need to give me the value for the extra variable. it won't typecheck if you f up the name manipulation |
2020-09-17 08:51:08 +0200 | <edwardk> | abstract1 and instantiate1 give you tools for converting from Scope () m <-> m by capturing/instantiating |
2020-09-17 08:51:21 +0200 | <edwardk> | bound works best when you're working with a language with one type of name |
2020-09-17 08:51:39 +0200 | <edwardk> | we made it work for ermine by lots of hand-holding |
2020-09-17 08:52:05 +0200 | <edwardk> | but its quite pleasant to just walk terms, be able to >>= for substituting in your environment, use foldMap to extract free variables. |
2020-09-17 08:52:23 +0200 | <edwardk> | Scope is basically a 'faster' EitherT |
2020-09-17 08:53:02 +0200 | <edwardk> | abstract and instantiate handle the case where you want to bind multiple variables at once, (i don't have to just put on a (), maybe i'm binding 8 variables at once in a recursive let binding/where clause, etc. |
2020-09-17 08:54:12 +0200 | tomboy64 | (~tomboy64@gateway/tor-sasl/tomboy64) (Remote host closed the connection) |
2020-09-17 08:55:52 +0200 | mirrorbird | (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) (Remote host closed the connection) |
2020-09-17 08:56:04 +0200 | chele | (~chele@ip5b416ea2.dynamic.kabel-deutschland.de) |
2020-09-17 08:56:32 +0200 | mirrorbird | (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) |
2020-09-17 08:58:24 +0200 | <gnumonik> | I thought I remembered some function in the lens library that returns a list of (maybe strings that represent?) the lenses/etc that exist for a datatype. Anyone know what that is or am I mistaken? |
2020-09-17 09:02:27 +0200 | <edwardk> | :t universe |
2020-09-17 09:02:28 +0200 | <lambdabot> | Plated a => a -> [a] |
2020-09-17 09:02:33 +0200 | <edwardk> | er that's not it |
2020-09-17 09:02:46 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 09:03:21 +0200 | bitmagie | (~Thunderbi@200116b80670970060cb385f030853d4.dip.versatel-1u1.de) |
2020-09-17 09:03:28 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) |
2020-09-17 09:03:31 +0200 | <edwardk> | :t contexts |
2020-09-17 09:03:33 +0200 | <lambdabot> | Plated a => a -> [Context a a a] |
2020-09-17 09:03:47 +0200 | <edwardk> | :t contextsOf |
2020-09-17 09:03:49 +0200 | <lambdabot> | ATraversal' a a -> a -> [Context a a a] |
2020-09-17 09:03:55 +0200 | falafel | (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 240 seconds) |
2020-09-17 09:04:02 +0200 | <edwardk> | that gives you each of the 'one hole contexts' of a term |
2020-09-17 09:04:53 +0200 | <edwardk> | you give a traversal that knows how to find all the parts, and it give you back a context which has what was in that position and a function that can sew the type back up around a new value. |
2020-09-17 09:05:09 +0200 | <edwardk> | contexts works off the Plated data type |
2020-09-17 09:05:39 +0200 | <edwardk> | a context is a "lens that has been applied to an 's'" |
2020-09-17 09:05:51 +0200 | da39a3ee5e6b4b0d | (~textual@2403:6200:8876:37d7:55fb:4d37:ffc2:715b) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-09-17 09:05:55 +0200 | <gnumonik> | That should work, thanks! |
2020-09-17 09:06:13 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 09:06:14 +0200 | <edwardk> | if you think of a lens as s -> (a, b -> t) Context a b t = (a, b -> t) |
2020-09-17 09:06:37 +0200 | <edwardk> | with some newtype and typical lens over-generality applied |
2020-09-17 09:06:46 +0200 | <edwardk> | :info Context |
2020-09-17 09:06:52 +0200 | whiteline | (~whiteline@unaffiliated/whiteline) |
2020-09-17 09:06:58 +0200 | <edwardk> | @info Context |
2020-09-17 09:06:59 +0200 | <lambdabot> | Context |
2020-09-17 09:07:05 +0200 | <edwardk> | that was helpful. |
2020-09-17 09:07:07 +0200 | <edwardk> | @type Context |
2020-09-17 09:07:09 +0200 | <lambdabot> | (b -> t) -> a -> Context a b t |
2020-09-17 09:07:41 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds) |
2020-09-17 09:08:19 +0200 | sumo_r9 | (0ec9fb69@14-201-251-105.tpgi.com.au) (Remote host closed the connection) |
2020-09-17 09:09:48 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 09:10:01 +0200 | mmohammadi9812 | (~mmohammad@5.116.223.123) (Ping timeout: 272 seconds) |
2020-09-17 09:10:49 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) |
2020-09-17 09:10:52 +0200 | tzh | (~tzh@2601:448:c500:5300::ad1c) (Quit: zzz) |
2020-09-17 09:10:56 +0200 | tomboy64 | (~tomboy64@gateway/tor-sasl/tomboy64) |
2020-09-17 09:11:06 +0200 | asan | (~yan4138@124.78.5.33) (Ping timeout: 256 seconds) |
2020-09-17 09:13:19 +0200 | kritzefitz | (~kritzefit@fw-front.credativ.com) |
2020-09-17 09:15:52 +0200 | finkata | (~dpetrov@83.222.188.39) (Remote host closed the connection) |
2020-09-17 09:15:55 +0200 | oxide | (~lambda@unaffiliated/mclaren) (Read error: Connection reset by peer) |
2020-09-17 09:16:21 +0200 | asan | (~yan4138@61.170.146.94) |
2020-09-17 09:17:40 +0200 | da39a3ee5e6b4b0d | (~textual@2403:6200:8876:37d7:55fb:4d37:ffc2:715b) |
2020-09-17 09:18:53 +0200 | pera | (~pera@unaffiliated/pera) (Ping timeout: 272 seconds) |
2020-09-17 09:19:56 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection) |
2020-09-17 09:20:58 +0200 | alp_ | (~alp@2a01:e0a:58b:4920:90ae:a5d:9349:f8d8) |
2020-09-17 09:21:58 +0200 | ph88 | (~ph88@2a02:8109:9e40:2704:6cf2:c517:5b95:5f99) |
2020-09-17 09:22:15 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 09:22:21 +0200 | maier | (~maier@b2b-37-24-119-190.unitymedia.biz) |
2020-09-17 09:22:29 +0200 | maier | kenran |
2020-09-17 09:22:38 +0200 | yoneda | (~mike@193.206.102.122) |
2020-09-17 09:23:06 +0200 | yoneda | (~mike@193.206.102.122) (Client Quit) |
2020-09-17 09:23:17 +0200 | <kenran> | Is there a specific reason why Data.Vector.Storable.Vector doesn't have "the usual" instances? I'm specifically wondering about Foldable. |
2020-09-17 09:25:51 +0200 | yoneda | (~mike@193.206.102.122) |
2020-09-17 09:25:58 +0200 | stiell | (~stian@fsf/member/stiell) (Ping timeout: 272 seconds) |
2020-09-17 09:26:22 +0200 | pera | (~pera@unaffiliated/pera) |
2020-09-17 09:26:48 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 09:27:13 +0200 | <Axman6> | because you can't put a constraint on the types of the values stored in it to guarantee they are sStorablwe |
2020-09-17 09:27:19 +0200 | <Axman6> | Storable* |
2020-09-17 09:27:30 +0200 | <dminuoso> | % :t foldr |
2020-09-17 09:27:31 +0200 | <yahb> | dminuoso: Foldable t => (a -> b -> b) -> b -> t a -> b |
2020-09-17 09:27:40 +0200 | <dminuoso> | kenran: ^- See how b is unconstrained? |
2020-09-17 09:28:07 +0200 | <nshepperd> | it's the lack of constraint on 'a' that is the problem here |
2020-09-17 09:28:19 +0200 | <dminuoso> | Oh |
2020-09-17 09:28:49 +0200 | <dminuoso> | nshepperd: Why does that matter? |
2020-09-17 09:30:27 +0200 | AstroDroid | (~AstroDroi@84.39.117.57) |
2020-09-17 09:30:34 +0200 | <dminuoso> | Ah nevermind, heh. |
2020-09-17 09:30:44 +0200 | <nshepperd> | because where t ~ Storable.Vector you can't get the 'a's out of that 't a' without having the Storable a instance at hand |
2020-09-17 09:30:56 +0200 | <dminuoso> | nshepperd: I kept thinking of Functor for some bizarre reason. |
2020-09-17 09:31:15 +0200 | <dminuoso> | In which case it'd be both a and b that'd need the Storable constraint |
2020-09-17 09:32:42 +0200 | <kenran> | ah thanks. I can't try it out right now, but couldn't one have: instance Storable a => Foldable (Storable.Vector a)? |
2020-09-17 09:33:13 +0200 | raichoo | (~raichoo@dslb-178-001-022-071.178.001.pools.vodafone-ip.de) |
2020-09-17 09:33:32 +0200 | <dminuoso> | kenran: Correct. |
2020-09-17 09:33:41 +0200 | <dminuoso> | Multiple reasons |
2020-09-17 09:33:46 +0200 | <dminuoso> | a) Wont kind check |
2020-09-17 09:33:50 +0200 | <dminuoso> | % :k Foldable |
2020-09-17 09:33:50 +0200 | <yahb> | dminuoso: (* -> *) -> Constraint |
2020-09-17 09:34:09 +0200 | stiell | (~stian@fsf/member/stiell) |
2020-09-17 09:34:12 +0200 | <dminuoso> | b) The constraint would have to on the class method (something like quantified constraints would be needed) |
2020-09-17 09:34:48 +0200 | <dminuoso> | And in addition c) *instance selection* does not consider any constraint on the instance declaration. |
2020-09-17 09:35:08 +0200 | shutdown_-h_now | (~arjan@2001:1c06:2d0b:2312:c058:b9a7:8857:8837) |
2020-09-17 09:35:14 +0200 | <kenran> | ahh of course, I forgot that one doesn't do `instance Foldable (Foo a)` but `instance Foldable Foo) |
2020-09-17 09:35:26 +0200 | <kenran> | thanks, very interesting! |
2020-09-17 09:35:28 +0200 | <nshepperd> | i don't think b and c are really problems |
2020-09-17 09:38:40 +0200 | <nshepperd> | yeah Foldable is meant to be applied to the, uh, generic container type |
2020-09-17 09:38:45 +0200 | Unhammer | (~Unhammer@gateway/tor-sasl/unhammer) |
2020-09-17 09:39:22 +0200 | <Unhammer> | https://i.imgur.com/kyFW9B9.png duckduckgo found me an actual stack of haddocks =D |
2020-09-17 09:40:24 +0200 | stiell | (~stian@fsf/member/stiell) (Ping timeout: 256 seconds) |
2020-09-17 09:41:10 +0200 | <dminuoso> | Unhammer: It wasnt until I visited scotland and england that I understood the reference. The brits do seem to eat a lot of haddock. |
2020-09-17 09:41:36 +0200 | xlei | (~akans@unaffiliated/xlei) (Quit: ZNC - https://znc.in) |
2020-09-17 09:43:05 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 09:43:10 +0200 | <Unhammer> | well, it's yummy :) though I've never had it stacked before |
2020-09-17 09:43:21 +0200 | <Unhammer> | `alias stack=smoke` |
2020-09-17 09:43:25 +0200 | <Unhammer> | therewego |
2020-09-17 09:43:44 +0200 | cfricke | (~cfricke@unaffiliated/cfricke) |
2020-09-17 09:44:10 +0200 | <dminuoso> | Oh haha I didn't get the joke until you mentioned that. |
2020-09-17 09:44:18 +0200 | <dminuoso> | Cheeky |
2020-09-17 09:46:07 +0200 | <nshepperd> | There's a different type class called MonoFoldable that you could give instances for Storable a => MonoFoldable (Vector a) |
2020-09-17 09:46:49 +0200 | <nshepperd> | but defining MonoFoldable and using it requires extensions (type families) and is less convenient, so i don't think it's really commonly used |
2020-09-17 09:47:48 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 09:54:16 +0200 | Sgeo | (~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer) |
2020-09-17 09:54:40 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) (Quit: I quit (╯°□°)╯︵ ┻━┻) |
2020-09-17 09:56:24 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) |
2020-09-17 09:56:40 +0200 | pera | (~pera@unaffiliated/pera) (Ping timeout: 260 seconds) |
2020-09-17 09:56:53 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 09:57:31 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) (Client Quit) |
2020-09-17 09:59:37 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) |
2020-09-17 10:01:08 +0200 | nfd | (~nfd9001@c-67-183-38-33.hsd1.wa.comcast.net) (Quit: Leaving) |
2020-09-17 10:01:57 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 272 seconds) |
2020-09-17 10:03:53 +0200 | dansho | (~dansho@ip68-108-167-185.lv.lv.cox.net) (Quit: Leaving) |
2020-09-17 10:03:57 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 10:05:53 +0200 | xlei | (znc@unaffiliated/xlei) |
2020-09-17 10:06:23 +0200 | revprez_anzio | (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Ping timeout: 272 seconds) |
2020-09-17 10:06:52 +0200 | Tuplanolla | (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) |
2020-09-17 10:06:57 +0200 | bahamas | (~lucian@188.24.158.21) |
2020-09-17 10:06:57 +0200 | bahamas | (~lucian@188.24.158.21) (Changing host) |
2020-09-17 10:06:58 +0200 | bahamas | (~lucian@unaffiliated/bahamas) |
2020-09-17 10:07:47 +0200 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Quit: Goodbye) |
2020-09-17 10:08:06 +0200 | revprez_anzio | (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) |
2020-09-17 10:08:22 +0200 | supercoven | (~Supercove@dsl-hkibng32-54fb54-166.dhcp.inet.fi) |
2020-09-17 10:08:35 +0200 | <dminuoso> | Is there a reason to use `cabal v2-test` over `cabal v2-run test:foo`? |
2020-09-17 10:08:36 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 10:08:51 +0200 | <dminuoso> | The latter seems universally powerful since you can pass arguments to the testsuite |
2020-09-17 10:08:53 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 10:09:04 +0200 | <phadej> | former runs multiple tests, changes to package directory, ... |
2020-09-17 10:09:07 +0200 | <phadej> | is a bit different |
2020-09-17 10:10:23 +0200 | <dminuoso> | Mmm, what kind of changes to the package directory? |
2020-09-17 10:10:35 +0200 | <dminuoso> | Oh, you mean like the cwd? |
2020-09-17 10:11:42 +0200 | oxide | (~lambda@unaffiliated/mclaren) |
2020-09-17 10:13:34 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 260 seconds) |
2020-09-17 10:13:50 +0200 | <dminuoso> | But I see what you mean, it is different. In case of hspec, v2-run can detect the interactive terminal properly, with v2-test it seems not |
2020-09-17 10:20:03 +0200 | cantstanya | (~chatting@gateway/tor-sasl/cantstanya) (Ping timeout: 240 seconds) |
2020-09-17 10:20:20 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) |
2020-09-17 10:24:07 +0200 | cantstanya | (~chatting@gateway/tor-sasl/cantstanya) |
2020-09-17 10:24:35 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Ping timeout: 244 seconds) |
2020-09-17 10:24:49 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 10:26:26 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) (Quit: I quit (╯°□°)╯︵ ┻━┻) |
2020-09-17 10:26:56 +0200 | thc202 | (~thc202@unaffiliated/thc202) |
2020-09-17 10:26:59 +0200 | raichoo | (~raichoo@dslb-178-001-022-071.178.001.pools.vodafone-ip.de) (Quit: Lost terminal) |
2020-09-17 10:27:12 +0200 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) |
2020-09-17 10:28:09 +0200 | z0 | (~z0@bl15-162-186.dsl.telepac.pt) (Remote host closed the connection) |
2020-09-17 10:28:19 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) |
2020-09-17 10:29:49 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 10:30:27 +0200 | vicfred_ | (~vicfred@unaffiliated/vicfred) |
2020-09-17 10:31:10 +0200 | lemmih | (~lemmih@2406:3003:2072:44:c9d8:3b2b:ae18:24e9) (Remote host closed the connection) |
2020-09-17 10:31:32 +0200 | lemmih | (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) |
2020-09-17 10:32:25 +0200 | s00pcan | (~chris@075-133-056-178.res.spectrum.com) (Ping timeout: 240 seconds) |
2020-09-17 10:33:03 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) (Client Quit) |
2020-09-17 10:33:37 +0200 | vicfred | (~vicfred@unaffiliated/vicfred) (Ping timeout: 272 seconds) |
2020-09-17 10:34:15 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
2020-09-17 10:34:37 +0200 | <kuribas> | How do you solve the problem of having different types for a resource in a rest API? I came up with this solution: data Person read update extra = Person { age :: read Int , name :: update String, job :: extra String} |
2020-09-17 10:34:38 +0200 | s00pcan | (~chris@107.181.165.217) |
2020-09-17 10:34:42 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) |
2020-09-17 10:35:38 +0200 | jneira | (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206) (Ping timeout: 272 seconds) |
2020-09-17 10:36:16 +0200 | <kuribas> | then type family Id where Id a = a; type family Null where Null a = Maybe Void |
2020-09-17 10:37:22 +0200 | <kuribas> | Then I can do type ReadPerson = Person Id Id Id |
2020-09-17 10:37:41 +0200 | <kuribas> | and type UpdatePerson = Person Null Id Null |
2020-09-17 10:40:16 +0200 | <kuribas> | or the alternative is just to define three types ReadPerson, UpdatePerson, ShortReadPerson |
2020-09-17 10:40:45 +0200 | <kuribas> | which uses simpler haskell, but doesn't ensure the consistency of the resource. |
2020-09-17 10:42:50 +0200 | <bahamas> | I'm working on making a haskell quick reference and I'm reading through the haskell report. one thing confuses me. in what way are variables and constructors expressions? https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-240003.2 |
2020-09-17 10:43:06 +0200 | <bahamas> | is it the fact that identifiers are expressions because they "return" a value? |
2020-09-17 10:43:27 +0200 | <kuribas> | bahamas: haskell doesn't have the concept of return |
2020-09-17 10:43:49 +0200 | <kuribas> | bahamas: variables are expressions in other language as while |
2020-09-17 10:43:57 +0200 | <kuribas> | and Constructors in haskell or just functions |
2020-09-17 10:43:59 +0200 | <kuribas> | :t Just |
2020-09-17 10:44:01 +0200 | <lambdabot> | a -> Maybe a |
2020-09-17 10:44:27 +0200 | Katarushisu | (~Katarushi@cpc149712-finc20-2-0-cust535.4-2.cable.virginm.net) (Ping timeout: 256 seconds) |
2020-09-17 10:44:37 +0200 | <kuribas> | s/as while/as well |
2020-09-17 10:44:42 +0200 | <bahamas> | kuribas: I know |
2020-09-17 10:44:44 +0200 | asan | (~yan4138@61.170.146.94) (Ping timeout: 260 seconds) |
2020-09-17 10:44:55 +0200 | <kuribas> | then what's the confusion |
2020-09-17 10:44:58 +0200 | <kuribas> | ? |
2020-09-17 10:45:40 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 10:46:16 +0200 | asan | (~yan4138@124.78.128.72) |
2020-09-17 10:46:21 +0200 | cmcma20 | (~cmcma20@l37-192-3-172.novotelecom.ru) (Quit: leaving) |
2020-09-17 10:46:32 +0200 | <bahamas> | kuribas: well, how would you define an expression? my intuition tells me that an expression gives you a value. intuitively, function application is an expression, because the function returns a value |
2020-09-17 10:46:41 +0200 | <bahamas> | however, in what way is a variable an expression? |
2020-09-17 10:47:04 +0200 | <kuribas> | a variable gives you a value as well |
2020-09-17 10:47:17 +0200 | <kuribas> | > let x = 1 in x |
2020-09-17 10:47:18 +0200 | <[exa]> | bahamas: "represents" a value is better naming here I guess. |
2020-09-17 10:47:20 +0200 | <lambdabot> | 1 |
2020-09-17 10:47:24 +0200 | <lortabac> | kuribas: alternatively, you can define three different types with the same field names and use GHC.Records.HasField or lenses to regain the ability to define generic operations over the 3 types |
2020-09-17 10:47:33 +0200 | <bahamas> | and a constructor? a constructor, not a constructor application |
2020-09-17 10:47:45 +0200 | vicfred_ | (~vicfred@unaffiliated/vicfred) (Quit: Leaving) |
2020-09-17 10:47:51 +0200 | <[exa]> | bahamas: Nothing is a value right? |
2020-09-17 10:47:57 +0200 | <kuribas> | bahamas: a constructor is a function |
2020-09-17 10:48:06 +0200 | <bahamas> | and a function is a value |
2020-09-17 10:48:23 +0200 | <bahamas> | what is wrong with saying that identifiers are expressions? |
2020-09-17 10:48:32 +0200 | <[exa]> | nothing? :] |
2020-09-17 10:48:34 +0200 | Katarushisu | (~Katarushi@cpc149712-finc20-2-0-cust535.4-2.cable.virginm.net) |
2020-09-17 10:48:43 +0200 | <kuribas> | an identifier is a syntactic construct |
2020-09-17 10:48:57 +0200 | <kuribas> | it depends on the context if it's a value |
2020-09-17 10:49:23 +0200 | stiell | (~stian@fsf/member/stiell) |
2020-09-17 10:50:20 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 10:50:50 +0200 | <lortabac> | kuribas: in my experience having different types is in most cases less annoying than dealing with the type families |
2020-09-17 10:51:02 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 10:51:14 +0200 | <kuribas> | lortabac: yeah, I guess you're right |
2020-09-17 10:51:16 +0200 | <bahamas> | kuribas: ok. I think I know what you mean. |
2020-09-17 10:51:46 +0200 | <kuribas> | lortabac: I find duplicateRecordFields and recordWildcards quite handy :) |
2020-09-17 10:53:12 +0200 | <kuribas> | "let x = 2", the x is not an expression here, it's a variable binding. |
2020-09-17 10:53:13 +0200 | <dminuoso> | bahamas: There's two connected notions of an expression: a) something that can be evaluated b) a grammatical production rule - the latter gives you all syntactical trees of evaluatable fragments |
2020-09-17 10:53:55 +0200 | Lycurgus | (~niemand@98.4.96.130) |
2020-09-17 10:54:49 +0200 | <bahamas> | dminuoso: can you give an example of the second? |
2020-09-17 10:55:28 +0200 | hackage | postgresql-binary 0.12.3.1 - Encoders and decoders for the PostgreSQL's binary format https://hackage.haskell.org/package/postgresql-binary-0.12.3.1 (NikitaVolkov) |
2020-09-17 10:55:39 +0200 | <kuribas> | bahamas: also you are asking how to define an expression, but that page defines an expression exactly :) I guess you don't want a definition, but an intuition |
2020-09-17 10:56:06 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds) |
2020-09-17 10:56:09 +0200 | <dminuoso> | bahamas: exp -> infixexp :: [context =>] type | infixexp |
2020-09-17 10:56:19 +0200 | <dminuoso> | Is the topmost production rule for an expression in Haskell |
2020-09-17 10:56:28 +0200 | hackage | wai-extra 3.0.30 - Provides some basic WAI handlers and middleware. https://hackage.haskell.org/package/wai-extra-3.0.30 (MichaelSnoyman) |
2020-09-17 10:57:19 +0200 | <dminuoso> | If you follow this down a bit, you'll end up with a production rule `aexp -> qvar | gcon | literal | ( exp ) | ...` |
2020-09-17 10:59:30 +0200 | <dminuoso> | Roughly, you can think of Haskell evaluation as being a graph reduction machine on a haskell expression graph/tree. |
2020-09-17 11:00:02 +0200 | AstroDroid | (~AstroDroi@84.39.117.57) () |
2020-09-17 11:00:13 +0200 | <dminuoso> | (Taking expressions to expressions) |
2020-09-17 11:00:56 +0200 | reed[m] | (reedriotfi@gateway/shell/matrix.org/x-zlxtwltpfmittewe) (Quit: Idle for 30+ days) |
2020-09-17 11:01:00 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2020-09-17 11:02:37 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) |
2020-09-17 11:06:32 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 11:09:28 +0200 | akegalj | (~akegalj@93-136-206-221.adsl.net.t-com.hr) |
2020-09-17 11:10:43 +0200 | ChaiTRex | (~ChaiTRex@gateway/tor-sasl/chaitrex) (Ping timeout: 240 seconds) |
2020-09-17 11:10:45 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds) |
2020-09-17 11:11:10 +0200 | dyeplexer | (~lol@unaffiliated/terpin) |
2020-09-17 11:12:18 +0200 | ChaiTRex | (~ChaiTRex@gateway/tor-sasl/chaitrex) |
2020-09-17 11:12:20 +0200 | <kuribas> | how would you ensure a lazy language is total? |
2020-09-17 11:13:26 +0200 | <kuribas> | :t fix |
2020-09-17 11:13:27 +0200 | <lambdabot> | (a -> a) -> a |
2020-09-17 11:14:18 +0200 | <phadej> | fix isn't something you have to add to a language |
2020-09-17 11:14:20 +0200 | <kuribas> | is there a fix-like function that doesn't diverge? |
2020-09-17 11:14:23 +0200 | <Lycurgus> | by disregarding laziness as nothing more than a lang feature? |
2020-09-17 11:14:37 +0200 | <bahamas> | dminuoso: does that mean that an expression's type signature is also an expression? |
2020-09-17 11:14:48 +0200 | <dminuoso> | bahamas: There's an easy test: |
2020-09-17 11:14:53 +0200 | <dminuoso> | bahamas: Go through the production rules |
2020-09-17 11:15:02 +0200 | jzl | (~jzl@unaffiliated/jzl) (Ping timeout: 256 seconds) |
2020-09-17 11:15:10 +0200 | <kuribas> | bahamas: you can consider it a "type level expression" |
2020-09-17 11:15:30 +0200 | <kuribas> | bahamas: however it isn't a value, it's a type. |
2020-09-17 11:15:33 +0200 | jedws | (~jedws@101.184.189.58) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-09-17 11:15:35 +0200 | <dminuoso> | bahamas: You'd need something like `aexp -> type | ...` |
2020-09-17 11:15:40 +0200 | <dminuoso> | (or possibly not aexp, but you get the idea) |
2020-09-17 11:15:55 +0200 | <dminuoso> | If such a production does not exist, then formally, a type is not an expression. |
2020-09-17 11:16:13 +0200 | <dminuoso> | However, you can see it can be *part* of expressions, namely by the production rule: |
2020-09-17 11:16:17 +0200 | <dminuoso> | exp -> infixexp :: [context =>] type |
2020-09-17 11:16:34 +0200 | <kuribas> | Lycurgus: recursion can be total by ensuring the recursive step is smaller. But can you do the same with lazyness? |
2020-09-17 11:17:16 +0200 | <kuribas> | Lycurgus: perhaps if the return of (a -> a) is smaller than the input? |
2020-09-17 11:18:34 +0200 | <kuribas> | hmm, no because x = tail x still diverges... |
2020-09-17 11:20:16 +0200 | <bahamas> | dminuoso: ok. all that recursion and the use of the name "infixexp" is confusing me a bit, but if I'm unpacking those terms, it's slowly falling into place |
2020-09-17 11:20:19 +0200 | <bahamas> | thanks |
2020-09-17 11:20:37 +0200 | <Lycurgus> | is laziness modeled as part of the active semantics of haskell? that's why I said what I did, that laziness is is between a compiler feature and the execution semantics |
2020-09-17 11:20:45 +0200 | <dminuoso> | bahamas: Read a production `foo -> bar` as "to make a foo, use bar" |
2020-09-17 11:20:57 +0200 | <dminuoso> | (It's why they are called production rules, they tell you how to *produce* the left hand side) |
2020-09-17 11:21:02 +0200 | <kuribas> | Lycurgus: yes it is |
2020-09-17 11:21:04 +0200 | <Lycurgus> | an if you only consider the latter then laziness can be disregarded |
2020-09-17 11:21:41 +0200 | <kuribas> | Lycurgus: because bottom is part of the semantics, and lazyness changes the result when bottom is present. |
2020-09-17 11:21:51 +0200 | <Lycurgus> | which is sort of cognitively consistent with a lang with the hubris or what ever to have ct as a model of computation |
2020-09-17 11:21:55 +0200 | <dminuoso> | bahamas: And they are exhaustive. So if there's no production rule for some `f -> g`, then g does not make an f |
2020-09-17 11:21:57 +0200 | blardo | (~blardo@185.244.214.216) |
2020-09-17 11:22:00 +0200 | ph88^ | (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) |
2020-09-17 11:22:42 +0200 | <kuribas> | > foldr const 1 (1:undefined) |
2020-09-17 11:22:45 +0200 | <lambdabot> | 1 |
2020-09-17 11:22:56 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.) |
2020-09-17 11:22:56 +0200 | <kuribas> | Lycurgus: that would be bottom in a strict language |
2020-09-17 11:23:07 +0200 | <kuribas> | Lycurgus: haskell ensures it's 1 |
2020-09-17 11:23:27 +0200 | <Lycurgus> | well i gave an easy and gordian way |
2020-09-17 11:23:40 +0200 | <Lycurgus> | i suppose that's not the hs way tho |
2020-09-17 11:24:02 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) |
2020-09-17 11:24:07 +0200 | acidjnk_new3 | (~acidjnk@p200300d0c736587164f46f145ae9b6a7.dip0.t-ipconnect.de) |
2020-09-17 11:24:29 +0200 | ph88_ | (~ph88@2a02:8109:9e40:2704:85f2:8dce:6e30:a554) |
2020-09-17 11:24:44 +0200 | <lortabac> | kuribas: Agda is an example of a lazy total language |
2020-09-17 11:25:14 +0200 | <lortabac> | maybe you can find some answers in the author's Phd thesis |
2020-09-17 11:25:33 +0200 | ph88 | (~ph88@2a02:8109:9e40:2704:6cf2:c517:5b95:5f99) (Ping timeout: 272 seconds) |
2020-09-17 11:27:03 +0200 | mirrorbird | (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) (Quit: Leaving) |
2020-09-17 11:27:21 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 11:27:53 +0200 | <Taneb> | I'm not sure the question is well defined: "lazy" is normally defined as there exist some functions such that f _|_ /= _|_. In a total language, there is no _|_ so we can't decide if the language is lazy or not |
2020-09-17 11:28:01 +0200 | someuser123 | (59b76050@a89-183-96-80.net-htp.de) |
2020-09-17 11:28:25 +0200 | ph88^ | (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) (Ping timeout: 264 seconds) |
2020-09-17 11:29:03 +0200 | <lortabac> | Taneb: you can still talk about the order of evaluation and sharing, can't you? |
2020-09-17 11:29:19 +0200 | eric | (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) |
2020-09-17 11:29:37 +0200 | <someuser123> | is there a conventional name for a function `m a -> a` where `m` is a monad? |
2020-09-17 11:30:21 +0200 | <dminuoso> | someuser123: Cokleisli Arrow |
2020-09-17 11:30:27 +0200 | <dminuoso> | fsvo of "conventional" |
2020-09-17 11:30:28 +0200 | <merijn> | someuser123: "nonexistent" :) |
2020-09-17 11:32:00 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 11:33:26 +0200 | <dminuoso> | Oh wait, heh. Well that only works if m was a comonad. :) |
2020-09-17 11:34:02 +0200 | v0d1ch | (~v0d1ch@cable-178-148-120-241.dynamic.sbb.rs) |
2020-09-17 11:34:16 +0200 | <maerwald> | quiz question: what does `LimitTo` in persistent do if you pass 0? |
2020-09-17 11:34:17 +0200 | <dminuoso> | someuser123: Do you mean `m` as some *particular* monad, or just any monad? |
2020-09-17 11:35:21 +0200 | cpressey | (~cpressey@79-72-201-114.dynamic.dsl.as9105.com) |
2020-09-17 11:35:41 +0200 | eric | (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) (Ping timeout: 272 seconds) |
2020-09-17 11:35:43 +0200 | <someuser123> | I'm thinking of a monad like Maybe that is used to capture computation which can fail |
2020-09-17 11:36:23 +0200 | <edwardk> | lortabac: laziness in a total language is the differents between 'terminates' and 'terminates in my lifetime' |
2020-09-17 11:36:54 +0200 | <kuribas> | someuser123: Maybe has fromJust which you shouldn't use |
2020-09-17 11:37:17 +0200 | <kuribas> | someuser123: use fromMaybe instead |
2020-09-17 11:37:27 +0200 | <someuser123> | kuribas: why not? |
2020-09-17 11:37:45 +0200 | <merijn> | someuser123: Because it's bad and broken and you will regret it :p |
2020-09-17 11:37:47 +0200 | <kuribas> | someuser123: because it will crash on Nothing |
2020-09-17 11:37:49 +0200 | <maerwald> | someuser123: it's fine to use in local context or where you don't mind something to crash |
2020-09-17 11:38:20 +0200 | <merijn> | maerwald: What local context is it fine in? |
2020-09-17 11:38:34 +0200 | <maerwald> | merijn: where you have local proof that it's never Nothing |
2020-09-17 11:38:37 +0200 | <kuribas> | it's never fine to crash without meaningful error message |
2020-09-17 11:38:40 +0200 | <kuribas> | or stack trace |
2020-09-17 11:38:52 +0200 | <lortabac> | edwardk: can you expand? I'm not sure I understand |
2020-09-17 11:39:08 +0200 | <merijn> | maerwald: I don't see many case where you have both such a proof and still can't skip the maybe |
2020-09-17 11:39:43 +0200 | <edwardk> | termination checking in a fancy total language might take until the sun explodes. its pretty easy to build tings that theoretically terminate, but won't terminate in my lifetime. |
2020-09-17 11:40:15 +0200 | <edwardk> | laziness lets you skip some of the evaluation of parts, so while sure those parts will terminate eventually, it might be nice to not do that work at all |
2020-09-17 11:40:27 +0200 | <maerwald> | merijn: I'm not sure I follow. |
2020-09-17 11:41:45 +0200 | <merijn> | maerwald: I can't really think of any case where I have a proof that it's not Nothing where I can't simple skip going through Maybe (and thus fromJust) |
2020-09-17 11:41:47 +0200 | <maerwald> | if you have a regex building function that might return Nothing, but there is no user input and you've verified it compiles at runtime, there's no point going through hoops just to satisfy the totality illusion |
2020-09-17 11:42:14 +0200 | <merijn> | maerwald: Then you want |
2020-09-17 11:42:20 +0200 | <merijn> | @hackage validated-literals ;) |
2020-09-17 11:42:20 +0200 | <lambdabot> | https://hackage.haskell.org/package/validated-literals ;) |
2020-09-17 11:42:27 +0200 | <maerwald> | I'm aware of that, this was an example |
2020-09-17 11:42:31 +0200 | <lortabac> | edwardk: ok I see, thanks |
2020-09-17 11:43:04 +0200 | <edwardk> | as an example, when writing a dependent type checker itself, i wind up having to eval terms to normal form. but those terms often carry around things like unerased type info. _eval_ doesn't care, but maybe they might appear in the final normal form |
2020-09-17 11:43:22 +0200 | <edwardk> | but i should lazily skip past crunching those things down in case i don't need to compute those answers |
2020-09-17 11:43:49 +0200 | <edwardk> | sure it'd terminate but it'd bloat the memory footprint of the proof process and significantly slow it down |
2020-09-17 11:43:58 +0200 | <kuribas> | maerwald: if you have many regexes, change one of those then you don't know which one blew up. |
2020-09-17 11:44:30 +0200 | <maerwald> | then don't use it |
2020-09-17 11:44:44 +0200 | <kuribas> | maerwald: and if you know which one blew, it doesn't say what's wrong with it. |
2020-09-17 11:44:51 +0200 | Franciman | (~Franciman@acqua.team) |
2020-09-17 11:45:16 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 11:46:27 +0200 | <Unhammer> | Upgraded from 8.6.5 to 8.8.4, project compile time went from 3m to 2m30s, compile after changing single (TH) file from 30s to 24s :-) and the windows binary size went from 53MB to 43MB. That's pretty nice :-) |
2020-09-17 11:47:15 +0200 | <merijn> | Unhammer: You can probably drastically shrink further |
2020-09-17 11:47:26 +0200 | <merijn> | Unhammer: Enable split-sections |
2020-09-17 11:47:34 +0200 | <maerwald> | does windows support split-sections? |
2020-09-17 11:47:40 +0200 | <Unhammer> | on windows? |
2020-09-17 11:47:45 +0200 | Lycurgus | (~niemand@98.4.96.130) (Quit: Exeunt) |
2020-09-17 11:47:45 +0200 | <merijn> | hmm, not sure? |
2020-09-17 11:47:50 +0200 | <merijn> | Only one way to find out :p |
2020-09-17 11:47:55 +0200 | da39a3ee5e6b4b0d | (~textual@2403:6200:8876:37d7:55fb:4d37:ffc2:715b) (Ping timeout: 240 seconds) |
2020-09-17 11:48:02 +0200 | <merijn> | Unhammer: Also, don't forget to strip |
2020-09-17 11:48:16 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 11:48:26 +0200 | <Unhammer> | I think stack does that for me |
2020-09-17 11:48:28 +0200 | <Unhammer> | on stack install |
2020-09-17 11:48:56 +0200 | <Unhammer> | yeah, the one in "dist" is 64M, and the one in "install" doesn't get smaller when stripping |
2020-09-17 11:49:04 +0200 | <merijn> | hmmm |
2020-09-17 11:49:55 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 244 seconds) |
2020-09-17 11:50:28 +0200 | hackage | Z-Data 0.1.1.0 - array, vector and text https://hackage.haskell.org/package/Z-Data-0.1.1.0 (winterland) |
2020-09-17 11:50:46 +0200 | <Unhammer> | oh I need to rebuild all deps to try split-sections … guess I'll wait, need to do some actual work instead of faffing around with compiler versions =P |
2020-09-17 11:51:24 +0200 | <merijn> | Unhammer: Yeah, you do |
2020-09-17 11:51:35 +0200 | <merijn> | Unhammer: It makes *massive* difference, though |
2020-09-17 11:52:07 +0200 | <merijn> | Unhammer: Like, 10x on my executables |
2020-09-17 11:52:54 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 11:54:17 +0200 | <kuribas> | merijn: why doesn't it do this by default? |
2020-09-17 11:54:41 +0200 | alp_ | (~alp@2a01:e0a:58b:4920:90ae:a5d:9349:f8d8) (Ping timeout: 272 seconds) |
2020-09-17 11:55:24 +0200 | <merijn> | kuribas: Because it's fairly new, doesn't work on all platforms, etc. |
2020-09-17 11:55:28 +0200 | <Unhammer> | https://gitlab.haskell.org/ghc/ghc/-/issues/11445 |
2020-09-17 11:55:48 +0200 | <merijn> | hmm, older than I thought :p |
2020-09-17 11:56:15 +0200 | <Unhammer> | does it work to put it in global stack.yaml ? |
2020-09-17 11:56:36 +0200 | <phadej> | merijn: IIRC it was broken / not working somewhere somewhat |
2020-09-17 11:57:03 +0200 | <merijn> | It doesn't work on macOS |
2020-09-17 11:57:11 +0200 | <maerwald> | merijn: you don't need it there |
2020-09-17 11:57:23 +0200 | <merijn> | maerwald: I know, but GHC error exited when you specified it |
2020-09-17 11:57:29 +0200 | <maerwald> | yep |
2020-09-17 11:57:32 +0200 | <merijn> | (now fixed after I whined about it) |
2020-09-17 11:57:45 +0200 | <merijn> | Now it's just a warning on macOS |
2020-09-17 11:58:42 +0200 | <phadej> | a problem is that GHC doesn't tell whether it's supported |
2020-09-17 11:58:53 +0200 | <phadej> | there is ("Object splitting supported","YES") entry, which is about -split-objs |
2020-09-17 11:58:57 +0200 | <phadej> | but not for -split-sections |
2020-09-17 11:59:46 +0200 | <phadej> | GHC is not very uniform in how it exposes features |
2020-09-17 12:00:04 +0200 | <phadej> | (to allow auto-configuration, vs. hardcoding stuff about particular compiler versions into Cabal) |
2020-09-17 12:01:22 +0200 | <phadej> | an example |
2020-09-17 12:01:24 +0200 | <phadej> | it tells |
2020-09-17 12:01:24 +0200 | <phadej> | ,("unlit command","/opt/ghc/8.10.1/lib/ghc-8.10.1/bin/unlit") |
2020-09-17 12:01:30 +0200 | <phadej> | but doesn't tell e.g. `ghc-pkg command` |
2020-09-17 12:01:37 +0200 | <phadej> | so Cabal have to use heuristics to find one |
2020-09-17 12:01:59 +0200 | <phadej> | (where I have no idea what's use case to knowing where is unlit command :P) |
2020-09-17 12:02:19 +0200 | <merijn> | phadej: Sounds like we need a ticket about all missing things there and add them to GHC |
2020-09-17 12:03:03 +0200 | <phadej> | merijn: one needs a pedantic person looking after that |
2020-09-17 12:03:12 +0200 | yahb | (xsbot@haskell/bot/yahb) (Ping timeout: 256 seconds) |
2020-09-17 12:03:23 +0200 | yahb | (xsbot@178.219.36.155) |
2020-09-17 12:03:23 +0200 | yahb | (xsbot@178.219.36.155) (Changing host) |
2020-09-17 12:03:23 +0200 | yahb | (xsbot@haskell/bot/yahb) |
2020-09-17 12:03:26 +0200 | z0 | (~z0@bl15-162-186.dsl.telepac.pt) |
2020-09-17 12:03:32 +0200 | <phadej> | new features need to get to that list when they introduced, not 2-3 releases after |
2020-09-17 12:05:05 +0200 | <merijn> | kuribas: The short answer to why it's not the default is: Insufficient people baby sitting these sorts of tickets/fixes, tracking whether they work everywhere and flipping the switch |
2020-09-17 12:05:28 +0200 | <kuribas> | merijn: the flipside of avoiding success. |
2020-09-17 12:08:16 +0200 | Tops2 | (~Tobias@dyndsl-095-033-091-070.ewe-ip-backbone.de) |
2020-09-17 12:08:39 +0200 | <maerwald> | pedantic person? Someone called my name? |
2020-09-17 12:09:05 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 12:09:06 +0200 | <merijn> | maerwald: Please do :p |
2020-09-17 12:10:04 +0200 | <someuser123> | where can I see the precedence ranks of operators such as <*> and <$>? |
2020-09-17 12:10:22 +0200 | <merijn> | % :i (<$>) |
2020-09-17 12:10:22 +0200 | <yahb> | merijn: (<$>) :: Functor f => (a -> b) -> f a -> f b -- Defined in `Data.Functor'; infixl 4 <$> |
2020-09-17 12:10:33 +0200 | <merijn> | someuser123: The "infixl 4" is precedence |
2020-09-17 12:10:36 +0200 | <merijn> | % :i (<*>) |
2020-09-17 12:10:37 +0200 | <yahb> | merijn: type Applicative :: (* -> *) -> Constraint; class Functor f => Applicative f where; ...; (<*>) :: f (a -> b) -> f a -> f b; ...; -- Defined in `GHC.Base'; infixl 4 <*> |
2020-09-17 12:10:46 +0200 | <merijn> | So, precedence level 4, left associative |
2020-09-17 12:11:21 +0200 | alp_ | (~alp@88.126.45.36) |
2020-09-17 12:11:40 +0200 | <someuser123> | thanks |
2020-09-17 12:11:42 +0200 | adauguet | (4d838b43@67.139.131.77.rev.sfr.net) |
2020-09-17 12:12:12 +0200 | bahamas | (~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds) |
2020-09-17 12:14:19 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 12:14:24 +0200 | sw1nn | (~sw1nn@host81-146-21-49.range81-146.btcentralplus.com) (Quit: WeeChat 2.9) |
2020-09-17 12:14:58 +0200 | <adauguet> | Hi everyone, is this the right place to ask beginners questions about haskell? |
2020-09-17 12:14:59 +0200 | <dminuoso> | Unhammer: I have added `split-sections: true` to my ~/.cabal/config and made profits ever since! :) |
2020-09-17 12:15:03 +0200 | <dminuoso> | adauguet: Yes. |
2020-09-17 12:15:25 +0200 | <dminuoso> | adauguet: You can also use #haskell-beginners if you want a more quiet/less chatty place, but we dont mind the most naive beginner questions either. |
2020-09-17 12:15:36 +0200 | sw1nn | (~sw1nn@host81-146-21-49.range81-146.btcentralplus.com) |
2020-09-17 12:16:02 +0200 | <adauguet> | thanks, i will try on #haskell-beginners then |
2020-09-17 12:18:43 +0200 | fendor | (~fendor@77.119.129.27.wireless.dyn.drei.com) |
2020-09-17 12:22:59 +0200 | darjeeling_ | (~darjeelin@115.215.41.222) |
2020-09-17 12:24:32 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) (Quit: I quit (╯°□°)╯︵ ┻━┻) |
2020-09-17 12:27:58 +0200 | jumper149 | (~jumper149@ip185225.wh.uni-hannover.de) |
2020-09-17 12:28:26 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 12:29:59 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 12:32:13 +0200 | perdent | (~k4fr@212.102.36.136) |
2020-09-17 12:32:22 +0200 | <perdent> | Anyone here want to be hired to code a 'hacking' CTF challenge for money? If so PM me for further details |
2020-09-17 12:33:28 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 260 seconds) |
2020-09-17 12:33:28 +0200 | <Raito_Bezarius> | perdent: what's the relation with Haskell? |
2020-09-17 12:34:28 +0200 | <perdent> | Raito_Bezarius: I want it to be coded in haskell |
2020-09-17 12:34:33 +0200 | urodna | (~urodna@unaffiliated/urodna) |
2020-09-17 12:34:44 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 12:35:07 +0200 | <perdent> | Makes it more difficult for participants who are not used to functional programming |
2020-09-17 12:35:48 +0200 | <[exa]> | also a lot more difficult to actually C the F |
2020-09-17 12:36:29 +0200 | pfurla | (~pfurla@ool-182ed2e2.dyn.optonline.net) (Quit: gone to sleep. ZZZzzz…) |
2020-09-17 12:39:15 +0200 | gnumonik | (~gnumonik@c-73-170-91-210.hsd1.ca.comcast.net) (Quit: Leaving) |
2020-09-17 12:39:27 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) |
2020-09-17 12:44:25 +0200 | rapskalian | (~user@2601:804:8400:5750:6d07:cb01:64a9:36bb) (Ping timeout: 240 seconds) |
2020-09-17 12:44:34 +0200 | darjeeling_ | (~darjeelin@115.215.41.222) (Ping timeout: 256 seconds) |
2020-09-17 12:45:42 +0200 | sagax | (~sagax_nb@213.138.71.146) |
2020-09-17 12:45:47 +0200 | fendor | (~fendor@77.119.129.27.wireless.dyn.drei.com) (Remote host closed the connection) |
2020-09-17 12:46:51 +0200 | darjeeling_ | (~darjeelin@115.215.41.222) |
2020-09-17 12:47:16 +0200 | Tops21 | (~Tobias@dyndsl-095-033-091-070.ewe-ip-backbone.de) |
2020-09-17 12:48:25 +0200 | Tops2 | (~Tobias@dyndsl-095-033-091-070.ewe-ip-backbone.de) (Ping timeout: 240 seconds) |
2020-09-17 12:50:02 +0200 | DavidEichmann | (~david@43.240.198.146.dyn.plus.net) |
2020-09-17 12:51:06 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 12:51:37 +0200 | Amras | (~Amras@unaffiliated/amras0000) |
2020-09-17 12:53:10 +0200 | <dminuoso> | How can I extract the test-suite binary in v2-*? |
2020-09-17 12:53:24 +0200 | someuser123 | (59b76050@a89-183-96-80.net-htp.de) (Ping timeout: 245 seconds) |
2020-09-17 12:55:17 +0200 | toorevitimirp | (~tooreviti@117.182.182.33) |
2020-09-17 12:56:52 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 13:05:17 +0200 | raehik | (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net) |
2020-09-17 13:08:00 +0200 | adauguet | (4d838b43@67.139.131.77.rev.sfr.net) (Ping timeout: 245 seconds) |
2020-09-17 13:10:18 +0200 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection) |
2020-09-17 13:12:02 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 13:13:29 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.) |
2020-09-17 13:13:57 +0200 | ajcerejeira | (~ajcerejei@2001:8a0:ddee:700:efbc:7163:11a0:b83) |
2020-09-17 13:13:58 +0200 | jchia_ | (~jchia@58.32.37.220) (Quit: Leaving.) |
2020-09-17 13:14:00 +0200 | <maerwald> | dminuoso: same as any other |
2020-09-17 13:14:28 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) |
2020-09-17 13:16:12 +0200 | <dminuoso> | Well until now it was just with `cp $(cabal v2-exec -- which foo) ..` |
2020-09-17 13:16:21 +0200 | Turmfalke | (~user@unaffiliated/siracusa) |
2020-09-17 13:16:25 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds) |
2020-09-17 13:16:26 +0200 | <dminuoso> | So I guess you're proposing to just use cabal-plan? |
2020-09-17 13:16:42 +0200 | yoneda | (~mike@193.206.102.122) (Quit: leaving) |
2020-09-17 13:17:33 +0200 | <maerwald> | I did that v2-exec with spec test as well I believe |
2020-09-17 13:18:44 +0200 | rprije | (~rprije@27.143.220.203.dial.dynamic.acc01-myal-dub.comindico.com.au) (Ping timeout: 260 seconds) |
2020-09-17 13:18:44 +0200 | <dminuoso> | Ah, I did not realize the testsuite binaries are called after their testsuite name. |
2020-09-17 13:19:35 +0200 | jchia__ | (~jchia@58.32.37.220) (Quit: Leaving.) |
2020-09-17 13:19:59 +0200 | jchia__ | (~jchia@58.32.37.220) |
2020-09-17 13:20:12 +0200 | jchia__ | (~jchia@58.32.37.220) (Client Quit) |
2020-09-17 13:20:35 +0200 | Neuromancer | (~Neuromanc@unaffiliated/neuromancer) |
2020-09-17 13:21:18 +0200 | tchouri | (~tchouri@gateway/tor-sasl/hekkaidekapus) |
2020-09-17 13:21:27 +0200 | <WzC> | does anyone know how to get a fully statically compiled executable using ghc these days? |
2020-09-17 13:21:46 +0200 | <maerwald> | WzC: with alipne |
2020-09-17 13:22:02 +0200 | <WzC> | the internet claims 'ghc -static -optl-static -optl-pthread' should work, but that gives a bunch of errors |
2020-09-17 13:22:10 +0200 | <merijn> | WzC: Depends on how extreme you wanna take "full static" :) |
2020-09-17 13:22:23 +0200 | <maerwald> | there's only full static or none at all |
2020-09-17 13:22:55 +0200 | <WzC> | as in: everything (including dependent c-libs) included in the binary |
2020-09-17 13:22:57 +0200 | <merijn> | WzC: Well, for one, on linux you're hosed because glibc can't be linked statically, so you need a linux (or toolchain, at least) that has a statically linkable libc |
2020-09-17 13:23:03 +0200 | <maerwald> | WzC: see https://github.com/actions/setup-haskell/issues/31#issuecomment-676001831 |
2020-09-17 13:23:43 +0200 | hekkaidekapus | (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds) |
2020-09-17 13:23:51 +0200 | jchia__ | (~jchia@45.32.62.73) |
2020-09-17 13:24:06 +0200 | jchia__ | (~jchia@45.32.62.73) (Client Quit) |
2020-09-17 13:24:31 +0200 | jchia__ | (~jchia@45.32.62.73) |
2020-09-17 13:24:40 +0200 | <WzC> | hmm I'll have to read through that a bit |
2020-09-17 13:24:41 +0200 | jchia__ | (~jchia@45.32.62.73) (Client Quit) |
2020-09-17 13:26:14 +0200 | <WzC> | essentially I'm trying to set up ghc in domjudge, some system to compile student handins and test them. Somehow the system is running the compiled executables in some chroot, and hence the basic approach to avoid that would be to compile static binaries |
2020-09-17 13:26:16 +0200 | <dminuoso> | WzC: If you're a nix user, there's a static haskell overlay. |
2020-09-17 13:26:24 +0200 | <maerwald> | which sometimes works |
2020-09-17 13:27:09 +0200 | <maerwald> | WzC: it's easy |
2020-09-17 13:27:10 +0200 | <WzC> | this is essentially what I now get with those options though: https://gist.github.com/noinia/a77769a70b833496501ffb6a6e64472f |
2020-09-17 13:27:59 +0200 | akegalj_ | (~akegalj@93-142-93-99.adsl.net.t-com.hr) |
2020-09-17 13:28:59 +0200 | ubert | (~Thunderbi@178.165.131.132.wireless.dyn.drei.com) |
2020-09-17 13:31:36 +0200 | akegalj | (~akegalj@93-136-206-221.adsl.net.t-com.hr) (Ping timeout: 256 seconds) |
2020-09-17 13:32:50 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 13:33:20 +0200 | TooDifficult | (~TooDiffic@139.59.59.230) |
2020-09-17 13:33:27 +0200 | hackage | niv 0.2.18 - Easy dependency management for Nix projects https://hackage.haskell.org/package/niv-0.2.18 (nmattia) |
2020-09-17 13:34:42 +0200 | gmt | (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) |
2020-09-17 13:34:59 +0200 | Stanley00 | (~stanley00@unaffiliated/stanley00) (Remote host closed the connection) |
2020-09-17 13:35:09 +0200 | cpressey | (~cpressey@79-72-201-114.dynamic.dsl.as9105.com) (Quit: kwit) |
2020-09-17 13:35:45 +0200 | ALM49 | (7bc007ac@123-192-7-172.dynamic.kbronet.com.tw) |
2020-09-17 13:36:01 +0200 | Dolly | (585fd1fd@ti0203q160-5312.bb.online.no) |
2020-09-17 13:36:21 +0200 | <ALM49> | Is it possible to qualify an infix operator? |
2020-09-17 13:36:44 +0200 | <lortabac> | yes |
2020-09-17 13:36:55 +0200 | <opqdonut> | > 1 Prelude.+ 2 |
2020-09-17 13:36:57 +0200 | <lambdabot> | 3 |
2020-09-17 13:36:59 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds) |
2020-09-17 13:37:02 +0200 | <ALM49> | ie. If I want to use `List.(++)` instead of having to `import Data.List (++)` |
2020-09-17 13:37:13 +0200 | <dminuoso> | ALM49: No, you have to explicitly add an import. |
2020-09-17 13:37:23 +0200 | <opqdonut> | but it could be a qualified import |
2020-09-17 13:37:37 +0200 | <ALM49> | Oh, so I just omit the parentheses? |
2020-09-17 13:37:47 +0200 | <dminuoso> | ALM49: Add additional parentheses. |
2020-09-17 13:38:02 +0200 | <dminuoso> | import Data.List ((++)), and if you want it qualified you can do `import qualified Data.List ((++))` |
2020-09-17 13:38:20 +0200 | <dminuoso> | And, then you can give an alias as well, like `import qualified Data.List as L ((++))` |
2020-09-17 13:38:56 +0200 | gmt | (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 246 seconds) |
2020-09-17 13:39:47 +0200 | george_____t | (5c094cd5@host-92-9-76-213.as43234.net) |
2020-09-17 13:40:17 +0200 | oxide | (~lambda@unaffiliated/mclaren) (Read error: Connection reset by peer) |
2020-09-17 13:40:30 +0200 | <ALM49> | oh, that's strange |
2020-09-17 13:40:41 +0200 | <ALM49> | So I'd write something like |
2020-09-17 13:40:44 +0200 | <ALM49> | `(List.++) "abc" "def"` |
2020-09-17 13:41:54 +0200 | <ALM49> | Why do I need the parens there? What could that conflict with? |
2020-09-17 13:43:14 +0200 | <dminuoso> | You're writing it in prefix position. |
2020-09-17 13:43:30 +0200 | AlterEgo- | (~ladew@124-198-158-163.dynamic.caiway.nl) |
2020-09-17 13:43:57 +0200 | <dminuoso> | You can write named functions in infix position by wrapping them in ``, and you can write operators in prefix position by wrapping them in parens |
2020-09-17 13:44:12 +0200 | <dminuoso> | The maybe confusing part is to realize that List.++ is an operator |
2020-09-17 13:44:15 +0200 | <ALM49> | Wow, it never occured to me that I could use a qualified operator in infix position |
2020-09-17 13:44:18 +0200 | gxt | (~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection) |
2020-09-17 13:44:22 +0200 | <dminuoso> | Well, it *is* and remains an operator. ;) |
2020-09-17 13:44:59 +0200 | gmt | (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) |
2020-09-17 13:45:03 +0200 | <ALM49> | Well, coming from OCaml, operators are basically just identifiers |
2020-09-17 13:45:09 +0200 | gxt | (~gxt@gateway/tor-sasl/gxt) |
2020-09-17 13:45:30 +0200 | <ALM49> | I didn't realise that Haskell has a distinction between them |
2020-09-17 13:45:31 +0200 | gxt | (~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection) |
2020-09-17 13:47:11 +0200 | frdg` | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) |
2020-09-17 13:48:21 +0200 | gxt | (~gxt@gateway/tor-sasl/gxt) |
2020-09-17 13:49:19 +0200 | frdg | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) (Ping timeout: 272 seconds) |
2020-09-17 13:49:52 +0200 | <dminuoso> | ALM49: There's even more going on. We have a 2x2 matrix of [["Variable identifier", "Constructor identifier"], ["Operator identifier", "Operator constructor"]] |
2020-09-17 13:50:18 +0200 | <dminuoso> | A common example of operator constructors is (:) from list. :) |
2020-09-17 13:50:56 +0200 | <dminuoso> | https://www.haskell.org/onlinereport/haskell2010/haskellch2.html#x7-180002.4 contains a very readable and concise definition |
2020-09-17 13:51:56 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.) |
2020-09-17 13:52:40 +0200 | lemmih | (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) (Remote host closed the connection) |
2020-09-17 13:53:02 +0200 | lemmih | (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) |
2020-09-17 13:53:40 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 13:53:56 +0200 | frdg`` | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) |
2020-09-17 13:54:25 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2020-09-17 13:54:36 +0200 | frdg`` | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) () |
2020-09-17 13:54:49 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) |
2020-09-17 13:54:56 +0200 | arjaz | (~user@91.218.15.22) |
2020-09-17 13:55:00 +0200 | arjaz | (~user@91.218.15.22) () |
2020-09-17 13:55:13 +0200 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) (Ping timeout: 260 seconds) |
2020-09-17 13:56:26 +0200 | sQVe | (~sQVe@unaffiliated/sqve) |
2020-09-17 13:58:22 +0200 | <ALM49> | thanks dminuoso |
2020-09-17 13:58:25 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 264 seconds) |
2020-09-17 13:58:44 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) |
2020-09-17 13:58:49 +0200 | frdg` | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) (Ping timeout: 272 seconds) |
2020-09-17 13:58:52 +0200 | raehik | (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
2020-09-17 13:59:46 +0200 | knupfer | (~Thunderbi@dynamic-046-114-150-052.46.114.pool.telefonica.de) |
2020-09-17 13:59:54 +0200 | toorevitimirp | (~tooreviti@117.182.182.33) (Ping timeout: 260 seconds) |
2020-09-17 14:00:01 +0200 | blardo | (~blardo@185.244.214.216) () |
2020-09-17 14:00:45 +0200 | tchouri | hekkaidekapus |
2020-09-17 14:02:44 +0200 | ericsagnes | (~ericsagne@i153-145-14-232.s42.a013.ap.plala.or.jp) (Ping timeout: 246 seconds) |
2020-09-17 14:03:22 +0200 | sQVe | (~sQVe@unaffiliated/sqve) (Ping timeout: 272 seconds) |
2020-09-17 14:03:26 +0200 | <ski> | kuribas : "perhaps if the return of (a -> a) is smaller than the input?" -- how about if it's larger ? |
2020-09-17 14:03:37 +0200 | <ski> | kuribas : "is there a fix-like function that doesn't diverge?" -- maybe some variant of `loeb' ? |
2020-09-17 14:03:43 +0200 | raehik | (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net) |
2020-09-17 14:03:58 +0200 | <kuribas> | ski: never heard of loeb... I'll look it up |
2020-09-17 14:04:32 +0200 | <hekkaidekapus> | ALM49: In ghci, you can use qualified identifiers without a prior module import. |
2020-09-17 14:04:44 +0200 | <hekkaidekapus> | % 4 Data.List.NonEmpty.:| [5, 6] |
2020-09-17 14:04:45 +0200 | <yahb> | hekkaidekapus: 4 :| [5,6] |
2020-09-17 14:05:25 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.) |
2020-09-17 14:05:27 +0200 | fendor | (~fendor@e237-037.eduroam.tuwien.ac.at) |
2020-09-17 14:06:36 +0200 | <ski> | kuribas : the usual Haskell combinator with that name is |
2020-09-17 14:06:40 +0200 | lemmih | (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) (Remote host closed the connection) |
2020-09-17 14:06:59 +0200 | lemmih | (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) |
2020-09-17 14:07:46 +0200 | <ski> | @let loeb :: Functor f => f (f a -> a) -> f a; loeb fs = fa where fa = fmap ($ fa) ff |
2020-09-17 14:07:48 +0200 | <lambdabot> | .L.hs:218:26: error: |
2020-09-17 14:07:48 +0200 | <lambdabot> | • Variable not in scope: ff :: f1 (f1 b -> b) |
2020-09-17 14:07:48 +0200 | <lambdabot> | • Perhaps you meant one of these: |
2020-09-17 14:07:52 +0200 | <ski> | @let loeb :: Functor f => f (f a -> a) -> f a; loeb fs = fa where fa = fmap ($ fa) fs |
2020-09-17 14:07:54 +0200 | <lambdabot> | Defined. |
2020-09-17 14:08:01 +0200 | sQVe | (~sQVe@unaffiliated/sqve) |
2020-09-17 14:08:24 +0200 | sQVe | (~sQVe@unaffiliated/sqve) (Client Quit) |
2020-09-17 14:09:04 +0200 | <ski> | > loeb [sum . tail,length,const 2,liftA2 (*) (!! 1) (!! 2)] |
2020-09-17 14:09:07 +0200 | <lambdabot> | [14,4,2,8] |
2020-09-17 14:11:20 +0200 | dmiles | (dmiles@c-73-67-179-188.hsd1.wa.comcast.net) (Ping timeout: 265 seconds) |
2020-09-17 14:12:57 +0200 | pfurla | (~pfurla@ool-182ed2e2.dyn.optonline.net) |
2020-09-17 14:12:59 +0200 | knupfer | (~Thunderbi@dynamic-046-114-150-052.46.114.pool.telefonica.de) (Read error: Connection reset by peer) |
2020-09-17 14:13:25 +0200 | <kuribas> | what weird magic is this? |
2020-09-17 14:13:35 +0200 | ajcerejeira | (~ajcerejei@2001:8a0:ddee:700:efbc:7163:11a0:b83) (Quit: ajcerejeira) |
2020-09-17 14:13:48 +0200 | <yushyin> | loeb magic |
2020-09-17 14:14:35 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 14:16:30 +0200 | <enikar> | :t loeb |
2020-09-17 14:16:32 +0200 | <lambdabot> | Functor f => f (f a -> a) -> f a |
2020-09-17 14:17:44 +0200 | <ski> | (named after some kind of analogy with <https://en.wikipedia.org/wiki/L%C3%B6b%27s_theorem>,<https://en.wikipedia.org/wiki/L%C3%B6b's_paradox>) |
2020-09-17 14:17:49 +0200 | <Uniaika> | rally racing has made its way into Haskell! |
2020-09-17 14:17:58 +0200 | <ski> | racing ? |
2020-09-17 14:18:28 +0200 | <Uniaika> | https://en.wikipedia.org/wiki/S%C3%A9bastien_Loeb |
2020-09-17 14:18:28 +0200 | <phadej> | https://en.wikipedia.org/wiki/S%C3%A9bastien_Loeb |
2020-09-17 14:18:29 +0200 | <Uniaika> | :) |
2020-09-17 14:18:34 +0200 | <phadej> | (: |
2020-09-17 14:18:35 +0200 | <Uniaika> | haha, raced, phadej! |
2020-09-17 14:18:42 +0200 | <ski> | hm, never heard about him |
2020-09-17 14:18:54 +0200 | <Uniaika> | oh don't worry, I know him because I'm french |
2020-09-17 14:19:01 +0200 | <phadej> | finns know rally too |
2020-09-17 14:19:24 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 14:19:33 +0200 | <ski> | kuribas : anyway, can you follow that example, or would you like a hint ? |
2020-09-17 14:21:05 +0200 | bicho_rastrero | (~cerdito@154.85-87-39.dynamic.clientes.euskaltel.es) |
2020-09-17 14:21:33 +0200 | <phadej> | eh, 9 consecutive championships |
2020-09-17 14:21:42 +0200 | <phadej> | might been a bit boring at the end |
2020-09-17 14:22:17 +0200 | <kuribas> | ski: more or less... I'll study it another time |
2020-09-17 14:22:58 +0200 | <phadej> | "Loeb is a tarmac expert, having won all but three of the WRC rallies on that surface in which he has participated between 2005 and 2013." |
2020-09-17 14:24:12 +0200 | <ski> | kuribas : basically, that example works sortof like a spreadsheet. every "cell" can refer to the value of all the other "cells" |
2020-09-17 14:24:32 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 14:24:37 +0200 | <kuribas> | ski: a comonad? |
2020-09-17 14:24:59 +0200 | gmt | (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 260 seconds) |
2020-09-17 14:25:02 +0200 | <Unhammer> | so split-sections on windows gives "ld.exe: blah.o: too many sections", "file is too big", when compiling blazehtml |
2020-09-17 14:25:17 +0200 | <Unhammer> | too bad |
2020-09-17 14:25:28 +0200 | <ski> | this `loeb' only requires a functor (and general recursion) |
2020-09-17 14:26:11 +0200 | <Unhammer> | works great on my other project that doesn't need windows though :) 30M → 9.9M |
2020-09-17 14:26:14 +0200 | <ski> | (if you pick `Identity', you get the usual `fix') |
2020-09-17 14:26:34 +0200 | <kuribas> | indeed |
2020-09-17 14:26:36 +0200 | <kuribas> | pretty neat |
2020-09-17 14:26:53 +0200 | xerox_ | (~xerox@unaffiliated/xerox) (Ping timeout: 246 seconds) |
2020-09-17 14:27:00 +0200 | <ski> | so, you can easily chase your own tail, with this `loeb' |
2020-09-17 14:27:32 +0200 | <ski> | but if you only provided access to some other cells, in some well-founded order, say .. |
2020-09-17 14:27:52 +0200 | <ski> | > foldr (\f as -> f as : as) [] (replicate 4 (succ . sum)) |
2020-09-17 14:27:55 +0200 | <lambdabot> | [8,4,2,1] |
2020-09-17 14:27:58 +0200 | <ski> | @type foldr (\f as -> f as : as) [] |
2020-09-17 14:28:00 +0200 | <lambdabot> | Foldable t => t ([a] -> a) -> [a] |
2020-09-17 14:28:24 +0200 | <ski> | in this case, each cell only gets access to the values of the cells after it |
2020-09-17 14:28:39 +0200 | <ski> | and so, it's in some sense "like `fix'", but doesn't get you general recursion |
2020-09-17 14:29:17 +0200 | <kuribas> | ski: but you just showed it is like fix? |
2020-09-17 14:29:22 +0200 | <kuribas> | with Identity |
2020-09-17 14:29:31 +0200 | <ski> | no, that was the `loeb' i just defined, above |
2020-09-17 14:30:17 +0200 | <kuribas> | ah right... |
2020-09-17 14:30:19 +0200 | <ski> | the original Löb's theorem, can be interpreted to be about staged computation, and in that case also doesn't give you general recursion |
2020-09-17 14:30:31 +0200 | <kuribas> | and if instead of cell you take datatype fields... that may work |
2020-09-17 14:30:37 +0200 | <ski> | (also related to quines) |
2020-09-17 14:31:06 +0200 | <ski> | you have to avoid cycles. so you need to pick some well-founded order |
2020-09-17 14:32:49 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core) |
2020-09-17 14:33:05 +0200 | <ski> | (or if you don't, you'd need to ensure that each step is productive. that's my "larger" suggestion from above) |
2020-09-17 14:33:08 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 14:34:02 +0200 | mirrorbird | (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) |
2020-09-17 14:34:43 +0200 | sQVe | (~sQVe@unaffiliated/sqve) |
2020-09-17 14:35:27 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 14:36:12 +0200 | sQVe | (~sQVe@unaffiliated/sqve) (Client Quit) |
2020-09-17 14:36:22 +0200 | wavemode | (~wavemode@097-070-075-143.res.spectrum.com) |
2020-09-17 14:36:46 +0200 | sQVe | (~sQVe@unaffiliated/sqve) |
2020-09-17 14:37:05 +0200 | sQVe | (~sQVe@unaffiliated/sqve) (Client Quit) |
2020-09-17 14:37:31 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) (Quit: I quit (╯°□°)╯︵ ┻━┻) |
2020-09-17 14:38:35 +0200 | george_____t | (5c094cd5@host-92-9-76-213.as43234.net) (Remote host closed the connection) |
2020-09-17 14:40:08 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 14:40:59 +0200 | sQVe | (sQVe@gateway/vpn/mullvad/sqve) |
2020-09-17 14:41:30 +0200 | sQVe | (sQVe@gateway/vpn/mullvad/sqve) (Client Quit) |
2020-09-17 14:41:56 +0200 | fendor_ | (~fendor@t204-126.demo.tuwien.ac.at) |
2020-09-17 14:42:01 +0200 | sQVe | (sQVe@gateway/vpn/mullvad/sqve) |
2020-09-17 14:43:44 +0200 | fendor | (~fendor@e237-037.eduroam.tuwien.ac.at) (Ping timeout: 256 seconds) |
2020-09-17 14:44:03 +0200 | Unhammer | (~Unhammer@gateway/tor-sasl/unhammer) (Ping timeout: 240 seconds) |
2020-09-17 14:44:29 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core) |
2020-09-17 14:44:48 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 14:46:24 +0200 | Aquazi | (uid312403@gateway/web/irccloud.com/x-sjkqhkuufbqwprbm) |
2020-09-17 14:47:17 +0200 | Achylles | (~Achylles@201-27-79-1.dsl.telesp.net.br) |
2020-09-17 14:48:46 +0200 | Unhammer | (~Unhammer@gateway/tor-sasl/unhammer) |
2020-09-17 14:50:32 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core) |
2020-09-17 14:50:53 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 14:52:19 +0200 | akegalj_ | (~akegalj@93-142-93-99.adsl.net.t-com.hr) (Remote host closed the connection) |
2020-09-17 14:52:27 +0200 | ericsagnes | (~ericsagne@2405:6580:0:5100:bce9:b254:2a4:39d4) |
2020-09-17 14:53:14 +0200 | jchia__ | (~jchia@45.32.62.73) |
2020-09-17 14:53:57 +0200 | shatriff | (~vitaliish@176.52.219.10) (Remote host closed the connection) |
2020-09-17 14:54:57 +0200 | jchia__ | (~jchia@45.32.62.73) (Remote host closed the connection) |
2020-09-17 14:55:45 +0200 | jchia__ | (~jchia@58.32.37.220) |
2020-09-17 14:56:15 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 14:57:43 +0200 | ericsagnes | (~ericsagne@2405:6580:0:5100:bce9:b254:2a4:39d4) (Ping timeout: 272 seconds) |
2020-09-17 14:58:00 +0200 | shatriff | (~vitaliish@176.52.219.10) |
2020-09-17 14:58:57 +0200 | sQVe | (sQVe@gateway/vpn/mullvad/sqve) (Quit: Bye!) |
2020-09-17 14:59:04 +0200 | alp_ | (~alp@88.126.45.36) (Ping timeout: 260 seconds) |
2020-09-17 15:00:56 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 15:01:06 +0200 | <exarkun> | Anyone want to recommend a prometheus library (I guess they're "prometheus client" libraries? for publishing metrics)? I see a lot of options out there. |
2020-09-17 15:02:24 +0200 | kritzefitz | (~kritzefit@fw-front.credativ.com) (Remote host closed the connection) |
2020-09-17 15:06:55 +0200 | hyperisco | (~hyperisco@d192-186-117-226.static.comm.cgocable.net) |
2020-09-17 15:11:08 +0200 | <exarkun> | oops no there's only one in my stack resolver so I guess that's easy |
2020-09-17 15:11:39 +0200 | Rudd0 | (~Rudd0@185.189.115.98) (Ping timeout: 260 seconds) |
2020-09-17 15:12:27 +0200 | bicho_rastrero | (~cerdito@154.85-87-39.dynamic.clientes.euskaltel.es) (Remote host closed the connection) |
2020-09-17 15:12:41 +0200 | ALM49 | (7bc007ac@123-192-7-172.dynamic.kbronet.com.tw) (Remote host closed the connection) |
2020-09-17 15:13:40 +0200 | eric_ | (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) |
2020-09-17 15:13:59 +0200 | jedws | (~jedws@101.184.189.58) |
2020-09-17 15:15:43 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) |
2020-09-17 15:16:47 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) |
2020-09-17 15:17:10 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 15:17:14 +0200 | gxt | (~gxt@gateway/tor-sasl/gxt) (Remote host closed the connection) |
2020-09-17 15:17:56 +0200 | gxt | (~gxt@gateway/tor-sasl/gxt) |
2020-09-17 15:18:58 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net) |
2020-09-17 15:20:08 +0200 | Dolly | (585fd1fd@ti0203q160-5312.bb.online.no) (Remote host closed the connection) |
2020-09-17 15:20:19 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) |
2020-09-17 15:21:20 +0200 | ericsagnes | (~ericsagne@2405:6580:0:5100:bce9:b254:2a4:39d4) |
2020-09-17 15:21:54 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 265 seconds) |
2020-09-17 15:22:26 +0200 | da39a3ee5e6b4b0d | (~textual@2403:6200:8876:37d7:b93e:60af:b75b:c0ef) |
2020-09-17 15:24:19 +0200 | xerox_ | (~xerox@unaffiliated/xerox) |
2020-09-17 15:25:52 +0200 | eric__ | (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) |
2020-09-17 15:28:14 +0200 | elliott_ | (~elliott@pool-71-114-77-65.washdc.fios.verizon.net) |
2020-09-17 15:28:59 +0200 | eric_ | (~eric@2804:431:c7d4:b75:19f7:ea85:5be8:4c8e) (Ping timeout: 244 seconds) |
2020-09-17 15:30:26 +0200 | <dminuoso> | exarkun: Both prometheus and prometheus-client are great. |
2020-09-17 15:30:27 +0200 | jedws | (~jedws@101.184.189.58) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-09-17 15:30:30 +0200 | machinedgod | (~machinedg@d67-193-126-196.home3.cgocable.net) |
2020-09-17 15:30:50 +0200 | MaddinSM | (~MaddinSM@185.204.1.185) |
2020-09-17 15:31:03 +0200 | <exarkun> | alright, cool. prometheus-client is what I'm looking at now. thanks. |
2020-09-17 15:31:06 +0200 | <dminuoso> | Overall Id just run with prometheus-client |
2020-09-17 15:31:16 +0200 | s00pcan | (~chris@107.181.165.217) (Ping timeout: 246 seconds) |
2020-09-17 15:31:28 +0200 | <dminuoso> | (It's what we use) |
2020-09-17 15:31:46 +0200 | jedws | (~jedws@101.184.189.58) |
2020-09-17 15:31:47 +0200 | <dminuoso> | It uses a nasty global mutable registry, but oh well. |
2020-09-17 15:32:24 +0200 | <dminuoso> | Just not a big fan of prometheus coming with warp, feels wrong |
2020-09-17 15:32:57 +0200 | hvr_ | (~hvr@haskell/developer/hvr) |
2020-09-17 15:33:17 +0200 | s00pcan | (~chris@075-133-056-178.res.spectrum.com) |
2020-09-17 15:33:18 +0200 | hvr | (~hvr@haskell/developer/hvr) (Ping timeout: 272 seconds) |
2020-09-17 15:36:25 +0200 | hyperisco | (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 240 seconds) |
2020-09-17 15:37:38 +0200 | hyperisco | (~hyperisco@d192-186-117-226.static.comm.cgocable.net) |
2020-09-17 15:38:01 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 15:40:24 +0200 | son0p | (~son0p@181.136.122.143) |
2020-09-17 15:40:54 +0200 | aarvar | (~foewfoiew@50.35.43.33) (Ping timeout: 272 seconds) |
2020-09-17 15:41:27 +0200 | hackage | wai-extra 3.0.31 - Provides some basic WAI handlers and middleware. https://hackage.haskell.org/package/wai-extra-3.0.31 (MichaelSnoyman) |
2020-09-17 15:42:41 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 15:47:18 +0200 | inkbottle | (~inkbottle@aaubervilliers-654-1-114-91.w86-198.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2020-09-17 15:47:22 +0200 | pingiun | (~pingiun@ip-213-124-184-182.ip.prioritytelecom.net) |
2020-09-17 15:47:40 +0200 | inkbottle | (~inkbottle@aaubervilliers-654-1-114-91.w86-198.abo.wanadoo.fr) |
2020-09-17 15:47:57 +0200 | hackage | uniqueness-periods-vector-filters 0.1.0.0 - A library allows to change the structure of the 'RealFrac' function output. https://hackage.haskell.org/package/uniqueness-periods-vector-filters-0.1.0.0 (OleksandrZhabenko) |
2020-09-17 15:47:58 +0200 | ransom | (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) |
2020-09-17 15:50:05 +0200 | bitmagie | (~Thunderbi@200116b80670970060cb385f030853d4.dip.versatel-1u1.de) (Ping timeout: 244 seconds) |
2020-09-17 15:50:41 +0200 | Gerula | (~Gerula@unaffiliated/gerula) (Ping timeout: 244 seconds) |
2020-09-17 15:52:59 +0200 | Gerula | (~Gerula@unaffiliated/gerula) |
2020-09-17 15:54:44 +0200 | ericsagnes | (~ericsagne@2405:6580:0:5100:bce9:b254:2a4:39d4) (Ping timeout: 244 seconds) |
2020-09-17 15:55:10 +0200 | jlamothe | (~jlamothe@dev.jlamothe.net) |
2020-09-17 15:55:53 +0200 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) |
2020-09-17 15:57:15 +0200 | mirrorbird | (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) (Ping timeout: 272 seconds) |
2020-09-17 15:58:55 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 16:00:38 +0200 | mdunnio | (~mdunnio@208.59.170.5) |
2020-09-17 16:03:05 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds) |
2020-09-17 16:05:58 +0200 | mdunnio | (~mdunnio@208.59.170.5) (Remote host closed the connection) |
2020-09-17 16:06:10 +0200 | mdunnio | (~mdunnio@208.59.170.5) |
2020-09-17 16:07:00 +0200 | josh | (~josh@c-67-164-104-206.hsd1.ca.comcast.net) |
2020-09-17 16:08:28 +0200 | tzh | (~tzh@2601:448:c500:5300::ad1c) |
2020-09-17 16:08:59 +0200 | eric__ | (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) (Read error: Connection reset by peer) |
2020-09-17 16:09:10 +0200 | gmt | (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) |
2020-09-17 16:09:35 +0200 | eric | (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) |
2020-09-17 16:10:15 +0200 | finkata | (~dpetrov@83.222.188.39) |
2020-09-17 16:11:20 +0200 | Neuromancer | (~Neuromanc@unaffiliated/neuromancer) (Ping timeout: 256 seconds) |
2020-09-17 16:13:04 +0200 | finkata | (~dpetrov@83.222.188.39) (Remote host closed the connection) |
2020-09-17 16:13:25 +0200 | gmt | (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 240 seconds) |
2020-09-17 16:13:40 +0200 | <ezzieyguywuf> | lol, so turtle is supposed to replace bash? |
2020-09-17 16:14:37 +0200 | finkata | (~dpetrov@83.222.188.39) |
2020-09-17 16:15:37 +0200 | borne | (~fritjof@200116b8641fc4005e981dab12496c3b.dip.versatel-1u1.de) (Ping timeout: 272 seconds) |
2020-09-17 16:16:25 +0200 | <merijn> | ezzieyguywuf: define "supposed" and "replace" :p |
2020-09-17 16:17:17 +0200 | <merijn> | Think of Turtle as a library/framework optimised for making it easier/simpler to write "bash-like scripts" in Haskell |
2020-09-17 16:17:51 +0200 | <ezzieyguywuf> | "supposed" is in "intended" and "replace" as in "use instead of all the time" |
2020-09-17 16:18:24 +0200 | <merijn> | Realistically *nothing* is going to replace bash in the next century |
2020-09-17 16:18:37 +0200 | <merijn> | It's like COBOL, ubiquitous to the point of immortality |
2020-09-17 16:18:44 +0200 | seanvert | (~user@177.84.244.242) |
2020-09-17 16:19:18 +0200 | <merijn> | And nothing seriously aspires to replacing bash (I mean, that might be the wishful thinking marketing some shells throw about, but nobody believes that) |
2020-09-17 16:19:36 +0200 | <merijn> | Not to mention the fact that bash is 2 things, an interactive shell and a scripting language |
2020-09-17 16:19:38 +0200 | <ezzieyguywuf> | i've been using zsh |
2020-09-17 16:19:44 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 16:19:48 +0200 | <ezzieyguywuf> | but since I just installed gentoo on a new laptop, i'm reconsideringb |
2020-09-17 16:20:02 +0200 | <ezzieyguywuf> | b/c I think zsh just makes it easy to do things that you can already do in bash with a little bit of oomph |
2020-09-17 16:20:54 +0200 | <maerwald> | use fish |
2020-09-17 16:21:07 +0200 | <ezzieyguywuf> | 😂 |
2020-09-17 16:21:09 +0200 | Neuromancer | (~Neuromanc@unaffiliated/neuromancer) |
2020-09-17 16:21:12 +0200 | <ezzieyguywuf> | i tried fish for like a minute once |
2020-09-17 16:21:20 +0200 | <maerwald> | I switch to bash occasionally when I need to do serious things |
2020-09-17 16:21:25 +0200 | <merijn> | ezzieyguywuf: So at best turtle is an alternative to one of the two use cases of bash (i.e. shell scripts) |
2020-09-17 16:21:26 +0200 | <yushyin> | have a look at rash, an interactive shell with the power of racket :D |
2020-09-17 16:21:27 +0200 | <maerwald> | but the defaults aregood |
2020-09-17 16:21:27 +0200 | <ezzieyguywuf> | oh you were forrill |
2020-09-17 16:21:42 +0200 | <yushyin> | https://rash-lang.org/ ^^ |
2020-09-17 16:22:06 +0200 | <merijn> | ezzieyguywuf: The one thing bash (and shell) excel at is easily combining different processes together (the "process" library is a bit heavy weight to work with) |
2020-09-17 16:22:28 +0200 | <merijn> | ezzieyguywuf: So turtle tries to make that sort of "multi-process" scripting easier/nicer to do in Haskell |
2020-09-17 16:24:36 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 256 seconds) |
2020-09-17 16:24:37 +0200 | <ezzieyguywuf> | rash looks interesting |
2020-09-17 16:25:18 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) |
2020-09-17 16:25:50 +0200 | <sm[m]> | oil shell might do it |
2020-09-17 16:25:57 +0200 | ski | . o O ( F_{i}shell <http://fishell.sf.net> ) |
2020-09-17 16:26:49 +0200 | <maerwald> | download page is sourceforge, LoL |
2020-09-17 16:27:03 +0200 | Sgeo | (~Sgeo@ool-18b982ad.dyn.optonline.net) |
2020-09-17 16:27:22 +0200 | <ezzieyguywuf> | maerwald: lol, for rash? |
2020-09-17 16:27:37 +0200 | <maerwald> | fishell |
2020-09-17 16:27:55 +0200 | <ezzieyguywuf> | 😂 |
2020-09-17 16:28:11 +0200 | <ezzieyguywuf> | that's weird b/c I just found a github for fish-shell |
2020-09-17 16:28:25 +0200 | mmohammadi98127 | (~mmohammad@5.238.164.128) |
2020-09-17 16:28:57 +0200 | <ski> | not the same thing |
2020-09-17 16:29:05 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) (Read error: Connection reset by peer) |
2020-09-17 16:29:06 +0200 | mmohammadi98127 | mmohammadi9812 |
2020-09-17 16:29:57 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Ping timeout: 244 seconds) |
2020-09-17 16:30:07 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 16:33:03 +0200 | kleisli_ | (~kleisli@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) (Ping timeout: 244 seconds) |
2020-09-17 16:33:30 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net) |
2020-09-17 16:34:06 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) (Ping timeout: 272 seconds) |
2020-09-17 16:34:32 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) |
2020-09-17 16:34:45 +0200 | jneira | (501e65ce@gateway/web/cgi-irc/kiwiirc.com/ip.80.30.101.206) |
2020-09-17 16:35:01 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 264 seconds) |
2020-09-17 16:35:48 +0200 | ddellacosta | (~dd@86.106.121.168) |
2020-09-17 16:37:05 +0200 | shafox | (~shafox@106.51.234.111) (Remote host closed the connection) |
2020-09-17 16:38:12 +0200 | shafox | (~shafox@106.51.234.111) |
2020-09-17 16:38:13 +0200 | TooDifficult | (~TooDiffic@139.59.59.230) (Quit: TooDifficult) |
2020-09-17 16:38:16 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) |
2020-09-17 16:38:47 +0200 | miklcct | (quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.) |
2020-09-17 16:39:43 +0200 | cantstanya | (~chatting@gateway/tor-sasl/cantstanya) (Ping timeout: 240 seconds) |
2020-09-17 16:40:37 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 16:42:17 +0200 | miklcct | (quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7) |
2020-09-17 16:43:44 +0200 | da39a3ee5e6b4b0d | (~textual@2403:6200:8876:37d7:b93e:60af:b75b:c0ef) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-09-17 16:44:28 +0200 | <z0> | > 9 / (1/0) |
2020-09-17 16:44:31 +0200 | <lambdabot> | 0.0 |
2020-09-17 16:44:47 +0200 | shadowdao | (~user@unaffiliated/shadowdaemon) |
2020-09-17 16:44:59 +0200 | <z0> | ^ can someone explain this to me? |
2020-09-17 16:45:07 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 246 seconds) |
2020-09-17 16:45:13 +0200 | cantstanya | (~chatting@gateway/tor-sasl/cantstanya) |
2020-09-17 16:45:22 +0200 | <dolio> | 1/0 is infinity, and 9/infinity = 0. |
2020-09-17 16:46:10 +0200 | <z0> | i get the theory, but how does Haskell do this? |
2020-09-17 16:46:21 +0200 | <dolio> | It's IEEE754 arithmetic. |
2020-09-17 16:46:32 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Remote host closed the connection) |
2020-09-17 16:47:31 +0200 | kuribas | (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection) |
2020-09-17 16:47:53 +0200 | <hyperisco> | so obviously 0*infinity = 9 |
2020-09-17 16:48:22 +0200 | <merijn> | z0: What do you mean by "how does Haskell do this?? |
2020-09-17 16:48:31 +0200 | <merijn> | s/??/"? |
2020-09-17 16:48:38 +0200 | <hyperisco> | > 0 * (1/0) |
2020-09-17 16:48:41 +0200 | <lambdabot> | NaN |
2020-09-17 16:48:58 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) |
2020-09-17 16:48:59 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.) |
2020-09-17 16:49:07 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Remote host closed the connection) |
2020-09-17 16:49:07 +0200 | <merijn> | The answer is, most likely, "the same way C does this" |
2020-09-17 16:49:16 +0200 | <hyperisco> | maybe "NaN" should mean "more than one number" |
2020-09-17 16:49:25 +0200 | <z0> | @type (1/0) |
2020-09-17 16:49:27 +0200 | <lambdabot> | Fractional a => a |
2020-09-17 16:49:34 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) |
2020-09-17 16:49:37 +0200 | <z0> | > 1/0 |
2020-09-17 16:49:40 +0200 | <lambdabot> | Infinity |
2020-09-17 16:49:42 +0200 | <dmwit> | > 9 / (1/0) :: Rational |
2020-09-17 16:49:44 +0200 | <lambdabot> | *Exception: Ratio has zero denominator |
2020-09-17 16:49:46 +0200 | <z0> | @type Infinity |
2020-09-17 16:49:48 +0200 | <lambdabot> | error: |
2020-09-17 16:49:48 +0200 | <lambdabot> | • Data constructor not in scope: Infinity |
2020-09-17 16:49:48 +0200 | <lambdabot> | • Perhaps you meant variable ‘infinity’ (imported from Data.Number.Natural) |
2020-09-17 16:49:49 +0200 | <ski> | > sqrt (-1) |
2020-09-17 16:49:51 +0200 | <lambdabot> | NaN |
2020-09-17 16:49:52 +0200 | <merijn> | z0: Ah, how does it decide the type of a polymorphic expression? |
2020-09-17 16:49:52 +0200 | <ski> | > log (-1) |
2020-09-17 16:49:54 +0200 | <lambdabot> | NaN |
2020-09-17 16:50:05 +0200 | <merijn> | z0: Was that the question? |
2020-09-17 16:50:15 +0200 | <z0> | merijn: that's right |
2020-09-17 16:50:19 +0200 | <hyperisco> | MoreThanOneNumber, NotInRealPlane |
2020-09-17 16:50:34 +0200 | cfricke | (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 2.9) |
2020-09-17 16:50:37 +0200 | <hyperisco> | FILE_NOT_FOUND probably somewhere in the arithmetic |
2020-09-17 16:50:41 +0200 | <dmwit> | z0: It uses defaulting. The default default is (Integer, Double), I think. |
2020-09-17 16:50:41 +0200 | agiza | (2eef7ad3@larka.olf.sgsnet.se) |
2020-09-17 16:50:55 +0200 | <merijn> | z0: Ok, so there's a bunch of rules in the report that define special cases for polymorphic types for Num/Integral and Fractional/etc. |
2020-09-17 16:51:02 +0200 | ski | . o O ( `abs (0/0)' ) |
2020-09-17 16:51:03 +0200 | <z0> | merijn: and what is Infinity treated as a value of type Fractional a => a |
2020-09-17 16:51:18 +0200 | <dmwit> | Infinity is not a value of type Fractional a => a. |
2020-09-17 16:51:24 +0200 | agiza | (2eef7ad3@larka.olf.sgsnet.se) (Remote host closed the connection) |
2020-09-17 16:51:24 +0200 | <dmwit> | It is a value of type Double, and a value of type Float. |
2020-09-17 16:51:25 +0200 | <merijn> | z0: Which basically say "if you've got a polymorphic expression that's Num or Integral, default it to Integer" and "Double" for Fractional |
2020-09-17 16:51:38 +0200 | <dmwit> | > (read "Infinity" :: Double, read "Infinity" :: Rational) |
2020-09-17 16:51:41 +0200 | <lambdabot> | (Infinity,*Exception: Prelude.read: no parse |
2020-09-17 16:51:50 +0200 | <merijn> | z0: This is covered by the "defaulting rules" |
2020-09-17 16:51:54 +0200 | alp_ | (~alp@2a01:e0a:58b:4920:102b:86e3:d072:38a0) |
2020-09-17 16:51:54 +0200 | <hyperisco> | yes, the seldom talked about defaults feature |
2020-09-17 16:52:02 +0200 | <merijn> | z0: If you enable -Wall you should get warnings for defaulting, iirc |
2020-09-17 16:52:10 +0200 | <dolio> | Well, Infinity isn't a valid expression unless you define a data type with a constructor of that name. |
2020-09-17 16:52:19 +0200 | <ski> | (or pattern synonym) |
2020-09-17 16:52:24 +0200 | <dolio> | Yeah, or that. |
2020-09-17 16:52:28 +0200 | <z0> | dolio: i think that's what is confusing me |
2020-09-17 16:52:52 +0200 | bahamas | (~lucian@188.24.181.166) |
2020-09-17 16:52:52 +0200 | bahamas | (~lucian@188.24.181.166) (Changing host) |
2020-09-17 16:52:52 +0200 | bahamas | (~lucian@unaffiliated/bahamas) |
2020-09-17 16:52:53 +0200 | <dolio> | 1/0 is an expression, and what it does depends on the type. |
2020-09-17 16:53:09 +0200 | <merijn> | z0: "(1/0) :: Fractional a => a" gets defaulted to type "Double" and when you compute 1/0 for Double the result is a Double (which happens to have value Infinity) |
2020-09-17 16:53:27 +0200 | <ski> | > 1 / 0 :: Rational |
2020-09-17 16:53:30 +0200 | <lambdabot> | *Exception: Ratio has zero denominator |
2020-09-17 16:53:47 +0200 | <z0> | > ((1/0) :: Double, (1/0) :: Rational, Infinity :: Double, Infinity :: Rational) |
2020-09-17 16:53:48 +0200 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection) |
2020-09-17 16:53:50 +0200 | <lambdabot> | error: |
2020-09-17 16:53:50 +0200 | <lambdabot> | • Data constructor not in scope: Infinity :: Double |
2020-09-17 16:53:50 +0200 | <lambdabot> | • Perhaps you meant variable ‘infinity’ (imported from Data.Number.Natur... |
2020-09-17 16:54:06 +0200 | <z0> | > ((1/0) :: Double, (1/0) :: Rational) |
2020-09-17 16:54:09 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Ping timeout: 244 seconds) |
2020-09-17 16:54:09 +0200 | <lambdabot> | (Infinity,*Exception: Ratio has zero denominator |
2020-09-17 16:54:22 +0200 | <z0> | > (Infinity :: Double) |
2020-09-17 16:54:25 +0200 | <lambdabot> | error: |
2020-09-17 16:54:25 +0200 | <lambdabot> | • Data constructor not in scope: Infinity :: Double |
2020-09-17 16:54:25 +0200 | <lambdabot> | • Perhaps you meant variable ‘infinity’ (imported from Data.Number.Natural) |
2020-09-17 16:54:32 +0200 | <z0> | hum |
2020-09-17 16:54:40 +0200 | <merijn> | z0: Infinity is the string representation of a Double value |
2020-09-17 16:54:48 +0200 | <merijn> | z0: That double value has no literal way to write it |
2020-09-17 16:54:51 +0200 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) |
2020-09-17 16:54:56 +0200 | <z0> | ok i get it. thanks |
2020-09-17 16:55:18 +0200 | <merijn> | I think adding a pattern synonym for Infinity would be good, tbh |
2020-09-17 16:55:31 +0200 | ph88_ | (~ph88@2a02:8109:9e40:2704:85f2:8dce:6e30:a554) (Ping timeout: 272 seconds) |
2020-09-17 16:55:40 +0200 | <z0> | but I also get how it can be a bad idea |
2020-09-17 16:56:09 +0200 | <dmwit> | Perhaps it is not made a pattern synonym because its type is too hard. |
2020-09-17 16:56:24 +0200 | <dmwit> | (Should we add a new class that just has Double and Float as instances just for this?) |
2020-09-17 16:56:29 +0200 | <merijn> | dmwit: Just define it as Double |
2020-09-17 16:56:37 +0200 | <merijn> | let's face it, no one gives a crap about Float |
2020-09-17 16:56:53 +0200 | <merijn> | Boom! |
2020-09-17 16:56:59 +0200 | <dmwit> | Mmm. Machine learning folks default to Float pretty consistently. |
2020-09-17 16:57:00 +0200 | <merijn> | Problem solved with the power of pragmatism! |
2020-09-17 16:57:22 +0200 | <merijn> | dmwit: They do silly stuff like use half-floats to, so that won't work anyway |
2020-09-17 16:57:37 +0200 | <merijn> | dmwit: Also pretty sure machine learning people don't generally care about writing Infinity in their code :p |
2020-09-17 16:58:04 +0200 | <z0> | ...yet |
2020-09-17 16:58:41 +0200 | <dmwit> | Nobody cares about writing Infinity in their code. Boom! Problem solved without even doing any work through pragmatism. |
2020-09-17 16:58:44 +0200 | <merijn> | z0: Anyway, I recommend enabling -Wall and avoiding defaulting :p |
2020-09-17 16:58:47 +0200 | <merijn> | dmwit: I do, though! |
2020-09-17 16:58:53 +0200 | <ski> | % 9 / Infinity |
2020-09-17 16:58:53 +0200 | <yahb> | ski: 0.0 |
2020-09-17 16:59:02 +0200 | <dolio> | Well, you can propose it, and then someone else can run off an invent some kind of IEEE class that must be made to ensure maximal generality. |
2020-09-17 16:59:33 +0200 | <merijn> | dolio: uh-huh, that's why we have the perfect generalised numeric typeclass hierarchy, now, right? ;) |
2020-09-17 16:59:37 +0200 | <dmwit> | Pfft, you do silly stuff like serialization and deserialization, so that won't work anyway |
2020-09-17 17:00:01 +0200 | MaddinSM | (~MaddinSM@185.204.1.185) () |
2020-09-17 17:00:15 +0200 | polyphem | (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) |
2020-09-17 17:00:19 +0200 | cosimone_ | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) |
2020-09-17 17:00:19 +0200 | <hyperisco> | I'll be impressed once we stop treating floats like reals |
2020-09-17 17:00:32 +0200 | <merijn> | hyperisco: Smart people never started :p |
2020-09-17 17:00:40 +0200 | <dolio> | merijn: Just hope that the requirement for the class to be perfect doesn't block your Infinity pattern getting added. :) |
2020-09-17 17:00:45 +0200 | <merijn> | The reals are shit numbers anyway :p |
2020-09-17 17:01:22 +0200 | <merijn> | Like a proper computer scientist I only care about whole numbers...and maybe rationals |
2020-09-17 17:01:31 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 17:01:41 +0200 | <hyperisco> | whole numbers and pairs of whole numbers |
2020-09-17 17:01:51 +0200 | <maerwald> | rationals escalate quickly |
2020-09-17 17:02:15 +0200 | <hyperisco> | π is 22/7 and that's the end of it |
2020-09-17 17:02:34 +0200 | <merijn> | Pi is basically 3 |
2020-09-17 17:02:58 +0200 | <dolio> | Floating point is just bad rationals, though. |
2020-09-17 17:03:16 +0200 | <dminuoso> | Also, why dont we have support for transcedental numbers? :< |
2020-09-17 17:03:34 +0200 | <ski> | how about algebraic numbers, to start with ? |
2020-09-17 17:03:35 +0200 | <merijn> | dmwit: We barely know any of the numbers anyway |
2020-09-17 17:03:43 +0200 | <merijn> | s/dmwit/dminuoso |
2020-09-17 17:04:01 +0200 | <hyperisco> | I just want the imprecision of floats acknowledged by some static analysis |
2020-09-17 17:04:18 +0200 | <merijn> | hyperisco: There's already a whole bunch of that |
2020-09-17 17:04:27 +0200 | <hyperisco> | I don't want floats put into a type class with laws they don't hold |
2020-09-17 17:04:34 +0200 | <merijn> | like http://herbie.uwplse.org/ |
2020-09-17 17:04:38 +0200 | <dmwit> | dminuoso: You might like the cyclotomic package. |
2020-09-17 17:04:47 +0200 | cp- | (~cp-@b157153.ppp.asahi-net.or.jp) (Ping timeout: 240 seconds) |
2020-09-17 17:04:49 +0200 | <merijn> | hyperisco: Which typeclass's laws do they violate? |
2020-09-17 17:05:00 +0200 | <dmwit> | It supports most of the transcendentals that come up in calculations, and doesn't have the observation problems that CReal does. |
2020-09-17 17:05:10 +0200 | <merijn> | I guess Eq, but that's solved once Carter finishes the crusade to abolish value NaN :p |
2020-09-17 17:05:20 +0200 | <dmwit> | ski: You, too. The cyclotomics are a superset of the algebraic numbers. |
2020-09-17 17:05:47 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds) |
2020-09-17 17:06:18 +0200 | <hyperisco> | merijn, associativity for one |
2020-09-17 17:06:38 +0200 | <merijn> | hyperisco: Of what? |
2020-09-17 17:06:53 +0200 | Saukk | (~Saukk@2001:998:dc:4a67:1c59:9bb5:b94c:4) |
2020-09-17 17:06:56 +0200 | <dolio> | Additions and multiplication. |
2020-09-17 17:06:56 +0200 | <hyperisco> | addition, multiplication, but the report has no laws for Num anyways |
2020-09-17 17:07:17 +0200 | da39a3ee5e6b4b0d | (~textual@2403:6200:8876:37d7:b93e:60af:b75b:c0ef) |
2020-09-17 17:08:09 +0200 | <hyperisco> | if we were honest up front it might not be *that bad* in the end |
2020-09-17 17:09:12 +0200 | cp- | (~cp-@b157153.ppp.asahi-net.or.jp) |
2020-09-17 17:09:35 +0200 | cosimone_ | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.) |
2020-09-17 17:09:59 +0200 | machinedgod | (~machinedg@d67-193-126-196.home3.cgocable.net) (Ping timeout: 246 seconds) |
2020-09-17 17:11:12 +0200 | __Joker_ | (~Joker@180.151.105.86) |
2020-09-17 17:11:26 +0200 | <dolio> | I don't know. Doesn't that mostly matter when people use other faulty operations, like equality? |
2020-09-17 17:12:21 +0200 | <merijn> | dolio: Equality is fine, value NaN is bogus >.> |
2020-09-17 17:12:30 +0200 | <dolio> | No, it's not fine. |
2020-09-17 17:12:44 +0200 | raehik | (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net) (Ping timeout: 272 seconds) |
2020-09-17 17:12:47 +0200 | <dolio> | You shouldn't be testing floats for equality, you should be testing that they're "close enough" usually. |
2020-09-17 17:12:49 +0200 | <merijn> | Name one thing faulty about it excluding value NaN |
2020-09-17 17:13:00 +0200 | <merijn> | dolio: I call bullshit |
2020-09-17 17:13:12 +0200 | <merijn> | I frequently need exact equality for floats |
2020-09-17 17:13:30 +0200 | <merijn> | Like "when checking that deterministic computations are in fact deterministic and remain identical" |
2020-09-17 17:14:04 +0200 | <merijn> | equality on floats is a perfectly well-defined and reasonable operation in the absense of value NaN |
2020-09-17 17:14:22 +0200 | <hyperisco> | dolio, equality for floats is much weaker than usual, yes… I think the error bars need to be accounted for |
2020-09-17 17:14:38 +0200 | __Joker | (~Joker@180.151.106.108) (Ping timeout: 272 seconds) |
2020-09-17 17:14:42 +0200 | <dolio> | merijn: You're missing the point. |
2020-09-17 17:14:48 +0200 | unlink__ | (~unlink2@p200300ebcf25bd0068eb9d9c94da2a17.dip0.t-ipconnect.de) |
2020-09-17 17:14:58 +0200 | <hyperisco> | because if you only retain the error-free equalities then you can hardly say enough about floats |
2020-09-17 17:15:07 +0200 | mud | (~mud@unaffiliated/kadoban) (Quit: bye) |
2020-09-17 17:15:15 +0200 | <merijn> | dolio: Which is? |
2020-09-17 17:15:18 +0200 | Neuromancer | (~Neuromanc@unaffiliated/neuromancer) (Read error: Connection reset by peer) |
2020-09-17 17:15:27 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-09-17 17:15:37 +0200 | <ski> | (it would be nice to have `forall x y. x == y == True => x = y' and `forall x y. x == y = False => x =/= y') |
2020-09-17 17:15:51 +0200 | <ski> | (s/== True/= True/) |
2020-09-17 17:16:01 +0200 | <merijn> | ski:Right, which is the case once you elimiante value NaN |
2020-09-17 17:16:22 +0200 | <hyperisco> | so I think probably instead you have to talk about intervals of reals, and then instead of equality you have interval relations |
2020-09-17 17:16:30 +0200 | <merijn> | value NaN is what torpedoes reflexivity |
2020-09-17 17:16:37 +0200 | <hyperisco> | (where actual equality becomes the relation of equality on intervals) |
2020-09-17 17:17:33 +0200 | <hyperisco> | so you can say a < b if the interval of a precedes the interval of b |
2020-09-17 17:17:42 +0200 | <dolio> | Which is that expected algebraic rules hold up to 'approximate equality', so you don't just tell people "addition isn't associative," because it's not the whole story. Part of the story is that exact equality is only reliable for exact sequences of operations, and shouldn't be treated as reliable in general. |
2020-09-17 17:17:50 +0200 | <hyperisco> | precedes or meets |
2020-09-17 17:17:59 +0200 | zaquest | (~notzaques@5.128.210.178) (Read error: Connection reset by peer) |
2020-09-17 17:18:01 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) |
2020-09-17 17:18:12 +0200 | zaquest | (~notzaques@5.128.210.178) |
2020-09-17 17:18:25 +0200 | fendor__ | (~fendor@e237-037.eduroam.tuwien.ac.at) |
2020-09-17 17:18:38 +0200 | <hyperisco> | a float calculation is exact if the interval is expressible as [x,x] for some x, etc |
2020-09-17 17:18:39 +0200 | <ski> | dolio : that's separate from the `NaN' point, though |
2020-09-17 17:18:46 +0200 | <hyperisco> | at least this is the line I would try to go down |
2020-09-17 17:18:46 +0200 | <dolio> | I didn't even bring up NaN. |
2020-09-17 17:18:55 +0200 | <carter> | merijn: did you see the final version of clamp that got merged in last week? It handles NaN in a pretty ncie way |
2020-09-17 17:19:09 +0200 | <carter> | Yeah, agree with dolio , it’s a stance I’ve had myself. |
2020-09-17 17:19:14 +0200 | <ski> | yes. iow you're (mostly) talking about different things |
2020-09-17 17:19:17 +0200 | <merijn> | carter: No, I've been busy learning Fortran >.> |
2020-09-17 17:19:23 +0200 | <dolio> | Yeah, so don't jump into what I'm saying. |
2020-09-17 17:19:48 +0200 | <carter> | dolio: the 1 plus or minus epsilon flavor or approximate equality? |
2020-09-17 17:19:58 +0200 | <hyperisco> | dolio, we can give "approximate equality" a precise meaning though, don't you think? |
2020-09-17 17:20:11 +0200 | <carter> | merijn: is flang the only oss / free compiler for modern FORTRAN? |
2020-09-17 17:20:14 +0200 | <dolio> | I don't know. I don't care enough to actually learn all the details necessary. |
2020-09-17 17:20:19 +0200 | <carter> | hyperisco: ues you can |
2020-09-17 17:20:49 +0200 | <carter> | Basically every operation has a error bound of multiplicative 1 plus or minus epsilon error |
2020-09-17 17:20:51 +0200 | <dolio> | It's just my impression that people who actually work with IEEE heavily espouse this view. |
2020-09-17 17:21:02 +0200 | <merijn> | carter: I dunno? We use gfortran and I am not sure what "modern Fortran" really entails, but I've become really sure that all documentation on Fortran sucks balls :) |
2020-09-17 17:21:06 +0200 | fendor_ | (~fendor@t204-126.demo.tuwien.ac.at) (Ping timeout: 256 seconds) |
2020-09-17 17:21:24 +0200 | <carter> | merijn: apparently you can kinda write sane stuff with new enough FORTRAN |
2020-09-17 17:21:36 +0200 | <hyperisco> | carter, so I suspect my interval analysis is effective |
2020-09-17 17:22:02 +0200 | <carter> | hyperisco: not quite. Interval analysis will always over estimate error |
2020-09-17 17:22:14 +0200 | ubert | (~Thunderbi@178.165.131.132.wireless.dyn.drei.com) (Ping timeout: 272 seconds) |
2020-09-17 17:22:21 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 17:22:21 +0200 | <carter> | Though it’s still useful. |
2020-09-17 17:22:42 +0200 | carlomagno1 | (~cararell@inet-hqmc02-o.oracle.com) (Remote host closed the connection) |
2020-09-17 17:22:49 +0200 | <hyperisco> | how can we be more exact? |
2020-09-17 17:23:13 +0200 | <dolio> | carter: I think people usually would have some defined epislon that their results need. Not necessarily the smallest possible epsilon. |
2020-09-17 17:23:27 +0200 | Sunblaze21 | (~sanjay@116.72.71.64) (Quit: Leaving.) |
2020-09-17 17:23:33 +0200 | <carter> | Absolutely |
2020-09-17 17:23:35 +0200 | <dolio> | Oh, I guess that's what you meant. |
2020-09-17 17:23:45 +0200 | <carter> | But for the computation itself |
2020-09-17 17:23:46 +0200 | ph88_ | (~ph88@2a02:8109:9e40:2704:85f2:8dce:6e30:a554) |
2020-09-17 17:24:06 +0200 | Sunblaze21 | (~sanjay@116.72.71.64) |
2020-09-17 17:24:12 +0200 | <carter> | 333333hyperisco: there’s these pretty powerful but soemtimes annoying ideas called forwards and backwards stability |
2020-09-17 17:24:38 +0200 | <carter> | So one flavor is that your result is a perturbation of the correct answer to the exact input. |
2020-09-17 17:25:02 +0200 | <carter> | The other is that your output is an exact answer to some input that’s a nearby perturbation of your input |
2020-09-17 17:25:42 +0200 | <dmwit> | > 0 == -0 |
2020-09-17 17:25:45 +0200 | <lambdabot> | True |
2020-09-17 17:25:49 +0200 | <dmwit> | > 0 == (-0 :: Double) |
2020-09-17 17:25:49 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) |
2020-09-17 17:25:52 +0200 | <lambdabot> | True |
2020-09-17 17:26:00 +0200 | <dmwit> | merijn: ^ |
2020-09-17 17:26:07 +0200 | <carter> | That’s so you can handle directional limits |
2020-09-17 17:26:11 +0200 | <dmwit> | Torpedoing NaN isn't enough to get ski's property. |
2020-09-17 17:26:26 +0200 | <carter> | What property does he want |
2020-09-17 17:26:35 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 240 seconds) |
2020-09-17 17:26:36 +0200 | <dmwit> | (==) being Leibniz equality, basically. |
2020-09-17 17:26:46 +0200 | <ski> | when it terminates |
2020-09-17 17:26:51 +0200 | <dmwit> | right |
2020-09-17 17:27:17 +0200 | <carter> | I mean, the signed zero thing is so you can talk about left or right limits |
2020-09-17 17:27:28 +0200 | <carter> | Afaik. |
2020-09-17 17:27:39 +0200 | <dmwit> | I think everybody agrees that every decision made in IEEE754 has a justification behind it. |
2020-09-17 17:27:44 +0200 | <carter> | Yeah |
2020-09-17 17:27:48 +0200 | <dolio> | Hahaha. |
2020-09-17 17:27:57 +0200 | <dmwit> | That doesn't mean that at the end of justifying all those decisions you get something with nice properties. |
2020-09-17 17:28:29 +0200 | <carter> | Oh did you read how idris2 proved false because it’s model of equalities for float were wrong? |
2020-09-17 17:28:39 +0200 | <carter> | Apparently same happened to agda before |
2020-09-17 17:28:48 +0200 | <hyperisco> | I figured it was as simple as it is a possible bitfield |
2020-09-17 17:28:50 +0200 | <dolio> | Not surprised. |
2020-09-17 17:28:52 +0200 | sid_cypher | (~quassel@200116b80060a70031488a0eec1b5c23.dip.versatel-1u1.de) |
2020-09-17 17:29:06 +0200 | <carter> | hyperisco: sign in floats? |
2020-09-17 17:29:07 +0200 | <hyperisco> | like with 1's complement |
2020-09-17 17:29:08 +0200 | <dolio> | Agda's is still wrong, I think, but someone is working on it. |
2020-09-17 17:29:09 +0200 | <hyperisco> | yes |
2020-09-17 17:29:13 +0200 | <hyperisco> | well -0 specifically |
2020-09-17 17:29:26 +0200 | <dolio> | I don't know if you can prove false from it, though. It just doesn't make sense. |
2020-09-17 17:29:40 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) |
2020-09-17 17:30:01 +0200 | <dolio> | Like, I think the ordering is just the induced ordering from Double -> Word64. |
2020-09-17 17:30:18 +0200 | <hyperisco> | their other option is to leave that particular bitfield undefined? |
2020-09-17 17:30:36 +0200 | <carter> | dolio: as bit rep ? Or other. I think that’s how the ieee tots order is defined |
2020-09-17 17:30:54 +0200 | <carter> | hyperisco: or make it a quotiented type! |
2020-09-17 17:30:59 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Ping timeout: 272 seconds) |
2020-09-17 17:31:10 +0200 | <carter> | Ideas from hott but for numerical computing formal methods |
2020-09-17 17:31:19 +0200 | <dolio> | carter: Yeah, the bit representation. But it's not correct because Word64 is unsigned. |
2020-09-17 17:31:47 +0200 | <carter> | I thought it was leading bit is sign. Then magnitude. The mantissa ? |
2020-09-17 17:31:48 +0200 | <dolio> | So negative numbers are larger than positive numbers. |
2020-09-17 17:31:54 +0200 | <carter> | Ok fuck that |
2020-09-17 17:31:58 +0200 | <carter> | That’s bad |
2020-09-17 17:32:05 +0200 | Lycurgus | (~niemand@98.4.96.130) |
2020-09-17 17:32:34 +0200 | <carter> | I’ve actually been thinking a lot about how quotient types a la hott or whatever might be amazing for generic programming |
2020-09-17 17:33:07 +0200 | da39a3ee5e6b4b0d | (~textual@2403:6200:8876:37d7:b93e:60af:b75b:c0ef) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-09-17 17:33:31 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 17:34:49 +0200 | <dolio> | Yeah, hopefully that bears some fruit. There are aspects to the HoTT approach to quotients that make it quite different than previous attempts. |
2020-09-17 17:35:19 +0200 | <dolio> | And it seems like it could be capturing useful aspects of computation on quotients. |
2020-09-17 17:35:24 +0200 | <ski> | we're already simulating factor/quotient types (and subset types), via abstract data types |
2020-09-17 17:36:44 +0200 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection) |
2020-09-17 17:36:58 +0200 | <ski> | carter : why/how for generic programming ? |
2020-09-17 17:37:38 +0200 | <carter> | Ski: so an example I’ve been thinking about is sets as data structures. |
2020-09-17 17:38:05 +0200 | <ski> | yes |
2020-09-17 17:38:05 +0200 | lemmih | (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) (Remote host closed the connection) |
2020-09-17 17:38:08 +0200 | <carter> | In general you need element equality and kinda brute force finding the right permutation exists or not for set sequalith |
2020-09-17 17:38:32 +0200 | lemmih | (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) |
2020-09-17 17:38:35 +0200 | <carter> | So the weakest eq proof calc is equality modulo explicit permutation |
2020-09-17 17:38:39 +0200 | <ski> | what kind of implementation/representation do you have in mind there ? some kind of balanced trees ? |
2020-09-17 17:39:20 +0200 | <carter> | If the elements themselves have a total order or a well behaved binary serialization you can skip permutation discovery |
2020-09-17 17:39:22 +0200 | <ski> | or starting from an arbitrary list, considering permutations and elision/introduction of duplicates ? |
2020-09-17 17:39:26 +0200 | <carter> | And keep them sorting |
2020-09-17 17:39:34 +0200 | wroathe | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
2020-09-17 17:39:38 +0200 | <carter> | Sorted |
2020-09-17 17:39:50 +0200 | <carter> | These are different proof / computation strategies for sets |
2020-09-17 17:39:54 +0200 | <carter> | Is my point |
2020-09-17 17:40:02 +0200 | <ski> | yep |
2020-09-17 17:40:10 +0200 | <ski> | it would be nice if they could coexist, perhaps |
2020-09-17 17:40:29 +0200 | <carter> | So they could all be kinda constrained proof constructors for equality sortah |
2020-09-17 17:40:41 +0200 | Lycurgus | (~niemand@98.4.96.130) (Quit: Exeunt) |
2020-09-17 17:40:58 +0200 | <carter> | In hott land, the equality type is sortah like an open data family. Sortah? Dolio sclv am I wrong? |
2020-09-17 17:41:12 +0200 | <ski> | something like that |
2020-09-17 17:41:21 +0200 | <carter> | So you could conceivably annotate the extra proof terms with a priority weight |
2020-09-17 17:41:32 +0200 | <carter> | Or so something like a sibling to deriving via |
2020-09-17 17:41:39 +0200 | <dolio> | Kind of. It's complex. :) |
2020-09-17 17:41:40 +0200 | <carter> | With some preference ordering |
2020-09-17 17:42:10 +0200 | <carter> | In some ways it veers into wanting relational programming In your functional programming |
2020-09-17 17:42:18 +0200 | <ski> | you mean priorities for eq-via-permutation and eq-via-sorting, e.g. ? |
2020-09-17 17:42:37 +0200 | <carter> | Yeah |
2020-09-17 17:42:45 +0200 | <carter> | It’s still a fuzzy idea of mine |
2020-09-17 17:43:02 +0200 | arianvp | (~weechat@arianvp.me) (Quit: WeeChat 2.7.1) |
2020-09-17 17:43:05 +0200 | <ski> | heh, i've recently been thinking about how to construct isomorphisms between types .. and that (in my mind) ties a bit into relational/logic programming |
2020-09-17 17:43:11 +0200 | <dolio> | The interesting thing about quotients in HoTT to me is that the equalities between equal quotient values are computationally relevant. |
2020-09-17 17:43:13 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 17:43:35 +0200 | arianvp | (~weechat@arianvp.me) |
2020-09-17 17:43:44 +0200 | <ski> | yes |
2020-09-17 17:43:47 +0200 | sid_cypher | (~quassel@200116b80060a70031488a0eec1b5c23.dip.versatel-1u1.de) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2020-09-17 17:43:49 +0200 | <carter> | Ski I’ve been way overdue to write down some of my ideas in this space. |
2020-09-17 17:44:04 +0200 | sid_cypher | (~quassel@200116b80060a70031488a0eec1b5c23.dip.versatel-1u1.de) |
2020-09-17 17:44:22 +0200 | DavidEichmann | (~david@43.240.198.146.dyn.plus.net) (Remote host closed the connection) |
2020-09-17 17:44:24 +0200 | <carter> | Plague time plus forcing myself to look into new jobs for a change of pace have eaten into bandwidth. Current job is great. But kinda want a change of pace |
2020-09-17 17:44:30 +0200 | lemmih_ | (~lemmih@58.182.131.25) |
2020-09-17 17:44:34 +0200 | <dolio> | So you can possibly do 'different' things for 'equal' values, but those things are still able to be mediated between by some other computation. |
2020-09-17 17:44:40 +0200 | <ski> | (my "reflective syntax" idea, that i introduced for effectful computations, also seems to fit nicely, with some modifications, to equality proofs, and to computing with such HITs) |
2020-09-17 17:44:43 +0200 | kw | (ac4a6125@cpe-172-74-97-37.nc.res.rr.com) |
2020-09-17 17:44:48 +0200 | DavidEichmann | (~david@43.240.198.146.dyn.plus.net) |
2020-09-17 17:45:01 +0200 | <carter> | Ski how’d you get your logic programming thoughts |
2020-09-17 17:45:41 +0200 | spew | (uid195861@gateway/web/irccloud.com/x-dhwinilivvllyihf) |
2020-09-17 17:46:18 +0200 | kenran | (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 272 seconds) |
2020-09-17 17:46:56 +0200 | lemmih | (~lemmih@2406:3003:2072:44:251c:6ccc:226:e43d) (Ping timeout: 244 seconds) |
2020-09-17 17:47:02 +0200 | <ski> | well. if you e.g. express an isomorphism between `Nat' and `Fin n * Nat', you're expressing a bidirectional translation. that's like a binary predicate (except that you enforce it being functional, in both directions). so the "body" of your definition will effectively come after something corresponding to `:-' in Prolog |
2020-09-17 17:47:19 +0200 | proofofkeags | (~proofofke@174-29-30-112.hlrn.qwest.net) |
2020-09-17 17:47:27 +0200 | <carter> | i'm not super literate at prolog |
2020-09-17 17:47:29 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) |
2020-09-17 17:47:35 +0200 | <carter> | more strict relational plus datalog |
2020-09-17 17:48:03 +0200 | <ski> | `:-' is converse implication `<=', basically. or maybe converse entailment `-|', if you prefer |
2020-09-17 17:48:13 +0200 | <dolio> | Which in some ways makes it "easier" to write functions from quotients. You don't need to decide some canonical representative of each equivalence class and produce an identical result. You just need to show how to mediate between the results when someone presents you with how two values are 'equal'. |
2020-09-17 17:48:44 +0200 | <carter> | dolio: which referent? |
2020-09-17 17:49:29 +0200 | DavidEichmann | (~david@43.240.198.146.dyn.plus.net) (Remote host closed the connection) |
2020-09-17 17:50:23 +0200 | DavidEichmann | (~david@43.240.198.146.dyn.plus.net) |
2020-09-17 17:50:24 +0200 | sid_cypher | (~quassel@200116b80060a70031488a0eec1b5c23.dip.versatel-1u1.de) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2020-09-17 17:50:26 +0200 | <dolio> | Eh? |
2020-09-17 17:50:32 +0200 | fendor | (~fendor@t204-126.demo.tuwien.ac.at) |
2020-09-17 17:50:43 +0200 | kritzefitz | (~kritzefit@212.86.56.80) |
2020-09-17 17:50:59 +0200 | <ski> | carter : i still have to consider more how computations with these isomorphism / type-equality definitions will actually work. but it seems to naturally want to express itself in logic programming terms, to me, when i'm following the way i'm trying to express things |
2020-09-17 17:51:00 +0200 | kritzefitz | (~kritzefit@212.86.56.80) (Client Quit) |
2020-09-17 17:52:00 +0200 | fendor__ | (~fendor@e237-037.eduroam.tuwien.ac.at) (Ping timeout: 272 seconds) |
2020-09-17 17:52:42 +0200 | <carter> | dolio: couldn't figure you which thing you were referrring to ;) |
2020-09-17 17:52:47 +0200 | <carter> | ski: i can totally see that |
2020-09-17 17:52:50 +0200 | bahamas | (~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds) |
2020-09-17 17:52:53 +0200 | <carter> | full linear logic seems relevant to me |
2020-09-17 17:53:01 +0200 | <carter> | cause its a really nice way to think about certain relations |
2020-09-17 17:53:09 +0200 | martin___ | (uid411878@gateway/web/irccloud.com/x-mpsimrgxgomecjvf) |
2020-09-17 17:53:10 +0200 | <dolio> | I've just been rambling, so it's referring to stuff I've said, probably. |
2020-09-17 17:53:39 +0200 | machinedgod | (~machinedg@45.78.189.122) |
2020-09-17 17:53:52 +0200 | <carter> | Fun rambles |
2020-09-17 17:54:15 +0200 | kw | (ac4a6125@cpe-172-74-97-37.nc.res.rr.com) (Ping timeout: 245 seconds) |
2020-09-17 17:54:50 +0200 | <dolio> | It's kind of interesting, really. If you think about the details, it's tying up 'propositions as types' in a really satisfying way. |
2020-09-17 17:54:55 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection) |
2020-09-17 17:55:00 +0200 | hololeap | (~hololeap@unaffiliated/hololeap) (Quit: KVIrc 5.0.1 Aria http://www.kvirc.net/) |
2020-09-17 17:55:22 +0200 | <ski> | carter : .. including also sometimes wanting to be able to use disjunction (not just conjunction), in the body of a rule |
2020-09-17 17:55:32 +0200 | <carter> | which disjunction? |
2020-09-17 17:55:32 +0200 | <dolio> | Because, the 'propositions as types' approach was originally like "well, A + B is used for A ∨ B, and we don't care that the former might have more than one distinct value." |
2020-09-17 17:55:33 +0200 | <carter> | :) |
2020-09-17 17:55:52 +0200 | <carter> | ski have you skimmed mike shulmans linear logic for constructive math? |
2020-09-17 17:56:01 +0200 | <carter> | it kinda touches on this in a really cool way |
2020-09-17 17:56:02 +0200 | <ski> | hm, i think i did, at some point, yes |
2020-09-17 17:56:16 +0200 | <ski> | in what way are you seeing connections to linear logic ? |
2020-09-17 17:56:18 +0200 | <carter> | its a weird paper , but for a conceputal flavor for full linear lgoic |
2020-09-17 17:56:39 +0200 | <carter> | well, the duality structure for *full* linear logic is really good for functional programming / duality / logic programming |
2020-09-17 17:56:40 +0200 | <dolio> | And most attempts to fix that latter part kind of try to make it _not_ have more than one value. |
2020-09-17 17:56:40 +0200 | <carter> | idk |
2020-09-17 17:56:48 +0200 | <carter> | err |
2020-09-17 17:57:00 +0200 | <carter> | poke me about this in a few days, i need to mull how to explain this better |
2020-09-17 17:57:02 +0200 | wgolden | (~wgolden@178.162.204.238) |
2020-09-17 17:57:11 +0200 | acidjnk_new3 | (~acidjnk@p200300d0c736587164f46f145ae9b6a7.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
2020-09-17 17:57:23 +0200 | ski | nods to dolio re functions from quotients |
2020-09-17 17:57:26 +0200 | <dolio> | But the HoTT approach is kind of the opposite. It has more than one value, but there are mediating values between them that make it sort of equivalent to having only one value. |
2020-09-17 17:57:51 +0200 | <ski> | (carter : at least if it's the slides i think it is. link ?) |
2020-09-17 17:58:01 +0200 | <dolio> | More than one value in a strict sense, but not 'up to paths'. |
2020-09-17 17:58:07 +0200 | pera | (~pera@unaffiliated/pera) |
2020-09-17 17:58:14 +0200 | <carter> | https://arxiv.org/abs/1805.07518 ? |
2020-09-17 17:59:04 +0200 | <ski> | hm, i think i didn't see this paper (maybe i saw slides of a presentation of it, not sure) |
2020-09-17 17:59:07 +0200 | <ski> | ty |
2020-09-17 17:59:08 +0200 | zebrag | (~inkbottle@aaubervilliers-654-1-94-225.w86-212.abo.wanadoo.fr) |
2020-09-17 17:59:14 +0200 | inkbottle | (~inkbottle@aaubervilliers-654-1-114-91.w86-198.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
2020-09-17 17:59:45 +0200 | ph88 | (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) |
2020-09-17 18:00:05 +0200 | Maxdamantus | (~Maxdamant@unaffiliated/maxdamantus) (Ping timeout: 240 seconds) |
2020-09-17 18:00:29 +0200 | Rudd0 | (~Rudd0@185.189.115.103) |
2020-09-17 18:00:45 +0200 | ph88_ | (~ph88@2a02:8109:9e40:2704:85f2:8dce:6e30:a554) (Ping timeout: 272 seconds) |
2020-09-17 18:00:52 +0200 | brnzhg[m] | (brnzhgmatr@gateway/shell/matrix.org/x-giqbkbtzwixrtmho) ("Kicked by @appservice-irc:matrix.org : Idle for 30+ days") |
2020-09-17 18:01:57 +0200 | Saukk | (~Saukk@2001:998:dc:4a67:1c59:9bb5:b94c:4) (Remote host closed the connection) |
2020-09-17 18:02:03 +0200 | borne | (~fritjof@200116b8641fc4005e981dab12496c3b.dip.versatel-1u1.de) |
2020-09-17 18:02:13 +0200 | Maxdamantus | (~Maxdamant@unaffiliated/maxdamantus) |
2020-09-17 18:02:22 +0200 | <ski> | carter : "which disjunction?" -- well .. in this case, additive, i suppose you'd say |
2020-09-17 18:02:39 +0200 | <carter> | is that the usual one? |
2020-09-17 18:02:47 +0200 | <ski> | carter : but i've sometimes been pondering how one could program with multiplicative disjunction, as well |
2020-09-17 18:02:49 +0200 | <carter> | the thing is ... the other one is also really nice |
2020-09-17 18:02:52 +0200 | <ski> | the usual constructive one, yes |
2020-09-17 18:03:25 +0200 | <carter> | ski: i have a tiny model of all 4 in haskell code https://github.com/cartazio/symmetric-monoidal/blob/master/src/Control/Monoidal.hs |
2020-09-17 18:03:38 +0200 | <carter> | they are sortah matching pair eliminiators |
2020-09-17 18:03:39 +0200 | <ski> | i have been pondering a pet example, converse of induction on naturals |
2020-09-17 18:03:57 +0200 | <carter> | wait, PAR is the multiplicative one |
2020-09-17 18:03:59 +0200 | <carter> | ddrr |
2020-09-17 18:04:05 +0200 | <carter> | & is the mult product |
2020-09-17 18:04:09 +0200 | <carter> | PAr is the XOR of proofs |
2020-09-17 18:04:30 +0200 | <ski> | XOR ? |
2020-09-17 18:04:40 +0200 | <carter> | yes |
2020-09-17 18:04:47 +0200 | <carter> | multiplicative disjunction is constructive xor |
2020-09-17 18:04:47 +0200 | <ski> | in which sense ? |
2020-09-17 18:04:54 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 256 seconds) |
2020-09-17 18:05:02 +0200 | <carter> | like a real number is zero XOR some signed nonzero distance from zero |
2020-09-17 18:05:10 +0200 | <carter> | proving one rules out the other |
2020-09-17 18:05:13 +0200 | Neuromancer | (~Neuromanc@unaffiliated/neuromancer) |
2020-09-17 18:05:15 +0200 | <carter> | or disproving one implies the other |
2020-09-17 18:05:31 +0200 | <carter> | lets you be more explicit about mutally exclusive facts |
2020-09-17 18:05:38 +0200 | <carter> | which IS COOL |
2020-09-17 18:05:45 +0200 | <ski> | how about `x >= 0 \/ x =< 0', disproving one gives you information for proving the other ? |
2020-09-17 18:05:48 +0200 | <dumptruckman> | Is it normal to have a data type with only a single value constructor or is there some better construct for this? |
2020-09-17 18:05:58 +0200 | <carter> | ski: :P |
2020-09-17 18:06:01 +0200 | <ski> | or `p | a*b => p | a \/ p | b', `p' a prime |
2020-09-17 18:06:19 +0200 | <ski> | (the usual proof starts with "Assume not `p | a'.") |
2020-09-17 18:06:27 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 18:06:41 +0200 | <carter> | ski i think your example isn't quite sound unless you have a != zero assumption |
2020-09-17 18:06:42 +0200 | <dumptruckman> | Once again trying to use Haskell to better understand a problem in Java. However, I'm attempting to learn more about the type system this time. |
2020-09-17 18:06:49 +0200 | <monochrom> | But x>=0 together with x >= 0 \/ x =< 0 does not give you any information about x=<0 |
2020-09-17 18:07:16 +0200 | <carter> | though x > 0 | x <=0 does thave the onely one is true at the same time |
2020-09-17 18:07:27 +0200 | <carter> | ski: you need to have something where the XOR of the propreties is true |
2020-09-17 18:07:33 +0200 | <carter> | Never the ANd |
2020-09-17 18:07:42 +0200 | <carter> | monochrom: how're you? |
2020-09-17 18:07:44 +0200 | <monochrom> | dumptruckman: It is normal. |
2020-09-17 18:07:55 +0200 | <ski> | dumptruckman : sometimes `newtype' is preferable |
2020-09-17 18:08:22 +0200 | <ski> | carter : i don't see why |
2020-09-17 18:08:36 +0200 | <ski> | carter : `a != zero', for the prime example ? |
2020-09-17 18:09:07 +0200 | <carter> | ski: your lack of parens confused me |
2020-09-17 18:09:09 +0200 | <ski> | monochrom : the idea was that refuting one would give you information about the other |
2020-09-17 18:09:19 +0200 | <carter> | *proves the other* |
2020-09-17 18:09:40 +0200 | <carter> | so par is actually a really good model for bijections |
2020-09-17 18:09:53 +0200 | <carter> | because negation could just be producer/consumer polarity |
2020-09-17 18:10:01 +0200 | <carter> | in certain models of the logic |
2020-09-17 18:10:11 +0200 | urdh | (~urdh@unaffiliated/urdh) (Ping timeout: 240 seconds) |
2020-09-17 18:10:19 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) |
2020-09-17 18:11:08 +0200 | <carter> | (gcd(a,b)==1, AND `p' a prime AND p | a*b ) => (p | a) xor (p | b'), |
2020-09-17 18:11:16 +0200 | <carter> | ski: tweaks it |
2020-09-17 18:11:25 +0200 | <carter> | *fixed it |
2020-09-17 18:11:33 +0200 | <carter> | that would you be the property using par |
2020-09-17 18:11:40 +0200 | <dolio> | I think the `A ∨ B` version would probably not be linear. |
2020-09-17 18:11:57 +0200 | <dolio> | You can only do that argument linearly with par. |
2020-09-17 18:12:08 +0200 | <carter> | dolio: yeah, the formal modelling this way is still useful sans linearity |
2020-09-17 18:12:19 +0200 | <carter> | linearity is just how you derive the logic and dualities first |
2020-09-17 18:12:25 +0200 | <carter> | or at least thats my perspective |
2020-09-17 18:12:26 +0200 | <carter> | idk |
2020-09-17 18:12:27 +0200 | <dolio> | Because for additive disjunction you'd be dropping a proof in the case you don't need it. |
2020-09-17 18:12:27 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net) |
2020-09-17 18:12:31 +0200 | <carter> | yup |
2020-09-17 18:12:38 +0200 | <carter> | dolio: sum? |
2020-09-17 18:12:42 +0200 | <dolio> | Right. |
2020-09-17 18:12:45 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) |
2020-09-17 18:13:08 +0200 | <carter> | yeah, |
2020-09-17 18:13:10 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit) |
2020-09-17 18:13:17 +0200 | <dolio> | Also `P \par Q` has aspects where they "can't both be true". |
2020-09-17 18:13:24 +0200 | <carter> | dolio: oh? |
2020-09-17 18:13:31 +0200 | <carter> | i mean, yes |
2020-09-17 18:13:34 +0200 | <carter> | err |
2020-09-17 18:13:39 +0200 | <carter> | dolio: example / explaborate? |
2020-09-17 18:13:47 +0200 | <carter> | have i been wrong for years, AGAIN :) |
2020-09-17 18:14:03 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) |
2020-09-17 18:14:29 +0200 | <carter> | either way i'm happy to continue chatting about this with folks |
2020-09-17 18:14:29 +0200 | urdh | (~urdh@unaffiliated/urdh) |
2020-09-17 18:14:29 +0200 | <dolio> | Well, that's what you'd expect from xor. |
2020-09-17 18:14:33 +0200 | <carter> | oh yeah |
2020-09-17 18:14:42 +0200 | <ski> | carter : yea .. except that one wants to be able to refer to primality, often, without having to make sure / know that the two factors are coprime |
2020-09-17 18:14:45 +0200 | <carter> | if both are true or both are false, xor is fal |
2020-09-17 18:14:52 +0200 | DavidEichmann | (~david@43.240.198.146.dyn.plus.net) (Remote host closed the connection) |
2020-09-17 18:15:00 +0200 | DavidEichmann | (~david@43.240.198.146.dyn.plus.net) |
2020-09-17 18:15:03 +0200 | <carter> | ski: absolutely, i'm just showing |
2020-09-17 18:15:12 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit) |
2020-09-17 18:15:22 +0200 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
2020-09-17 18:15:48 +0200 | <carter> | dolio: you mean that/ |
2020-09-17 18:15:55 +0200 | <dolio> | carter: I don't have examples because I'm still not good at thinking about par. |
2020-09-17 18:16:00 +0200 | <carter> | dolio: i was presupposing you have a proof of a xor b |
2020-09-17 18:16:12 +0200 | <carter> | dolio: you can def prove a xor b false |
2020-09-17 18:16:17 +0200 | <ski> | carter : anyway, i'm not convinced it should model `xor' in some sense. (and i didn't follow the "so par is actually a really good model for bijections" bit, either) |
2020-09-17 18:16:33 +0200 | <carter> | ski: depends on your model of it |
2020-09-17 18:16:34 +0200 | <dolio> | Yeah, proving both would be a way to prove a xor b false. |
2020-09-17 18:16:40 +0200 | <carter> | yup |
2020-09-17 18:16:42 +0200 | <carter> | exactly |
2020-09-17 18:16:50 +0200 | <carter> | or disproving both |
2020-09-17 18:16:59 +0200 | <carter> | ski: i'm aboslutely happy to help explain more |
2020-09-17 18:16:59 +0200 | <ski> | usually, with boolean logic, biimplication would be `xnor', not `xor' |
2020-09-17 18:17:16 +0200 | <ski> | (maybe that's not what you meant by "bijections", though) |
2020-09-17 18:17:23 +0200 | <carter> | ski: for the relational model, negation could just be the direction that info flows |
2020-09-17 18:17:30 +0200 | <carter> | *for bijections |
2020-09-17 18:17:37 +0200 | <carter> | not a consumes an a |
2020-09-17 18:17:41 +0200 | <carter> | a produces an a |
2020-09-17 18:18:03 +0200 | <carter> | i think of A `par` B as ==== (not a -> b) & (not b -> a) |
2020-09-17 18:18:24 +0200 | <ski> | yes, but that image would admit overlap |
2020-09-17 18:18:25 +0200 | <carter> | & === multiplicative conj where you *choose which* field you get |
2020-09-17 18:18:40 +0200 | <carter> | all the session type falvored stuff dropps the symmetries |
2020-09-17 18:18:44 +0200 | <ski> | that would be additive conj. |
2020-09-17 18:18:58 +0200 | <carter> | i get add and mult confused |
2020-09-17 18:19:04 +0200 | <carter> | sum, pair, & and par |
2020-09-17 18:19:23 +0200 | <carter> | i dont really see the metaphor for the additive vs mult binary operators perspective |
2020-09-17 18:19:24 +0200 | <ski> | hm. when i read Wadler's paper on session types and linear logic, i was thinking all connectives were the opposite of what i expected |
2020-09-17 18:19:47 +0200 | <carter> | and i alwasy forget which things are additives vs mult |
2020-09-17 18:19:57 +0200 | <ski> | (iow, replaced by duals, everywhere. or possibly it was just for one of the subsystems described) |
2020-09-17 18:20:20 +0200 | <carter> | i dont like a lott of / most expositions i've seen |
2020-09-17 18:20:45 +0200 | <dolio> | ski: Might depend on how they were being used, I guess. |
2020-09-17 18:20:45 +0200 | <ski> | consider `a * (b + c) = (a * b) + (a * c)' |
2020-09-17 18:20:53 +0200 | <ski> | `*' is multiplicative, `+' is additive |
2020-09-17 18:20:55 +0200 | <dolio> | Inputs vs outputs. |
2020-09-17 18:20:57 +0200 | <ski> | that's how i remember it |
2020-09-17 18:21:45 +0200 | <ski> | dolio : yes, presumably, but it still seemed simpler to me, to just flip all the connectives, then. not upset people's expectations, for what seemed to be no reason |
2020-09-17 18:23:10 +0200 | <ski> | carter : fwiw, i don't like the usual notation for (some of) the connectives .. |
2020-09-17 18:23:16 +0200 | bicho_rastrero | (~cerdito@154.85-87-39.dynamic.clientes.euskaltel.es) |
2020-09-17 18:23:24 +0200 | <dolio> | Which one? :) |
2020-09-17 18:23:24 +0200 | <ski> | .. so, in personal notes, i'm using my own convention :) |
2020-09-17 18:23:31 +0200 | <ski> | yea, there's several |
2020-09-17 18:23:39 +0200 | <ski> | i had Girard's one in mind |
2020-09-17 18:23:58 +0200 | <dolio> | I think both are wrong categorically. |
2020-09-17 18:24:27 +0200 | <ski> | (i reconstructed it from memory, after getting exposed to the ideas. then, after a bit, i noticed my reconstructed version was not the same as in the papers i read) |
2020-09-17 18:24:42 +0200 | <carter> | dolio: which are wrong how? |
2020-09-17 18:25:04 +0200 | <dolio> | carter: Additives are (co)product, but I think neither notation uses * for additve conjunction. |
2020-09-17 18:26:08 +0200 | <dolio> | That would suggest + for additive disjunction, too, but maybe Girard doesn't do that, either. |
2020-09-17 18:26:17 +0200 | <dolio> | It's a circled +? |
2020-09-17 18:26:41 +0200 | <dolio> | I've heard Girard's notation is supposed to remind you of distributive laws. |
2020-09-17 18:26:48 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 18:27:18 +0200 | <carter> | lol |
2020-09-17 18:27:46 +0200 | <dolio> | But I'm not sure that's worth it. |
2020-09-17 18:29:26 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core) |
2020-09-17 18:29:28 +0200 | jedws | (~jedws@101.184.189.58) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2020-09-17 18:29:45 +0200 | <ezzieyguywuf> | so pretty much always just use ghcup rather thn whatever my OS's package manager has, right? |
2020-09-17 18:29:45 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 18:29:57 +0200 | Gurkenglas | (~Gurkengla@unaffiliated/gurkenglas) |
2020-09-17 18:30:10 +0200 | carlomagno | (~cararell@inet-hqmc02-o.oracle.com) |
2020-09-17 18:30:34 +0200 | <maerwald> | ezzieyguywuf: if your OS PM gets it right... then that's also nice |
2020-09-17 18:30:47 +0200 | <ski> | clearly ⌜+⌝ ought to be coproduct ("either","internal choice"), ⌜×⌝ be product ("with","external choice"), ⌜0⌝ be initial object ("void"), ⌜1⌝ be terminal object ("erase"), i thought. that leaves ⌜⊕⌝ for multiplicative disjunction ("par"), ⌜⊗⌝ for multiplicative conjunction, and then i took ⌜⊥⌝ ("bot") and ⌜⊤⌝ ("top","unit") as the respective neutral elements for those |
2020-09-17 18:30:47 +0200 | <dumptruckman> | So... If I wanted to model a game state a Monad would be sensible for this, right? |
2020-09-17 18:31:00 +0200 | <maerwald> | ezzieyguywuf: but ghcup is faster with adding new versions, most likely |
2020-09-17 18:31:17 +0200 | <dolio> | Oh yeah, the units are all mixed up, too. |
2020-09-17 18:31:28 +0200 | <ezzieyguywuf> | maerwald: they did the ghc nicely, they just pulled the binary from upstream, but the cabal install is a mess - I end up having to jump through all these hoops to get the cabal dependencies installed in the PM |
2020-09-17 18:31:56 +0200 | <ezzieyguywuf> | I was planning to just install ghc and cabal from the OS, then cabal install to grab things I need for dev and install the locally |
2020-09-17 18:32:57 +0200 | hackage | uniqueness-periods-vector-filters 0.1.1.0 - A library allows to change the structure of the 'RealFrac' function output. https://hackage.haskell.org/package/uniqueness-periods-vector-filters-0.1.1.0 (OleksandrZhabenko) |
2020-09-17 18:33:17 +0200 | <ski> | yes, Girard uses : ⌜⊕⌝,⌜&⌝,⌜0⌝,⌜⊤⌝ for the additives, and ⌜⅋⌝,⌜⊗⌝,⌜⊥⌝,⌜1⌝ for the multiplicatives |
2020-09-17 18:34:01 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Remote host closed the connection) |
2020-09-17 18:34:25 +0200 | coot | (~coot@37.30.52.181.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2020-09-17 18:34:27 +0200 | <ski> | dumptruckman : monads can be nice for keeping track of state, yes |
2020-09-17 18:35:40 +0200 | <ski> | (oh, forgot to say that mult. conj. is "(both) .. and .."/"tensor") |
2020-09-17 18:38:16 +0200 | coot | (~coot@37.30.52.181.nat.umts.dynamic.t-mobile.pl) |
2020-09-17 18:38:20 +0200 | fendor | (~fendor@t204-126.demo.tuwien.ac.at) (Remote host closed the connection) |
2020-09-17 18:41:30 +0200 | <Uniaika> | phadej: do you think if SqlQQ can be safely extracted from postgresql-simple? I'd like to use it for sqlite too but I'm not familiar with postgresql-simple's internals |
2020-09-17 18:43:08 +0200 | <ezzieyguywuf> | k so really...no definitive answer on OS vs ghcup |
2020-09-17 18:43:09 +0200 | <ski> | dumptruckman : some alternative might perhaps be to try to keep local state, maybe via some kind of stream processors or something (FRP ?) |
2020-09-17 18:43:14 +0200 | LKoen | (~LKoen@81.255.219.130) |
2020-09-17 18:43:17 +0200 | <dumptruckman> | mmk |
2020-09-17 18:43:37 +0200 | <ezzieyguywuf> | any gentoo users in here? |
2020-09-17 18:43:44 +0200 | <dumptruckman> | How would I lift the list out of this to be able to use intersect on an instance of Shares? `data Shares = Shares [Sharable]` |
2020-09-17 18:43:46 +0200 | <maerwald> | ezzieyguywuf: why |
2020-09-17 18:44:00 +0200 | <maerwald> | also: gentoo is not the distro that does get GHC right |
2020-09-17 18:44:12 +0200 | <ski> | dumptruckman : pattern-matching |
2020-09-17 18:44:19 +0200 | <dumptruckman> | what would that look like |
2020-09-17 18:44:28 +0200 | hackage | pusher-http-haskell 2.0.0.1 - Haskell client library for the Pusher Channels HTTP API https://hackage.haskell.org/package/pusher-http-haskell-2.0.0.1 (willsewell) |
2020-09-17 18:44:35 +0200 | <dumptruckman> | do i need to define `intersect :: Shares -> Shares -> Shares`? |
2020-09-17 18:44:38 +0200 | <ski> | intersectShares :: Shares -> Shares -> Shares |
2020-09-17 18:44:39 +0200 | <dumptruckman> | ok |
2020-09-17 18:44:46 +0200 | <monochrom> | "OS vs ghcup" depends on the OS. However, for 90% of OSes, go with ghcup. |
2020-09-17 18:44:52 +0200 | <dumptruckman> | oh, i have to name it differently? |
2020-09-17 18:45:03 +0200 | <ski> | instersectShares (Shares ss0) (Shares ss1) = Shares (intersect ss0 ss1) |
2020-09-17 18:45:15 +0200 | <ski> | depends on whether you import `intersect' qualified |
2020-09-17 18:45:37 +0200 | <dumptruckman> | hmm ok |
2020-09-17 18:45:59 +0200 | geekosaur | (42d52102@66.213.33.2) |
2020-09-17 18:46:47 +0200 | <dumptruckman> | is it silly to use the & operator for this? |
2020-09-17 18:46:53 +0200 | <dumptruckman> | is that even possible? |
2020-09-17 18:46:58 +0200 | <monochrom> | You can. |
2020-09-17 18:47:00 +0200 | <ezzieyguywuf> | maerwald: there's been changes in gentoo rather recently, the haskell situation is lots better |
2020-09-17 18:47:20 +0200 | <ezzieyguywuf> | but I still think I'm going to stick to ghcup - I don't want to have, like, mtl and stuff installed at the system level |
2020-09-17 18:47:30 +0200 | coot | (~coot@37.30.52.181.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2020-09-17 18:47:50 +0200 | <maerwald> | ezzieyguywuf: I'd be surprised, because the gentoo PM cannot handle installing the same package mulitple times |
2020-09-17 18:48:01 +0200 | <maerwald> | which you need for haskell packages |
2020-09-17 18:48:51 +0200 | <maerwald> | The proper way to packages haskell is: only package GHC and cabal and *nothing* else (no haskell packages) |
2020-09-17 18:49:17 +0200 | <ski> | (dumptruckman : btw, in Haskell terminology, you wouldn't talk about "an instance of Shares", but rather about values of (type) `Shares') |
2020-09-17 18:49:20 +0200 | <maerwald> | everything else ends up showing limitations of the package manager with the only exception being nix |
2020-09-17 18:49:32 +0200 | <maerwald> | but then... you know... you'd have to use nix, ugh |
2020-09-17 18:50:18 +0200 | <ezzieyguywuf> | maerwald: it can, it's called "slots" |
2020-09-17 18:50:49 +0200 | <ezzieyguywuf> | maerwald: that's what I wanted to do, but in the current setup, I have separate packages for cabal's dependencies, i.e. mtl, fail, etc. |
2020-09-17 18:51:04 +0200 | <maerwald> | ezzieyguywuf: no, I'm talking about the same version |
2020-09-17 18:51:09 +0200 | <maerwald> | slots don't do that |
2020-09-17 18:51:18 +0200 | <ezzieyguywuf> | also, on a different note - I accidentally ran `ghcup` in `/root` as `myUser`, and it gave me a permission error when it tried to do `cabal new-update` |
2020-09-17 18:51:21 +0200 | <phadej> | Uniaika: https://hackage.haskell.org/package/postgresql-simple-0.6.2/docs/src/Database.PostgreSQL.Simple.Sq… just copy it |
2020-09-17 18:51:27 +0200 | <phadej> | it doesn't really do anything smart |
2020-09-17 18:51:29 +0200 | <dumptruckman> | ski: thanks, i wasn't sure about that |
2020-09-17 18:51:31 +0200 | <ezzieyguywuf> | shouldn't it always dereference my ~ variable, no matter what the current directory is? |
2020-09-17 18:51:53 +0200 | <phadej> | (cliking source on hackage docs pages is the trick, often enough ;) |
2020-09-17 18:51:54 +0200 | <ezzieyguywuf> | maerwald: so there's a need for the same version of the same package to be installed multiple times? |
2020-09-17 18:52:06 +0200 | <maerwald> | ezzieyguywuf: You cannot install filepath-1.2.0.0 for multiple GHC slots on gentoo |
2020-09-17 18:52:21 +0200 | <maerwald> | that's a fact, slots don't solve this |
2020-09-17 18:52:22 +0200 | <maerwald> | nix does |
2020-09-17 18:52:38 +0200 | <ski> | dumptruckman : it's fine, got what you meant. just pointing it out, for more efficient future communication |
2020-09-17 18:53:02 +0200 | <ezzieyguywuf> | neat! is ghcup tui using the boxes thing? |
2020-09-17 18:53:08 +0200 | <ezzieyguywuf> | urm, bricks |
2020-09-17 18:53:16 +0200 | <maerwald> | yes |
2020-09-17 18:53:27 +0200 | <ezzieyguywuf> | 😍 ery cool |
2020-09-17 18:53:33 +0200 | _ks | (~kevin@nyc-0.mil.lat) |
2020-09-17 18:54:04 +0200 | <ezzieyguywuf> | so I want to try using just cabal install of stack. If I want to install xmonad do I just do cabal install xmonad? |
2020-09-17 18:54:25 +0200 | <ezzieyguywuf> | is there a different install command if I want/need to install a package in a 'sandbox' for a particular project? |
2020-09-17 18:54:39 +0200 | <maerwald> | ezzieyguywuf: sandboxes are removed |
2020-09-17 18:54:53 +0200 | <ezzieyguywuf> | so things..."just work"? |
2020-09-17 18:55:17 +0200 | <maerwald> | you can point it to a different store dir to emulate that, but that's more like something you'd do in CI, not on your local machine |
2020-09-17 18:55:36 +0200 | <maerwald> | ezzieyguywuf: https://cabal.readthedocs.io/en/3.4/nix-local-build-overview.html |
2020-09-17 18:55:47 +0200 | nineonine | (~nineonine@216-19-190-182.dyn.novuscom.net) (Remote host closed the connection) |
2020-09-17 18:56:06 +0200 | <sclv> | xmonad is the one tricky thing because it doesn't work out of the box with new-build stuff in terms of its auto-reload on config chang estuff |
2020-09-17 18:56:18 +0200 | <sclv> | there's some writeups of different techniques around the web |
2020-09-17 18:56:37 +0200 | <ezzieyguywuf> | aw man |
2020-09-17 18:56:39 +0200 | <sclv> | but that's now a cabal/new-build problem, its a "xmonad hasn't been updated to deal with new functionality well" problem |
2020-09-17 18:56:58 +0200 | <ezzieyguywuf> | s/now/not/ I assume |
2020-09-17 18:56:59 +0200 | <sclv> | i don't know offhand the "canonical" way to make it work, but i do know there are solutions |
2020-09-17 18:57:03 +0200 | <sclv> | yes, typo |
2020-09-17 18:58:01 +0200 | <ezzieyguywuf> | maerwald: thanks for the link reading now |
2020-09-17 18:58:01 +0200 | <carter> | Ski dolio what makes them multiplicative vs additive? |
2020-09-17 18:58:22 +0200 | <ski> | carter : i'd say, the distributive law(s) |
2020-09-17 18:58:42 +0200 | <dolio> | Multiplicatives are tuple-like, and additives are choice-like. |
2020-09-17 18:58:52 +0200 | <ski> | the replicated connective is multiplicative. the connective it's replicating over is additive |
2020-09-17 18:58:53 +0200 | <sclv> | ezzieyguywuf: here's one xmonad ticket with some discussion on the issue -- using a build-script seems like the right approach but idk https://github.com/xmonad/xmonad/issues/199 |
2020-09-17 18:59:42 +0200 | <zebrag> | If `m` is an applicative, there really are `Int` in `m Int`. And it really puzzles me that it is always so. If it were only a functor it wouldn't be so. I'm wondering where, on the way from functor to applicative, is this property added. |
2020-09-17 18:59:45 +0200 | <dolio> | Multiplicative conjunction values are like pairs of values. Multiplicative disjunction continuations are like pairs of continuations. |
2020-09-17 18:59:57 +0200 | <ski> | yes, additives have to do with choice (internal or external). or information/exformation, if you want. while multiplicatives have to do with aggregation and communication/composition |
2020-09-17 19:00:02 +0200 | <carter> | dolio: ok that makes more sense to me |
2020-09-17 19:00:10 +0200 | <maerwald> | there are two kinds of oss projects: 1. unmaintained, 2. pedantic dictatorship maintained |
2020-09-17 19:00:26 +0200 | <carter> | maerwald: reductive but not false? |
2020-09-17 19:00:31 +0200 | <carter> | well, depends on what maintained means |
2020-09-17 19:00:32 +0200 | <maerwald> | I chose 2. and went with i3 |
2020-09-17 19:00:39 +0200 | <ski> | zebrag : "If `m` is an applicative, there really are `Int` in `m Int`." -- nope |
2020-09-17 19:01:08 +0200 | <carter> | ski: dolio ... but does this flavor of additive vs multiplicative have a formal meaning? |
2020-09-17 19:01:14 +0200 | <Uniaika> | phadej: glorious, thank you! |
2020-09-17 19:01:34 +0200 | <zebrag> | ski: What makes me thing that is that ocaml has some sort of do-notation for applicatives |
2020-09-17 19:01:43 +0200 | <amf> | I'm using sortBy, but I need to order by 2 fields in a specific order, what is the technique? and would this be called a compound sort? (wasnt sure what to google) |
2020-09-17 19:01:43 +0200 | <ski> | carter : .. dunno ? |
2020-09-17 19:01:59 +0200 | <zebrag> | ski: can you give me an example |
2020-09-17 19:02:01 +0200 | <zebrag> | ? |
2020-09-17 19:02:14 +0200 | <ezzieyguywuf> | what about installing, say, hoogle or ghcid |
2020-09-17 19:02:14 +0200 | <ski> | zebrag : okay ? iirc, OCaml also has GADTs, no ? |
2020-09-17 19:02:18 +0200 | <ezzieyguywuf> | just cabal install ghcid? |
2020-09-17 19:02:27 +0200 | <ski> | zebrag : well, `IO' is a canonical example, in Haskell |
2020-09-17 19:02:36 +0200 | qqqqqq | (~Me@185.142.40.143) |
2020-09-17 19:02:39 +0200 | <qqqqqq> | 6 To be happy and lifted from hell and misery, Islam is your Jewel of the seas. Say no God except one(Allah)~ 4 To get blessings thru monotheism, He is the Only creator of heaven & earth. 6 He Designed the Universe 4 with Superb ingenuity. 6Lets praise Allah; 3he is our God, thee one; he is the god of Moses; Noah; Jesus & Mohammed; he sent us our Book 7 Quran, 10Monotheism is cleared by all prophets ~ 6 We get heaven by praying to the one god 6& by Sa |
2020-09-17 19:02:39 +0200 | qqqqqq | (~Me@185.142.40.143) (Killed (Sigyn (Spam is off topic on freenode.))) |
2020-09-17 19:02:49 +0200 | <ski> | zebrag : there is no `String' inside `getLine :: IO String' |
2020-09-17 19:02:55 +0200 | <geekosaur> | amf, combine the comparison operations with <> |
2020-09-17 19:03:48 +0200 | <amf> | geekosaur: doh! yep, that was it, thanks!! |
2020-09-17 19:04:09 +0200 | nineonine | (~nineonine@216.81.48.202) |
2020-09-17 19:04:19 +0200 | <zebrag> | ski: getLine >>= \x -> f? (isn't x substituted for a string along the way?) |
2020-09-17 19:04:43 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 272 seconds) |
2020-09-17 19:05:06 +0200 | <carter> | Oh I see. Cause cause additive zero is void |
2020-09-17 19:05:11 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection) |
2020-09-17 19:05:17 +0200 | <monochrom> | maerwald: What is i3? |
2020-09-17 19:05:26 +0200 | <ski> | zebrag : yes, but `getLine' itself does not contain that `String' |
2020-09-17 19:05:27 +0200 | <ezzieyguywuf> | monochrom: I window manager like xmonad |
2020-09-17 19:05:29 +0200 | wroathe | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 246 seconds) |
2020-09-17 19:05:38 +0200 | <carter> | And that zeros out multiplicative things |
2020-09-17 19:05:40 +0200 | <maerwald> | monochrom: a tiling wm built by a german |
2020-09-17 19:05:48 +0200 | <maerwald> | without window icons |
2020-09-17 19:05:54 +0200 | <dolio> | carter: I'm not sure either. There are differences in the formal stuff, but I'm not sure that qualifies, and I mostly have informal explanations of them. |
2020-09-17 19:06:04 +0200 | <ezzieyguywuf> | maerwald: I don' understand your statement about (1) vs (2) though - you're saying xmonad is unmaintained? |
2020-09-17 19:06:07 +0200 | <monochrom> | I understand now. Was not reading it in context. |
2020-09-17 19:06:17 +0200 | <maerwald> | ezzieyguywuf: yeah :p |
2020-09-17 19:06:25 +0200 | <ezzieyguywuf> | i like i3 and have been using it for years, just considering xmonad b/c i love haskell, lol |
2020-09-17 19:06:26 +0200 | <monochrom> | I went with ghcup for the same reason teeheehee! |
2020-09-17 19:06:31 +0200 | <dolio> | Like, multiplicative stuff involves concatenating contexts, and additive involves sharing them. |
2020-09-17 19:06:34 +0200 | <carter> | Dolio: i think that’s the reason why the distributive law only works that way? |
2020-09-17 19:06:35 +0200 | <maerwald> | well, it's a slim core, so there's not much to maintain? |
2020-09-17 19:06:40 +0200 | <ezzieyguywuf> | monochrom: lol. |
2020-09-17 19:06:45 +0200 | <carter> | Hrmm |
2020-09-17 19:06:53 +0200 | <carter> | I guess that worms |
2020-09-17 19:06:55 +0200 | <ski> | carter : only works which way ? |
2020-09-17 19:06:55 +0200 | <dolio> | That's 'formal', but it doesn't say much. |
2020-09-17 19:06:55 +0200 | <carter> | Works |
2020-09-17 19:07:40 +0200 | <carter> | Hrmm |
2020-09-17 19:07:47 +0200 | <ezzieyguywuf> | worms, lol |
2020-09-17 19:07:58 +0200 | <carter> | I’ll explain after lunch ski |
2020-09-17 19:08:19 +0200 | <geekosaur> | there's plenty of changes to xmonad-contrib, we just don't release very often unless there's a breaking change in ghc (or even more rarely an external library) |
2020-09-17 19:08:20 +0200 | <dolio> | Another informal description is, I think, that additive stuff involves one thing happening among many, while multiplicative stuff involves all things happening. |
2020-09-17 19:08:24 +0200 | <ezzieyguywuf> | btw, `cabal install xmonad` worked once I made sure I had all the non-haskell dependencies avaliable |
2020-09-17 19:08:49 +0200 | ubert | (~Thunderbi@178.165.131.132.wireless.dyn.drei.com) |
2020-09-17 19:08:58 +0200 | <geekosaur> | and yes, the core is kept very minimal and basically never changes except when a new ghc breaks something |
2020-09-17 19:09:01 +0200 | <dolio> | So, like A \par B is a branching construct where all the branches happen, unlike A + B where only one branch happens. |
2020-09-17 19:09:10 +0200 | <carter> | That’s true |
2020-09-17 19:09:12 +0200 | <carter> | Ish |
2020-09-17 19:09:27 +0200 | Lord_of_Life_ | (~Lord@unaffiliated/lord-of-life/x-0885362) |
2020-09-17 19:09:38 +0200 | <ski> | yes |
2020-09-17 19:09:38 +0200 | <carter> | Fork io is kinda a value of type par |
2020-09-17 19:09:47 +0200 | <carter> | If you think In CPS |
2020-09-17 19:09:51 +0200 | <ski> | yes |
2020-09-17 19:10:18 +0200 | <zebrag> | ski: But if, instead of `IO String`, which is a monad, we would have only a functor, then that property of being able to substitute something for a string along the way wouldn't be granted (like if the functor is some constant functor sending every type on the same constant type) |
2020-09-17 19:10:19 +0200 | <sclv> | as a general gripe, i'm tired of people thinking "infrequently updated" means "unmaintained" as opposed to the cases when it can mean "stable, and working, so not being actively worked on" |
2020-09-17 19:10:43 +0200 | <ski> | (but `par :: a -> b -> b' is not, i think) |
2020-09-17 19:11:29 +0200 | <dolio> | carter, ski: That kind of explains why it's related to functions, too. You have two branches: the code in the function, and the code that uses the function's results, and they both happen. |
2020-09-17 19:11:42 +0200 | <ski> | zebrag : (nitpick, `IO' is the monad. not `IO String', and not `getLine') .. we could still substitute something for all zero occurances of `String's |
2020-09-17 19:12:20 +0200 | Lord_of_Life | (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 256 seconds) |
2020-09-17 19:12:28 +0200 | Lord_of_Life_ | Lord_of_Life |
2020-09-17 19:12:33 +0200 | igghibu | (~igghibu@37.120.201.90) |
2020-09-17 19:13:00 +0200 | <ski> | dolio : yes. also explains the `A -> B' being equivalent to `not A (+) B' thing |
2020-09-17 19:13:16 +0200 | <dolio> | Yeah. |
2020-09-17 19:14:45 +0200 | MorrowM | (~max@bzq-110-168-31-106.red.bezeqint.net) |
2020-09-17 19:15:44 +0200 | <ski> | (reminds me of a language (MPD,cf. SR) where, conceptually at least, every function call spawned a thread. depending on how you spawned it, and interacted with it, it could die after delivering back a result message, or persist to receive more messaged along the channel (the name of the function)) |
2020-09-17 19:16:09 +0200 | <zebrag> | ski: (yes, I'm ok with the nitpick, it was only an abuse of language) |
2020-09-17 19:16:50 +0200 | <geekosaur> | sounds like Icon coroutines |
2020-09-17 19:17:31 +0200 | rihards | (~rihards@balticom-142-78-50.balticom.lv) (Quit: rihards) |
2020-09-17 19:17:32 +0200 | knupfer | (~Thunderbi@200116b82cb61c00e890525b81038fc7.dip.versatel-1u1.de) |
2020-09-17 19:17:51 +0200 | rihards | (~rihards@balticom-142-78-50.balticom.lv) |
2020-09-17 19:17:55 +0200 | howdoi | (uid224@gateway/web/irccloud.com/x-nrdufpvhwzpziwxu) |
2020-09-17 19:18:46 +0200 | ephemeron | (~ephemeron@unaffiliated/ephemeron) () |
2020-09-17 19:20:02 +0200 | <ski> | well, i guess in Icon the thread wouldn't continue executing semi-independently, preemptive concurrence |
2020-09-17 19:20:40 +0200 | <ski> | zebrag : but yes, you couldn't "substitute" in the manner that `>>=' does it, if that was what you had in mind |
2020-09-17 19:20:48 +0200 | <geekosaur> | not as normally implemented. I don't know offhand if there's a concurrent Icon |
2020-09-17 19:21:23 +0200 | Saten-san | (~Saten-san@ip-81-11-153-184.dsl.scarlet.be) |
2020-09-17 19:23:54 +0200 | ski | nods |
2020-09-17 19:24:11 +0200 | ransom | (~c4264035@c-73-243-2-10.hsd1.co.comcast.net) (Quit: Textual IRC Client: www.textualapp.com) |
2020-09-17 19:24:11 +0200 | <ski> | (i probably should look into Icon, sometime) |
2020-09-17 19:24:55 +0200 | <dolio> | It doesn't need to be concurrent either, of course. Laziness is a particular choice of which order to process the 'branches that all must happen' in, and call-by-value is another. |
2020-09-17 19:25:56 +0200 | wroathe | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
2020-09-17 19:27:07 +0200 | Lycurgus | (~niemand@98.4.96.130) |
2020-09-17 19:27:08 +0200 | tomsmeding | (~tomsmedin@tomsmeding.com) (Quit: ZNC 1.7.5 - https://znc.in) |
2020-09-17 19:27:36 +0200 | ski | nods |
2020-09-17 19:27:39 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:59f2:1ee3:fe3e:b848) (Remote host closed the connection) |
2020-09-17 19:31:21 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) |
2020-09-17 19:32:31 +0200 | ph88 | (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) (Quit: Leaving) |
2020-09-17 19:32:35 +0200 | alp_ | (~alp@2a01:e0a:58b:4920:102b:86e3:d072:38a0) (Ping timeout: 272 seconds) |
2020-09-17 19:34:59 +0200 | <zebrag> | ski: yes, it is what I had in mind |
2020-09-17 19:36:24 +0200 | <geekosaur> | lazy won't work in the case of icon coroutines because you yield a value to the coroutine (think of it as being connected with a pair of MVars, and yield is putMVar on one followed by takeMVar on the other) |
2020-09-17 19:36:53 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:fcb4:8a4:b249:c1d3) |
2020-09-17 19:36:54 +0200 | <ski> | zebrag : you could still do `fmap even (Const "hello" :: Const String Integer)', though |
2020-09-17 19:37:47 +0200 | <geekosaur> | although there's the degenerate case where what's yielded to the coroutine is the equivalent of Nothing… but then Icon isn't pure so laziness has potential problems |
2020-09-17 19:38:00 +0200 | <ski> | geekosaur : hmm .. i remember i figured out how to make `zipWith' a "good consumer" of both its list parameters, by thinking of it in terms of coroutines |
2020-09-17 19:38:25 +0200 | <dolio> | geekosaur: It won't? The general point is that until one of them blocks, nothing forces an ordering. |
2020-09-17 19:38:45 +0200 | <dolio> | So you can eagerly execute the one that will put, or you can execute the one that will take until it blocks on the take. |
2020-09-17 19:39:01 +0200 | eric | (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) (Remote host closed the connection) |
2020-09-17 19:40:10 +0200 | <dolio> | And it doesn't necessarily matter as long as when something blocks you can go do other stuff to unblock it. |
2020-09-17 19:40:26 +0200 | <monochrom> | I don't want to perpetuate "c :: F Int menas c contains an Int", because it is not always true, and sometimes it is not even wrong. (In what sense does stf :: S -> (S, Int) contains an Int?) But "pure" is one of the big differences between Functor and Applicative. |
2020-09-17 19:40:42 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.) |
2020-09-17 19:41:05 +0200 | eric | (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) |
2020-09-17 19:41:07 +0200 | cosimone | (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) |
2020-09-17 19:41:13 +0200 | eric | (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) (Remote host closed the connection) |
2020-09-17 19:41:27 +0200 | eric | (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) |
2020-09-17 19:41:34 +0200 | dyeplexer | (~lol@unaffiliated/terpin) (Read error: Connection reset by peer) |
2020-09-17 19:41:47 +0200 | eric | (~eric@2804:431:c7d4:b75:d805:ea78:a3e:f89f) (Remote host closed the connection) |
2020-09-17 19:42:01 +0200 | kenran | (~maier@b2b-37-24-119-190.unitymedia.biz) |
2020-09-17 19:42:27 +0200 | <monochrom> | To understand how "pure" is special, I take inspiration from how Moggi uses monads. For his use case, he wants to rule out boring examples like Const, so he adds an extra law that's so strong it implies that "pure" is injective. (Now OK, in his time, there was no applicative, only monad, he would be saying "unit" or "eta" or "mu", I forgot which.) |
2020-09-17 19:42:54 +0200 | <monochrom> | For most useful Applicative instances, pure is indeed injective. |
2020-09-17 19:44:18 +0200 | <monochrom> | Now if pure is injective, if "pure 4" has to be somehow distinguishable from "pure 5", it does mean that your F Int type has to have at least as much information as Int, internally. |
2020-09-17 19:44:43 +0200 | <monochrom> | In Shannon's sense of information. |
2020-09-17 19:46:32 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 19:46:52 +0200 | tomsmeding | (~tomsmedin@2a03:b0c0:0:1010::767:3001) |
2020-09-17 19:47:04 +0200 | bicho_rastrero | (~cerdito@154.85-87-39.dynamic.clientes.euskaltel.es) (Quit: leaving) |
2020-09-17 19:47:16 +0200 | kenran | (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 272 seconds) |
2020-09-17 19:47:22 +0200 | <monochrom> | If you further throw in "pure is a natural transformation from Identity to F", then not just as much information, but also as much structure, i.e., the information is not even all that scrambled up badly. |
2020-09-17 19:47:42 +0200 | <monochrom> | s/throw in/recall/ |
2020-09-17 19:51:37 +0200 | <dolio> | Category theorists might say that whether a value of `Identity Int` contains a value of Int is a nonsense question. |
2020-09-17 19:51:42 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 272 seconds) |
2020-09-17 19:52:20 +0200 | <dolio> | Or, more accurately, it is an evil question. |
2020-09-17 19:52:25 +0200 | <monochrom> | Yeah, at the objects-and-morphisms level, there is not supposed to be "elements". |
2020-09-17 19:53:08 +0200 | finkata | (~dpetrov@83.222.188.39) (Read error: Connection reset by peer) |
2020-09-17 19:53:15 +0200 | <dolio> | Well, you would know it is a functor on sets, or types. |
2020-09-17 19:53:28 +0200 | <dolio> | Which have elements/values. |
2020-09-17 19:54:35 +0200 | <dolio> | But of course, it is also evil to distinguish between Int and other types/sets isomorphic to it. |
2020-09-17 19:54:51 +0200 | juuandyy | (~juuandyy@90.166.144.65) |
2020-09-17 19:55:28 +0200 | <monochrom> | heh |
2020-09-17 19:56:25 +0200 | <monochrom> | Then my joke yesterday about "mathematicians, category theorists, Haskellers" was wrong. |
2020-09-17 19:56:27 +0200 | glguy | hopes dolio doesn't start passing around a collection plate |
2020-09-17 19:57:15 +0200 | <monochrom> | Category theorists should be put on the other side. The joke should go like: Category theorists say: "beware of mathematicians and Haskeller's, they're evil" |
2020-09-17 19:57:31 +0200 | Lycurgus | (~niemand@98.4.96.130) (Quit: Exeunt) |
2020-09-17 19:57:58 +0200 | <monochrom> | St. Augustine was the first category theorist! Change my mind. |
2020-09-17 19:58:18 +0200 | <dolio> | Category theorists aren't so great about not being evil either, really. |
2020-09-17 19:58:26 +0200 | <monochrom> | OK! |
2020-09-17 19:58:31 +0200 | <ski> | "wants to rule out boring examples" :( |
2020-09-17 19:59:02 +0200 | <ski> | ("mu" is for `join'. probably "eta", i'd guess. when / from where did "unit" come to be used ?) |
2020-09-17 19:59:23 +0200 | Kaiepi | (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection) |
2020-09-17 19:59:31 +0200 | alp_ | (~alp@2a01:e0a:58b:4920:98d3:8430:dd:99e) |
2020-09-17 19:59:37 +0200 | <phadej> | eta is unit |
2020-09-17 19:59:46 +0200 | <dumptruckman> | Can I make a typeclass that pulls the first parameter of a value where it's type may have other parameters? |
2020-09-17 20:00:02 +0200 | wgolden | (~wgolden@178.162.204.238) () |
2020-09-17 20:00:04 +0200 | <phadej> | though I forget which way counit/unit in adjunctions are named |
2020-09-17 20:00:08 +0200 | <phadej> | eta/eps there |
2020-09-17 20:00:17 +0200 | <phadej> | need more distinct greek letters |
2020-09-17 20:00:35 +0200 | <dolio> | Unit goes way back to terms from abstract algebra, I imagine. |
2020-09-17 20:00:39 +0200 | <ski> | phadej : the way that makes the monad one the unit |
2020-09-17 20:01:23 +0200 | <ski> | dumptruckman : sorry, i didn't understand that, can you elaborate ? |
2020-09-17 20:01:35 +0200 | <dumptruckman> | like... `class Named a` with a associated function like name :: a -> String |
2020-09-17 20:01:57 +0200 | <dumptruckman> | and it's expected that instances of that type have a String as the first parameter of their values |
2020-09-17 20:02:03 +0200 | <phadej> | ski: makes sense |
2020-09-17 20:02:06 +0200 | <dolio> | Unit being another name for identity element. |
2020-09-17 20:02:14 +0200 | <ski> | what does "the first parameter of their values" mean ? |
2020-09-17 20:02:25 +0200 | <dumptruckman> | data Something = Something String a deriving (Named) |
2020-09-17 20:02:50 +0200 | <dumptruckman> | and so the name function pulls the string out |
2020-09-17 20:02:54 +0200 | <ski> | dolio : hm, yea. it makes sense, with the monoid connections |
2020-09-17 20:03:24 +0200 | <monochrom> | dumptruckman: No. |
2020-09-17 20:03:55 +0200 | <ski> | dumptruckman : if you really want such a type class, you could make it. however, are you going to define any functions that are polymorphic over types that are instances of this type class ? are you going to have more than one instance of the type class |
2020-09-17 20:04:14 +0200 | igghibu | (~igghibu@37.120.201.90) (Ping timeout: 256 seconds) |
2020-09-17 20:04:27 +0200 | <dumptruckman> | yes |
2020-09-17 20:04:46 +0200 | <ski> | what's some example of such polymorphic operations ? |
2020-09-17 20:04:49 +0200 | <dumptruckman> | so I guess each instance would have to define implement name itself? |
2020-09-17 20:04:57 +0200 | <dumptruckman> | s/define/ |
2020-09-17 20:04:59 +0200 | <ski> | yes, that's how instances work |
2020-09-17 20:05:05 +0200 | <dumptruckman> | well yeah.. |
2020-09-17 20:05:07 +0200 | <tomsmeding> | well, like, there's generics |
2020-09-17 20:05:31 +0200 | <dumptruckman> | but like, i don't have to implement anything to use Show for most stuff |
2020-09-17 20:05:42 +0200 | <tomsmeding> | because Show is hard-wired :) |
2020-09-17 20:05:43 +0200 | <dumptruckman> | so it has some kind of default implementation that "just works"? |
2020-09-17 20:05:43 +0200 | <ski> | because `Show' can be derived |
2020-09-17 20:05:55 +0200 | <tomsmeding> | you can use generics to do what you want, I think |
2020-09-17 20:06:02 +0200 | <ski> | (and, usually, should be derived) |
2020-09-17 20:06:03 +0200 | <tomsmeding> | but it's not very pretty |
2020-09-17 20:06:04 +0200 | <geekosaur> | but you must derive it for it to be there |
2020-09-17 20:06:14 +0200 | <dumptruckman> | right |
2020-09-17 20:06:28 +0200 | <dumptruckman> | so i guess it's not an instance of the typeclass if i simply derive that typeclass |
2020-09-17 20:06:55 +0200 | <dumptruckman> | so i suppose i'm wondering if there's a way to do this without making my data types an instance of it |
2020-09-17 20:07:05 +0200 | <monochrom> | Rather, "deriving" is not for arbitrary classes of your own design. |
2020-09-17 20:07:25 +0200 | <tomsmeding> | except for obscure ghc extensions mumble mumble |
2020-09-17 20:07:40 +0200 | eric | (~eric@2804:431:c7d4:b75:69f1:6cfd:8841:8fad) |
2020-09-17 20:07:54 +0200 | <tomsmeding> | but, yes, in vanilla haskell, "deriving" is only for built-in things |
2020-09-17 20:08:42 +0200 | <tomsmeding> | dumptruckman: alternative track: what if you define a type 'data CachedShow a = CachedShow String a' |
2020-09-17 20:08:44 +0200 | <dumptruckman> | ahh |
2020-09-17 20:08:52 +0200 | nyd | (~nyd@unaffiliated/elysian) |
2020-09-17 20:09:17 +0200 | <tomsmeding> | and then define 'data Something a = Something (CachedShow a)' |
2020-09-17 20:09:20 +0200 | <dumptruckman> | ahhh |
2020-09-17 20:09:23 +0200 | <dumptruckman> | that's a good idea |
2020-09-17 20:09:25 +0200 | <tomsmeding> | where that 'a' is whatever you want of course |
2020-09-17 20:09:30 +0200 | <sm[m]> | I got an SDL app working in GHCI by using -fno-ghci-sandbox per https://stackoverflow.com/questions/61842338/creating-an-sdl2-window-inside-ghci . But I'm having trouble getting rid of the window when the app exits. destroyWindow having no effect. Has anyone got this working ? |
2020-09-17 20:09:49 +0200 | <tomsmeding> | then if you say 'instance Show (CachedShow a) where show (CachedShow s _) = s' |
2020-09-17 20:09:57 +0200 | <tomsmeding> | and just use 'deriving (Show)' on Something |
2020-09-17 20:10:14 +0200 | <tomsmeding> | then you get 'Something [whatever that string has]', which is not exactly what you asked, but it's close |
2020-09-17 20:10:31 +0200 | <tomsmeding> | downside is that now there's a CachedShow constructor in between the Something constructor and the contained data |
2020-09-17 20:10:41 +0200 | <dumptruckman> | or i could simply do: `data Name = Name String` `name :: Name -> String` ` name (Name s) = s` `data Something = Something name a b c` |
2020-09-17 20:10:43 +0200 | <dumptruckman> | i think |
2020-09-17 20:10:43 +0200 | <tomsmeding> | but if you're okay with that, this is a very vanilla way of sort-of getting that :) |
2020-09-17 20:11:09 +0200 | <tomsmeding> | well 'Something Name a b c', not 'Something name a b c', but yes |
2020-09-17 20:11:17 +0200 | <dumptruckman> | yes |
2020-09-17 20:11:20 +0200 | <dumptruckman> | that's what i meant |
2020-09-17 20:11:22 +0200 | <tomsmeding> | but then you still need to implement Show for Something yourself |
2020-09-17 20:11:22 +0200 | <dumptruckman> | oh but wait |
2020-09-17 20:11:29 +0200 | <tomsmeding> | so you haven't won anything |
2020-09-17 20:11:32 +0200 | <dumptruckman> | and i'd still have to implement name |
2020-09-17 20:11:40 +0200 | <dumptruckman> | name :: Show -> String |
2020-09-17 20:11:48 +0200 | <dumptruckman> | er, name :: Something -> String |
2020-09-17 20:11:49 +0200 | <ski> | tomsmeding : that would be bad, imho :) |
2020-09-17 20:11:55 +0200 | fendor | (~fendor@77.119.129.27.wireless.dyn.drei.com) |
2020-09-17 20:11:59 +0200 | Gigabitten | (~Somn@ip-99-203-18-60.pools.cgn.spcsdns.net) |
2020-09-17 20:12:01 +0200 | <tomsmeding> | the point of my solution, with wrapping the rest of the Something contents _inside_ that Name, you can just 'deriving (Show)' and it works |
2020-09-17 20:12:18 +0200 | <tomsmeding> | ski: yes you haven't won anything and you've made it more complicated :p |
2020-09-17 20:12:25 +0200 | <tomsmeding> | or are you referring to my CachedShow thing |
2020-09-17 20:12:26 +0200 | <ski> | (imho, that `Show' instance is incorrect) |
2020-09-17 20:12:27 +0200 | <ski> | yes |
2020-09-17 20:12:29 +0200 | eric | (~eric@2804:431:c7d4:b75:69f1:6cfd:8841:8fad) (Ping timeout: 272 seconds) |
2020-09-17 20:12:32 +0200 | <tomsmeding> | sure |
2020-09-17 20:12:41 +0200 | z0 | (~z0@bl15-162-186.dsl.telepac.pt) (Quit: leaving) |
2020-09-17 20:12:43 +0200 | <tomsmeding> | was just trying to satisfy dumptruckman's wishes :p |
2020-09-17 20:12:53 +0200 | <tomsmeding> | but I guess yes, perhaps this shouldn't be Show, dumptruckman |
2020-09-17 20:12:56 +0200 | <ski> | well .. they didn't seem to ask for `name' to be related to `show' |
2020-09-17 20:13:01 +0200 | Gigabitten | (~Somn@ip-99-203-18-60.pools.cgn.spcsdns.net) (Client Quit) |
2020-09-17 20:13:02 +0200 | <tomsmeding> | OW |
2020-09-17 20:13:10 +0200 | <tomsmeding> | my bad |
2020-09-17 20:13:27 +0200 | <tomsmeding> | okay fair point gimme 1min |
2020-09-17 20:14:47 +0200 | <dumptruckman> | yeah, i just have a bunch of different data types that all have a name |
2020-09-17 20:14:57 +0200 | <dumptruckman> | and instead of having a separate name function for each i'd like to just use name |
2020-09-17 20:15:02 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 20:15:37 +0200 | <tomsmeding> | okay so am I allowed to cheat and use GeneralizedNewtypeDeriving |
2020-09-17 20:15:45 +0200 | <monochrom> | Do you really have an algorithm that cannot be written if every type has a separate name function? |
2020-09-17 20:15:46 +0200 | Kaiepi | (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net) |
2020-09-17 20:15:54 +0200 | <dumptruckman> | no |
2020-09-17 20:16:00 +0200 | <dumptruckman> | it's more of a clarity thing i guess |
2020-09-17 20:16:00 +0200 | <monochrom> | Then YAGNI |
2020-09-17 20:16:16 +0200 | livvy | (~livvy@gateway/tor-sasl/livvy) |
2020-09-17 20:16:28 +0200 | <monochrom> | "clarity by overloading names" is in perpetual controversy. |
2020-09-17 20:16:33 +0200 | <dumptruckman> | so i don't have to do `worldName world` `playerName player` `sharableName sharable` etc |
2020-09-17 20:16:54 +0200 | <dumptruckman> | it maybe be a case of YAGNI but at the same time, i'd love to learn how to do this |
2020-09-17 20:17:08 +0200 | <tomsmeding> | dumptruckman: implementation of my wacked idea: https://paste.tomsmeding.com/bSSsxieh |
2020-09-17 20:17:20 +0200 | <tomsmeding> | 1. the newtype is crucial, 2. you need that HasName in between |
2020-09-17 20:17:36 +0200 | <tomsmeding> | if you don't want the HasName, you need to use generics |
2020-09-17 20:17:43 +0200 | <tomsmeding> | or not do this at all :) |
2020-09-17 20:17:46 +0200 | <geekosaur> | this sounds like the kind of record field problem lens packages are designed for |
2020-09-17 20:17:53 +0200 | frdg | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) |
2020-09-17 20:17:58 +0200 | <ski> | dumptruckman : "i just have a bunch of different data types that all have a name","and instead of having a separate name function for each i'd like to just use name" -- that's what i figured possibly was the case :) |
2020-09-17 20:18:24 +0200 | <dumptruckman> | sorry, i should've just said that but it wasn't immediately obvious to myself |
2020-09-17 20:18:24 +0200 | ahmr88 | (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) |
2020-09-17 20:18:37 +0200 | <dumptruckman> | tomsmeding: only thing is the tuple feels weird |
2020-09-17 20:18:40 +0200 | <monochrom> | For learning purpose, just handwrite every instance. You said it, "learning". |
2020-09-17 20:18:48 +0200 | <tomsmeding> | yeah the tuple is "whatever data you want there" |
2020-09-17 20:18:58 +0200 | <tomsmeding> | had to put something :) |
2020-09-17 20:18:59 +0200 | <ski> | dumptruckman : so .. since it seems you don't want to write overloaded polymorphic operations wrt this type class, i'd suggest that it's probably better to not make such a type class |
2020-09-17 20:19:06 +0200 | <tomsmeding> | RT monochrom |
2020-09-17 20:19:13 +0200 | <monochrom> | For thinking purpose, http://www.cs.utoronto.ca/~trebla/CSCC24-2020-Summer/05-haskell-types-2.html#why |
2020-09-17 20:19:19 +0200 | pingiun | (~pingiun@ip-213-124-184-182.ip.prioritytelecom.net) (Quit: Textual IRC Client: www.textualapp.com) |
2020-09-17 20:19:28 +0200 | <dumptruckman> | i'd still like to be able to use the format like `Player { playerName :: String }` |
2020-09-17 20:19:49 +0200 | <dumptruckman> | i tried to do it where each type was like `Player { name :: String }` but it yelled at me |
2020-09-17 20:20:24 +0200 | <dumptruckman> | monochrom: haha nice |
2020-09-17 20:21:32 +0200 | <ski> | monochrom : the law thing is a good point to bring up. perhaps you'd want to add the "have overloaded polymorphic operations defined in terms of methods" point to that, as well ? |
2020-09-17 20:21:53 +0200 | <monochrom> | That's "can be used to build useful general algorithms" |
2020-09-17 20:21:58 +0200 | <ski> | tomsmeding : "RT" ? |
2020-09-17 20:22:01 +0200 | <tomsmeding> | retweet |
2020-09-17 20:22:08 +0200 | <ski> | mhm |
2020-09-17 20:22:12 +0200 | <dolio> | I don't see what's wrong with using type classes to overload something like this. |
2020-09-17 20:22:14 +0200 | <tomsmeding> | except I don't actually use twitter |
2020-09-17 20:22:17 +0200 | <ski> | (so, i guess, "seconded") |
2020-09-17 20:22:18 +0200 | <dolio> | I've done it. |
2020-09-17 20:22:20 +0200 | <tomsmeding> | yes |
2020-09-17 20:23:22 +0200 | __Joker_ | (~Joker@180.151.105.86) (Ping timeout: 272 seconds) |
2020-09-17 20:23:29 +0200 | ski | . o O ( `Default' ) |
2020-09-17 20:23:42 +0200 | Sunblaze21 | (~sanjay@116.72.71.64) () |
2020-09-17 20:24:33 +0200 | <frdg> | I am trying to install a package with stack: https://dpaste.org/6kxx , how do I know what base versions different ghc's have? |
2020-09-17 20:24:47 +0200 | <monochrom> | You can still set the bar lower or higher regarding how much expectation you expect out of your type class. |
2020-09-17 20:25:04 +0200 | bahamas | (~lucian@unaffiliated/bahamas) |
2020-09-17 20:25:35 +0200 | <monochrom> | For example for a field-name type class like HasName, you still have some expectation, even though it's not as high as Ord's. |
2020-09-17 20:25:42 +0200 | acidjnk_new3 | (~acidjnk@p200300d0c736587164f46f145ae9b6a7.dip0.t-ipconnect.de) |
2020-09-17 20:26:12 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 20:27:13 +0200 | <monochrom> | In this case the expectation being "the method X -> String behaves like field projection". |
2020-09-17 20:28:08 +0200 | Sheilong | (uid293653@gateway/web/irccloud.com/x-wnvbbxjsydmfebcp) |
2020-09-17 20:28:09 +0200 | <monochrom> | You can keep it informal like that, or you can go further formalize it. |
2020-09-17 20:28:38 +0200 | <monochrom> | You reckon that it doesn't lead to very powerful algorithms. |
2020-09-17 20:28:58 +0200 | irc_user | (uid423822@gateway/web/irccloud.com/x-rnfyabrjtddmocvm) |
2020-09-17 20:29:14 +0200 | <geekosaur> | (…and then you discover lens) |
2020-09-17 20:30:07 +0200 | tomsmeding | (~tomsmedin@2a03:b0c0:0:1010::767:3001) (Quit: ZNC 1.7.5 - https://znc.in) |
2020-09-17 20:30:08 +0200 | <monochrom> | But lens's potential for powerful algorithms doesn't come from classes like HasName. |
2020-09-17 20:30:29 +0200 | <monochrom> | It comes from being able to pass a lens as a parameter. |
2020-09-17 20:31:10 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 20:31:23 +0200 | <monochrom> | Regarding HasName it's the other way round. The power of lens leads to HasName. HasName leads to not much (apart from what I said), really. |
2020-09-17 20:32:31 +0200 | tomsmeding | (~tomsmedin@2a03:b0c0:0:1010::767:3001) |
2020-09-17 20:33:11 +0200 | <monochrom> | In the case of Default, you have to set the bar pretty low, but it is still not dead zero. |
2020-09-17 20:33:42 +0200 | v0d1ch | (~v0d1ch@cable-178-148-120-241.dynamic.sbb.rs) (Ping timeout: 260 seconds) |
2020-09-17 20:33:43 +0200 | <sm[m]> | frdg: memorise https://wiki.haskell.org/Base_package#Versions or https://www.fosskers.ca/en/blog/base in your browser |
2020-09-17 20:34:01 +0200 | <monochrom> | An expectation is "it's a legal value of your type X, and in a very strong sense: it's also a legal value for all of your functions that take X parameters" |
2020-09-17 20:34:12 +0200 | <dolio> | Just having things like `HasName` is very useful. |
2020-09-17 20:34:35 +0200 | <monochrom> | In some cases you also get to expect the default value is also the identity element of a suitable monoid. |
2020-09-17 20:34:48 +0200 | __Joker | (~Joker@180.151.105.86) |
2020-09-17 20:35:26 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 246 seconds) |
2020-09-17 20:35:26 +0200 | <dolio> | They're more useful when they're lens type stuff than just `X -> String`, but not necessarily because you can pass them as parameters. |
2020-09-17 20:36:15 +0200 | <dolio> | Or, well, they're useful because lenses are more useful than projection functions. |
2020-09-17 20:36:36 +0200 | <dumptruckman> | well how about this... can you explain why `data Player = Player { name :: String }` and `data World = World { name :: String }` can't coexist? |
2020-09-17 20:36:57 +0200 | <geekosaur> | becuase "name" is defined automatcially as a function |
2020-09-17 20:36:58 +0200 | <monochrom> | "name" doubles as a function name. |
2020-09-17 20:37:17 +0200 | <geekosaur> | and it can't simultaneously have type Player -> String and World -> String |
2020-09-17 20:37:22 +0200 | <sm[m]> | frdg: looks like you should use a newer resolver |
2020-09-17 20:37:42 +0200 | dbmikus | (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Remote host closed the connection) |
2020-09-17 20:37:50 +0200 | <dumptruckman> | geekosaur: why not? can't the compiler know which is being called? |
2020-09-17 20:38:06 +0200 | <dolio> | Not in general. |
2020-09-17 20:38:14 +0200 | supercoven | (~Supercove@dsl-hkibng32-54fb54-166.dhcp.inet.fi) (Ping timeout: 256 seconds) |
2020-09-17 20:38:18 +0200 | <geekosaur> | there are arguments about type-directed name resolution on the wiki iirc |
2020-09-17 20:38:39 +0200 | <geekosaur> | it comes up every time this is discussed |
2020-09-17 20:38:43 +0200 | <frdg> | thanks sm[m] |
2020-09-17 20:38:44 +0200 | <monochrom> | The compiler knows if you make it a class method. |
2020-09-17 20:38:47 +0200 | <tomsmeding> | dumptruckman: automatically deriving Named using Generics; please do not do this! :) https://paste.tomsmeding.com/XkbAiiRJ |
2020-09-17 20:38:52 +0200 | <geekosaur> | and the solution is, basically, lens packages which do HasField |
2020-09-17 20:38:53 +0200 | <tomsmeding> | wanted to flex my Generics muscles |
2020-09-17 20:39:20 +0200 | <dolio> | The problem is that TDNR makes very little sense, because type classes are the sensible type for type-directed name resolution, if you ignore the gatekeeping people have been trying to force on you. |
2020-09-17 20:39:39 +0200 | <geekosaur> | (I recommend fclabels or microlens if you do want to play with that; beware of https://ro-che.info/ccc/23) |
2020-09-17 20:39:46 +0200 | __Joker | (~Joker@180.151.105.86) (Ping timeout: 260 seconds) |
2020-09-17 20:41:10 +0200 | stiell | (~stian@fsf/member/stiell) (Ping timeout: 260 seconds) |
2020-09-17 20:41:25 +0200 | knupfer | (~Thunderbi@200116b82cb61c00e890525b81038fc7.dip.versatel-1u1.de) (Ping timeout: 240 seconds) |
2020-09-17 20:41:51 +0200 | <dolio> | You don't need any lens packages to just overload 'name' to apply to a bunch of different types. |
2020-09-17 20:42:05 +0200 | coot | (~coot@37.30.53.120.nat.umts.dynamic.t-mobile.pl) |
2020-09-17 20:42:07 +0200 | <dolio> | If that's really what you want to do. |
2020-09-17 20:42:35 +0200 | <dumptruckman> | neat |
2020-09-17 20:42:43 +0200 | <dumptruckman> | I'll have to read about generics cause that looks crazy |
2020-09-17 20:42:51 +0200 | <tomsmeding> | again, this is killing a musquito with a bazooka :) |
2020-09-17 20:42:52 +0200 | exodrifter | (~exodrifte@cpe-173-172-173-93.tx.res.rr.com) |
2020-09-17 20:42:54 +0200 | <monochrom> | I am not against having HasName. I am against having HasName and ending up not actually using it. |
2020-09-17 20:42:55 +0200 | <dumptruckman> | particularly all the "junk" |
2020-09-17 20:43:25 +0200 | <monochrom> | If you don't have an algorithm of type "HasName t => ... t ..." then you don't need HasName. |
2020-09-17 20:44:01 +0200 | stiell | (~stian@fsf/member/stiell) |
2020-09-17 20:44:03 +0200 | <dolio> | Why? I have overloaded stuff that I don't use generically like that. |
2020-09-17 20:44:19 +0200 | <dolio> | Because I want to write `peek ustk` and `peek bstk`. |
2020-09-17 20:44:21 +0200 | <frdg> | it is not clear to me what a resolver is, and which different one I should choose with stack. |
2020-09-17 20:44:26 +0200 | <dolio> | Where those are different types of stacks. |
2020-09-17 20:44:33 +0200 | <monochrom> | OK, well, even when I'm against it, it is not 100% against, there are exceptions. |
2020-09-17 20:45:09 +0200 | <dolio> | I mean, by definition, if you have the class, you have at least one thing like that. |
2020-09-17 20:45:22 +0200 | <monochrom> | It then comes down to whether overloading the method name improves or impairs clarity. |
2020-09-17 20:45:35 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Ping timeout: 246 seconds) |
2020-09-17 20:46:01 +0200 | <dumptruckman> | I guess I look at SNR with this |
2020-09-17 20:46:42 +0200 | <dumptruckman> | in Java I would have an interface Person with method getPersonName and World with getWorldName, i'd have Person with getName and World with getName because it is less noise |
2020-09-17 20:46:48 +0200 | <monochrom> | No there is no noise here. What you are really looking at is redundancy. |
2020-09-17 20:46:58 +0200 | <dumptruckman> | s/would/wouldn't |
2020-09-17 20:47:09 +0200 | <dumptruckman> | how is that not noise |
2020-09-17 20:47:25 +0200 | <monochrom> | how is that noise instead of redundancy |
2020-09-17 20:47:28 +0200 | <dumptruckman> | redundancy that doesn't aid with readability, impo |
2020-09-17 20:47:30 +0200 | <dumptruckman> | imo* |
2020-09-17 20:47:48 +0200 | <dumptruckman> | it impairs readability by becoming eye strain |
2020-09-17 20:48:16 +0200 | <dumptruckman> | also it may lead you to wonder if they represent similar things |
2020-09-17 20:48:22 +0200 | <dumptruckman> | or if WorldName is something different than PersonNAme |
2020-09-17 20:49:34 +0200 | <exodrifter> | I think "eye strain" is a weak argument? You could install a different color scheme like Solarized. A stronger argument might be "I want to get the name of this entity, and i don't really care what kind of entity it is." |
2020-09-17 20:49:42 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 20:49:48 +0200 | <tomsmeding> | what if you define this Named class, giving a 'name' function, but then concede that Generics is too big a gun, and just hand-implement 'name' for each type you want it for |
2020-09-17 20:50:06 +0200 | <tomsmeding> | 1. you get your noise-less name function, 2. no weird overengineering |
2020-09-17 20:50:08 +0200 | DavidEichmann | (~david@43.240.198.146.dyn.plus.net) (Remote host closed the connection) |
2020-09-17 20:50:23 +0200 | <tomsmeding> | downside is a little boilerplate when you define the type, but IMO that's minor |
2020-09-17 20:50:38 +0200 | <exodrifter> | you'd have to do that in java anyway if you implemented an interface |
2020-09-17 20:50:56 +0200 | <tomsmeding> | indeed :) |
2020-09-17 20:51:08 +0200 | <geekosaur> | you still need some boilerplate even with Generics |
2020-09-17 20:51:17 +0200 | <tomsmeding> | true, but less |
2020-09-17 20:51:59 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 20:52:02 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Client Quit) |
2020-09-17 20:52:02 +0200 | <monochrom> | Like I said, I'm not 100% against it, it depends, there are case-by-case ad hoc judgments to be made. |
2020-09-17 20:52:21 +0200 | <monochrom> | If you rule that the redundancy helps, keep it. If you rule that the redundancy hurts, remove it. |
2020-09-17 20:52:24 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 20:52:58 +0200 | <monochrom> | If you're the sole author and audience, you rule on your own. If you are collaborating with people, you get a consensus. |
2020-09-17 20:54:14 +0200 | <dumptruckman> | Yeah. Good points. I think individual implementations is probably what I'll go with. It's definitely simple and there's only like 3 types |
2020-09-17 20:54:15 +0200 | <monochrom> | But me, having learned how people write explicit types even when types are inferred, how people write pointful code even when it could be pointfree, and most importantly how in both cases the more redundant ways actually help, |
2020-09-17 20:54:22 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 20:54:33 +0200 | <monochrom> | I decided that in general I keep the redundancy. |
2020-09-17 20:54:48 +0200 | <frdg> | I am having trouble figuring out how to just say `stack install --with_ghc=8.6.5 somepackage` |
2020-09-17 20:56:03 +0200 | <geekosaur> | frdg, in general you don't. you say: stack install --with-resolver=<some resolver based on ghc-8.6.5> <somepackage> |
2020-09-17 20:56:25 +0200 | fendor | (~fendor@77.119.129.27.wireless.dyn.drei.com) (Remote host closed the connection) |
2020-09-17 20:56:49 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 20:56:54 +0200 | <geekosaur> | a resolver combines a ghc version with a collection of libraries with versions known to work with each other and that ghc version |
2020-09-17 20:57:29 +0200 | <frdg> | ok. This must be a big difference from cabal? |
2020-09-17 20:57:34 +0200 | petrus | (~petrus@unaffiliated/petrus) |
2020-09-17 20:57:53 +0200 | immae_ | (~immae@static.233.10.9.176.clients.your-server.de) (Quit: WeeChat 2.9) |
2020-09-17 20:58:16 +0200 | immae | (~immae@2a01:4f8:141:53e7::) |
2020-09-17 20:59:08 +0200 | raehik | (~raehik@cpc96984-rdng25-2-0-cust109.15-3.cable.virginm.net) |
2020-09-17 20:59:28 +0200 | <tomsmeding> | in my limited experience with stack, it is _the_ most important difference from cabal |
2020-09-17 21:00:08 +0200 | <tomsmeding> | shoving stuff like "it's a yaml file, not a cabal file (or also a cabal file)" under the ru |
2020-09-17 21:00:08 +0200 | <tomsmeding> | g |
2020-09-17 21:00:28 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:fcb4:8a4:b249:c1d3) (Remote host closed the connection) |
2020-09-17 21:01:01 +0200 | <Boarders> | does anyone know if it is possible with earley to easily have "1 + 2 * 3" parse into all possible disambiguations/bracketings? |
2020-09-17 21:01:23 +0200 | wroathe_ | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-09-17 21:01:34 +0200 | <phadej> | doesn't it give you all parsing by default if you specify ambiguous grammar |
2020-09-17 21:01:39 +0200 | wroathe | (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 21:01:47 +0200 | <Boarders> | I thought so yes, I haven't used it before |
2020-09-17 21:01:59 +0200 | <monochrom> | I don't know earley, but I know that if a parser supports ambiguous grammars, then "E ::= E + E | E * E | Literal" ought to do. |
2020-09-17 21:02:06 +0200 | Saten-san | (~Saten-san@ip-81-11-153-184.dsl.scarlet.be) (Quit: WeeChat 2.8) |
2020-09-17 21:02:21 +0200 | <Boarders> | monochrom: not helpful |
2020-09-17 21:02:34 +0200 | <monochrom> | Fine |
2020-09-17 21:02:56 +0200 | <monochrom> | I'm done with askers playing adjudicators and playing GOd. |
2020-09-17 21:03:14 +0200 | <Boarders> | sounds good |
2020-09-17 21:03:16 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 272 seconds) |
2020-09-17 21:03:36 +0200 | alp | (~alp@2a01:e0a:58b:4920:10b8:e9e6:f1db:edd0) |
2020-09-17 21:03:40 +0200 | <phadej> | using Earley is not much more different than parsec. https://github.com/ollef/Earley/blob/master/examples/Expr.hs |
2020-09-17 21:03:47 +0200 | alp_ | (~alp@2a01:e0a:58b:4920:98d3:8430:dd:99e) (Ping timeout: 272 seconds) |
2020-09-17 21:03:49 +0200 | <phadej> | not hard to find examples either. |
2020-09-17 21:04:03 +0200 | fendor | (~fendor@77.119.129.27.wireless.dyn.drei.com) |
2020-09-17 21:04:10 +0200 | <phadej> | (that example is in README, fwiw) |
2020-09-17 21:04:44 +0200 | <Boarders> | yeah, I don't know how that example can be made ambiguous |
2020-09-17 21:06:22 +0200 | wroathe_ | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 21:06:50 +0200 | Rudd0 | (~Rudd0@185.189.115.103) (Ping timeout: 260 seconds) |
2020-09-17 21:08:01 +0200 | bennofs | (~quassel@dslb-188-103-036-188.188.103.pools.vodafone-ip.de) (Ping timeout: 264 seconds) |
2020-09-17 21:08:07 +0200 | <sm[m]> | frdg: https://www.stackage.org shows which resolvers to pick for desired ghc versions |
2020-09-17 21:08:14 +0200 | <dolio> | What happens if you make it into one binding, like `x <- rule $ Add <$> x <* namedToken "+" <*> x <|> Mul <$> x ...`? |
2020-09-17 21:08:29 +0200 | bennofs | (~quassel@dslb-188-106-228-057.188.106.pools.vodafone-ip.de) |
2020-09-17 21:10:34 +0200 | <frdg> | sm[m]: I struggle with stack. I know that I want to use the lts-14.27 resolver. I cannot say `stack install --with-resolver=lts-14.27 somepackage` |
2020-09-17 21:11:25 +0200 | <sm[m]> | it's stack install --resolver=lts-14.27 somepackage[-VERSION] |
2020-09-17 21:11:30 +0200 | eric | (~eric@2804:431:c7d4:402a:8db3:9561:773:fb8e) |
2020-09-17 21:11:45 +0200 | <sm[m]> | if somepackage is not in lts-14.27 but only in hackage, then you need to add -VERSION |
2020-09-17 21:12:15 +0200 | <frdg> | thank you |
2020-09-17 21:12:33 +0200 | <sm[m]> | (because stack's raison d'etre is reproducible builds, so one way or another all versions must be specified) |
2020-09-17 21:12:47 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 21:13:59 +0200 | <sm[m]> | also, if not only somepackage but some of its deps are not in the stackage snapshot, specify those on the command line too (if there's not too many) |
2020-09-17 21:17:05 +0200 | stiell | (~stian@fsf/member/stiell) (Ping timeout: 272 seconds) |
2020-09-17 21:17:34 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 21:17:54 +0200 | <frdg> | after installing about 140 packages, right at the end I get this error: https://dpaste.org/rkw3 |
2020-09-17 21:18:55 +0200 | <sm[m]> | that looks like a keter bug then, it probably doesn't have correct bounds |
2020-09-17 21:19:23 +0200 | <sm[m]> | stack guarantees a valid build plan with all bounds satisfied, but it doesn't guarantee all the packages compile |
2020-09-17 21:20:17 +0200 | <frdg> | ill try a different resolver |
2020-09-17 21:20:19 +0200 | <sm[m]> | a typical next move is to check keter's issue tracker or maybe search for the error |
2020-09-17 21:20:33 +0200 | <phadej> | thy find a snapshot which has keter |
2020-09-17 21:20:42 +0200 | <phadej> | it's one of the sad packages |
2020-09-17 21:20:51 +0200 | <phadej> | https://matrix.hackage.haskell.org/#/package/keter |
2020-09-17 21:20:59 +0200 | stiell | (~stian@fsf/member/stiell) |
2020-09-17 21:21:21 +0200 | <sm[m]> | https://github.com/snoyberg/keter/issues/207 |
2020-09-17 21:22:45 +0200 | <frdg> | hmm. To be honest I dont understand stack at all. |
2020-09-17 21:23:16 +0200 | <frdg> | Ill try cabal |
2020-09-17 21:23:49 +0200 | <phadej> | you'll get similar-ish failure :) |
2020-09-17 21:24:19 +0200 | <frdg> | is all lost with keter? |
2020-09-17 21:24:29 +0200 | <sm[m]> | if you have a look around the issue tracker you'll see lots of such issues. https://github.com/snoyberg/keter/issues/201 has some folks that might help, and maybe a newer branch |
2020-09-17 21:24:46 +0200 | <frdg> | ok thanks for the help |
2020-09-17 21:25:33 +0200 | <dolio> | Boarders: https://paste.tomsmeding.com/eFARmyei |
2020-09-17 21:25:44 +0200 | <phadej> | you need process <1.6 |
2020-09-17 21:26:18 +0200 | <phadej> | which means using GHC-8.0 |
2020-09-17 21:26:26 +0200 | <phadej> | OR downgrading process library |
2020-09-17 21:26:34 +0200 | <phadej> | which is probably not a good idea |
2020-09-17 21:26:54 +0200 | <phadej> | but might work too |
2020-09-17 21:27:11 +0200 | nyd | (~nyd@unaffiliated/elysian) (Quit: nyd) |
2020-09-17 21:27:13 +0200 | <phadej> | cabal install keter --constraint='process<1.6' |
2020-09-17 21:27:50 +0200 | <frdg> | Do any other libraries do what keter does? |
2020-09-17 21:28:02 +0200 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) |
2020-09-17 21:28:10 +0200 | juuandyy | (~juuandyy@90.166.144.65) (Quit: Konversation terminated!) |
2020-09-17 21:28:17 +0200 | AlterEgo- | (~ladew@124-198-158-163.dynamic.caiway.nl) (Quit: Leaving) |
2020-09-17 21:28:54 +0200 | <phadej> | I guess what keter does is handled by modern infrastructure for you |
2020-09-17 21:29:09 +0200 | Tops2 | (~Tobias@dyndsl-095-033-091-070.ewe-ip-backbone.de) |
2020-09-17 21:29:23 +0200 | notzmv` | (~user@177.103.86.92) |
2020-09-17 21:29:24 +0200 | petrus | (~petrus@unaffiliated/petrus) (Read error: Connection reset by peer) |
2020-09-17 21:29:41 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-09-17 21:30:05 +0200 | petrus | (~petrus@unaffiliated/petrus) |
2020-09-17 21:30:38 +0200 | notzmv | (~user@unaffiliated/zmv) (Ping timeout: 260 seconds) |
2020-09-17 21:30:56 +0200 | davidfischer | (~davidfisc@193.56.252.210) |
2020-09-17 21:31:25 +0200 | <frdg> | I have a Yesod web-app that I am ready to deploy. |
2020-09-17 21:32:58 +0200 | <frdg> | I am just going by the yesod documentation which reccomends using keter, but it seems that there are other options. I do not know the tradeoffs. |
2020-09-17 21:33:25 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core) |
2020-09-17 21:33:33 +0200 | Tops21 | (~Tobias@dyndsl-095-033-091-070.ewe-ip-backbone.de) (Ping timeout: 272 seconds) |
2020-09-17 21:33:37 +0200 | petrus | (~petrus@unaffiliated/petrus) (Client Quit) |
2020-09-17 21:33:43 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 21:33:45 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 21:33:52 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 21:34:30 +0200 | notzmv` | notzmv |
2020-09-17 21:34:40 +0200 | notzmv | (~user@177.103.86.92) (Changing host) |
2020-09-17 21:34:40 +0200 | notzmv | (~user@unaffiliated/zmv) |
2020-09-17 21:34:56 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 21:35:08 +0200 | <sm[m]> | frdg: IIRC keter helps minimise downtime and dropped requests while upgrading. If you're fine with just installing the new binary and restarting your app, you don't need keter |
2020-09-17 21:35:51 +0200 | <frdg> | sm[m]: Yes I am fine with that. |
2020-09-17 21:35:58 +0200 | <sm[m]> | where are you deploying ? if it has systemd, that's a way to keep your app running |
2020-09-17 21:36:27 +0200 | <sm[m]> | or you can just run it yourself in a shell session made persistent by dtach or screen |
2020-09-17 21:36:28 +0200 | <frdg> | I would like to run it from my laptop running opensuse |
2020-09-17 21:36:32 +0200 | geekosaur | considers that if it hasn't been updated since ghc-8.0 then it must not be used very much |
2020-09-17 21:36:38 +0200 | ahmr88 | (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Read error: Connection reset by peer) |
2020-09-17 21:37:03 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Client Quit) |
2020-09-17 21:37:05 +0200 | finkata | (~dpetrov@83.222.188.39) |
2020-09-17 21:37:12 +0200 | knupfer | (~Thunderbi@mue-88-130-61-060.dsl.tropolys.de) |
2020-09-17 21:37:13 +0200 | <sm[m]> | frdg: so.. just run it then ? Am I missing something |
2020-09-17 21:37:24 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 21:37:27 +0200 | ahmr88 | (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) |
2020-09-17 21:38:00 +0200 | <frdg> | well that is what I have been doing...but that only runs on localhost. |
2020-09-17 21:38:24 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 260 seconds) |
2020-09-17 21:38:24 +0200 | <sm[m]> | for others to access it, you'll run it on a server, like a VPS, right ? |
2020-09-17 21:38:34 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 21:38:46 +0200 | <frdg> | oh I have to use a vps? |
2020-09-17 21:38:53 +0200 | <frdg> | I wanted to just use my computer. |
2020-09-17 21:39:35 +0200 | geekosaur | (42d52102@66.213.33.2) (Remote host closed the connection) |
2020-09-17 21:39:49 +0200 | <sm[m]> | are you wanting other people to access it ? |
2020-09-17 21:39:51 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2020-09-17 21:39:52 +0200 | <frdg> | yes |
2020-09-17 21:40:24 +0200 | <sm[m]> | while it's running on your laptop, and while your laptop is connected ? that's possible, but not easy and not usual |
2020-09-17 21:40:31 +0200 | bahamas | (~lucian@unaffiliated/bahamas) (Ping timeout: 272 seconds) |
2020-09-17 21:41:01 +0200 | geekosaur | (42d52102@66.213.33.2) |
2020-09-17 21:41:07 +0200 | <frdg> | oh really |
2020-09-17 21:41:23 +0200 | <koz_> | If statistical profiling gives me a lot of variance due to outliers, how do I deal with it? |
2020-09-17 21:41:27 +0200 | <sm[m]> | "hey frdg, open your laptop so I can access the app!" |
2020-09-17 21:42:11 +0200 | <frdg> | so usually people use a vps. |
2020-09-17 21:42:20 +0200 | <frdg> | Only ones I have seen are paid. |
2020-09-17 21:42:24 +0200 | <geekosaur> | not only that but you won't have a fixed address others could use to access it (I just got booted by my local address changing, for an example) |
2020-09-17 21:42:51 +0200 | eric_ | (~eric@2804:431:c7d4:402a:e9bd:254c:fe89:5831) |
2020-09-17 21:42:58 +0200 | kenran | (~maier@b2b-37-24-119-190.unitymedia.biz) |
2020-09-17 21:43:16 +0200 | <geekosaur> | names yes, but you'r unlikely to have a name either and if you do it'll be based on the address |
2020-09-17 21:44:50 +0200 | <sm[m]> | frdg: sometimes people run their own physical server, eg a raspberry pi in a cupboard connected 24/7 |
2020-09-17 21:45:01 +0200 | <koz_> | sm[m]: Or, in my case, an old Eee-PC. |
2020-09-17 21:45:06 +0200 | <sm[m]> | but yes a vps is by far the easiest |
2020-09-17 21:45:16 +0200 | <sm[m]> | aha, koz_ knows how |
2020-09-17 21:45:28 +0200 | <koz_> | I've been on the self-hosting train for a while, lol. |
2020-09-17 21:45:40 +0200 | <koz_> | Best thing for a starting self-hoster is actually an old laptop IMHO. |
2020-09-17 21:45:41 +0200 | <geekosaur> | eee pc re-users represent! |
2020-09-17 21:46:03 +0200 | <koz_> | They're easy to set up, easy to fix if stuff breaks, and have a built-in UPS. |
2020-09-17 21:46:13 +0200 | <frdg> | I have an old macbook |
2020-09-17 21:46:13 +0200 | eric | (~eric@2804:431:c7d4:402a:8db3:9561:773:fb8e) (Ping timeout: 272 seconds) |
2020-09-17 21:46:59 +0200 | <koz_> | frdg: An old Macbook would work. |
2020-09-17 21:47:03 +0200 | <sm[m]> | koz_: what's the way to ensure a fixed ip address ? use an ISP that will provide that ? |
2020-09-17 21:47:18 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Quit: Lost terminal) |
2020-09-17 21:47:20 +0200 | <nineonine> | hey all, I am trying to use hi all, I am trying to use https://hackage.haskell.org/package/process-1.6.10.0/docs/src/System.Process.html#withCreateProcess and sometimes no cleanup is happening |
2020-09-17 21:47:23 +0200 | <nineonine> | is this expected? |
2020-09-17 21:47:28 +0200 | <koz_> | sm[m]: That's what I do - mine charges me 10 bucks a month. |
2020-09-17 21:47:33 +0200 | <sm[m]> | or is a fixed dns name good enough ? |
2020-09-17 21:47:45 +0200 | <frdg> | koz_: Do I just need to get linux on it? |
2020-09-17 21:47:46 +0200 | <koz_> | DNS name needs an IP address to aim at. |
2020-09-17 21:47:51 +0200 | <koz_> | frdg: Yeah, any Linux will do. |
2020-09-17 21:47:54 +0200 | kenran | (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 260 seconds) |
2020-09-17 21:48:22 +0200 | <sm[m]> | koz_: well there's the dynamic ones where the machine runs a client to update the record on boot |
2020-09-17 21:48:24 +0200 | <frdg> | ok this may fall perfectly into place. |
2020-09-17 21:48:30 +0200 | machinedgod | (~machinedg@45.78.189.122) (Ping timeout: 256 seconds) |
2020-09-17 21:48:31 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection) |
2020-09-17 21:48:34 +0200 | <koz_> | sm[m]: Perhaps, but I've never needed it. |
2020-09-17 21:48:54 +0200 | <glguy> | My ISP has kept my "dynamic" IP address the same on the scale of years |
2020-09-17 21:49:03 +0200 | <nineonine> | the process is not getting killed for some reason |
2020-09-17 21:49:25 +0200 | notzmv` | (~user@177.103.86.92) |
2020-09-17 21:49:39 +0200 | <koz_> | glguy: Mine flipped my supposedly static one on me once. |
2020-09-17 21:49:44 +0200 | <koz_> | (that was _real_ fun) |
2020-09-17 21:50:02 +0200 | <koz_> | (both to diagnose and to subsequently inform customer service in _no uncertain terms_ that this was not good enough) |
2020-09-17 21:50:08 +0200 | <nineonine> | ok I see this comment in code |
2020-09-17 21:50:11 +0200 | <nineonine> | terminateProcess does not guarantee that it terminates the process. |
2020-09-17 21:50:15 +0200 | <geekosaur> | right |
2020-09-17 21:50:17 +0200 | <nineonine> | which answers my question |
2020-09-17 21:50:28 +0200 | <koz_> | terminateProcessMaybe :P |
2020-09-17 21:50:46 +0200 | <sm[m]> | discourageProcess |
2020-09-17 21:50:48 +0200 | <geekosaur> | was just about to point out it does terminateProcess and then forkIO-s the following waitForProcess, so in fact it's not cleaned up synchronously at all |
2020-09-17 21:51:00 +0200 | shafox | (~shafox@106.51.234.111) (Remote host closed the connection) |
2020-09-17 21:51:04 +0200 | <koz_> | sm[m]: |
2020-09-17 21:51:11 +0200 | <koz_> | kindlySuggestProcessDie |
2020-09-17 21:51:13 +0200 | <nineonine> | this is quite deceiving |
2020-09-17 21:51:33 +0200 | <koz_> | nineonine: Not much we can do about it. Unkillable processes are possible, and Haskell can't really save you. |
2020-09-17 21:51:33 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) |
2020-09-17 21:51:43 +0200 | <koz_> | (I had this happen many times due to dodgy drivers) |
2020-09-17 21:51:48 +0200 | <geekosaur> | ^ |
2020-09-17 21:51:53 +0200 | <koz_> | (ended up with a process even the _OS_ couldn't kill) |
2020-09-17 21:51:58 +0200 | <nineonine> | makes sense, my hopes were too high! |
2020-09-17 21:52:22 +0200 | <davean> | well, what OS - a processing being killable or not is an OS thing and some OSes do guarrentee they can |
2020-09-17 21:52:27 +0200 | <nineonine> | so I guess this is an OS quirk |
2020-09-17 21:52:32 +0200 | <davean> | its specificly POSIXy systems that usually have an issue with it. |
2020-09-17 21:52:35 +0200 | <Boarders> | dolio: thanks for your help! |
2020-09-17 21:53:02 +0200 | notzmv | (~user@unaffiliated/zmv) (Ping timeout: 260 seconds) |
2020-09-17 21:53:25 +0200 | <geekosaur> | there's also a harder kill than SIGTERM, not that it's guaranteed either — but some processes do ignore SIGTERM for no good reason |
2020-09-17 21:53:25 +0200 | <sm[m]> | btw there's no reason frdg has to install linux on their macbook megaserver I assume |
2020-09-17 21:53:29 +0200 | <koz_> | davean: Well, it was a Linux thing, so yeah. Who guarantees process death? |
2020-09-17 21:53:42 +0200 | <koz_> | sm[m]: No _specific_ reason, no. |
2020-09-17 21:53:53 +0200 | <koz_> | I'd say it's easier for me to self-host on a Linux, but YMMV. |
2020-09-17 21:54:09 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core) |
2020-09-17 21:54:27 +0200 | mirrorbird | (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) |
2020-09-17 21:54:28 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 21:54:28 +0200 | <monochrom> | I think it's easiest if the OS used for compiling is the same OS used for running. |
2020-09-17 21:54:31 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 21:54:59 +0200 | <monochrom> | For example totally don't go "I dev on Windows, deploy on MacOS", that's insanity. |
2020-09-17 21:55:51 +0200 | <monochrom> | You really don't need one more gratuitous variable in your journey. |
2020-09-17 21:56:17 +0200 | geekosaur | (42d52102@66.213.33.2) (Remote host closed the connection) |
2020-09-17 21:56:33 +0200 | notzmv`` | (~user@177.103.86.92) |
2020-09-17 21:57:09 +0200 | <sm[m]> | frdg has an old working macbook and is a bit over their head already, personally for me installing linux on a mac would be a nightmare |
2020-09-17 21:57:46 +0200 | <koz_> | monochrom: Yeah, you're right. I'm merely speaking from my own experience here, and I'm Linux through-and-through. |
2020-09-17 21:57:52 +0200 | <koz_> | (both personally and for work) |
2020-09-17 21:58:14 +0200 | <sm[m]> | getting offtopic here, but I think the real challenge here will be the connectivity (getting through firewalls, setting up dns or static ip) |
2020-09-17 21:58:26 +0200 | <nineonine> | so any idea how can I ensure the process is being killed? |
2020-09-17 21:58:32 +0200 | <davean> | koz_: well its a permissions issue on some OSs (suposibly windows), and others lack the IO hole POSIX systems tend to have (embeded OSs) |
2020-09-17 21:58:43 +0200 | <nineonine> | can I do something nasty like grep by process name and kill it? |
2020-09-17 21:58:48 +0200 | <nineonine> | using shell |
2020-09-17 21:58:56 +0200 | <koz_> | nineonine: That might not necessarily work either. |
2020-09-17 21:58:56 +0200 | <nineonine> | (just in case) |
2020-09-17 21:59:00 +0200 | <nineonine> | doh! |
2020-09-17 21:59:02 +0200 | <frdg> | in the end Ill figure something out. All I want is to avoid pain. |
2020-09-17 21:59:08 +0200 | <koz_> | As I said - I've managed to get an unkillable process even at the OS level. |
2020-09-17 21:59:14 +0200 | <koz_> | (due to bad driver) |
2020-09-17 21:59:15 +0200 | <nineonine> | this is horrible |
2020-09-17 21:59:16 +0200 | <monochrom> | I think it's useful to first find out why the process is not terminating. |
2020-09-17 21:59:22 +0200 | Jesin | (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) (Quit: Leaving) |
2020-09-17 21:59:24 +0200 | <sm[m]> | nineonine: pgrep & pkill are your friends! |
2020-09-17 21:59:30 +0200 | <davean> | nineonine: is that the *kernel* can't kill it |
2020-09-17 21:59:37 +0200 | <davean> | often |
2020-09-17 21:59:37 +0200 | <sm[m]> | oh sorry.. carry on |
2020-09-17 21:59:38 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 21:59:44 +0200 | notzmv` | (~user@177.103.86.92) (Ping timeout: 258 seconds) |
2020-09-17 21:59:53 +0200 | <davean> | for example Linux can't kill a process blocked on IO (This is basicly the POSIX OS issue in general) |
2020-09-17 21:59:57 +0200 | <nineonine> | it is pretty hard to reproduce |
2020-09-17 22:00:04 +0200 | incertia | (~incertia@d60-65-215-180.col.wideopenwest.com) (Ping timeout: 256 seconds) |
2020-09-17 22:00:08 +0200 | petrus | (~petrus@unaffiliated/petrus) |
2020-09-17 22:00:21 +0200 | finkata | (~dpetrov@83.222.188.39) (Remote host closed the connection) |
2020-09-17 22:00:33 +0200 | <sm[m]> | frdg: what's more painful, $5/mo or 5-50 hours of system administration :) |
2020-09-17 22:00:51 +0200 | <monochrom> | I don't know if you already know, but if Unix, terminateProcess is just SIGTERM. |
2020-09-17 22:00:55 +0200 | <davean> | nineonine: if you want to generate an unkillable process on POSIX its generally pretty easy using NFS and just removing the server ;) |
2020-09-17 22:00:56 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:fcb4:8a4:b249:c1d3) |
2020-09-17 22:00:59 +0200 | incertia | (~incertia@d60-65-215-180.col.wideopenwest.com) |
2020-09-17 22:01:47 +0200 | notzmv`` | notzmv |
2020-09-17 22:01:53 +0200 | notzmv | (~user@177.103.86.92) (Changing host) |
2020-09-17 22:01:53 +0200 | notzmv | (~user@unaffiliated/zmv) |
2020-09-17 22:01:55 +0200 | <nineonine> | right, that makes sense. the fact that there is no guarantee about terminating the process is quite surprising to me :D |
2020-09-17 22:02:04 +0200 | <monochrom> | Haha NFS brings fond memory. |
2020-09-17 22:02:12 +0200 | <davean> | nineonine: really its the "worse is better" issue |
2020-09-17 22:02:32 +0200 | <davean> | Infact the only OS family I know that has this issue *is* POSIX |
2020-09-17 22:02:40 +0200 | <davean> | I don't know of this being able to happen anywhere else. |
2020-09-17 22:03:57 +0200 | <monochrom> | Old school lab used to be like, every last day of semester, reliably, NFS crashed by overloading, all processes blocked and unkillable, you couldn't even log out. (Because, like, logging out requires checking your home directory for .logout but it's through NFS but NFS is not responding...) |
2020-09-17 22:05:11 +0200 | mariatsji | (~mariatsji@2a01:79d:53aa:c66c:fcb4:8a4:b249:c1d3) (Ping timeout: 244 seconds) |
2020-09-17 22:05:25 +0200 | <sm[m]> | there is a way to guarantee termination, and that's to reboot the machine |
2020-09-17 22:05:44 +0200 | <glguy> | cut power; I've had reboots fail :) |
2020-09-17 22:05:46 +0200 | <sm[m]> | right ? or is even that impossible, without a hardware switch ? |
2020-09-17 22:06:12 +0200 | <sm[m]> | ack |
2020-09-17 22:07:14 +0200 | <monochrom> | We students didn't bother to power cycle for many reasons. In this case, turning off would be OK, but turn on would be pointless. |
2020-09-17 22:07:33 +0200 | <glguy> | It would be pretty nifty if having a process stalled on an NFS mount make it so that not even cutting power was enough to kill the process. |
2020-09-17 22:07:45 +0200 | ggole | (~ggole@2001:8003:8119:7200:7c4d:5b32:3cf7:fd63) (Quit: Leaving) |
2020-09-17 22:07:45 +0200 | <glguy> | you just were left with a permanently on computer! |
2020-09-17 22:08:04 +0200 | <monochrom> | That's like defy the 2nd law of thermodynamics. |
2020-09-17 22:08:14 +0200 | <davean> | sm[m]: you can't guarrentee a reboot :( |
2020-09-17 22:08:17 +0200 | <glguy> | sure, but we're talking about NFS |
2020-09-17 22:08:27 +0200 | <monochrom> | hahaha OK fine just cause! |
2020-09-17 22:08:30 +0200 | eric | (~eric@2804:431:c7d4:402a:218c:8374:598c:5968) |
2020-09-17 22:08:44 +0200 | <monochrom> | "NFS solves the halting problem!" |
2020-09-17 22:08:46 +0200 | <davean> | You know they use to write persistent OSs? |
2020-09-17 22:08:57 +0200 | <davean> | you removed power, you plugged it back in, and it would be exactly where you left it |
2020-09-17 22:09:02 +0200 | <davean> | that was a thing in the 70s |
2020-09-17 22:09:12 +0200 | <davean> | The entire OS was transactional. |
2020-09-17 22:09:30 +0200 | <davean> | There were a few of them, I forget which at this point though |
2020-09-17 22:09:54 +0200 | sm[m] | gets itchy for new OSs |
2020-09-17 22:10:26 +0200 | <monochrom> | Well yeah, more seriously you could say "turn off" means use a bit of reserve battery to save state and then turn off. |
2020-09-17 22:11:04 +0200 | <monochrom> | Or even you always have autosave so it's close enough. |
2020-09-17 22:11:32 +0200 | monochrom | thanks AoE2 DE for having frequent autosave, like only 2 minutes lost in the worst case |
2020-09-17 22:11:45 +0200 | <davean> | Yah no the processes couldn't tell |
2020-09-17 22:11:49 +0200 | <davean> | The memory came back the same. |
2020-09-17 22:11:58 +0200 | hackage | uniqueness-periods-vector-examples 0.4.0.0 - Examples of usage for the uniqueness-periods-vector series of packages https://hackage.haskell.org/package/uniqueness-periods-vector-examples-0.4.0.0 (OleksandrZhabenko) |
2020-09-17 22:12:04 +0200 | <davean> | well the same as the last consistent state, which you couldn't have observed past |
2020-09-17 22:12:48 +0200 | coot | (~coot@37.30.53.120.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2020-09-17 22:12:49 +0200 | eric_ | (~eric@2804:431:c7d4:402a:e9bd:254c:fe89:5831) (Ping timeout: 272 seconds) |
2020-09-17 22:13:06 +0200 | frdg` | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) |
2020-09-17 22:13:09 +0200 | mmohammadi9812 | (~mmohammad@5.238.164.128) (Quit: I quit (╯°□°)╯︵ ┻━┻) |
2020-09-17 22:14:10 +0200 | acarrico | (~acarrico@pppoe-209-99-203-201.greenmountainaccess.net) |
2020-09-17 22:14:34 +0200 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) (Ping timeout: 260 seconds) |
2020-09-17 22:14:35 +0200 | frdg | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) (Ping timeout: 240 seconds) |
2020-09-17 22:14:38 +0200 | notzmv` | (~user@177.103.86.92) |
2020-09-17 22:15:23 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 22:16:19 +0200 | juuandyy | (~juuandyy@90.166.144.65) |
2020-09-17 22:16:27 +0200 | frdg` | (~user@pool-71-184-143-249.bstnma.fios.verizon.net) (Client Quit) |
2020-09-17 22:16:28 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) |
2020-09-17 22:16:41 +0200 | acarrico | (~acarrico@pppoe-209-99-203-201.greenmountainaccess.net) (Client Quit) |
2020-09-17 22:17:01 +0200 | acarrico | (~acarrico@pppoe-209-99-203-201.greenmountainaccess.net) |
2020-09-17 22:18:14 +0200 | notzmv | (~user@unaffiliated/zmv) (Ping timeout: 260 seconds) |
2020-09-17 22:20:06 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 22:20:54 +0200 | machinedgod | (~machinedg@d67-193-126-196.home3.cgocable.net) |
2020-09-17 22:22:28 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core) |
2020-09-17 22:22:49 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 22:23:54 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net) |
2020-09-17 22:24:33 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) |
2020-09-17 22:25:02 +0200 | eric_ | (~eric@2804:431:c7d4:402a:5d9b:3471:cb46:d9c6) |
2020-09-17 22:27:54 +0200 | bitmagie | (~Thunderbi@200116b80679150051a84e8093abf52a.dip.versatel-1u1.de) |
2020-09-17 22:28:39 +0200 | eric | (~eric@2804:431:c7d4:402a:218c:8374:598c:5968) (Ping timeout: 272 seconds) |
2020-09-17 22:29:29 +0200 | knupfer | (~Thunderbi@mue-88-130-61-060.dsl.tropolys.de) (Quit: knupfer) |
2020-09-17 22:29:30 +0200 | knupfer1 | (~Thunderbi@200116b82cb61c005dd142b43233f9e3.dip.versatel-1u1.de) |
2020-09-17 22:31:40 +0200 | lembot | (~lembot@191.126.227.174) |
2020-09-17 22:31:54 +0200 | knupfer1 | knupfer |
2020-09-17 22:32:51 +0200 | juuandyy | (~juuandyy@90.166.144.65) (Quit: Konversation terminated!) |
2020-09-17 22:33:43 +0200 | juuandyy | (~juuandyy@90.166.144.65) |
2020-09-17 22:34:53 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net) |
2020-09-17 22:35:28 +0200 | hackage | stratosphere 0.59.1 - EDSL for AWS CloudFormation https://hackage.haskell.org/package/stratosphere-0.59.1 (jdreaver) |
2020-09-17 22:36:17 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 22:36:28 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) (Remote host closed the connection) |
2020-09-17 22:36:58 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) |
2020-09-17 22:37:01 +0200 | bitmagie | (~Thunderbi@200116b80679150051a84e8093abf52a.dip.versatel-1u1.de) (Quit: bitmagie) |
2020-09-17 22:40:21 +0200 | Jesin | (~Jesin@pool-72-66-101-18.washdc.fios.verizon.net) |
2020-09-17 22:41:06 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 22:41:17 +0200 | tomsmeding | (~tomsmedin@2a03:b0c0:0:1010::767:3001) (Quit: ZNC 1.7.5 - https://znc.in) |
2020-09-17 22:41:53 +0200 | tomsmeding | (~tomsmedin@2a03:b0c0:0:1010::767:3001) |
2020-09-17 22:43:30 +0200 | eric | (~eric@2804:431:c7d4:402a:95f4:860f:d661:3a21) |
2020-09-17 22:45:13 +0200 | knupfer | (~Thunderbi@200116b82cb61c005dd142b43233f9e3.dip.versatel-1u1.de) (Quit: knupfer) |
2020-09-17 22:45:28 +0200 | knupfer | (~Thunderbi@200116b82cb61c0074d6b96e7872775f.dip.versatel-1u1.de) |
2020-09-17 22:47:01 +0200 | eric_ | (~eric@2804:431:c7d4:402a:5d9b:3471:cb46:d9c6) (Ping timeout: 272 seconds) |
2020-09-17 22:50:41 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 22:50:54 +0200 | mirrorbird | (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) (Remote host closed the connection) |
2020-09-17 22:51:22 +0200 | mirrorbird | (~psutcliff@2a00:801:44b:8959:8d6c:276b:332b:1c71) |
2020-09-17 22:52:45 +0200 | lembot | (~lembot@191.126.227.174) (Ping timeout: 240 seconds) |
2020-09-17 22:53:22 +0200 | iteratee | (~kyle@162.211.154.4) (Remote host closed the connection) |
2020-09-17 22:53:28 +0200 | hackage | esqueleto 3.3.4.0 - Type-safe EDSL for SQL queries on persistent backends. https://hackage.haskell.org/package/esqueleto-3.3.4.0 (parsonsmatt) |
2020-09-17 22:53:54 +0200 | dhouthoo | (~dhouthoo@ptr-eiv6509pb4ifhdr9lsd.18120a2.ip6.access.telenet.be) (Quit: WeeChat 2.8) |
2020-09-17 22:54:28 +0200 | hackage | RtMidi 0.4.0.0 - Haskell wrapper for RtMidi, the lightweight, cross-platform MIDI I/O library. https://hackage.haskell.org/package/RtMidi-0.4.0.0 (ejconlon) |
2020-09-17 22:55:51 +0200 | DavidEichmann | (~david@43.240.198.146.dyn.plus.net) |
2020-09-17 22:57:22 +0200 | xff0x_ | (~fox@2001:1a81:5306:e200:5d84:8198:9ead:fb9f) (Ping timeout: 244 seconds) |
2020-09-17 22:57:56 +0200 | thc202 | (~thc202@unaffiliated/thc202) (Ping timeout: 240 seconds) |
2020-09-17 22:58:19 +0200 | xff0x_ | (~fox@2001:1a81:5306:e200:1455:ac5b:134:42e8) |
2020-09-17 22:58:37 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core) |
2020-09-17 22:58:58 +0200 | p-core | (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
2020-09-17 22:59:04 +0200 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) |
2020-09-17 23:00:02 +0200 | davidfischer | (~davidfisc@193.56.252.210) () |
2020-09-17 23:00:56 +0200 | eric_ | (~eric@2804:431:c7d4:402a:d77:f3e2:c0b:b49a) |
2020-09-17 23:01:14 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
2020-09-17 23:03:36 +0200 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) (Client Quit) |
2020-09-17 23:04:07 +0200 | eric | (~eric@2804:431:c7d4:402a:95f4:860f:d661:3a21) (Ping timeout: 272 seconds) |
2020-09-17 23:05:09 +0200 | juuandyy | (~juuandyy@90.166.144.65) (Quit: Konversation terminated!) |
2020-09-17 23:06:38 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) (Quit: Free ZNC ~ Powered by LunarBNC: https://LunarBNC.net) |
2020-09-17 23:06:39 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 272 seconds) |
2020-09-17 23:06:39 +0200 | danvet | (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 272 seconds) |
2020-09-17 23:07:55 +0200 | <dumptruckman> | what is happening... getting this: `name' is not a (visible) method of class `NamedEntity' |
2020-09-17 23:08:16 +0200 | <dumptruckman> | class NamedEntity a where name :: a -> String |
2020-09-17 23:08:23 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) |
2020-09-17 23:08:28 +0200 | <dumptruckman> | instance NamedEntity Sharable where name (Sharable s) = s |
2020-09-17 23:08:38 +0200 | <ski> | you only exported the type class, not its method |
2020-09-17 23:08:43 +0200 | <dumptruckman> | ohh |
2020-09-17 23:09:03 +0200 | <ski> | use `module Blah (....,NamedEntity (name)) where |
2020-09-17 23:09:06 +0200 | <ski> | ' |
2020-09-17 23:09:23 +0200 | <dumptruckman> | sweet, thanks |
2020-09-17 23:09:36 +0200 | <exodrifter> | (or wherever you imported it `import Blah (NamedEntity (name))`) |
2020-09-17 23:09:55 +0200 | <ski> | (that too, if you have an explicit import list) |
2020-09-17 23:10:20 +0200 | <exodrifter> | right, if you have an implicit import like `import Blah`, should be fine. |
2020-09-17 23:10:27 +0200 | Kaivo | (~Kaivo@ec2-15-222-231-32.ca-central-1.compute.amazonaws.com) (Ping timeout: 272 seconds) |
2020-09-17 23:12:05 +0200 | eric_ | (~eric@2804:431:c7d4:402a:d77:f3e2:c0b:b49a) (Remote host closed the connection) |
2020-09-17 23:12:27 +0200 | heatsink | (~heatsink@2600:1700:bef1:5e10:b0dc:6c54:247b:ece) |
2020-09-17 23:12:35 +0200 | hyperisco | (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 246 seconds) |
2020-09-17 23:12:38 +0200 | Kaivo | (~Kaivo@104-200-86-99.mc.derytele.com) |
2020-09-17 23:13:09 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit) |
2020-09-17 23:13:39 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) |
2020-09-17 23:17:02 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) (Client Quit) |
2020-09-17 23:17:05 +0200 | __monty__ | (~toonn@unaffiliated/toonn) |
2020-09-17 23:17:40 +0200 | aplainzetakind | (~johndoe@captainludd.powered.by.lunarbnc.net) |
2020-09-17 23:17:46 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 23:18:33 +0200 | knupfer | (~Thunderbi@200116b82cb61c0074d6b96e7872775f.dip.versatel-1u1.de) (Ping timeout: 244 seconds) |
2020-09-17 23:21:55 +0200 | izaki | (~izaki@217.146.82.202) |
2020-09-17 23:22:19 +0200 | izaki | Guest55194 |
2020-09-17 23:22:36 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) (Ping timeout: 272 seconds) |
2020-09-17 23:24:55 +0200 | rihards | (~rihards@balticom-142-78-50.balticom.lv) (Quit: rihards) |
2020-09-17 23:25:20 +0200 | tomsmeding | (~tomsmedin@2a03:b0c0:0:1010::767:3001) (Quit: ZNC 1.7.5 - https://znc.in) |
2020-09-17 23:25:46 +0200 | tomsmeding | (~tomsmedin@2a03:b0c0:0:1010::767:3001) |
2020-09-17 23:28:09 +0200 | gestone | (~gestone@c-73-97-137-216.hsd1.wa.comcast.net) |
2020-09-17 23:29:57 +0200 | ericsagnes | (~ericsagne@2405:6580:0:5100:d0ba:8658:2de8:699c) |
2020-09-17 23:34:16 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) |
2020-09-17 23:38:57 +0200 | nan` | (~nan`@unaffiliated/nan/x-5405850) (Ping timeout: 272 seconds) |
2020-09-17 23:43:01 +0200 | DataComputist | (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Quit: Leaving...) |
2020-09-17 23:43:36 +0200 | sfvm | (~sfvm@37.228.215.148) |
2020-09-17 23:43:44 +0200 | Nahra | (~Nahra@unaffiliated/nahra) |
2020-09-17 23:43:46 +0200 | kenran | (~maier@b2b-37-24-119-190.unitymedia.biz) |
2020-09-17 23:43:50 +0200 | exodrifter | (~exodrifte@cpe-173-172-173-93.tx.res.rr.com) (Quit: Leaving.) |
2020-09-17 23:43:56 +0200 | gmt | (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) |
2020-09-17 23:45:17 +0200 | Amras | (~Amras@unaffiliated/amras0000) (Ping timeout: 272 seconds) |
2020-09-17 23:48:26 +0200 | tomsmeding | (~tomsmedin@2a03:b0c0:0:1010::767:3001) (Quit: ZNC 1.7.5 - https://znc.in) |
2020-09-17 23:48:48 +0200 | tomsmeding | (~tomsmedin@tomsmeding.com) |
2020-09-17 23:49:12 +0200 | kenran | (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 272 seconds) |
2020-09-17 23:49:54 +0200 | petrus | (~petrus@unaffiliated/petrus) (Quit: WeeChat 2.9) |
2020-09-17 23:51:11 +0200 | Sgeo_ | (~Sgeo@ool-18b982ad.dyn.optonline.net) |
2020-09-17 23:54:48 +0200 | falafel | (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
2020-09-17 23:54:54 +0200 | stiell | (~stian@fsf/member/stiell) (Ping timeout: 272 seconds) |
2020-09-17 23:54:54 +0200 | Sgeo | (~Sgeo@ool-18b982ad.dyn.optonline.net) (Ping timeout: 272 seconds) |
2020-09-17 23:55:12 +0200 | puffnfresh | (~puffnfres@180-150-38-83.b49626.bne.nbn.aussiebb.net) (Ping timeout: 265 seconds) |
2020-09-17 23:56:40 +0200 | Sgeo__ | (~Sgeo@ool-18b982ad.dyn.optonline.net) |
2020-09-17 23:57:03 +0200 | LKoen | (~LKoen@81.255.219.130) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”) |
2020-09-17 23:59:21 +0200 | stiell | (~stian@fsf/member/stiell) |
2020-09-17 23:59:38 +0200 | eric | (~eric@2804:431:c7d4:402a:d77:f3e2:c0b:b49a) |