2021-02-03 00:00:14 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 00:00:23 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2021-02-03 00:00:25 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds) |
2021-02-03 00:01:32 +0100 | Ariakenom | (~Ariakenom@2001:9b1:efb:fc00:41bc:5f34:8ff6:3878) (Quit: Leaving) |
2021-02-03 00:01:55 +0100 | carlomagno | (~cararell@148.87.23.7) (Quit: Leaving.) |
2021-02-03 00:02:12 +0100 | frdg | (~nick@pool-96-252-123-136.bstnma.fios.verizon.net) (Read error: Connection reset by peer) |
2021-02-03 00:02:35 +0100 | frdg | (~user@pool-96-252-123-136.bstnma.fios.verizon.net) |
2021-02-03 00:04:20 +0100 | <frdg> | I am not understanding the behavior of manyTill. For example I would like to parse `123` out of `foo bar 123 baz` by saying `skip everything until I can parse an integer and then parse the integer`. http://dpaste.com/7RFE5D26G |
2021-02-03 00:05:04 +0100 | carlomagno | (~cararell@148.87.23.7) |
2021-02-03 00:06:50 +0100 | geyaeb | (~geyaeb@gateway/tor-sasl/geyaeb) |
2021-02-03 00:08:06 +0100 | <Axman6> | My guess is the first P.integer is consuming the integer it parses |
2021-02-03 00:08:51 +0100 | <frdg> | hmm maybe because P.anyChar matches 123? |
2021-02-03 00:08:58 +0100 | <Axman6> | manyTill is usually used for things like lists, so you'd have char '[' *> manyTill item (char ']') |
2021-02-03 00:09:25 +0100 | <Axman6> | no, manyTill doesn;t reset to the point where the terminating parser begins |
2021-02-03 00:09:25 +0100 | <koz_> | Are there block comments in Cabal file syntax? |
2021-02-03 00:09:37 +0100 | ubert | (~Thunderbi@p200300ecdf25d920e6b318fffe838f33.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2021-02-03 00:10:03 +0100 | <Axman6> | so yuo get "foo bar " consumed by the repeated anyChar, and then the "!23" is consumed by the P.integer |
2021-02-03 00:10:23 +0100 | <Axman6> | koz_: yep, I believe they;re the same as Haskell comments? At least -- works IIRC |
2021-02-03 00:10:28 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:d018:6f9c:3910:36c8) |
2021-02-03 00:11:05 +0100 | <Axman6> | frdg: so manyTill anyChar integer consumes "foo bar 123" |
2021-02-03 00:11:32 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 00:11:37 +0100 | <frdg> | ok I am trying something |
2021-02-03 00:11:58 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 00:12:23 +0100 | <Axman6> | looks like you really need something like manyTillWith :: PArser a -> Parser b -> Parser ([a], b) |
2021-02-03 00:14:17 +0100 | knupfer | (~Thunderbi@200116b82c1c27005d8bb76cf3d58ad1.dip.versatel-1u1.de) (Ping timeout: 260 seconds) |
2021-02-03 00:15:02 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:d018:6f9c:3910:36c8) (Ping timeout: 264 seconds) |
2021-02-03 00:16:09 +0100 | mrchampion | (~mrchampio@38.18.109.23) (Ping timeout: 264 seconds) |
2021-02-03 00:16:20 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-02-03 00:17:21 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds) |
2021-02-03 00:17:34 +0100 | <frdg> | Axman6: I understand the behavior now thanks |
2021-02-03 00:18:14 +0100 | LKoen | (~LKoen@252.248.88.92.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”) |
2021-02-03 00:19:02 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 00:19:03 +0100 | <koz_> | It seems to be 'nope'. |
2021-02-03 00:19:06 +0100 | mrchampion | (~mrchampio@38.18.109.23) |
2021-02-03 00:19:20 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 00:19:37 +0100 | <monochrom> | parsec's manyTill example is manyTill anyChar (try (string "-->")) and explains why the try. |
2021-02-03 00:20:56 +0100 | <ph88> | can i query which functions and types are used in a module ? |
2021-02-03 00:21:33 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 264 seconds) |
2021-02-03 00:21:35 +0100 | alx741 | (~alx741@181.196.69.29) (Quit: alx741) |
2021-02-03 00:22:01 +0100 | <monochrom> | ghc -ddump-minimal-imports may help |
2021-02-03 00:22:20 +0100 | <Axman6> | koz_: oh, I missed the word "block" in your messsage, sorry |
2021-02-03 00:23:25 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving) |
2021-02-03 00:24:16 +0100 | <ph88> | monochrom, does that calculate the imports or the actual usage of said imports ? |
2021-02-03 00:25:05 +0100 | <Axman6> | HLS will tell you if you have excess imports, and can make your imports more specific |
2021-02-03 00:26:08 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection) |
2021-02-03 00:27:23 +0100 | frdg | (~user@pool-96-252-123-136.bstnma.fios.verizon.net) ("ERC (IRC client for Emacs 27.1)") |
2021-02-03 00:27:40 +0100 | <koz_> | Or hlint if you don't want something that heavy. |
2021-02-03 00:27:43 +0100 | <monochrom> | If you import something and end up not using it, it doesn't show up in -ddump-minimal-imports |
2021-02-03 00:27:54 +0100 | <koz_> | I think there's also a GHC warning for it? |
2021-02-03 00:28:22 +0100 | <monochrom> | If you import a whole module of 1000 functions and end up using just one, you get "import M(f)" telling you you're only using f. |
2021-02-03 00:28:51 +0100 | <monochrom> | This is why it helps identifying what you actually use. |
2021-02-03 00:28:56 +0100 | <Axman6> | on this topic, there is also weeder, which can tell you wqhich _exports_ from a module aren't used |
2021-02-03 00:31:17 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:d018:6f9c:3910:36c8) |
2021-02-03 00:31:53 +0100 | <koz_> | Axman6: Why did I have a hurr-hurr moment when I saw 'weeder' as a title? |
2021-02-03 00:32:17 +0100 | <koz_> | *hits bong* "Yeah man, you don't need those exports." |
2021-02-03 00:32:19 +0100 | aidecoe | (~aidecoe@unaffiliated/aidecoe) (Remote host closed the connection) |
2021-02-03 00:33:03 +0100 | haskell-noob | (2ea162a3@46.161.98.163) (Quit: Ping timeout (120 seconds)) |
2021-02-03 00:33:21 +0100 | aidecoe | (~aidecoe@unaffiliated/aidecoe) |
2021-02-03 00:33:56 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-02-03 00:35:21 +0100 | nuncanada | (~dude@179.235.160.168) (Ping timeout: 264 seconds) |
2021-02-03 00:36:10 +0100 | revprez_anzio | (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Quit: leaving) |
2021-02-03 00:37:10 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-02-03 00:41:58 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 00:42:53 +0100 | matijja | (~matijja@193.77.181.208) (Ping timeout: 260 seconds) |
2021-02-03 00:43:37 +0100 | matijja | (~matijja@193.77.181.208) |
2021-02-03 00:44:24 +0100 | desophos | (~desophos@2601:249:1680:a570:a1da:e51c:3dc0:1f5c) |
2021-02-03 00:44:47 +0100 | Sheilong | (uid293653@gateway/web/irccloud.com/x-vebmjsskufunaflq) |
2021-02-03 00:44:56 +0100 | mmohammadi9812 | (~mmohammad@2.178.211.91) (Ping timeout: 240 seconds) |
2021-02-03 00:46:48 +0100 | <Axman6> | ehhhhhh |
2021-02-03 00:46:56 +0100 | <Axman6> | blaze it bro |
2021-02-03 00:47:08 +0100 | <Axman6> | (where it is dead code) |
2021-02-03 00:47:15 +0100 | <koz_> | Lol, blaze is also a Haskell package... |
2021-02-03 00:47:33 +0100 | <koz_> | You see a build-depends with like, all the blaze packages and weeder. |
2021-02-03 00:47:36 +0100 | <koz_> | :D |
2021-02-03 00:47:36 +0100 | <Axman6> | ha, damn I'm sad I missed thay joke |
2021-02-03 00:47:39 +0100 | <Axman6> | that* |
2021-02-03 00:47:55 +0100 | mmohammadi9812 | (~mmohammad@2.178.169.112) |
2021-02-03 00:48:48 +0100 | <aldum> | /l |
2021-02-03 00:49:28 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-02-03 00:52:43 +0100 | <dexterfoo> | how do i write a function that appends a single element to the end of a list and get NonEmpty? append :: [a] -> a -> NonEmpty a |
2021-02-03 00:54:01 +0100 | <Axman6> | that sounds not particularly difficult, have you tried to write it? |
2021-02-03 00:54:32 +0100 | <Axman6> | append :: [a] -> a -> NonEmpty a; append xs a = case xs of ... |
2021-02-03 00:55:12 +0100 | <Axman6> | what do you need to return if xs is []? what do you need to do if xs is (y:ys)? |
2021-02-03 00:55:42 +0100 | <dexterfoo> | i'm wondering if there is a built in function |
2021-02-03 00:55:45 +0100 | <Axman6> | you know in both cases that you need to return something :| someList |
2021-02-03 00:56:10 +0100 | <Axman6> | well, you could just use xs <> singleton a |
2021-02-03 00:56:36 +0100 | geowiesnot | (~user@87-89-181-157.abo.bbox.fr) |
2021-02-03 00:56:55 +0100 | obihann | (~jhann@142.177.168.17) (Ping timeout: 258 seconds) |
2021-02-03 00:56:56 +0100 | mbomba | (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca) (Quit: WeeChat 3.0) |
2021-02-03 00:57:00 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 246 seconds) |
2021-02-03 00:57:18 +0100 | deviantfero | (~deviantfe@190.150.27.58) (Ping timeout: 258 seconds) |
2021-02-03 00:57:59 +0100 | frdg | (~user@pool-96-252-123-136.bstnma.fios.verizon.net) |
2021-02-03 00:58:45 +0100 | deviantfero | (~deviantfe@190.150.27.58) |
2021-02-03 01:00:05 +0100 | jpds_ | jpds |
2021-02-03 01:00:23 +0100 | <frdg> | Why do I get different behavior from parsing `P.string "foo"` and `P.char '\t'` in these examples? I would expect parser1 to fail and parser2 to succeed but the opposite is true. http://dpaste.com/27YKB62DA |
2021-02-03 01:01:53 +0100 | bitmagie | (~Thunderbi@200116b806d5dd009974a509bc35d318.dip.versatel-1u1.de) |
2021-02-03 01:02:17 +0100 | <monochrom> | P.integer skips trailing whitespace? |
2021-02-03 01:02:35 +0100 | <monochrom> | I would think this would be in the doc? |
2021-02-03 01:03:01 +0100 | <monochrom> | No, let me correct that wording. |
2021-02-03 01:03:09 +0100 | <monochrom> | I swear I saw it said in the doc. |
2021-02-03 01:03:23 +0100 | <frdg> | ok now I see what is happening |
2021-02-03 01:05:00 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) |
2021-02-03 01:05:34 +0100 | Dykam | (Dykam@dykam.nl) |
2021-02-03 01:05:41 +0100 | feliocrat | (~feliocrat@31.223.8.190) (Remote host closed the connection) |
2021-02-03 01:05:54 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-02-03 01:06:31 +0100 | comboy | (~quassel@tesuji.pl) |
2021-02-03 01:06:36 +0100 | conal | (~conal@64.71.133.70) |
2021-02-03 01:08:30 +0100 | bitmagie | (~Thunderbi@200116b806d5dd009974a509bc35d318.dip.versatel-1u1.de) (Quit: bitmagie) |
2021-02-03 01:09:26 +0100 | charukiewicz | (~quassel@irouteince04.i.subnet.rcn.com) |
2021-02-03 01:09:57 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) (Ping timeout: 258 seconds) |
2021-02-03 01:10:37 +0100 | frdg | (~user@pool-96-252-123-136.bstnma.fios.verizon.net) ("ERC (IRC client for Emacs 27.1)") |
2021-02-03 01:11:13 +0100 | comboy_ | (~quassel@tesuji.pl) (*.net *.split) |
2021-02-03 01:11:13 +0100 | Dykam_ | (Dykam@dykam.nl) (*.net *.split) |
2021-02-03 01:11:34 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) |
2021-02-03 01:11:55 +0100 | bennofs_ | (~quassel@dslb-094-222-055-031.094.222.pools.vodafone-ip.de) |
2021-02-03 01:12:06 +0100 | <desophos> | hi, i'm using Gen for randomization and i want to perform weighted random selection. Gen has a function `frequency :: [(Int, Gen a)] -> Gen a`, but i have `Gen [a]` because i use Gen's `vectorOf :: Int -> Gen a -> Gen [a]`. i can make `Gen [(Int, a)]` but i'm not sure what to do from there. is the solution simply to write my own variant of `frequency`? am i allowed to just copy the source of `frequency` and change bind to |
2021-02-03 01:12:07 +0100 | <desophos> | fmap? thanks :) |
2021-02-03 01:15:12 +0100 | alx741 | (~alx741@181.196.69.29) |
2021-02-03 01:15:30 +0100 | olligobber | (olligobber@gateway/vpn/privateinternetaccess/olligobber) |
2021-02-03 01:15:33 +0100 | bennofs__ | (~quassel@dslb-094-222-058-083.094.222.pools.vodafone-ip.de) (Ping timeout: 246 seconds) |
2021-02-03 01:15:45 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) (Ping timeout: 240 seconds) |
2021-02-03 01:23:05 +0100 | Tario | (~Tario@200.119.184.36) (Read error: Connection reset by peer) |
2021-02-03 01:23:46 +0100 | Tario | (~Tario@201.192.165.173) |
2021-02-03 01:23:57 +0100 | DirefulSalt | (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Remote host closed the connection) |
2021-02-03 01:28:51 +0100 | Tops2 | (~Tobias@dyndsl-095-033-022-141.ewe-ip-backbone.de) |
2021-02-03 01:29:39 +0100 | <Axman6> | Gen is a monad right? |
2021-02-03 01:29:45 +0100 | <desophos> | yes it is |
2021-02-03 01:30:17 +0100 | <Axman6> | so if you can produce the vector of values you want, and a vecvtor of equal length of weights that you want, then you can just use frequency (zip prequencies values) |
2021-02-03 01:31:04 +0100 | <desophos> | but `vectorOf` returns `Gen [a]`, not `[Gen a]` |
2021-02-03 01:32:26 +0100 | <Axman6> | weighted n = vectorOf n arbitrary >>= \frequencies -> vectorOf n arbitrary >>= \values -> frequency (zip frequencies (map pure values)) -- this type checks but I'm not sure if it's what you want |
2021-02-03 01:32:52 +0100 | <Axman6> | what do you want the Gen a passed to frequency to produce? |
2021-02-03 01:33:00 +0100 | Cale | (~cale@cpef48e38ee8583-cm0c473de9d680.cpe.net.cable.rogers.com) |
2021-02-03 01:33:19 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) |
2021-02-03 01:33:34 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection) |
2021-02-03 01:35:05 +0100 | <desophos> | well, it should just produce an a? i tried mapping pure but i couldn't get it to work |
2021-02-03 01:35:25 +0100 | <desophos> | so maybe that was just my error |
2021-02-03 01:35:29 +0100 | <ph88> | I have an expression tree that is a functor, first i was thinking to map over it .. then i thought i need to carry some state around. "problem" is that fold gives me back the state i want to carry and not the original structure. Is there another function i can use ? |
2021-02-03 01:36:06 +0100 | <Axman6> | :t mapAccumL |
2021-02-03 01:36:07 +0100 | <lambdabot> | Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
2021-02-03 01:36:16 +0100 | <Axman6> | maybe? |
2021-02-03 01:36:18 +0100 | <ph88> | is there a monadic version of that ? |
2021-02-03 01:36:40 +0100 | <Axman6> | you might just be able to use traverse |
2021-02-03 01:36:51 +0100 | <Axman6> | but you question isn't clear enough to tell exactly what you need |
2021-02-03 01:37:17 +0100 | <ph88> | i don't know how to put my question clearer |
2021-02-03 01:37:36 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 01:37:53 +0100 | <desophos> | ah, i wasn't mapping pure because i have a function that builds each (Int, a) pair. i can make it generate an [Int] based on my [a] instead |
2021-02-03 01:38:13 +0100 | <ph88> | mapM :: Monad m => (a -> m b) -> t a -> m (t b) i need to map every element but just have state while mapping .. |
2021-02-03 01:38:42 +0100 | <Cale> | This is somewhat offtopic, but does anyone know whether anyone in the cubical type theory world ever succeeded in computing Brunerie's number? I recall hearing that the computation was taking over 90 hours and 1TB of memory, but I don't know if it ever finished, or if they just gave up. |
2021-02-03 01:39:01 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 256 seconds) |
2021-02-03 01:39:23 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Client Quit) |
2021-02-03 01:39:27 +0100 | <desophos> | thanks Axman6, i'll try that |
2021-02-03 01:40:59 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 01:41:15 +0100 | <Axman6> | ph88: well.. whatb about the State monad :) |
2021-02-03 01:41:16 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.) |
2021-02-03 01:41:57 +0100 | geowiesnot | (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 264 seconds) |
2021-02-03 01:42:03 +0100 | <ph88> | Cale, looks like it has not been found |
2021-02-03 01:42:08 +0100 | <ph88> | Axman6, ye that might work |
2021-02-03 01:42:22 +0100 | bitmagie | (~Thunderbi@200116b806d5dd009974a509bc35d318.dip.versatel-1u1.de) |
2021-02-03 01:42:30 +0100 | <Cale> | Of course, it's known to actually be 2, lol |
2021-02-03 01:42:48 +0100 | <Cale> | The most expensive 2 in the world |
2021-02-03 01:43:22 +0100 | ph88^ | (~ph88@ip5f5af71a.dynamic.kabel-deutschland.de) |
2021-02-03 01:43:50 +0100 | <monochrom> | 2 is special in many ways, I'm OK with 2 being expensive. |
2021-02-03 01:46:28 +0100 | <ph88^> | Cale, how is that known ? |
2021-02-03 01:46:49 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 01:47:22 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-80-120.w86-212.abo.wanadoo.fr) (Quit: Konversation terminated!) |
2021-02-03 01:47:25 +0100 | ph88 | (~ph88@2a02:8109:9e00:7e5c:7043:c8b:15ab:5d6e) (Ping timeout: 272 seconds) |
2021-02-03 01:47:40 +0100 | zebrag | (~inkbottle@aaubervilliers-654-1-80-120.w86-212.abo.wanadoo.fr) |
2021-02-03 01:47:57 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Quit: mputz) |
2021-02-03 01:49:19 +0100 | <Cale> | ph88^: Both by proving it directly in HoTT, and it's also a classical result of homotopy theory |
2021-02-03 01:50:05 +0100 | <dolio> | Cale: It hasn't been calculated, but people think that the expense might not be essential, but an artifact of how naive all the implementations are. |
2021-02-03 01:50:20 +0100 | <monochrom> | :) |
2021-02-03 01:50:43 +0100 | <monochrom> | Theorem: Every number can be made as expensive as you like. :) |
2021-02-03 01:51:23 +0100 | bitmapper | (uid464869@gateway/web/irccloud.com/x-zkobjotekrfpnlhu) (Quit: Connection closed for inactivity) |
2021-02-03 01:55:08 +0100 | rajivr | (uid269651@gateway/web/irccloud.com/x-njsalrgkfquqyrca) |
2021-02-03 01:55:19 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-02-03 01:56:18 +0100 | <monochrom> | On the flip side, if you try to describe a difficult problem but screws up the wording, you end up stating a O(1)-time problem. |
2021-02-03 01:57:16 +0100 | <monochrom> | For example, Bill Gates's book screws up saying "public key encryption relies on hard problems such as prime factorization" by wording "factoring primes". |
2021-02-03 01:57:26 +0100 | tsrt^ | (tsrt@ip98-184-89-2.mc.at.cox.net) () |
2021-02-03 01:57:49 +0100 | <monochrom> | (I suspect that Bill Gates didn't make that mistake, an editor (obviously math-blind English major right?) did.) |
2021-02-03 02:03:08 +0100 | elliott__ | (~elliott@pool-108-51-101-42.washdc.fios.verizon.net) |
2021-02-03 02:06:13 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 256 seconds) |
2021-02-03 02:08:21 +0100 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) |
2021-02-03 02:09:35 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2021-02-03 02:09:40 +0100 | metreo | (~Thunderbi@unaffiliated/metreo) (Quit: metreo) |
2021-02-03 02:10:32 +0100 | bitmagie | (~Thunderbi@200116b806d5dd009974a509bc35d318.dip.versatel-1u1.de) (Quit: bitmagie) |
2021-02-03 02:10:59 +0100 | whataday | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2021-02-03 02:11:52 +0100 | LiyangHU[m] | (liyangmatr@gateway/shell/matrix.org/x-khsquopybxsinqvm) |
2021-02-03 02:12:06 +0100 | whataday | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2021-02-03 02:16:45 +0100 | thefybe | (~thefybe@249-147-161-N2.customer.vsm.sh) (Ping timeout: 264 seconds) |
2021-02-03 02:24:25 +0100 | boxscape | (4ff0baf3@gateway/web/cgi-irc/kiwiirc.com/ip.79.240.186.243) (Quit: Connection closed) |
2021-02-03 02:26:37 +0100 | ph88^ | (~ph88@ip5f5af71a.dynamic.kabel-deutschland.de) (Ping timeout: 258 seconds) |
2021-02-03 02:27:51 +0100 | charukiewicz | (~quassel@irouteince04.i.subnet.rcn.com) (Quit: charukiewicz) |
2021-02-03 02:28:01 +0100 | charukiewicz | (~quassel@irouteince04.i.subnet.rcn.com) |
2021-02-03 02:28:09 +0100 | jollygood2 | (~bc8134e3@217.29.117.252) (Quit: http://www.okay.uz/ (Session timeout)) |
2021-02-03 02:28:27 +0100 | charukiewicz | (~quassel@irouteince04.i.subnet.rcn.com) (Client Quit) |
2021-02-03 02:29:52 +0100 | charukiewicz | (~charukiew@irouteince04.i.subnet.rcn.com) |
2021-02-03 02:32:20 +0100 | bitmapper | (uid464869@gateway/web/irccloud.com/x-nvqzpcbpfmbefeds) |
2021-02-03 02:32:28 +0100 | thefybe | (~thefybe@249-147-161-N2.customer.vsm.sh) |
2021-02-03 02:33:31 +0100 | thc202 | (~thc202@unaffiliated/thc202) (Ping timeout: 258 seconds) |
2021-02-03 02:33:35 +0100 | Jd007 | (~Jd007@162.156.11.151) (Quit: Jd007) |
2021-02-03 02:33:54 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 02:39:38 +0100 | stef204 | (~stef204@unaffiliated/stef-204/x-384198) |
2021-02-03 02:45:43 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-02-03 02:46:04 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 02:49:14 +0100 | m0rphism1 | (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 258 seconds) |
2021-02-03 02:50:46 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 258 seconds) |
2021-02-03 02:52:38 +0100 | conal | (~conal@64.71.133.70) |
2021-02-03 02:56:03 +0100 | cheater1 | (~user@unaffiliated/cheater) |
2021-02-03 02:58:45 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 02:58:53 +0100 | cheater | (~user@unaffiliated/cheater) (Ping timeout: 265 seconds) |
2021-02-03 02:58:57 +0100 | cheater1 | cheater |
2021-02-03 03:00:39 +0100 | shinobi | (~shinobi@c-24-147-48-162.hsd1.ma.comcast.net) |
2021-02-03 03:00:53 +0100 | nuncanada | (~dude@179.235.160.168) |
2021-02-03 03:01:30 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) |
2021-02-03 03:02:45 +0100 | viluon | (uid453725@gateway/web/irccloud.com/x-ksfxrsatayjgucds) (Quit: Connection closed for inactivity) |
2021-02-03 03:03:31 +0100 | shinobi_ | (~shinobi@c-24-147-48-162.hsd1.ma.comcast.net) (Ping timeout: 272 seconds) |
2021-02-03 03:04:04 +0100 | Jd007 | (~Jd007@162.156.11.151) |
2021-02-03 03:06:45 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) (Ping timeout: 240 seconds) |
2021-02-03 03:11:57 +0100 | hyperisco | (~hyperisco@104-195-141-253.cpe.teksavvy.com) (Ping timeout: 264 seconds) |
2021-02-03 03:13:28 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:fc44:c2d6:2605:3850) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-02-03 03:13:30 +0100 | justsomeguy | (~justsomeg@unaffiliated/--/x-3805311) (Quit: WeeChat 2.9) |
2021-02-03 03:14:18 +0100 | guest23 | (~user@49.5.6.87) |
2021-02-03 03:14:47 +0100 | <guest23> | I'm a little confused about Reader, when we need to use a Reader? |
2021-02-03 03:15:34 +0100 | <guest23> | that Reader is just like a function, passing it a parameter and operate on it, what's the special? what's the need? |
2021-02-03 03:15:39 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 03:17:10 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:fc44:c2d6:2605:3850) |
2021-02-03 03:17:16 +0100 | <dibblego> | passing an argument through a tree of calls, without explicitly passing it in the code |
2021-02-03 03:17:54 +0100 | <guest23> | a simple example? |
2021-02-03 03:18:48 +0100 | <guest23> | if I declare the variable inside a function's top, then other functions insdie it could use it directly too |
2021-02-03 03:23:09 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 272 seconds) |
2021-02-03 03:23:10 +0100 | wz1000 | (~wz1000@static.11.113.47.78.clients.your-server.de) (Ping timeout: 272 seconds) |
2021-02-03 03:26:34 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 03:28:08 +0100 | Jd007 | (~Jd007@162.156.11.151) (Quit: Jd007) |
2021-02-03 03:28:39 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2021-02-03 03:30:00 +0100 | Noldorin | (~noldorin@unaffiliated/noldorin) (Quit: My MacBook Pro has gone to sleep. ZZZzzz…) |
2021-02-03 03:30:15 +0100 | xff0x_ | (~xff0x@2001:1a81:5334:6300:744e:2f9e:5495:d27d) (Ping timeout: 258 seconds) |
2021-02-03 03:31:05 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 03:32:05 +0100 | xff0x_ | (~xff0x@2001:1a81:536f:2100:534e:8c50:d828:cc61) |
2021-02-03 03:33:05 +0100 | <ski> | guest23 : sometimes you want to locally change the environment |
2021-02-03 03:34:02 +0100 | Reiser | (~0a2a0001@unaffiliated/reisen) (Ping timeout: 268 seconds) |
2021-02-03 03:34:11 +0100 | <ski> | you can often achieve that, if you call an outer function that explicitly takes the parameter. but possibly sometimes that awkward, or maybe deemed to be to cluttery |
2021-02-03 03:34:24 +0100 | <ski> | another alternative is to use implicit parameters |
2021-02-03 03:36:02 +0100 | <ski> | guest23 : if you already have some effect type (monadic or idiomatic), then adding an environment to that is commonly an easy thing to do, while adding another explicit parameter that's distributed down the relevant calls may be quite a bit of more work/modification |
2021-02-03 03:37:02 +0100 | _rht | (uid86914@gateway/web/irccloud.com/x-ufajdipojemchcbz) |
2021-02-03 03:37:23 +0100 | nfip^ | (nfip@ip98-184-89-2.mc.at.cox.net) |
2021-02-03 03:38:07 +0100 | minimario | (2fe3e53b@047-227-229-059.res.spectrum.com) |
2021-02-03 03:39:10 +0100 | <minimario> | i'm trying to compile a haskell program with "ghc -prof A.hs" but i'm getting a linker error (`gcc' failed in phase `Linker') where it can't find things like -lHSsplit, how would i go about diagnosing this? |
2021-02-03 03:39:46 +0100 | kloeri | (~kloeri@freenode/staff/exherbo.kloeri) (Ping timeout: 606 seconds) |
2021-02-03 03:40:03 +0100 | <minimario> | i have no idea how the linking process works at all :l |
2021-02-03 03:40:05 +0100 | geowiesnot | (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) |
2021-02-03 03:40:16 +0100 | <glguy> | minimario, How did you install GHC? |
2021-02-03 03:40:50 +0100 | <minimario> | honestly i don't remember ): |
2021-02-03 03:41:06 +0100 | <glguy> | That message suggests to me you didn't install the profiling version of the split package. but you really shouldn't be running ghc manually at all; cabal handles that |
2021-02-03 03:42:23 +0100 | <minimario> | oh i'm just going thru a small profiling tutorial lol |
2021-02-03 03:42:37 +0100 | <minimario> | is there some way to fix this? |
2021-02-03 03:42:44 +0100 | <minimario> | (presumably by installing the packages needed) |
2021-02-03 03:43:58 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 03:48:21 +0100 | Reiser | (~0a2a0001@static.210.242.216.95.clients.your-server.de) |
2021-02-03 03:50:01 +0100 | kloeri | (~kloeri@freenode/staff/exherbo.kloeri) |
2021-02-03 03:51:20 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 258 seconds) |
2021-02-03 03:53:39 +0100 | <glguy> | minimario, I'd set up your thing.cabal file and use https://cabal.readthedocs.io/en/3.4/nix-local-build.html#how-can-i-profile-my-library-application |
2021-02-03 03:54:06 +0100 | <glguy> | that will automatically build the profiling versions of the libraries as needed and set up profiling options |
2021-02-03 03:58:30 +0100 | alx741 | (~alx741@181.196.69.29) (Quit: alx741) |
2021-02-03 04:00:20 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 04:00:25 +0100 | nuncanada | (~dude@179.235.160.168) (Quit: Leaving) |
2021-02-03 04:00:37 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 04:04:55 +0100 | minimario | (2fe3e53b@047-227-229-059.res.spectrum.com) (Quit: Connection closed) |
2021-02-03 04:06:01 +0100 | minimario | (2fe3e53b@047-227-229-059.res.spectrum.com) |
2021-02-03 04:06:20 +0100 | pfurla_ | (~pfurla@239.15.195.173.client.static.strong-in52.as13926.net) |
2021-02-03 04:06:42 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 246 seconds) |
2021-02-03 04:08:35 +0100 | pfurla | (~pfurla@ool-182ed2e2.dyn.optonline.net) (Ping timeout: 258 seconds) |
2021-02-03 04:10:25 +0100 | nineonin_ | (~nineonine@50.216.62.2) (Ping timeout: 240 seconds) |
2021-02-03 04:11:04 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 04:13:34 +0100 | fresheyeball | (~isaac@ec2-35-155-97-88.us-west-2.compute.amazonaws.com) (Ping timeout: 258 seconds) |
2021-02-03 04:14:03 +0100 | Jd007 | (~Jd007@162.156.11.151) |
2021-02-03 04:15:41 +0100 | fresheyeball | (~isaac@c-71-237-105-37.hsd1.co.comcast.net) |
2021-02-03 04:17:00 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 272 seconds) |
2021-02-03 04:22:36 +0100 | theDon | (~td@94.134.91.201) (Ping timeout: 240 seconds) |
2021-02-03 04:22:50 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 04:23:50 +0100 | <guest23> | ski: so Reader is like a let-environment? |
2021-02-03 04:24:06 +0100 | <guest23> | let in scheme |
2021-02-03 04:24:23 +0100 | <ski> | more or less, yes |
2021-02-03 04:24:30 +0100 | <ski> | (also `let' in Haskell) |
2021-02-03 04:24:34 +0100 | theDon | (~td@94.134.91.50) |
2021-02-03 04:24:45 +0100 | <Axman6> | reader is like passing around an argument without having to remember to pass it around everywhere |
2021-02-03 04:24:59 +0100 | <guest23> | ski: let in haskell is definetly not like let in scheme |
2021-02-03 04:25:03 +0100 | <ski> | in fact, one of the uses of `Reader'/`ReaderT' would be to implement a local environment, in an interpreter, or a compiler |
2021-02-03 04:25:11 +0100 | <Axman6> | if I'm operating inside a Reader env a, there at any time I can ask for the Env |
2021-02-03 04:25:25 +0100 | mmmattyx | (uid17782@gateway/web/irccloud.com/x-fhsjdgdsmsucvkhr) (Quit: Connection closed for inactivity) |
2021-02-03 04:25:39 +0100 | <ski> | guest23 : i know. i was just saying that this aspect of `let' is shared by nested block structure in most programming languages |
2021-02-03 04:25:40 +0100 | <Axman6> | it's very often used for passing around application configuration, like settings read fromt he command line which the rest of the app need to access |
2021-02-03 04:26:39 +0100 | <ski> | (however, one subtlety would be static/lexical vs. dynamic scope, which matters when you can define local functions, which can access non-local variables) |
2021-02-03 04:27:02 +0100 | <guest23> | ski: Axman6 wait a sec, but that Reader's envrionment is read-only right? so if we want to change variables in environment, use State? |
2021-02-03 04:27:04 +0100 | <Axman6> | data Env = End {...; logLevel :: LogLevel; ...}; someFunction :: ReaderT Env IO (); someFunction = do { level <- gets logLevel; liftIO $ logAtLevel level "I ran someFunction" ... } |
2021-02-03 04:27:16 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 04:27:19 +0100 | <ski> | guest23 : change, in which sense ? |
2021-02-03 04:27:21 +0100 | <Axman6> | yes, that's why I said configuration and not state |
2021-02-03 04:27:47 +0100 | <ski> | guest23 : you know environment variables in processes ? |
2021-02-03 04:27:55 +0100 | <guest23> | ski: (let ((x 0)) (setq x 1)) ? |
2021-02-03 04:28:15 +0100 | plutoniix | (~q@ppp-27-55-78-115.revip3.asianet.co.th) |
2021-02-03 04:28:39 +0100 | <guest23> | is this let-environment a closure? |
2021-02-03 04:28:50 +0100 | <ski> | guest23 : Scheme implementations often implement that in terms of something like `(let ((x (box 0))) (set-box! x 1))', which now doesn't change `x', but rather the contents of the mutable box |
2021-02-03 04:29:07 +0100 | <Axman6> | :t local |
2021-02-03 04:29:08 +0100 | <guest23> | environment, context, namespace, are they same here? |
2021-02-03 04:29:09 +0100 | <lambdabot> | MonadReader r m => (r -> r) -> m a -> m a |
2021-02-03 04:29:21 +0100 | <ski> | so, `x' is still bound to the same value (a location), but if you look up that location in the store/state, you get a different result, after the `set-box!' |
2021-02-03 04:29:51 +0100 | <ski> | guest23 : in Haskell, the same effect can be had by using e.g. `ReaderT (IORef Config) IO' |
2021-02-03 04:30:01 +0100 | <Axman6> | we can temporarily change the environment in a Reader with local, so we can say: local (\env -> env {level = DEBUG} $ someActionWeAlwaysToLogAtLevelDEBUG |
2021-02-03 04:30:28 +0100 | <ski> | guest23 : "is this let-environment a closure?" -- no |
2021-02-03 04:30:49 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 258 seconds) |
2021-02-03 04:31:21 +0100 | <ski> | guest23 : "environment variables", like `$PATH',`$HOME', you know them ? |
2021-02-03 04:31:47 +0100 | peasynt | (~quassel@pool-173-76-103-124.bstnma.fios.verizon.net) |
2021-02-03 04:32:15 +0100 | <guest23> | ski: not that system environment variables, I mean variables in a function |
2021-02-03 04:32:29 +0100 | <ski> | yes, but there's a similarity |
2021-02-03 04:33:42 +0100 | <guest23> | Axman6: wait a sec, but if Reader can do changes, why we need State? |
2021-02-03 04:34:00 +0100 | <ski> | if you imagine that a process could only change its environment variables, when spawning a child process, and then only to change them, on behalf of the child, not for itself .. then that gives a nice analogy to environment/input/reader/config effects |
2021-02-03 04:34:08 +0100 | <Axman6> | those changes are local to the action you pass to the function |
2021-02-03 04:34:09 +0100 | <guest23> | I know Reader is an environment, Writer is a logger, and State is read-write |
2021-02-03 04:34:25 +0100 | <Axman6> | nothing is _changed_, it's runnung an action in a new environment |
2021-02-03 04:35:11 +0100 | <ski> | `local' would correspond to the spawn a child case. (of course there's no concurrency with `local', but there is the "locally change on behalf of child computation") |
2021-02-03 04:36:55 +0100 | <guest23> | Reader's local only make an new environement to it's child, don't change the outside |
2021-02-03 04:37:21 +0100 | <Axman6> | % :t local @Reader |
2021-02-03 04:37:21 +0100 | <yahb> | Axman6: ; <interactive>:1:8: error:; * Expecting two more arguments to `Reader'; Expected a type, but `Reader' has kind `* -> * -> *'; * In the type `Reader'; In the expression: local @Reader |
2021-02-03 04:37:34 +0100 | <Axman6> | % :t local @(Reader String) |
2021-02-03 04:37:34 +0100 | <yahb> | Axman6: ; <interactive>:1:9: error:; * Expecting one more argument to `Reader String'; Expected a type, but `Reader String' has kind `* -> *'; * In the type `(Reader String)'; In the expression: local @(Reader String) |
2021-02-03 04:37:54 +0100 | <Axman6> | % :t local @String @(Reader String) |
2021-02-03 04:37:54 +0100 | <yahb> | Axman6: (String -> String) -> Reader String a -> Reader String a |
2021-02-03 04:38:33 +0100 | <ski> | in Scheme, there's `(with-input-from-file filename (lambda () ...))' which evaluates `...' in a new dynamic *environment*, where `(current-input-port)' locally refers to the newly opened file. when this form is finished, it reverts back to its earlier value |
2021-02-03 04:38:46 +0100 | <Axman6> | the Reader that is passed in sees the modified String environment, and its result is returned, but after local returns the environment is the same as it was before the local call |
2021-02-03 04:38:53 +0100 | FinnElija | (~finn_elij@gateway/tor-sasl/finnelija/x-67402716) |
2021-02-03 04:38:53 +0100 | finn_elija | Guest39021 |
2021-02-03 04:38:53 +0100 | FinnElija | finn_elija |
2021-02-03 04:39:02 +0100 | <ski> | using `local changeTheEnvironment (do ...)' in Haskell is similar in spirit |
2021-02-03 04:39:14 +0100 | peasynt | (~quassel@pool-173-76-103-124.bstnma.fios.verizon.net) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2021-02-03 04:39:35 +0100 | peasynt | (~quassel@pool-173-76-103-124.bstnma.fios.verizon.net) |
2021-02-03 04:39:40 +0100 | <ski> | guest23 : "Reader's local only make an new environement to it's child, don't change the outside" -- right |
2021-02-03 04:39:51 +0100 | <guest23> | the Reader introduction should really write that "It's just let environement in Scheme", so it's easier to understand it |
2021-02-03 04:40:12 +0100 | <Axman6> | I'm not sure it is the same though, there's no mutation |
2021-02-03 04:40:30 +0100 | <ski> | guest23 : it would be misleading to say that, i think |
2021-02-03 04:40:38 +0100 | <ski> | why Scheme, specifically ? |
2021-02-03 04:40:55 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 04:41:05 +0100 | <ski> | (a) the correspondence holds to most notions of block structured scopes in programming languages |
2021-02-03 04:41:28 +0100 | <guest23> | ski: I only know let in scheme is famous, other languages have let syntax sugar? |
2021-02-03 04:41:55 +0100 | <guest23> | oh, let in scheme and common lisp are different |
2021-02-03 04:42:05 +0100 | <ski> | (b) that correspondence can be seen to be about how said feature in programming languages are *implemented*. but using `Reader' is not (in general) about implementing programming languages (although that is one thing it can be used for) |
2021-02-03 04:42:06 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2021-02-03 04:42:06 +0100 | noctux | (~noctux@unaffiliated/noctux) (Ping timeout: 256 seconds) |
2021-02-03 04:42:09 +0100 | <guest23> | one is a syntax sugar, another isn't |
2021-02-03 04:42:23 +0100 | <dibblego> | \x -> f x (g x (h x x) (i (j x)) -- it's to stop having to write this, including in the implementations of each function |
2021-02-03 04:42:38 +0100 | Guest39021 | (~finn_elij@gateway/tor-sasl/finnelija/x-67402716) (Ping timeout: 268 seconds) |
2021-02-03 04:42:47 +0100 | <ski> | `let' is Scheme is a derived form. `(let ((x 0)) ..x..)' means `((lambda (x) ..x..) 0)' |
2021-02-03 04:43:10 +0100 | Tario | (~Tario@201.192.165.173) |
2021-02-03 04:43:14 +0100 | AWizzArd | (~code@unaffiliated/awizzard) (Ping timeout: 256 seconds) |
2021-02-03 04:43:48 +0100 | cocreature | (~cocreatur@eirene.uberspace.de) (Ping timeout: 256 seconds) |
2021-02-03 04:44:08 +0100 | <guest23> | actually I'm learning arrow-kt in Kotlin, those monads are a kind of differntly to Haskell |
2021-02-03 04:44:19 +0100 | <ski> | Scheme is a Lisp-1, while CL is a Lisp-2. Scheme binds functions in the same namespace as other variables, while CL doesn't. but this difference is immaterial, irrelevant, here |
2021-02-03 04:44:52 +0100 | <dibblego> | because Kotlin's type system cannot express a monad |
2021-02-03 04:45:00 +0100 | minimario | (2fe3e53b@047-227-229-059.res.spectrum.com) (Quit: Connection closed) |
2021-02-03 04:45:14 +0100 | <ski> | cannot express a monad, or cannot express "monad" ? |
2021-02-03 04:45:21 +0100 | <dibblego> | the latter |
2021-02-03 04:45:36 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 04:45:43 +0100 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Quit: leaving) |
2021-02-03 04:45:44 +0100 | <guest23> | dibblego: with lex-syntax, we can avoid \x -> f x (g x (h x x) (i (j x)) too |
2021-02-03 04:46:21 +0100 | ski | idly wonders what guest23 has in mind |
2021-02-03 04:46:30 +0100 | <dibblego> | ya can't actually |
2021-02-03 04:47:08 +0100 | Jd007 | (~Jd007@162.156.11.151) (Quit: Jd007) |
2021-02-03 04:47:31 +0100 | <guest23> | how to define and use Reader in a funciton form? not data type form? |
2021-02-03 04:48:11 +0100 | wujilingfeng | (df46f205@223.70.242.5) |
2021-02-03 04:48:19 +0100 | wujilingfeng | (df46f205@223.70.242.5) (Client Quit) |
2021-02-03 04:48:36 +0100 | <dibblego> | Reader is, quite precisely, a function, with a data type wrapping it |
2021-02-03 04:48:44 +0100 | wujilingfeng | (df46f205@223.70.242.5) |
2021-02-03 04:48:44 +0100 | ski | . o O ( `f <*> (g <*> join h <*> (i <$> j))' ) |
2021-02-03 04:48:53 +0100 | <dibblego> | lol |
2021-02-03 04:48:57 +0100 | wujilingfeng | (df46f205@223.70.242.5) () |
2021-02-03 04:49:25 +0100 | shiraeeshi | (~shiraeesh@77.94.25.42) (Quit: Konversation terminated!) |
2021-02-03 04:49:41 +0100 | shiraeeshi | (~shiraeesh@77.94.25.42) |
2021-02-03 04:50:21 +0100 | <guest23> | to OOP, I think Reader is just like an object, an object itself has an environment |
2021-02-03 04:50:51 +0100 | <ski> | it's unclear what you mean by "environment", there |
2021-02-03 04:51:17 +0100 | <guest23> | namespace? |
2021-02-03 04:51:33 +0100 | <guest23> | context? |
2021-02-03 04:52:04 +0100 | <dibblego> | it's this, but done well, https://refactoring.com/catalog/replaceParameterWithQuery.html |
2021-02-03 04:53:26 +0100 | renzhi | (~renzhi@2607:fa49:6500:6f00::1e43) (Ping timeout: 258 seconds) |
2021-02-03 04:53:42 +0100 | <guest23> | dibblego: yes, that's what I meant |
2021-02-03 04:54:25 +0100 | pagnol | (~user@n112120223083.netvigator.com) |
2021-02-03 04:57:07 +0100 | <guest23> | if function f has two parameters called x and y, and in an let-environment x is defined, we can call (f y) in that environment, that's Reader? |
2021-02-03 04:58:34 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 04:59:19 +0100 | nineonine | (~nineonine@50.216.62.2) |
2021-02-03 04:59:39 +0100 | Saukk | (~Saukk@83-148-239-3.dynamic.lounea.fi) |
2021-02-03 05:00:42 +0100 | <ukari> | https://hackage.haskell.org/package/dependent-map-0.4.0.0/src/LICENSE, does it means this package license is almost a BSD license and safe for static link? |
2021-02-03 05:02:06 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2021-02-03 05:02:22 +0100 | thefybe | (~thefybe@249-147-161-N2.customer.vsm.sh) (Read error: Connection reset by peer) |
2021-02-03 05:02:43 +0100 | thefybe | (~thefybe@249-147-161-N2.customer.vsm.sh) |
2021-02-03 05:03:05 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 05:04:07 +0100 | <lyxia> | ukari: that sounds about right |
2021-02-03 05:06:03 +0100 | lep_ | (~lep@94.31.102.183) |
2021-02-03 05:06:14 +0100 | <ski> | guest23 : there is no identifier correspond to `x', for `Reader' |
2021-02-03 05:06:20 +0100 | lep_ | Guest18945 |
2021-02-03 05:06:54 +0100 | lep-delete | (~lep@94.31.81.93) (Ping timeout: 246 seconds) |
2021-02-03 05:07:59 +0100 | conal | (~conal@64.71.133.70) |
2021-02-03 05:08:27 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 05:08:36 +0100 | geowiesnot | (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 240 seconds) |
2021-02-03 05:09:13 +0100 | average | (uid473595@gateway/web/irccloud.com/x-rtojiysrxktngdss) |
2021-02-03 05:09:22 +0100 | <guest23> | ski: sorry, I don't what you mean |
2021-02-03 05:09:39 +0100 | <average> | I think I just had this realization: The more I look at FP, the more it seems like it wants to do symbolic manipulation and symbolic computations, but it does't want to go all the way |
2021-02-03 05:10:07 +0100 | <ski> | "in an let-environment x is defined, we can call (f y) in that environment" -- there's nothing corresponding to `x', for `Reader' |
2021-02-03 05:10:09 +0100 | conal | (~conal@64.71.133.70) (Client Quit) |
2021-02-03 05:10:35 +0100 | <average> | is there a point to even do FP if we already have environments where we CAN do symbolic calculations ? |
2021-02-03 05:10:51 +0100 | <ski> | average : with (analytic) meta-programming, you get to do more symbolic manipulation and computation |
2021-02-03 05:11:45 +0100 | <average> | ski: well.. alright but in the end it is just a pattern-matching thing.. |
2021-02-03 05:11:49 +0100 | <average> | or term-rewriting if you will |
2021-02-03 05:12:50 +0100 | rdivyanshu | (uid322626@gateway/web/irccloud.com/x-mtieidadejfsxoah) |
2021-02-03 05:13:37 +0100 | <average> | I feel like FP happened because a PLT person found themselves in a Computer Algebra or Symbolic Algebra context, they learned some techniques (but definitely not that much), and then they were like "Oh.My.God. I will re-package this and sell it as a NEW thing, and nobody will know, nobody will notice, I will call it Functional Programming" |
2021-02-03 05:15:26 +0100 | <average> | idk, FP seems second-hand to me |
2021-02-03 05:15:43 +0100 | <average> | it's like it came out of a thrift store |
2021-02-03 05:15:46 +0100 | <average> | I'm just sayin.. |
2021-02-03 05:17:07 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 265 seconds) |
2021-02-03 05:18:56 +0100 | shiraeeshi | (~shiraeesh@77.94.25.42) (Ping timeout: 256 seconds) |
2021-02-03 05:19:47 +0100 | <ski> | average : FP could perhaps have been said to have started with |
2021-02-03 05:19:50 +0100 | <ski> | @where BAckus |
2021-02-03 05:19:50 +0100 | <lambdabot> | "Can Programming Be Liberated from the von Neumann Style?: A Functional Style and Its Algebra of Programs" (Turing Award lecture) by John Warner Backus in 1977-10-17 at <https://amturing.acm.org/ |
2021-02-03 05:19:50 +0100 | <lambdabot> | award_winners/backus_0703524.cfm>,<http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf> |
2021-02-03 05:20:45 +0100 | <ski> | or perhaps with the invention of Lisp by John McCarthy, in 1958. or perhaps by the invention of the lambda calculus by Alonzo Church in the 1930s |
2021-02-03 05:20:50 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 05:22:24 +0100 | <ski> | (although calculations in math, towards a normal form, prior to that, certainly contributed to inspiring that, and higher-order functions in math were certainly known before Church) |
2021-02-03 05:23:35 +0100 | <ski> | another influential thing was ISWIM, introduced by Peter Landin in 1966 in his paper "The Next 700 Programming Languages" at <https://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf> |
2021-02-03 05:23:36 +0100 | jespada | (~jespada@90.254.242.138) (Ping timeout: 240 seconds) |
2021-02-03 05:24:50 +0100 | <ski> | (well, invention/discovery, in the case of the lambda calculus) |
2021-02-03 05:24:51 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2021-02-03 05:25:04 +0100 | <dolio> | Bishop wrote an unpublished paper on how to compile mathematics into Algol in 1969, too. |
2021-02-03 05:25:35 +0100 | Tario | (~Tario@201.192.165.173) |
2021-02-03 05:26:47 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 05:26:49 +0100 | jespada | (~jespada@90.254.242.138) |
2021-02-03 05:26:56 +0100 | <ski> | average : an important thing, in the lambda calculus, when seen as a term-rewriting system, is confluence |
2021-02-03 05:27:05 +0100 | shiraeeshi | (~shiraeesh@77.94.25.42) |
2021-02-03 05:27:09 +0100 | <ski> | dolio : Errett ? |
2021-02-03 05:27:13 +0100 | <dolio> | Yeah. |
2021-02-03 05:27:48 +0100 | <average> | What I'd like to see is symbolic stuff baked into the language. But I think I already found out that the only things that satisfy my requirements.. |
2021-02-03 05:27:57 +0100 | <average> | are really just Mathematica and Maple, maybe not even those |
2021-02-03 05:28:07 +0100 | <ski> | what kind of symbolic stuff ? |
2021-02-03 05:28:17 +0100 | <ski> | evaluation under binders ? |
2021-02-03 05:28:27 +0100 | <ski> | higher-order matching ? |
2021-02-03 05:28:35 +0100 | AWizzArd | (~code@gehrels.uberspace.de) |
2021-02-03 05:29:03 +0100 | <average> | well..I guess there's two things that the language should do |
2021-02-03 05:29:23 +0100 | <average> | 1) report errors according to the laws of the structures that were declared |
2021-02-03 05:29:27 +0100 | <guest23> | ski: then what's the proper way to describe Reader? |
2021-02-03 05:29:32 +0100 | <average> | 2) be able to figure out things on its own, without hand-holding |
2021-02-03 05:30:05 +0100 | cocreature | (~cocreatur@eirene.uberspace.de) |
2021-02-03 05:30:27 +0100 | <ski> | guest23 : distribution of an environment/config, with the option to pass on a modified version, at each distribution point ? |
2021-02-03 05:30:35 +0100 | <average> | the 1st one is actually the strongly-typed algebraic-type thing.. |
2021-02-03 05:30:45 +0100 | <average> | the 2nd one is more like Prolog, pattern-matching term-rewriting stuff |
2021-02-03 05:31:00 +0100 | toorevitimirp | (~tooreviti@117.182.181.145) |
2021-02-03 05:31:00 +0100 | <ski> | 2) sounds pretty vague, i was about to say |
2021-02-03 05:31:24 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 05:31:25 +0100 | <ski> | (although it did sound like some descriptions of how people perceive Prolog .. at least before they understand how it works) |
2021-02-03 05:31:44 +0100 | <ski> | (and i'm not sure i understand what (1) means) |
2021-02-03 05:32:13 +0100 | notzmv | (~user@unaffiliated/zmv) (Ping timeout: 260 seconds) |
2021-02-03 05:32:44 +0100 | <average> | ski: well what I mean in (1) is the fact that you can define monoids, groups, rings, whatever |
2021-02-03 05:32:51 +0100 | <average> | ski: and you declare some axioms too.. |
2021-02-03 05:33:04 +0100 | thefybe | (~thefybe@249-147-161-N2.customer.vsm.sh) (Ping timeout: 265 seconds) |
2021-02-03 05:33:24 +0100 | <ski> | well, one problem is termination of equational axioms, used as rewrite rules |
2021-02-03 05:33:24 +0100 | <average> | but actually all that stuff belongs to symbolic land.. it's not really an FP thing |
2021-02-03 05:33:52 +0100 | <average> | so I'm not sure if I understand what FP's plan is |
2021-02-03 05:33:53 +0100 | <ski> | (also, stuff like unification in the presence of an associative, and possibly commutative, operator) |
2021-02-03 05:34:12 +0100 | cocreature | (~cocreatur@eirene.uberspace.de) (Ping timeout: 246 seconds) |
2021-02-03 05:34:14 +0100 | <average> | ski: sure, but that's like.. only teh beginning of symbolic stuff |
2021-02-03 05:34:31 +0100 | <ski> | well, FP focuses on expressions which unambiguously denotes values, perhaps you could say |
2021-02-03 05:34:31 +0100 | <average> | if we'd really want to do symbolic math, we'd go way beyond that and have way more difficult problems to deal with |
2021-02-03 05:34:41 +0100 | <ski> | the terms are not the main thing |
2021-02-03 05:35:40 +0100 | <ski> | anyway .. did you ever check out e.g. lambdaProlog, or Twelf ? |
2021-02-03 05:35:42 +0100 | fresheyeball | (~isaac@c-71-237-105-37.hsd1.co.comcast.net) (Quit: WeeChat 2.9) |
2021-02-03 05:35:49 +0100 | <average> | honestly I did not |
2021-02-03 05:36:05 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 05:36:31 +0100 | <ski> | it's probably not quite what you're looking for .. but possibly you'd find some things in them quite interesting |
2021-02-03 05:36:45 +0100 | Tario | (~Tario@201.192.165.173) (Ping timeout: 258 seconds) |
2021-02-03 05:37:29 +0100 | <ski> | dolio : happen to know the title of it ? maybe there's even an online version of it, somewhere ? |
2021-02-03 05:38:27 +0100 | <dolio> | https://u.math.biu.ac.il/~katzmik/bishop18bb.pdf |
2021-02-03 05:38:54 +0100 | <average> | I think for me it's more of a realization that FP is not magic, and that the mathy parts in FP are really handled seriously and extensively in computer algebra or symbolic math CAS systems.. |
2021-02-03 05:39:04 +0100 | <average> | so I view FP as a toy now |
2021-02-03 05:39:32 +0100 | <ski> | ty |
2021-02-03 05:40:34 +0100 | <ski> | (dunno what you mean by "the mathy parts") |
2021-02-03 05:41:16 +0100 | notzmv | (~user@unaffiliated/zmv) |
2021-02-03 05:41:28 +0100 | <ski> | (anyway .. i'm off, presently) |
2021-02-03 05:42:01 +0100 | salumu | (~sMuNiX@vlnsm8-montreal02-142-122-8-233.internet.virginmobile.ca) |
2021-02-03 05:42:26 +0100 | conal | (~conal@64.71.133.70) |
2021-02-03 05:43:50 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) (Remote host closed the connection) |
2021-02-03 05:44:40 +0100 | <average> | basically what I'm trying to say is that Haskell is a CAS wannabe |
2021-02-03 05:44:53 +0100 | <average> | at least at first sight |
2021-02-03 05:45:03 +0100 | sMuNiX | (~sMuNiX@vlnsm8-montreal02-142-122-8-233.internet.virginmobile.ca) (Ping timeout: 246 seconds) |
2021-02-03 05:45:04 +0100 | <average> | but when you get closer to it, it turns out it's not a CAS.. |
2021-02-03 05:45:23 +0100 | <monochrom> | No, Haskell is not a CAS wannabe. |
2021-02-03 05:45:28 +0100 | <dolio> | It doesn't seem like a CAS at all, to me. |
2021-02-03 05:45:35 +0100 | <average> | and it's not particularly better at anything compared to other languages |
2021-02-03 05:45:57 +0100 | <dolio> | It seems like you just want to get banned, really. |
2021-02-03 05:46:13 +0100 | <monochrom> | I know we're talking about aspiration not actual outcome, but no, Haskell doesn't even aspire to that. |
2021-02-03 05:46:27 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) |
2021-02-03 05:46:35 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 05:46:43 +0100 | _rht | (uid86914@gateway/web/irccloud.com/x-ufajdipojemchcbz) (Quit: Connection closed for inactivity) |
2021-02-03 05:46:44 +0100 | <monochrom> | IMO it is your association, not the Haskell inventors' association. |
2021-02-03 05:47:27 +0100 | <average> | dolio: from time to time, I come here asking what exactly is Haskell made for. It's been years now. My expectation is that someone will explain "Haskell is best for writing programs that do X,Y,Z" (so better than any other language that you could use to write X,Y,Z) . I have not received this type of answer yet. |
2021-02-03 05:48:11 +0100 | <average> | to me, complete mastery of a language means knowing what it's good at and what it's bad at. |
2021-02-03 05:48:37 +0100 | <average> | so yes, I think the questions I'm asking are very pragmatic |
2021-02-03 05:49:18 +0100 | <average> | dolio: if you're a PLT daydreamer, maybe you shouldn't read my questions and shouldn't try to answer them |
2021-02-03 05:50:01 +0100 | <average> | monochrom: so what did the Haskell inventors have in mind ? |
2021-02-03 05:50:39 +0100 | <monochrom> | I think SPJ has a paper on that? |
2021-02-03 05:50:57 +0100 | mmohammadi9812 | (~mmohammad@2.178.169.112) (Ping timeout: 264 seconds) |
2021-02-03 05:51:19 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 05:51:20 +0100 | <monochrom> | I think «a history of haskell: being lazy with class»? |
2021-02-03 05:51:28 +0100 | mmohammadi9812 | (~mmohammad@188.210.119.142) |
2021-02-03 05:51:37 +0100 | pfurla | (~pfurla@ool-182ed2e2.dyn.optonline.net) |
2021-02-03 05:51:50 +0100 | <average> | so.. an entire language just for lazy evaluation ? |
2021-02-03 05:52:04 +0100 | <average> | or is that paper about something else ? |
2021-02-03 05:52:04 +0100 | <monochrom> | You finished reading the whole paper already? Wow that's fast. |
2021-02-03 05:52:19 +0100 | <average> | No i did not read it, I think it's a big commitment to read an entire paper |
2021-02-03 05:52:38 +0100 | <monochrom> | Or you're just another slashdotter who read the title and stop reading and start tweeting? |
2021-02-03 05:52:54 +0100 | <average> | monochrom: I'm more of a tl;dr guy |
2021-02-03 05:52:57 +0100 | <monochrom> | You asked a big question you deserve a big paper. |
2021-02-03 05:53:05 +0100 | <Axman6> | average: Facebook's spam filtering system is definitely not a CAS system... but it handles 2m+ messages/posts per second, all in Haskell |
2021-02-03 05:53:25 +0100 | <monochrom> | And with that, I'm done. I pointed to a useful paper, enough said. |
2021-02-03 05:53:41 +0100 | <average> | Axman6: yes and I'm very glad Facebook finally solved the spam problem. We all know when we go on Facebook there is literally no spam at all |
2021-02-03 05:53:46 +0100 | <average> | Axman6: ok, that was my sarcasm |
2021-02-03 05:53:50 +0100 | <average> | Axman6: but.. |
2021-02-03 05:54:00 +0100 | pfurla_ | (~pfurla@239.15.195.173.client.static.strong-in52.as13926.net) (Ping timeout: 258 seconds) |
2021-02-03 05:54:05 +0100 | <Axman6> | "and it's not particularly better at anything compared to other languages " I'd strongly dispute this, the type system is the closest we have to a sweet spot for usability and power |
2021-02-03 05:54:06 +0100 | <average> | Axman6: why did they pick Haskell to write their spam filtering system.. |
2021-02-03 05:54:38 +0100 | <average> | Axman6: but power of what.. |
2021-02-03 05:54:46 +0100 | <Axman6> | because Haskell's concurrency stuff is amazing, and its type system makes it very difficult for non programmers to write spam filtering rules |
2021-02-03 05:54:59 +0100 | <Axman6> | which are correct* |
2021-02-03 05:55:06 +0100 | <average> | but why do we want non-programmers writing programs ? |
2021-02-03 05:55:18 +0100 | <average> | oh wait. just the rules ? |
2021-02-03 05:55:19 +0100 | <average> | hm, ok |
2021-02-03 05:55:22 +0100 | <monochrom> | wait, very difficult? |
2021-02-03 05:55:30 +0100 | <Axman6> | because Facebook's spam filtering team is full of people who are not programmers per se |
2021-02-03 05:55:34 +0100 | <average> | Axman6: so you're saying Haskell is very easy to write.. rule-systems ? |
2021-02-03 05:55:56 +0100 | <Axman6> | I think that's a very narrow take away from what I said |
2021-02-03 05:56:30 +0100 | <monochrom> | The problem with tldr |
2021-02-03 05:57:18 +0100 | <Axman6> | the project I am currently working on is rewriting the clearing and settlement system for oneof the top stock markets in the world. We're not using Haskell as such, but a language which is basically Haskell++-- (haskell with some extra stuff and some stuff missing) |
2021-02-03 05:58:17 +0100 | <Axman6> | Again, not a CAS at all, it's a something which underpins a large portion of the country's financial system |
2021-02-03 05:58:53 +0100 | frozenErebus | (~frozenEre@37.231.239.43) |
2021-02-03 05:59:13 +0100 | <average> | Haskell would never pass an architectural board committee process.. unless.. you're the committee .. |
2021-02-03 05:59:28 +0100 | <Axman6> | To answert an earlier statement you wanted a response to: Haskell is best for writing programs |
2021-02-03 05:59:42 +0100 | <average> | so Haskell is best for writing programs? |
2021-02-03 06:00:11 +0100 | <Axman6> | yes, it is a programming language, so writing programs it is what it's best for |
2021-02-03 06:00:34 +0100 | <average> | I can easily say that answer didn't increase my understanding as to what Haskell is best at. because programs you can also write in Turbo Pascal. |
2021-02-03 06:00:50 +0100 | <average> | or in Bash. |
2021-02-03 06:01:26 +0100 | Brain007 | (~Brain007@124.123.104.217) |
2021-02-03 06:01:35 +0100 | elliott__ | (~elliott@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 265 seconds) |
2021-02-03 06:01:41 +0100 | <Axman6> | what whgat is C best for? What is C++ best for? What is Java best for? What is Python best for? |
2021-02-03 06:02:23 +0100 | <average> | there are answers for those.. |
2021-02-03 06:02:25 +0100 | <Axman6> | they have their niches of course, but all of them can be used for writing programs, so why should we have to limit what Haskell can be used for? |
2021-02-03 06:02:31 +0100 | mmohammadi9812 | (~mmohammad@188.210.119.142) (Ping timeout: 256 seconds) |
2021-02-03 06:02:32 +0100 | <monochrom> | Axman6, that's useless. They already have wrong answers for those question. They now want us to give similarly wrong answers for Haskell. You are just proving their point. |
2021-02-03 06:02:38 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 06:02:44 +0100 | <average> | but.. are you suggesting it's down to a feeling/touchy-feely/office-politics decision-making ? |
2021-02-03 06:02:52 +0100 | <average> | and that in fact, it doesn't even matter what it's best at ? |
2021-02-03 06:02:56 +0100 | <Axman6> | of course it is, humans wrote programs |
2021-02-03 06:03:01 +0100 | <Axman6> | write* |
2021-02-03 06:03:15 +0100 | raym | (~ray@45.64.220.55) (Quit: leaving) |
2021-02-03 06:03:29 +0100 | ixaxaar | (~ixaxaar@49.207.210.215) |
2021-02-03 06:03:31 +0100 | raym | (~ray@45.64.220.55) |
2021-02-03 06:03:54 +0100 | <glguy> | There's no black and white set of things general purpose programming languages as best/worst at. You just have to weight the various strengths and weakness each has against the project at hand |
2021-02-03 06:04:08 +0100 | Brain007 | (~Brain007@124.123.104.217) (Remote host closed the connection) |
2021-02-03 06:04:47 +0100 | <Axman6> | I have written web services in Haskell for governments, data processing systems for large private companies, and now this financial system which interacts with banks and stock brokers. where is the commoin niche there? People have written operating systems, and systems for producing hard real time embedded code |
2021-02-03 06:05:02 +0100 | lep-delete | (~lep@94.31.81.183) |
2021-02-03 06:06:13 +0100 | cocreature | (~cocreatur@eirene.uberspace.de) |
2021-02-03 06:06:20 +0100 | <monochrom> | https://www.microsoft.com/en-us/research/blog/lambda-the-ultimatae-excel-worksheet-function/ while we are at it. (And SPJ again.) |
2021-02-03 06:06:29 +0100 | mmohammadi9812 | (~mmohammad@188.210.119.142) |
2021-02-03 06:06:33 +0100 | mmohammadi9812 | (~mmohammad@188.210.119.142) (Client Quit) |
2021-02-03 06:06:49 +0100 | <Axman6> | "No one uses functional programming" "Wait, no, not like that!" |
2021-02-03 06:06:52 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2021-02-03 06:07:07 +0100 | <monochrom> | My friend independently found https://visualstudiomagazine.com/articles/2021/01/27/excel-lambda.aspx?m=1 |
2021-02-03 06:07:23 +0100 | Guest18945 | (~lep@94.31.102.183) (Ping timeout: 265 seconds) |
2021-02-03 06:07:37 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 256 seconds) |
2021-02-03 06:08:36 +0100 | <Axman6> | My dad shared one of those articles with me a few weeks ago |
2021-02-03 06:09:10 +0100 | <Axman6> | is... Excel just Lisp? D: |
2021-02-03 06:09:27 +0100 | <monochrom> | Nah it doesn't have call/cc |
2021-02-03 06:09:33 +0100 | <Axman6> | phew |
2021-02-03 06:09:50 +0100 | <monochrom> | Does Excel have eval? |
2021-02-03 06:10:42 +0100 | <Axman6> | ... yes, called EVALUATE |
2021-02-03 06:10:45 +0100 | <average> | Does Haskell have parser generators, and generally the building blocks to produce compilers and interpreters bult into the language itself or at least in stdlib or.. at least in haskell-platfom ? |
2021-02-03 06:10:45 +0100 | <monochrom> | In this sense: eval("A1+A2") is equivalent to =A1+A2 |
2021-02-03 06:11:03 +0100 | <average> | I mean maybe this is where Haskell shines? Building other languages.. |
2021-02-03 06:11:05 +0100 | <Axman6> | gmm, maybe not quite: https://www.myonlinetraininghub.com/excel-factor-12-secret-evaluate-function |
2021-02-03 06:11:50 +0100 | soft-warm | (4408f588@ip68-8-245-136.sd.sd.cox.net) |
2021-02-03 06:13:15 +0100 | np | (znc@152.67.162.71) ("WeeChat 2.9") |
2021-02-03 06:13:49 +0100 | nerdypepper | (znc@152.67.162.71) |
2021-02-03 06:13:57 +0100 | <monochrom> | I think it qualifies, even though a bit inconvenient to use. |
2021-02-03 06:14:23 +0100 | emptyflask | (~jon@136.49.71.178) (Quit: WeeChat 2.9) |
2021-02-03 06:15:05 +0100 | <average> | "While Haskell is a general purpose language that can be used in any domain and use case, it is ideally suited for proprietary business logic and data analysis[..]" says huffingyon post |
2021-02-03 06:15:16 +0100 | <average> | So proprietary business logic huh ? |
2021-02-03 06:15:39 +0100 | <Axman6> | yeah, a.k.a, "programs" |
2021-02-03 06:15:39 +0100 | <average> | I have never seen a language sold like that.. |
2021-02-03 06:15:47 +0100 | <glguy> | Is the idea if you say something wrong that someone will correct you and keep it going? |
2021-02-03 06:15:58 +0100 | <average> | Axman6: no but the key word here is proprietary |
2021-02-03 06:16:00 +0100 | <Axman6> | specifically, "programs that do useful things" |
2021-02-03 06:16:17 +0100 | <average> | So they are literally saying "Write your core business in Haskell" |
2021-02-03 06:16:19 +0100 | <Axman6> | what's your point? |
2021-02-03 06:16:23 +0100 | <Axman6> | yes |
2021-02-03 06:16:41 +0100 | <monochrom> | I'm sure that shallow level of understanding is perfect for MBAs. You are ripe to go get an MBA for yourself and become a management type. |
2021-02-03 06:18:07 +0100 | rayyyy | (~nanoz@gateway/tor-sasl/nanoz) |
2021-02-03 06:18:35 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 06:18:42 +0100 | noctux | (~noctux@unaffiliated/noctux) |
2021-02-03 06:19:06 +0100 | Saukk | (~Saukk@83-148-239-3.dynamic.lounea.fi) (Remote host closed the connection) |
2021-02-03 06:19:43 +0100 | shiraeeshi | (~shiraeesh@77.94.25.42) (Quit: Konversation terminated!) |
2021-02-03 06:19:56 +0100 | shiraeeshi | (~shiraeesh@77.94.25.42) |
2021-02-03 06:23:21 +0100 | noctux | (~noctux@unaffiliated/noctux) (Ping timeout: 264 seconds) |
2021-02-03 06:23:32 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 256 seconds) |
2021-02-03 06:24:17 +0100 | soft-warm | (4408f588@ip68-8-245-136.sd.sd.cox.net) (Ping timeout: 248 seconds) |
2021-02-03 06:28:29 +0100 | deviantfero | (~deviantfe@190.150.27.58) (Quit: WeeChat 3.0) |
2021-02-03 06:29:10 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 06:30:00 +0100 | plutoniix | (~q@ppp-27-55-78-115.revip3.asianet.co.th) (Read error: Connection reset by peer) |
2021-02-03 06:33:31 +0100 | Wuzzy | (~Wuzzy@p5b0df175.dip0.t-ipconnect.de) |
2021-02-03 06:33:52 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 258 seconds) |
2021-02-03 06:33:57 +0100 | noctux | (~noctux@unaffiliated/noctux) |
2021-02-03 06:34:35 +0100 | <Axman6> | Harsh |
2021-02-03 06:34:45 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 06:38:28 +0100 | noctux | (~noctux@unaffiliated/noctux) (Ping timeout: 258 seconds) |
2021-02-03 06:38:52 +0100 | <Axman6> | average: how much of Facebook's core business is spam filtering? Clearly it's working for them, it's a substantial part of keeping the platform useful. Should they not have chosen Haskell? |
2021-02-03 06:39:07 +0100 | <Axman6> | Should the various banks which rely on Haskell not? |
2021-02-03 06:39:16 +0100 | noctux | (~noctux@unaffiliated/noctux) |
2021-02-03 06:39:23 +0100 | <glguy> | Should we not be chatting from Haskell?? |
2021-02-03 06:39:36 +0100 | <Axman6> | I am :) |
2021-02-03 06:39:48 +0100 | Axman6 | <3 glguy |
2021-02-03 06:39:54 +0100 | <Axman6> | I should probably update glirc... |
2021-02-03 06:40:08 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 272 seconds) |
2021-02-03 06:40:41 +0100 | <glguy> | Depending on how far back you are there were a few config changes |
2021-02-03 06:40:51 +0100 | <glguy> | mostly around sasl; let me know if you need any help |
2021-02-03 06:41:04 +0100 | <Axman6> | yeah I think I ran into those a while ago |
2021-02-03 06:41:49 +0100 | geowiesnot | (~user@87-89-181-157.abo.bbox.fr) |
2021-02-03 06:42:38 +0100 | plutoniix | (~q@184.82.199.202) |
2021-02-03 06:45:18 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 06:46:27 +0100 | __minoru__shirae | (~shiraeesh@109.166.56.27) |
2021-02-03 06:47:21 +0100 | shiraeeshi | (~shiraeesh@77.94.25.42) (Ping timeout: 264 seconds) |
2021-02-03 06:47:52 +0100 | <Axman6> | Who do we praise to thank for the haskell type system? I'm reviewing some changes at the moment which are _massive_, hundreds of files changed, and all those changes were caught by the type system after a few relatively minor changes |
2021-02-03 06:48:16 +0100 | <Axman6> | Hindley? Milner? SPJ? |
2021-02-03 06:49:05 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:fc44:c2d6:2605:3850) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-02-03 06:49:25 +0100 | geowiesnot | (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 240 seconds) |
2021-02-03 06:49:56 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 06:50:44 +0100 | pagnol | (~user@n112120223083.netvigator.com) (Ping timeout: 258 seconds) |
2021-02-03 06:50:51 +0100 | Sheilong | (uid293653@gateway/web/irccloud.com/x-vebmjsskufunaflq) () |
2021-02-03 06:52:03 +0100 | pjb | (~t@2a01cb04063ec50009186fab83b6d91d.ipv6.abo.wanadoo.fr) (Ping timeout: 272 seconds) |
2021-02-03 06:53:50 +0100 | Tops21 | (~Tobias@dyndsl-095-033-093-253.ewe-ip-backbone.de) |
2021-02-03 06:54:58 +0100 | <monochrom> | Hindley, Milner, Damas, Wadler (for type classes) |
2021-02-03 06:55:18 +0100 | <Axman6> | Wadler it is then |
2021-02-03 06:55:27 +0100 | <monochrom> | If you step outside of Haskell 2020 then you can include SPJ. |
2021-02-03 06:56:29 +0100 | Tops2 | (~Tobias@dyndsl-095-033-022-141.ewe-ip-backbone.de) (Ping timeout: 258 seconds) |
2021-02-03 07:02:39 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2021-02-03 07:03:45 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 07:04:34 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) |
2021-02-03 07:05:26 +0100 | stef204 | (~stef204@unaffiliated/stef-204/x-384198) (Ping timeout: 264 seconds) |
2021-02-03 07:08:52 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 256 seconds) |
2021-02-03 07:09:09 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 07:09:24 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 07:09:30 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 07:09:46 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 07:10:09 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) (Ping timeout: 264 seconds) |
2021-02-03 07:11:17 +0100 | dnlkrgr | (~dnlkrgr@HSI-KBW-046-005-005-235.hsi8.kabel-badenwuerttemberg.de) |
2021-02-03 07:15:06 +0100 | nineonine | (~nineonine@50.216.62.2) (Ping timeout: 256 seconds) |
2021-02-03 07:16:00 +0100 | desophos | (~desophos@2601:249:1680:a570:a1da:e51c:3dc0:1f5c) (Quit: Leaving) |
2021-02-03 07:16:40 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 07:16:48 +0100 | rzmt | (~rzmt@87-92-180-112.rev.dnainternet.fi) (Ping timeout: 256 seconds) |
2021-02-03 07:20:12 +0100 | seliopou | (seliopou@entropy.tmok.com) (Ping timeout: 256 seconds) |
2021-02-03 07:20:51 +0100 | seliopou | (seliopou@entropy.tmok.com) |
2021-02-03 07:20:51 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 07:21:01 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 07:22:25 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 07:22:38 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 07:22:45 +0100 | DTZUZU | (~DTZUZU@205.ip-149-56-132.net) |
2021-02-03 07:25:37 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 07:27:16 +0100 | dnlkrgr | (~dnlkrgr@HSI-KBW-046-005-005-235.hsi8.kabel-badenwuerttemberg.de) (Ping timeout: 240 seconds) |
2021-02-03 07:29:05 +0100 | Wuzzy | (~Wuzzy@p5b0df175.dip0.t-ipconnect.de) (Remote host closed the connection) |
2021-02-03 07:29:12 +0100 | pjb | (~t@2a01cb04063ec5009d3731745487fa1c.ipv6.abo.wanadoo.fr) |
2021-02-03 07:31:30 +0100 | rdivyanshu | (uid322626@gateway/web/irccloud.com/x-mtieidadejfsxoah) (Quit: Connection closed for inactivity) |
2021-02-03 07:34:53 +0100 | jamm_ | (~jamm@unaffiliated/jamm) |
2021-02-03 07:36:45 +0100 | jamm_ | (~jamm@unaffiliated/jamm) (Remote host closed the connection) |
2021-02-03 07:37:20 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 07:42:06 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 07:43:39 +0100 | lordie | (~lordie@168.194.157.104) |
2021-02-03 07:49:35 +0100 | nineonine | (~nineonine@50.216.62.2) |
2021-02-03 07:50:14 +0100 | rayyyy | (~nanoz@gateway/tor-sasl/nanoz) (Remote host closed the connection) |
2021-02-03 07:51:14 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 07:53:59 +0100 | nineonine | (~nineonine@50.216.62.2) (Ping timeout: 258 seconds) |
2021-02-03 07:54:36 +0100 | paintcan` | (~user@cpe-69-206-241-99.nyc.res.rr.com) (Ping timeout: 240 seconds) |
2021-02-03 07:55:54 +0100 | Lycurgus | (~niemand@cpe-45-46-139-165.buffalo.res.rr.com) (Ping timeout: 256 seconds) |
2021-02-03 07:56:07 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 272 seconds) |
2021-02-03 07:56:17 +0100 | __minoru__shirae | (~shiraeesh@109.166.56.27) (Ping timeout: 258 seconds) |
2021-02-03 08:00:24 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
2021-02-03 08:02:29 +0100 | asheshambasta | (~user@ptr-e1lysavd5pllo57cw5p.18120a2.ip6.access.telenet.be) |
2021-02-03 08:04:20 +0100 | poljar1 | (~poljar@93-139-54-120.adsl.net.t-com.hr) (Ping timeout: 258 seconds) |
2021-02-03 08:06:26 +0100 | catt | (~r@31.124.181.226) |
2021-02-03 08:07:20 +0100 | geowiesnot | (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) |
2021-02-03 08:07:46 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 08:08:10 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 08:08:10 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 08:08:23 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 08:09:07 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 08:09:07 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 08:09:18 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 08:09:51 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) |
2021-02-03 08:13:48 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 246 seconds) |
2021-02-03 08:14:51 +0100 | danvet | (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) |
2021-02-03 08:15:06 +0100 | bitmagie | (~Thunderbi@200116b806108700484948e27a931f58.dip.versatel-1u1.de) |
2021-02-03 08:16:46 +0100 | thc202 | (~thc202@unaffiliated/thc202) |
2021-02-03 08:17:16 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 08:18:05 +0100 | _ht | (~quassel@82-169-194-8.biz.kpn.net) |
2021-02-03 08:18:29 +0100 | pagnol | (~user@n112120223083.netvigator.com) |
2021-02-03 08:18:40 +0100 | j2t | (~user@84.122.202.215.dyn.user.ono.com) |
2021-02-03 08:20:35 +0100 | rzmt | (~rzmt@87-92-180-112.rev.dnainternet.fi) |
2021-02-03 08:26:17 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) |
2021-02-03 08:27:04 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 08:27:14 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) (Remote host closed the connection) |
2021-02-03 08:27:47 +0100 | petersen | (~petersen@redhat/juhp) (Ping timeout: 272 seconds) |
2021-02-03 08:28:15 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) |
2021-02-03 08:31:25 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 08:32:42 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) (Ping timeout: 258 seconds) |
2021-02-03 08:33:02 +0100 | polyphem | (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (Ping timeout: 260 seconds) |
2021-02-03 08:34:29 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-02-03 08:36:04 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 08:36:49 +0100 | catt | (~r@31.124.181.226) (Remote host closed the connection) |
2021-02-03 08:38:05 +0100 | geowiesnot | (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 240 seconds) |
2021-02-03 08:39:11 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
2021-02-03 08:40:25 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 08:42:38 +0100 | average | (uid473595@gateway/web/irccloud.com/x-rtojiysrxktngdss) (Quit: Connection closed for inactivity) |
2021-02-03 08:43:54 +0100 | Sgeo | (~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer) |
2021-02-03 08:45:02 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
2021-02-03 08:45:56 +0100 | lawid | (~quassel@dslb-090-186-099-248.090.186.pools.vodafone-ip.de) (Ping timeout: 240 seconds) |
2021-02-03 08:48:30 +0100 | Guest62723 | (~ds@139.28.218.148) (Remote host closed the connection) |
2021-02-03 08:50:04 +0100 | forgottenone | (~forgotten@176.42.24.1) |
2021-02-03 08:50:20 +0100 | lawid | (~quassel@dslb-090-186-199-238.090.186.pools.vodafone-ip.de) |
2021-02-03 08:50:47 +0100 | howdoi | (uid224@gateway/web/irccloud.com/x-dcvsnpkbnllmgstf) (Quit: Connection closed for inactivity) |
2021-02-03 08:52:22 +0100 | abian | (~abian@185.204.1.185) |
2021-02-03 08:52:41 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 08:52:44 +0100 | abian | Guest38429 |
2021-02-03 08:57:12 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 246 seconds) |
2021-02-03 09:00:07 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) |
2021-02-03 09:01:52 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) (Remote host closed the connection) |
2021-02-03 09:02:30 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) |
2021-02-03 09:03:12 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 09:07:12 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) (Ping timeout: 258 seconds) |
2021-02-03 09:07:38 +0100 | catt | (~r@31.124.181.226) |
2021-02-03 09:07:49 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 256 seconds) |
2021-02-03 09:08:00 +0100 | bitmagie | (~Thunderbi@200116b806108700484948e27a931f58.dip.versatel-1u1.de) (Quit: bitmagie) |
2021-02-03 09:13:20 +0100 | polyrain | (~polyrain@2001:8003:e4d8:4101:5d31:983b:a5a6:1f68) |
2021-02-03 09:14:27 +0100 | dhouthoo | (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be) |
2021-02-03 09:16:00 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) |
2021-02-03 09:16:05 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) |
2021-02-03 09:19:21 +0100 | polyrain | (~polyrain@2001:8003:e4d8:4101:5d31:983b:a5a6:1f68) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-02-03 09:20:46 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 09:22:27 +0100 | charukiewicz | (~charukiew@irouteince04.i.subnet.rcn.com) (Quit: charukiewicz) |
2021-02-03 09:22:37 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) (Ping timeout: 260 seconds) |
2021-02-03 09:25:33 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 265 seconds) |
2021-02-03 09:27:20 +0100 | pagnol | (~user@n112120223083.netvigator.com) (Remote host closed the connection) |
2021-02-03 09:32:13 +0100 | polyrain | (~polyrain@2001:8003:e4d8:4101:5d31:983b:a5a6:1f68) |
2021-02-03 09:35:30 +0100 | rdivyanshu | (uid322626@gateway/web/irccloud.com/x-lomphnhxhpzqtszd) |
2021-02-03 09:35:39 +0100 | berberman | (~berberman@unaffiliated/berberman) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-02-03 09:35:41 +0100 | miguel_clean | (~Miguel@89-72-187-203.dynamic.chello.pl) |
2021-02-03 09:36:00 +0100 | berberman | (~berberman@unaffiliated/berberman) |
2021-02-03 09:36:48 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 09:37:18 +0100 | jamm_ | (~jamm@unaffiliated/jamm) |
2021-02-03 09:37:20 +0100 | carlomagno | (~cararell@148.87.23.7) (Remote host closed the connection) |
2021-02-03 09:37:30 +0100 | concept2 | (~concept2@unaffiliated/tubo) (Quit: Ping timeout (120 seconds)) |
2021-02-03 09:37:52 +0100 | carlomagno | (~cararell@148.87.23.7) |
2021-02-03 09:41:17 +0100 | concept2 | (~concept2@unaffiliated/tubo) |
2021-02-03 09:41:42 +0100 | jamm_ | (~jamm@unaffiliated/jamm) (Ping timeout: 258 seconds) |
2021-02-03 09:41:52 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 256 seconds) |
2021-02-03 09:42:25 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 09:44:13 +0100 | Tops21 | (~Tobias@dyndsl-095-033-093-253.ewe-ip-backbone.de) (Read error: Connection reset by peer) |
2021-02-03 09:45:46 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:d018:6f9c:3910:36c8) (Remote host closed the connection) |
2021-02-03 09:47:20 +0100 | wz1000 | (~wz1000@static.11.113.47.78.clients.your-server.de) |
2021-02-03 09:47:21 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 264 seconds) |
2021-02-03 09:47:43 +0100 | Yumasi | (~guillaume@2a01:e0a:5cb:4430:572d:5f36:41d6:1475) |
2021-02-03 09:51:26 +0100 | rajivr | (uid269651@gateway/web/irccloud.com/x-njsalrgkfquqyrca) (Quit: Connection closed for inactivity) |
2021-02-03 09:51:54 +0100 | vikid | (~vikid@bba428846.alshamil.net.ae) (Remote host closed the connection) |
2021-02-03 09:52:01 +0100 | frozenErebus | (~frozenEre@37.231.239.43) (Ping timeout: 256 seconds) |
2021-02-03 09:52:16 +0100 | vikid | (~vikid@83.110.238.94) |
2021-02-03 09:56:05 +0100 | Major_Biscuit | (~Major_Bis@82-169-100-198.biz.kpn.net) |
2021-02-03 09:59:09 +0100 | raichoo | (~raichoo@dslb-188-109-063-185.188.109.pools.vodafone-ip.de) |
2021-02-03 10:00:00 +0100 | Noughtmare[m] | (naughtmare@gateway/shell/matrix.org/x-vwywabaoaoohawps) (Quit: Idle for 30+ days) |
2021-02-03 10:00:17 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 10:00:49 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-02-03 10:01:38 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Client Quit) |
2021-02-03 10:02:05 +0100 | Tuplanolla | (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) |
2021-02-03 10:02:05 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 10:02:36 +0100 | kuribas | (~user@ptr-25vy0i8e6su9fkcjvkw.18120a2.ip6.access.telenet.be) |
2021-02-03 10:03:25 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 10:05:19 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 272 seconds) |
2021-02-03 10:07:30 +0100 | geowiesnot | (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) |
2021-02-03 10:08:05 +0100 | chele | (~chele@ip5b40237d.dynamic.kabel-deutschland.de) |
2021-02-03 10:08:30 +0100 | mouseghost | (~draco@wikipedia/desperek) |
2021-02-03 10:08:36 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 10:09:24 +0100 | Franciman | (~francesco@host-95-235-155-82.retail.telecomitalia.it) |
2021-02-03 10:12:49 +0100 | pera | (~pera@unaffiliated/pera) |
2021-02-03 10:14:44 +0100 | geowiesnot | (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 256 seconds) |
2021-02-03 10:16:53 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 10:18:52 +0100 | LKoen | (~LKoen@252.248.88.92.rev.sfr.net) |
2021-02-03 10:21:02 +0100 | jluttine | (~jluttine@85-23-95-149.bb.dnainternet.fi) (Ping timeout: 264 seconds) |
2021-02-03 10:21:16 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 10:23:42 +0100 | chris8142 | (~chris8142@srvnet-01-071.ikbnet.co.at) |
2021-02-03 10:23:45 +0100 | fearless_man | (~fearless_@152.32.100.101) (Read error: Connection reset by peer) |
2021-02-03 10:24:56 +0100 | coot | (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) |
2021-02-03 10:29:49 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 10:30:22 +0100 | petersen | (~petersen@redhat/juhp) |
2021-02-03 10:33:02 +0100 | Varis | (~Tadas@unaffiliated/varis) |
2021-02-03 10:33:54 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 10:34:40 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 265 seconds) |
2021-02-03 10:35:42 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds) |
2021-02-03 10:39:41 +0100 | livvy | (~livvy@gateway/tor-sasl/livvy) (Quit: No Ping reply in 180 seconds.) |
2021-02-03 10:40:35 +0100 | livvy | (~livvy@gateway/tor-sasl/livvy) |
2021-02-03 10:40:59 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2021-02-03 10:43:02 +0100 | polyrain | (~polyrain@2001:8003:e4d8:4101:5d31:983b:a5a6:1f68) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-02-03 10:43:19 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-02-03 10:43:24 +0100 | lordie | (~lordie@168.194.157.104) (Remote host closed the connection) |
2021-02-03 10:43:32 +0100 | knupfer | (~Thunderbi@mue-88-130-61-250.dsl.tropolys.de) |
2021-02-03 10:44:15 +0100 | ubert | (~Thunderbi@p200300ecdf25d95fe6b318fffe838f33.dip0.t-ipconnect.de) |
2021-02-03 10:45:13 +0100 | ubert | (~Thunderbi@p200300ecdf25d95fe6b318fffe838f33.dip0.t-ipconnect.de) (Remote host closed the connection) |
2021-02-03 10:45:27 +0100 | rajivr | (uid269651@gateway/web/irccloud.com/x-rezdfhgnedgqggyb) |
2021-02-03 10:46:33 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:533:4549:6b9e:c969) |
2021-02-03 10:49:06 +0100 | fendor | (~fendor@91.141.2.117.wireless.dyn.drei.com) |
2021-02-03 10:50:35 +0100 | Itkovian | (~Itkovian@185.194.187.10) |
2021-02-03 10:51:02 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:533:4549:6b9e:c969) (Ping timeout: 264 seconds) |
2021-02-03 10:51:18 +0100 | hexo | (~hexo@gateway/tor-sasl/hexo) (Remote host closed the connection) |
2021-02-03 10:51:18 +0100 | srk | (~sorki@gateway/tor-sasl/sorki) (Remote host closed the connection) |
2021-02-03 10:51:20 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) |
2021-02-03 10:51:40 +0100 | hexo | (~hexo@gateway/tor-sasl/hexo) |
2021-02-03 10:51:40 +0100 | srk | (~sorki@gateway/tor-sasl/sorki) |
2021-02-03 10:51:56 +0100 | <ij> | I read the first paragraph about performance and strictness in the wiki. -O gives me a 5x speedup :) |
2021-02-03 10:51:58 +0100 | polyrain | (~polyrain@2001:8003:e4d8:4101:5d31:983b:a5a6:1f68) |
2021-02-03 10:53:16 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 256 seconds) |
2021-02-03 10:56:29 +0100 | danza | (~francesco@151.53.69.219) |
2021-02-03 10:56:33 +0100 | vicfred | (vicfred@gateway/vpn/mullvad/vicfred) (Ping timeout: 246 seconds) |
2021-02-03 10:58:18 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 10:59:36 +0100 | gehmehgeh | (~ircuser1@gateway/tor-sasl/gehmehgeh) |
2021-02-03 10:59:49 +0100 | kritzefitz | (~kritzefit@212.86.56.80) |
2021-02-03 11:01:49 +0100 | ph88 | (~ph88@2a02:8109:9e00:7e5c:ade8:bbad:5afb:2c7) |
2021-02-03 11:04:50 +0100 | sveit | (~sveit@45.77.0.246) (Quit: Bye) |
2021-02-03 11:04:59 +0100 | jamm_ | (~jamm@unaffiliated/jamm) |
2021-02-03 11:05:09 +0100 | sveit | (~sveit@45.77.0.246) |
2021-02-03 11:05:44 +0100 | <ph88> | does someone know a package where Sørensen Dice is implemented ? |
2021-02-03 11:05:58 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 11:15:30 +0100 | frozenErebus | (~frozenEre@37.231.239.43) |
2021-02-03 11:22:36 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 11:25:25 +0100 | j2t | (~user@84.122.202.215.dyn.user.ono.com) (Ping timeout: 265 seconds) |
2021-02-03 11:26:00 +0100 | Lord_of_Life_ | (~Lord@unaffiliated/lord-of-life/x-0885362) |
2021-02-03 11:26:31 +0100 | quinn | (~quinn@c-73-223-224-163.hsd1.ca.comcast.net) (Quit: ZNC 1.8.1 - https://znc.in) |
2021-02-03 11:29:32 +0100 | Lord_of_Life | (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 256 seconds) |
2021-02-03 11:29:39 +0100 | Lord_of_Life_ | Lord_of_Life |
2021-02-03 11:35:05 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 11:37:32 +0100 | Itkovian | (~Itkovian@185.194.187.10) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-02-03 11:39:46 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 11:41:42 +0100 | hnOsmium0001 | (uid453710@gateway/web/irccloud.com/x-xrwggmicrnaussaz) (Quit: Connection closed for inactivity) |
2021-02-03 11:41:42 +0100 | danza | (~francesco@151.53.69.219) (Read error: Connection reset by peer) |
2021-02-03 11:45:07 +0100 | rdivyanshu | (uid322626@gateway/web/irccloud.com/x-lomphnhxhpzqtszd) (Quit: Connection closed for inactivity) |
2021-02-03 11:47:32 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:cd3d:a18d:b2f7:b84a) |
2021-02-03 11:50:16 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-02-03 11:50:21 +0100 | pera | (~pera@unaffiliated/pera) (Quit: leaving) |
2021-02-03 11:51:29 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 11:52:00 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 11:52:14 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:cd3d:a18d:b2f7:b84a) (Ping timeout: 264 seconds) |
2021-02-03 11:53:35 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) |
2021-02-03 11:56:05 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 11:56:39 +0100 | <ph88> | can you test functions that are not exported by a module ? |
2021-02-03 11:57:06 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
2021-02-03 11:57:21 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 11:58:38 +0100 | m0rphism1 | (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) |
2021-02-03 11:58:56 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) (Ping timeout: 258 seconds) |
2021-02-03 12:01:05 +0100 | LKoen | (~LKoen@252.248.88.92.rev.sfr.net) (Read error: Connection reset by peer) |
2021-02-03 12:01:40 +0100 | LKoen | (~LKoen@252.248.88.92.rev.sfr.net) |
2021-02-03 12:02:21 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
2021-02-03 12:02:21 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 12:02:31 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 12:02:44 +0100 | vicfred | (vicfred@gateway/vpn/mullvad/vicfred) |
2021-02-03 12:02:54 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 12:08:05 +0100 | Noldorin | (~noldorin@unaffiliated/noldorin) |
2021-02-03 12:09:17 +0100 | xff0x_ | (~xff0x@2001:1a81:536f:2100:534e:8c50:d828:cc61) (Ping timeout: 258 seconds) |
2021-02-03 12:09:40 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 12:09:55 +0100 | <edwardk> | ph88: you should be able to implement a pretty nice version of that on top of something like hyperloglog in an efficient amount of space. not what you asked, but the first thing that came to mind |
2021-02-03 12:10:17 +0100 | xff0x_ | (~xff0x@2001:1a81:536f:2100:2f3c:8f56:462:e9ab) |
2021-02-03 12:11:07 +0100 | <ph88> | about Sørensen Dice ? |
2021-02-03 12:11:18 +0100 | <edwardk> | yeah |
2021-02-03 12:13:38 +0100 | Itkovian | (~Itkovian@178-117-76-63.access.telenet.be) |
2021-02-03 12:13:56 +0100 | danvet_ | (~danvet@212-51-149-181.fiber7.init7.net) |
2021-02-03 12:14:39 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 12:15:58 +0100 | LKoen | (~LKoen@252.248.88.92.rev.sfr.net) (Read error: Connection reset by peer) |
2021-02-03 12:16:33 +0100 | LKoen | (~LKoen@252.248.88.92.rev.sfr.net) |
2021-02-03 12:18:52 +0100 | danvet_ | (~danvet@212-51-149-181.fiber7.init7.net) (Ping timeout: 258 seconds) |
2021-02-03 12:19:35 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
2021-02-03 12:19:45 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 12:20:24 +0100 | <edwardk> | dice x y = 2 * (fromIntegral <$> intersectionSize [x,y]) / (fromIntegral <$> (size x + size y)) |
2021-02-03 12:20:24 +0100 | <edwardk> | kind of blechy use of the Approximate Int64s there. |
2021-02-03 12:20:31 +0100 | jamm_ | (~jamm@unaffiliated/jamm) (Remote host closed the connection) |
2021-02-03 12:21:10 +0100 | <edwardk> | just like the fact that that uses the limited functionality offered by hyperloglog quite well |
2021-02-03 12:22:22 +0100 | Lycurgus | (~niemand@cpe-45-46-139-165.buffalo.res.rr.com) |
2021-02-03 12:22:53 +0100 | <edwardk> | er i don't remember if approximates have a num instance actually |
2021-02-03 12:24:14 +0100 | TommyC | (~TommyC@unaffiliated/sepulchralbloom) (Ping timeout: 258 seconds) |
2021-02-03 12:24:17 +0100 | jamm_ | (~jamm@unaffiliated/jamm) |
2021-02-03 12:24:45 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-02-03 12:25:34 +0100 | aveltras | (uid364989@gateway/web/irccloud.com/x-zridcshpxaalituf) |
2021-02-03 12:25:42 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 12:26:04 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 12:29:09 +0100 | viluon | (uid453725@gateway/web/irccloud.com/x-ucvzxcoudognhctl) |
2021-02-03 12:30:32 +0100 | jamm_ | (~jamm@unaffiliated/jamm) (Remote host closed the connection) |
2021-02-03 12:30:42 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 246 seconds) |
2021-02-03 12:30:46 +0100 | LKoen | (~LKoen@252.248.88.92.rev.sfr.net) (Read error: Connection reset by peer) |
2021-02-03 12:31:38 +0100 | LKoen | (~LKoen@252.248.88.92.rev.sfr.net) |
2021-02-03 12:31:57 +0100 | TommyC | (~TommyC@unaffiliated/sepulchralbloom) |
2021-02-03 12:37:04 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-02-03 12:37:22 +0100 | meck | (~meck@li1809-18.members.linode.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-02-03 12:39:07 +0100 | ph88^ | (~ph88@2a02:8109:9e00:7e5c:ade8:bbad:5afb:2c7) |
2021-02-03 12:41:30 +0100 | meck | (~meck@li1809-18.members.linode.com) |
2021-02-03 12:41:47 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 265 seconds) |
2021-02-03 12:42:54 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 12:42:55 +0100 | ph88 | (~ph88@2a02:8109:9e00:7e5c:ade8:bbad:5afb:2c7) (Ping timeout: 272 seconds) |
2021-02-03 12:45:45 +0100 | ukari | (~ukari@unaffiliated/ukari) (Remote host closed the connection) |
2021-02-03 12:46:10 +0100 | LKoen | (~LKoen@252.248.88.92.rev.sfr.net) (Read error: Connection reset by peer) |
2021-02-03 12:46:43 +0100 | LKoen | (~LKoen@252.248.88.92.rev.sfr.net) |
2021-02-03 12:47:01 +0100 | ukari | (~ukari@unaffiliated/ukari) |
2021-02-03 12:47:05 +0100 | Major_Biscuit | (~Major_Bis@82-169-100-198.biz.kpn.net) (Ping timeout: 240 seconds) |
2021-02-03 12:47:30 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 246 seconds) |
2021-02-03 12:47:42 +0100 | turion | (~turion@2a02:810d:8abf:c4a8:7417:1a58:4f1d:bffb) |
2021-02-03 12:48:05 +0100 | mmohammadi9812 | (~mmohammad@198.12.95.171) |
2021-02-03 12:49:41 +0100 | Major_Biscuit | (~Major_Bis@x065156.citg-m.tudelft.nl) |
2021-02-03 12:51:25 +0100 | plutoniix | (~q@184.82.199.202) (Quit: Leaving) |
2021-02-03 12:52:48 +0100 | joseph1 | (~joseph@cpe-65-31-18-174.insight.res.rr.com) |
2021-02-03 12:54:30 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-02-03 12:58:40 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 13:01:19 +0100 | joseph1 | (~joseph@cpe-65-31-18-174.insight.res.rr.com) ("WeeChat 2.8") |
2021-02-03 13:01:26 +0100 | ubert | (~Thunderbi@2a02:8109:9880:303c:54a5:5901:5ae5:e9e0) |
2021-02-03 13:01:28 +0100 | poljar | (~poljar@78-3-15-134.adsl.net.t-com.hr) |
2021-02-03 13:03:16 +0100 | swarmcollective | (~joseph@cpe-65-31-18-174.insight.res.rr.com) |
2021-02-03 13:03:22 +0100 | geyaeb | (~geyaeb@gateway/tor-sasl/geyaeb) (Remote host closed the connection) |
2021-02-03 13:03:42 +0100 | geyaeb | (~geyaeb@gateway/tor-sasl/geyaeb) |
2021-02-03 13:03:43 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 13:06:38 +0100 | damhiya | (~damhiya@211.49.186.236) |
2021-02-03 13:07:24 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 13:08:54 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Client Quit) |
2021-02-03 13:09:02 +0100 | metreo | (~Thunderbi@unaffiliated/metreo) |
2021-02-03 13:09:16 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 13:09:31 +0100 | polyrain | (~polyrain@2001:8003:e4d8:4101:5d31:983b:a5a6:1f68) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-02-03 13:09:32 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) |
2021-02-03 13:14:04 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 258 seconds) |
2021-02-03 13:14:10 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) (Ping timeout: 265 seconds) |
2021-02-03 13:14:19 +0100 | <Taneb> | How do I make a template haskell Exp that represents the expression "Foo {..}" (with record wildcards) |
2021-02-03 13:14:57 +0100 | Stanley00 | (~stanley00@unaffiliated/stanley00) () |
2021-02-03 13:16:10 +0100 | <opqdonut> | how about just doing something like $(show [|Foo {..}|]) to find out? |
2021-02-03 13:16:38 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 13:16:48 +0100 | <Taneb> | RecConE name [], apparently, which is the same as for "Foo {}", which makes me suspicious |
2021-02-03 13:17:07 +0100 | <liyang> | Does your Foo actually have any fields? |
2021-02-03 13:17:10 +0100 | <Taneb> | Yes |
2021-02-03 13:17:28 +0100 | <liyang> | How odd. |
2021-02-03 13:19:22 +0100 | <Taneb> | Ah, [|let x = 1; y = True in Foo {..}|] gets something more complicated |
2021-02-03 13:19:34 +0100 | <Taneb> | It's desugaring the record wildcard for me |
2021-02-03 13:19:56 +0100 | vicfred | (vicfred@gateway/vpn/mullvad/vicfred) (Read error: Connection reset by peer) |
2021-02-03 13:19:58 +0100 | <opqdonut> | makes sense |
2021-02-03 13:20:06 +0100 | <Taneb> | Which... I don't want it to do |
2021-02-03 13:20:09 +0100 | <opqdonut> | so TH sees the syntax after RecordWildCards has been applied |
2021-02-03 13:20:10 +0100 | vicfred | (vicfred@gateway/vpn/mullvad/vicfred) |
2021-02-03 13:20:11 +0100 | <Taneb> | (because I'm lazy) |
2021-02-03 13:20:44 +0100 | <liyang> | Ah hah. Looking at some old code I think I came to the same conclusion. |
2021-02-03 13:21:16 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 13:22:30 +0100 | <liyang> | Taneb: https://github.com/liyang/true-name/commit/3cd10547 if that helps. |
2021-02-03 13:23:12 +0100 | <Taneb> | Thanks! |
2021-02-03 13:23:14 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 13:25:34 +0100 | <maralorn> | ph88: Regarding "testing functions that are not exported by a module". Short answer: no, Long answer: https://www.tweag.io/blog/2021-01-07-haskell-dark-arts-part-i/ |
2021-02-03 13:28:25 +0100 | <kuribas> | doesn't GADTs destroy parametricity properties? For example for "[] a", a can be anything, there is no way to know what a means, but for "Expr a", you can know a is some finite set of values. |
2021-02-03 13:28:26 +0100 | <liyang> | maralorn: Nice! Relevant to my interests. Never occured to me you could do that. |
2021-02-03 13:29:02 +0100 | knupfer | (~Thunderbi@mue-88-130-61-250.dsl.tropolys.de) (Quit: knupfer) |
2021-02-03 13:29:15 +0100 | <kuribas> | So a GADT is not just a generalization, but also change the properties of the type system... |
2021-02-03 13:29:43 +0100 | knupfer | (~Thunderbi@200116b82c27b900d0584795dc7022de.dip.versatel-1u1.de) |
2021-02-03 13:31:07 +0100 | <merijn> | kuribas: Why does it destroy parametricity? |
2021-02-03 13:31:37 +0100 | <kuribas> | merijn: because now you have more information about a |
2021-02-03 13:31:47 +0100 | <merijn> | What information, exactly? |
2021-02-03 13:32:02 +0100 | <kuribas> | if you have a constructor, the exact type of a |
2021-02-03 13:33:20 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 13:33:59 +0100 | <ph88^> | how can i write code so that i can map while performing IO action which can fail ? |
2021-02-03 13:34:13 +0100 | <kuribas> | ph88^: traverse? |
2021-02-03 13:34:29 +0100 | <kuribas> | ph88^: also, define fail? |
2021-02-03 13:34:44 +0100 | <kuribas> | could be an exception, could be returning Either Error a ... |
2021-02-03 13:35:15 +0100 | <ph88^> | Either |
2021-02-03 13:35:22 +0100 | knupfer | (~Thunderbi@200116b82c27b900d0584795dc7022de.dip.versatel-1u1.de) (Remote host closed the connection) |
2021-02-03 13:35:25 +0100 | <kuribas> | ph88^: wrap with ExceptT, then traverse |
2021-02-03 13:36:02 +0100 | <ph88^> | can i just use Either too ? |
2021-02-03 13:36:46 +0100 | dyeplexer | (~lol@unaffiliated/terpin) |
2021-02-03 13:36:50 +0100 | <kuribas> | :t traverse (ExceptT . f) |
2021-02-03 13:36:51 +0100 | <lambdabot> | (Traversable t, Monad m, Show a, FromExpr (m (Either e b))) => t a -> ExceptT e m (t b) |
2021-02-03 13:36:58 +0100 | <kuribas> | :t \f -> traverse (ExceptT . f) |
2021-02-03 13:36:59 +0100 | <lambdabot> | (Traversable t, Monad m) => (a -> m (Either e b)) -> t a -> ExceptT e m (t b) |
2021-02-03 13:37:20 +0100 | <ph88^> | what's the difference between map and traverse ? |
2021-02-03 13:38:05 +0100 | <kuribas> | ph88^: traverse also performs the effect |
2021-02-03 13:38:13 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 13:38:26 +0100 | <kuribas> | > map putStrLn [1, 2, 3] |
2021-02-03 13:38:28 +0100 | <lambdabot> | error: |
2021-02-03 13:38:28 +0100 | <lambdabot> | • No instance for (Num String) arising from the literal ‘1’ |
2021-02-03 13:38:28 +0100 | <lambdabot> | • In the expression: 1 |
2021-02-03 13:38:37 +0100 | <kuribas> | > map putStrLn ["a", "b", "c"] |
2021-02-03 13:38:38 +0100 | <lambdabot> | [<IO ()>,<IO ()>,<IO ()>] |
2021-02-03 13:38:43 +0100 | <kuribas> | > traverse putStrLn ["a", "b", "c"] |
2021-02-03 13:38:45 +0100 | <lambdabot> | <IO [()]> |
2021-02-03 13:39:22 +0100 | <ph88^> | how can i combine traverse, ExceptT and evalState (from State) ? |
2021-02-03 13:39:25 +0100 | damhiya | (~damhiya@211.49.186.236) (Quit: WeeChat 3.0.1) |
2021-02-03 13:39:48 +0100 | <kuribas> | ph88^: mapping an action over a list gives you a list of actions, traversing it gives you a list of the action results (in the action). |
2021-02-03 13:40:16 +0100 | kritzefitz | (~kritzefit@212.86.56.80) (Ping timeout: 240 seconds) |
2021-02-03 13:40:20 +0100 | <kuribas> | ph88^: no IO? |
2021-02-03 13:40:29 +0100 | <ph88^> | also IO ... |
2021-02-03 13:40:58 +0100 | <kuribas> | you can make a stack ExceptT Err (StateT IO) a |
2021-02-03 13:41:50 +0100 | <kuribas> | which is equivalent to s -> IO (s, Either Err a) |
2021-02-03 13:41:51 +0100 | Tops2 | (~Tobias@dyndsl-095-033-093-253.ewe-ip-backbone.de) |
2021-02-03 13:41:51 +0100 | <ph88^> | then i first unwrap the Except (maybe case match on Either ?) then when i have the Right condition i do runState on it ? |
2021-02-03 13:42:08 +0100 | <kuribas> | ph88^: you unwrap from outside to inside. |
2021-02-03 13:42:22 +0100 | <ph88^> | as i was saying it, it's from outside to inside, no ? |
2021-02-03 13:42:50 +0100 | <kuribas> | flip evalStateT s $ runExceptT action |
2021-02-03 13:43:12 +0100 | <int-e> | ski: I really hate the name `asTypeIn` because it raises more questions than it answers... maybe it should be `asArgOf`. |
2021-02-03 13:43:39 +0100 | <ph88^> | thx kuribas i will try |
2021-02-03 13:44:28 +0100 | <ph88^> | kuribas, what should be the signature i want to apply to the elements in this case ? |
2021-02-03 13:44:37 +0100 | <ph88^> | the signature of the function * |
2021-02-03 13:45:06 +0100 | <kuribas> | ph88^: you can make the function return the monad stack |
2021-02-03 13:45:16 +0100 | <ph88^> | ok |
2021-02-03 13:45:28 +0100 | <kuribas> | then unpack after traversing |
2021-02-03 13:45:34 +0100 | <kuribas> | unwrap better |
2021-02-03 13:46:06 +0100 | <ph88^> | how come here ExceptT Err (StateT IO) a a is not wrapped in IO ? |
2021-02-03 13:46:30 +0100 | <kuribas> | because a is the return value of the monad stack |
2021-02-03 13:46:47 +0100 | <kuribas> | which has to be the last type parameter |
2021-02-03 13:47:08 +0100 | <opqdonut> | @unmtl ExceptT Err (StateT IO) a |
2021-02-03 13:47:08 +0100 | <lambdabot> | err: `StateT IO (Either Err a)' is not applied to enough arguments, giving `/\A. IO -> Either Err a (A, IO)' |
2021-02-03 13:47:18 +0100 | <opqdonut> | @unmtl ExceptT Err (StateT s IO) a |
2021-02-03 13:47:18 +0100 | <lambdabot> | s -> IO (Either Err a, s) |
2021-02-03 13:47:18 +0100 | pja | (~phil@2a02:8010:6098:0:f2de:f1ff:fe2c:3d9) (Quit: WeeChat 2.8) |
2021-02-03 13:47:22 +0100 | <ph88^> | but i want to map a function over a structure which needs access to IO and to State ... so dunno how that could return a value not wrapped in IO .. |
2021-02-03 13:47:26 +0100 | stef204 | (~stef204@unaffiliated/stef-204/x-384198) |
2021-02-03 13:47:44 +0100 | <kuribas> | opqdonut: right, I had the state switched... |
2021-02-03 13:48:16 +0100 | <kuribas> | ph88^: it *does* return a value wrapped in IO |
2021-02-03 13:48:21 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:cd3d:a18d:b2f7:b84a) |
2021-02-03 13:48:35 +0100 | <ph88^> | why is it not written like (IO a) then ? |
2021-02-03 13:48:54 +0100 | <ph88^> | or (StateT s (IO a)) |
2021-02-03 13:49:12 +0100 | <kuribas> | ph88^: because you only get the IO after unwrapping |
2021-02-03 13:49:36 +0100 | <ph88^> | ok |
2021-02-03 13:49:36 +0100 | carldd11 | (~carldd@90-224-49-113-no56.tbcn.telia.com) (Read error: Connection reset by peer) |
2021-02-03 13:50:01 +0100 | <kuribas> | :t \s -> flip evalState s . runExceptT |
2021-02-03 13:50:04 +0100 | <lambdabot> | s -> ExceptT e (StateT s Identity) a -> Either e a |
2021-02-03 13:50:12 +0100 | <kuribas> | :t \s -> flip evalStateT s . runExceptT |
2021-02-03 13:50:13 +0100 | <lambdabot> | Monad m => s -> ExceptT e (StateT s m) a -> m (Either e a) |
2021-02-03 13:50:38 +0100 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) |
2021-02-03 13:50:49 +0100 | Tario | (~Tario@201.192.165.173) |
2021-02-03 13:51:45 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 13:51:48 +0100 | <ph88^> | :t \b -> \s -> (\a -> evalState a s) $ runExcept b |
2021-02-03 13:51:50 +0100 | <lambdabot> | error: |
2021-02-03 13:51:50 +0100 | <lambdabot> | • Couldn't match type ‘Either e a’ with ‘StateT s Identity a1’ |
2021-02-03 13:51:50 +0100 | <lambdabot> | Expected type: State s a1 |
2021-02-03 13:52:14 +0100 | <ph88^> | why is that not the same ? |
2021-02-03 13:52:39 +0100 | <kuribas> | because it's different? what's that a? |
2021-02-03 13:52:56 +0100 | <ph88^> | i dunno |
2021-02-03 13:52:57 +0100 | <int-e> | :t \b -> (\s -> (\a -> evalState a s)) $ runExcept b |
2021-02-03 13:52:59 +0100 | <int-e> | :t \b -> (\s -> (\a -> evalState a s)) $ runExcept b |
2021-02-03 13:53:01 +0100 | <lambdabot> | Except e a1 -> State (Either e a1) a2 -> a2 |
2021-02-03 13:53:26 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:cd3d:a18d:b2f7:b84a) (Ping timeout: 264 seconds) |
2021-02-03 13:53:28 +0100 | <int-e> | ph88^: your $ is inside the innermost lambda |
2021-02-03 13:53:48 +0100 | <kuribas> | ph88^: evalStateT takes two arguments, the monad stack and the state. You give it three arguments. |
2021-02-03 13:53:56 +0100 | <ph88^> | i was trying to recreate \s -> flip evalStateT s . runExceptT without flip and . |
2021-02-03 13:54:08 +0100 | <int-e> | :t \b -> (\s a -> evalState a s) $ runExcept b |
2021-02-03 13:54:09 +0100 | <lambdabot> | Except e a1 -> State (Either e a1) a2 -> a2 |
2021-02-03 13:54:29 +0100 | <int-e> | :t \b a -> evalState a (runExcept b) |
2021-02-03 13:54:30 +0100 | <lambdabot> | Except e a1 -> State (Either e a1) a2 -> a2 |
2021-02-03 13:54:37 +0100 | <kuribas> | :t \s m -> evalStateT (runExceptT m) s -- ph88^ |
2021-02-03 13:54:38 +0100 | <lambdabot> | Monad m => s -> ExceptT e (StateT s m) a -> m (Either e a) |
2021-02-03 13:55:11 +0100 | <ph88^> | thanks |
2021-02-03 13:55:35 +0100 | <int-e> | oh |
2021-02-03 13:55:55 +0100 | <ph88^> | where in this does my function go that i want to map over the elements ? |
2021-02-03 13:56:05 +0100 | knupfer | (~Thunderbi@200116b82c27b900ad15eb691b6438af.dip.versatel-1u1.de) |
2021-02-03 13:56:14 +0100 | <int-e> | the s got lost in translation |
2021-02-03 13:56:27 +0100 | pja | (~phil@2a02:8010:6098:0:f2de:f1ff:fe2c:3d9) |
2021-02-03 13:56:37 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 13:57:30 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds) |
2021-02-03 13:57:36 +0100 | <kuribas> | :t \s f -> flip evalStateT s . runExceptT . traverse f -- ph88^ |
2021-02-03 13:57:37 +0100 | <lambdabot> | (Monad m, Traversable t) => s -> (a -> ExceptT e (StateT s m) b) -> t a -> m (Either e (t b)) |
2021-02-03 13:59:58 +0100 | chris8142 | (~chris8142@srvnet-01-071.ikbnet.co.at) ("WeeChat 3.0") |
2021-02-03 14:00:04 +0100 | <ph88^> | :t \s f -> evalStateT (runExceptT (traverse f)) s |
2021-02-03 14:00:06 +0100 | <lambdabot> | error: |
2021-02-03 14:00:06 +0100 | <lambdabot> | • Couldn't match expected type ‘ExceptT e (StateT s m) a1’ |
2021-02-03 14:00:06 +0100 | <lambdabot> | with actual type ‘t0 a -> f (t0 b)’ |
2021-02-03 14:00:59 +0100 | <ph88^> | :t \s f m -> evalStateT (runExceptT m (traverse f)) s |
2021-02-03 14:01:00 +0100 | <lambdabot> | error: |
2021-02-03 14:01:00 +0100 | <lambdabot> | • Couldn't match type ‘Either e a1’ with ‘StateT s m a2’ |
2021-02-03 14:01:00 +0100 | <lambdabot> | Expected type: (t a -> f (t b)) -> StateT s m a2 |
2021-02-03 14:01:08 +0100 | carldd11 | (~carldd@90-224-49-113-no56.tbcn.telia.com) |
2021-02-03 14:01:55 +0100 | <kuribas> | ph88^: you have to apply traverse to something |
2021-02-03 14:02:06 +0100 | <ph88^> | oki |
2021-02-03 14:02:08 +0100 | <kuribas> | :t traverse |
2021-02-03 14:02:10 +0100 | <lambdabot> | (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) |
2021-02-03 14:04:05 +0100 | Tario | (~Tario@201.192.165.173) (Ping timeout: 240 seconds) |
2021-02-03 14:05:45 +0100 | <kuribas> | ph88^: a . b == \t -> a (b t) |
2021-02-03 14:06:02 +0100 | urodna | (~urodna@unaffiliated/urodna) |
2021-02-03 14:06:26 +0100 | <kuribas> | so "\s f -> flip evalStateT s . runExceptT . traverse f" => \s f -> \t -> flip evalStateT s (runExceptT (traverse f t)) |
2021-02-03 14:06:51 +0100 | <kuribas> | apply flip and curry => \s f t -> evalStateT (runExceptT (traverse f t)) s |
2021-02-03 14:07:28 +0100 | hekkaidekapus[ | (~tchouri@gateway/tor-sasl/hekkaidekapus) |
2021-02-03 14:07:45 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 14:09:21 +0100 | hekkaidekapus} | (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 268 seconds) |
2021-02-03 14:09:39 +0100 | Rudd0 | (~Rudd0@185.189.115.108) (Ping timeout: 258 seconds) |
2021-02-03 14:09:44 +0100 | michalz | (~user@185.246.204.78) |
2021-02-03 14:10:08 +0100 | <kuribas> | ph88^: it's often a good idea to do rewrite steps in order. |
2021-02-03 14:10:35 +0100 | <kuribas> | these could be even automated by some tool ... |
2021-02-03 14:12:09 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-02-03 14:12:41 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 256 seconds) |
2021-02-03 14:16:21 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 14:16:50 +0100 | average | (uid473595@gateway/web/irccloud.com/x-rcklrhokomuilocj) |
2021-02-03 14:18:34 +0100 | berberman_ | (~berberman@unaffiliated/berberman) |
2021-02-03 14:19:50 +0100 | berberman | (~berberman@unaffiliated/berberman) (Ping timeout: 264 seconds) |
2021-02-03 14:20:27 +0100 | honigkuchen | (~honigkuch@ip5b429953.dynamic.kabel-deutschland.de) |
2021-02-03 14:20:55 +0100 | <honigkuchen> | how would you program the smallest rule in a programming language, because whatsoever is a rule in essence? |
2021-02-03 14:20:57 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 246 seconds) |
2021-02-03 14:23:52 +0100 | danza | (~francesco@151.53.69.219) |
2021-02-03 14:24:21 +0100 | <merijn> | EQUESTIONILLDEFINED |
2021-02-03 14:24:32 +0100 | geekosaur | (82650c7c@130.101.12.124) |
2021-02-03 14:25:21 +0100 | <carbolymer> | how can I get number of seconds from UTCTime? |
2021-02-03 14:25:24 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) (Remote host closed the connection) |
2021-02-03 14:25:26 +0100 | <carbolymer> | I mean timestamp |
2021-02-03 14:25:39 +0100 | <liyang> | carbolymer: number of seconds from when? |
2021-02-03 14:25:47 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) |
2021-02-03 14:25:47 +0100 | o1lo01ol1o | (~o1lo01ol1@bl7-89-228.dsl.telepac.pt) (Remote host closed the connection) |
2021-02-03 14:25:48 +0100 | <carbolymer> | liyang: timestamp |
2021-02-03 14:26:43 +0100 | <carbolymer> | Unix time precisely |
2021-02-03 14:26:45 +0100 | <liyang> | carbolymer: 1970-01-01 00:00:00 UTC? |
2021-02-03 14:26:55 +0100 | <carbolymer> | yes |
2021-02-03 14:27:18 +0100 | jespada | (~jespada@90.254.242.138) (Quit: Leaving) |
2021-02-03 14:27:24 +0100 | <carbolymer> | utcTimeToPOSIXSeconds |
2021-02-03 14:27:26 +0100 | <carbolymer> | oh |
2021-02-03 14:27:26 +0100 | <liyang> | carbolymer: http://hackage.haskell.org/package/time-1.11.1.1/docs/Data-Time-Clock-POSIX.html#v:utcTimeToPOSIXS… |
2021-02-03 14:27:36 +0100 | <carbolymer> | liyang: thx |
2021-02-03 14:28:22 +0100 | <liyang> | If you'd rather have it as something other than NominalDiffTime, just wrap realToFrac around it. |
2021-02-03 14:28:26 +0100 | TommyC | (~TommyC@unaffiliated/sepulchralbloom) (Ping timeout: 258 seconds) |
2021-02-03 14:29:33 +0100 | <carbolymer> | hmm |
2021-02-03 14:29:44 +0100 | <carbolymer> | how do I convert NominalDiffTime -> Integer ? |
2021-02-03 14:30:18 +0100 | <liyang> | carbolymer: in what units? Seconds, microseconds, picoseconds? |
2021-02-03 14:30:31 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-02-03 14:30:52 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 14:31:03 +0100 | <carbolymer> | liyang: yeah, still talking about seconds |
2021-02-03 14:31:04 +0100 | jamm_ | (~jamm@unaffiliated/jamm) |
2021-02-03 14:31:23 +0100 | <liyang> | carbolymer: round ndt, round (ndt * 1000000), round (ndt * 1e12) |
2021-02-03 14:31:29 +0100 | <carbolymer> | liyang: in general I would like nanos, but UTCTime is in seconds, right? |
2021-02-03 14:31:36 +0100 | <liyang> | carbolymer: or ceil / floor. |
2021-02-03 14:32:18 +0100 | <liyang> | UTCTime has ps precision, but fromInteger 1 :: NominalDiffTime is interpreted as 1 second. |
2021-02-03 14:32:43 +0100 | <merijn> | UTCTime isn't in seconds, it's picoseconds |
2021-02-03 14:33:07 +0100 | <carbolymer> | wait, UTCTime has Num instance? |
2021-02-03 14:33:11 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 14:33:13 +0100 | <liyang> | (sssh! internal implementation detail.) |
2021-02-03 14:33:49 +0100 | <liyang> | carbolymer: no, that wouldn't make sense. For a Num instance you'd need to define e.g. (+), and it doesn't make sense to add two UTCTimes. |
2021-02-03 14:33:52 +0100 | <merijn> | UTCTime doesn't have a num instance |
2021-02-03 14:34:26 +0100 | <carbolymer> | right, I meant NominalDiffTime |
2021-02-03 14:34:33 +0100 | <carbolymer> | yes it has |
2021-02-03 14:34:36 +0100 | <liyang> | Think of UTCTime as a point (in a 1D space), and NominalDiffTime as a vector. |
2021-02-03 14:34:39 +0100 | <carbolymer> | that basically solves everything |
2021-02-03 14:34:41 +0100 | <carbolymer> | thanks |
2021-02-03 14:35:20 +0100 | jamm_ | (~jamm@unaffiliated/jamm) (Ping timeout: 258 seconds) |
2021-02-03 14:35:57 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 264 seconds) |
2021-02-03 14:38:25 +0100 | Sgeo | (~Sgeo@ool-18b98aa4.dyn.optonline.net) |
2021-02-03 14:39:05 +0100 | lotuseater | (~user@ip-176-198-181-127.hsi05.unitymediagroup.de) (Read error: Connection reset by peer) |
2021-02-03 14:39:10 +0100 | berberman_ | (~berberman@unaffiliated/berberman) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-02-03 14:39:32 +0100 | berberman | (~berberman@unaffiliated/berberman) |
2021-02-03 14:40:20 +0100 | digia | (~digia@unaffiliated/digia) (Quit: Beep Boop...) |
2021-02-03 14:40:51 +0100 | digia | (~digia@unaffiliated/digia) |
2021-02-03 14:41:01 +0100 | berberman | (~berberman@unaffiliated/berberman) (Max SendQ exceeded) |
2021-02-03 14:41:31 +0100 | berberman | (~berberman@unaffiliated/berberman) |
2021-02-03 14:41:58 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:fc44:c2d6:2605:3850) |
2021-02-03 14:42:04 +0100 | esph | (~weechat@unaffiliated/esph) (Ping timeout: 240 seconds) |
2021-02-03 14:43:05 +0100 | esph | (~weechat@unaffiliated/esph) |
2021-02-03 14:45:11 +0100 | geowiesnot | (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) |
2021-02-03 14:45:45 +0100 | frozenErebus | (~frozenEre@37.231.239.43) (Ping timeout: 240 seconds) |
2021-02-03 14:49:56 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:cd3d:a18d:b2f7:b84a) |
2021-02-03 14:51:20 +0100 | <honigkuchen> | merijn, ? |
2021-02-03 14:52:12 +0100 | geowiesnot | (~user@i15-les02-ix2-87-89-181-157.sfr.lns.abo.bbox.fr) (Ping timeout: 258 seconds) |
2021-02-03 14:52:21 +0100 | mmohammadi9812 | (~mmohammad@198.12.95.171) (Read error: Connection reset by peer) |
2021-02-03 14:52:57 +0100 | Lycurgus | (~niemand@cpe-45-46-139-165.buffalo.res.rr.com) (Quit: Exeunt) |
2021-02-03 14:52:57 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 14:52:59 +0100 | mmohammadi9812 | (~mmohammad@2.178.213.79) |
2021-02-03 14:53:10 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 14:53:22 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
2021-02-03 14:53:23 +0100 | Wuzzy | (~Wuzzy@p5b0df175.dip0.t-ipconnect.de) |
2021-02-03 14:53:51 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 246 seconds) |
2021-02-03 14:54:17 +0100 | ArConan | (9de62a69@157.230.42.105) |
2021-02-03 14:54:40 +0100 | <ArConan> | @src action |
2021-02-03 14:54:40 +0100 | <lambdabot> | Source not found. :( |
2021-02-03 14:54:42 +0100 | o1lo01ol1o | (~o1lo01ol1@bl7-89-228.dsl.telepac.pt) |
2021-02-03 14:54:42 +0100 | o1lo01ol1o | (~o1lo01ol1@bl7-89-228.dsl.telepac.pt) (Remote host closed the connection) |
2021-02-03 14:54:47 +0100 | o1lo01ol_ | (~o1lo01ol1@bl7-89-228.dsl.telepac.pt) |
2021-02-03 14:54:53 +0100 | <ArConan> | @src fmap |
2021-02-03 14:54:53 +0100 | <lambdabot> | Source not found. Are you typing with your feet? |
2021-02-03 14:55:14 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:cd3d:a18d:b2f7:b84a) (Ping timeout: 264 seconds) |
2021-02-03 14:55:22 +0100 | <geekosaur> | fmap is defined per instance |
2021-02-03 14:55:23 +0100 | <Taneb> | ArConan: @src isn't very good (I think it's manually curated) |
2021-02-03 14:55:29 +0100 | <maerwald> | @src map |
2021-02-03 14:55:29 +0100 | <lambdabot> | map _ [] = [] |
2021-02-03 14:55:30 +0100 | <lambdabot> | map f (x:xs) = f x : map f xs |
2021-02-03 14:55:33 +0100 | <geekosaur> | @src [] fmap |
2021-02-03 14:55:33 +0100 | <lambdabot> | fmap = map |
2021-02-03 14:56:17 +0100 | <maerwald> | @src Maybe fmap |
2021-02-03 14:56:17 +0100 | <lambdabot> | fmap _ Nothing = Nothing |
2021-02-03 14:56:17 +0100 | <lambdabot> | fmap f (Just a) = Just (f a) |
2021-02-03 14:57:16 +0100 | raichoo | (~raichoo@dslb-188-109-063-185.188.109.pools.vodafone-ip.de) (Quit: Lost terminal) |
2021-02-03 14:57:24 +0100 | <merijn> | Taneb: It's just a text to text lookup, yeah |
2021-02-03 14:57:38 +0100 | <merijn> | It's mostly the reference definition of the Haskell Report |
2021-02-03 14:58:28 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 14:58:43 +0100 | Tario | (~Tario@201.192.165.173) |
2021-02-03 14:58:51 +0100 | TommyC | (~TommyC@unaffiliated/sepulchralbloom) |
2021-02-03 15:04:09 +0100 | vicfred | (vicfred@gateway/vpn/mullvad/vicfred) (Quit: Leaving) |
2021-02-03 15:05:42 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 15:08:20 +0100 | hyperisco | (~hyperisco@104-195-141-253.cpe.teksavvy.com) |
2021-02-03 15:09:33 +0100 | TommyC | (~TommyC@unaffiliated/sepulchralbloom) (Ping timeout: 264 seconds) |
2021-02-03 15:09:34 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-02-03 15:09:35 +0100 | berberman | (~berberman@unaffiliated/berberman) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-02-03 15:09:47 +0100 | alx741 | (~alx741@181.196.69.29) |
2021-02-03 15:09:56 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 15:10:00 +0100 | berberman | (~berberman@unaffiliated/berberman) |
2021-02-03 15:10:05 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 15:10:39 +0100 | turion | (~turion@2a02:810d:8abf:c4a8:7417:1a58:4f1d:bffb) (Quit: Leaving.) |
2021-02-03 15:10:47 +0100 | berberman | (~berberman@unaffiliated/berberman) (Max SendQ exceeded) |
2021-02-03 15:11:32 +0100 | berberman | (~berberman@unaffiliated/berberman) |
2021-02-03 15:14:49 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 258 seconds) |
2021-02-03 15:17:02 +0100 | geekosaur | (82650c7c@130.101.12.124) (Ping timeout: 240 seconds) |
2021-02-03 15:22:44 +0100 | zaquest | (~notzaques@5.128.210.178) (Quit: Leaving) |
2021-02-03 15:23:16 +0100 | mmohammadi9812 | (~mmohammad@2.178.213.79) (Ping timeout: 240 seconds) |
2021-02-03 15:24:23 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 15:25:04 +0100 | renzhi | (~renzhi@2607:fa49:6500:6f00::1e43) |
2021-02-03 15:26:10 +0100 | zaquest | (~notzaques@5.128.210.178) |
2021-02-03 15:27:03 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:fc44:c2d6:2605:3850) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-02-03 15:27:19 +0100 | <ph88^> | so ExceptT is not really an exception but just a monad ? |
2021-02-03 15:27:53 +0100 | deviantfero | (~deviantfe@190.150.27.58) |
2021-02-03 15:27:58 +0100 | geekosaur | (ac3a8ee4@172.58.142.228) |
2021-02-03 15:28:00 +0100 | TommyC | (~TommyC@unaffiliated/sepulchralbloom) |
2021-02-03 15:29:30 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 265 seconds) |
2021-02-03 15:31:10 +0100 | <tdammers> | it's a monad *transformer* |
2021-02-03 15:31:29 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) |
2021-02-03 15:32:21 +0100 | <maerwald> | yeah, it has nothing to do with exceptions, which is why EitherT was a better name |
2021-02-03 15:32:33 +0100 | <maerwald> | or ErrorT |
2021-02-03 15:32:38 +0100 | frozenErebus | (~frozenEre@37.231.239.43) |
2021-02-03 15:32:47 +0100 | shiraeeshi | (~shiraeesh@109.166.56.5) |
2021-02-03 15:33:49 +0100 | <merijn> | except refers to exceptional as in "non-standard" not exceptions in the Control.Exception sense, though |
2021-02-03 15:34:12 +0100 | <merijn> | maerwald: ErrorT was deprecated because Left isn't necessarily an *error* |
2021-02-03 15:34:42 +0100 | <maerwald> | merijn: sure, it's just naming bikeshedding, but I've heard ppl often associate ExceptT with checked exeptions |
2021-02-03 15:35:00 +0100 | pera | (~pera@unaffiliated/pera) |
2021-02-03 15:35:11 +0100 | <ph88^> | when there is a monad transformer does it always use the Identity monad to make the default case ? |
2021-02-03 15:35:19 +0100 | <maerwald> | if those are checked exceptions, then I can have checked exceptions in C too |
2021-02-03 15:35:28 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 15:35:42 +0100 | <ph88^> | what is a checked exception ? |
2021-02-03 15:36:34 +0100 | <maerwald> | checked exceptions is about runtime guarantees, not types |
2021-02-03 15:36:45 +0100 | <pjb> | maerwald: more precisely, the C standard has sufficient undefined behavior that a C implementation can specify and implement useful checked exception. |
2021-02-03 15:37:22 +0100 | <pjb> | maerwald: but since this wouldn't be standard, it could be problematic using them. This would render your C code unportable. (Agreed, you could use some macros to paper over that). |
2021-02-03 15:37:47 +0100 | <nshepperd> | the fact that it's not called EitherT feels bad tbh |
2021-02-03 15:38:32 +0100 | <ph88^> | kuribas are you here ? |
2021-02-03 15:38:40 +0100 | <merijn> | pjb: Well, it'd render your C code "not C" |
2021-02-03 15:40:03 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 246 seconds) |
2021-02-03 15:42:19 +0100 | <kuribas> | ph88^: yes |
2021-02-03 15:42:34 +0100 | ph88_ | (~ph88@ip5f5af71a.dynamic.kabel-deutschland.de) |
2021-02-03 15:43:58 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Quit: mputz) |
2021-02-03 15:43:58 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-02-03 15:44:18 +0100 | <pjb> | merijn: it would still be C, just C with undefined behavior. |
2021-02-03 15:44:36 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-02-03 15:44:43 +0100 | <pjb> | merijn: if you write int c=a+b; you have written C with undefined behavior. |
2021-02-03 15:44:49 +0100 | pzzl | (~pzzl@eimer.scc.uni-weimar.de) |
2021-02-03 15:45:46 +0100 | ArConan | (9de62a69@157.230.42.105) (Quit: Ping timeout (120 seconds)) |
2021-02-03 15:45:57 +0100 | ph88^ | (~ph88@2a02:8109:9e00:7e5c:ade8:bbad:5afb:2c7) (Ping timeout: 272 seconds) |
2021-02-03 15:46:46 +0100 | <ph88_> | can someone help me with monad transformers ? https://bpa.st/VPJQ |
2021-02-03 15:46:55 +0100 | <pjb> | merijn: to write C without undefined behavior, you need to write int c=(a>0)?((MAX_INT-a)>=b?a+b:0):((b>0)?((MAX_INT-b)>=a?a+b:0):((MIN_INT-a)<=b?a+b:0)); or something like that… |
2021-02-03 15:46:56 +0100 | geekosaur | (ac3a8ee4@172.58.142.228) (Quit: Ping timeout (120 seconds)) |
2021-02-03 15:47:06 +0100 | mmohammadi9812 | (~mmohammad@2.178.213.79) |
2021-02-03 15:47:16 +0100 | <ph88_> | line 33 in the paste where things start going wrong |
2021-02-03 15:48:20 +0100 | coot | (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2021-02-03 15:51:06 +0100 | hekkaidekapus[ | (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 268 seconds) |
2021-02-03 15:52:00 +0100 | <swarmcollective> | '; |
2021-02-03 15:52:48 +0100 | <swarmcollective> | ph88_ To begin, I don't believe you need "pure" there. |
2021-02-03 15:53:10 +0100 | hekkaidekapus[ | (~tchouri@gateway/tor-sasl/hekkaidekapus) |
2021-02-03 15:53:44 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 15:55:47 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) |
2021-02-03 15:57:43 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) (Remote host closed the connection) |
2021-02-03 15:58:24 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) |
2021-02-03 15:58:45 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 264 seconds) |
2021-02-03 15:59:36 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 240 seconds) |
2021-02-03 15:59:48 +0100 | <kuribas> | ph88_: you do "pure $ Right $ " on something that can give an error |
2021-02-03 16:00:36 +0100 | <kuribas> | ph88_: also, personal opinion "f >>= \x -> body" is more ugly than "do x <- f; body" |
2021-02-03 16:00:37 +0100 | mouseghost | (~draco@wikipedia/desperek) (Quit: mew wew) |
2021-02-03 16:00:51 +0100 | <kuribas> | the sugar is there, so use it. |
2021-02-03 16:01:04 +0100 | gxt | (~gxt@gateway/tor-sasl/gxt) |
2021-02-03 16:01:37 +0100 | dminuoso | sometimes prefers the `f >>= \x -> body` style |
2021-02-03 16:01:48 +0100 | <merijn> | "It Depends (TM)" |
2021-02-03 16:01:50 +0100 | <dminuoso> | Especially for a one-liner like that. :) |
2021-02-03 16:02:47 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) (Ping timeout: 260 seconds) |
2021-02-03 16:03:57 +0100 | <kuribas> | ph88_: if you swap StateT and ExceptT you can pass the error on. |
2021-02-03 16:04:08 +0100 | <kuribas> | dminuoso: the do is smaller |
2021-02-03 16:04:20 +0100 | <kuribas> | dminuoso: you gain nothing with the >>= \x style. |
2021-02-03 16:04:39 +0100 | darjeeling_ | (~darjeelin@122.245.120.134) (Ping timeout: 258 seconds) |
2021-02-03 16:04:48 +0100 | <kuribas> | assuming it's production code, not an exercise for a beginner to learn how do notation works. |
2021-02-03 16:05:16 +0100 | <dminuoso> | `do x <- f; body` reads very irregular to me. |
2021-02-03 16:05:18 +0100 | p-core | (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) |
2021-02-03 16:05:20 +0100 | <maerwald> | hmm, does partial pattern matching in lambda even trigger monadfail? |
2021-02-03 16:05:27 +0100 | <merijn> | maerwald: no |
2021-02-03 16:05:28 +0100 | <dminuoso> | No. |
2021-02-03 16:05:33 +0100 | forgottenone | (~forgotten@176.42.24.1) (Quit: Konversation terminated!) |
2021-02-03 16:05:35 +0100 | <maerwald> | right, so it's not really the same |
2021-02-03 16:05:52 +0100 | <dminuoso> | That's a bit nitpicky, but fine. |
2021-02-03 16:06:23 +0100 | vicfred | (~vicfred@unaffiliated/vicfred) |
2021-02-03 16:06:23 +0100 | darjeeling_ | (~darjeelin@122.245.120.134) |
2021-02-03 16:06:47 +0100 | <ph88_> | kuribas, do you mean to change the stack ? |
2021-02-03 16:06:48 +0100 | <merijn> | kuribas: If you meant using do with the *actual* semicolon, rather than a newline, then I'm gonna change my opinion from "it depends" to "that's absolutely not acceptable" >.> |
2021-02-03 16:06:54 +0100 | <kuribas> | ph88_: yes |
2021-02-03 16:07:02 +0100 | raichoo | (~raichoo@dslb-188-109-063-185.188.109.pools.vodafone-ip.de) |
2021-02-03 16:07:05 +0100 | deviantfero | (~deviantfe@190.150.27.58) (Ping timeout: 240 seconds) |
2021-02-03 16:07:39 +0100 | <kuribas> | merijn: I sometimes use a semicolon, but not often... |
2021-02-03 16:08:17 +0100 | raym | (~ray@45.64.220.55) (Quit: leaving) |
2021-02-03 16:08:29 +0100 | <dminuoso> | I like code to have a clear visual flow, which is why I alternate between =<< and >>= depending on the context of the code |
2021-02-03 16:08:38 +0100 | guest23 | (~user@49.5.6.87) (Remote host closed the connection) |
2021-02-03 16:08:45 +0100 | <dminuoso> | Generally preferring =<< though, just not when there's a lambda involved. |
2021-02-03 16:08:46 +0100 | <kuribas> | I often use =<< and >>=, but never with a lambda |
2021-02-03 16:08:59 +0100 | guest23 | (~user@49.5.6.87) |
2021-02-03 16:10:27 +0100 | toorevitimirp | (~tooreviti@117.182.181.145) (Remote host closed the connection) |
2021-02-03 16:10:28 +0100 | <maerwald> | Never understood why ppl actively avoid lambdas :) |
2021-02-03 16:10:36 +0100 | <dminuoso> | `instance Traversable Maybe` |
2021-02-03 16:10:41 +0100 | <dminuoso> | My favourite instance of the month. |
2021-02-03 16:10:42 +0100 | <kuribas> | maerwald: I don't? |
2021-02-03 16:10:45 +0100 | <merijn> | maerwald: Lambda's are great, especially with stuff like forM :> |
2021-02-03 16:11:07 +0100 | <dminuoso> | merijn: forM Im not quite convinced. But forM_ sure |
2021-02-03 16:11:13 +0100 | geyaeb | (~geyaeb@gateway/tor-sasl/geyaeb) (Remote host closed the connection) |
2021-02-03 16:11:15 +0100 | <maerwald> | kuribas: using too many lambdas got me rejected at a job (they argued it's not advanced haskell) |
2021-02-03 16:11:16 +0100 | <maerwald> | :D |
2021-02-03 16:11:24 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 16:11:29 +0100 | <dminuoso> | If you're rebuilding structure, chances is you will want the function named so its clear what this builds up |
2021-02-03 16:11:30 +0100 | <ph88_> | what is the tradeoff by changing the order of a monad transformer stack ? |
2021-02-03 16:11:33 +0100 | <kuribas> | maerwald: people are idiots |
2021-02-03 16:11:40 +0100 | <dminuoso> | ph88_: it changes the effect, usually |
2021-02-03 16:11:47 +0100 | <ph88_> | what effect ? |
2021-02-03 16:11:57 +0100 | <dminuoso> | It often means something different if you swap the order. |
2021-02-03 16:11:59 +0100 | geyaeb | (~geyaeb@gateway/tor-sasl/geyaeb) |
2021-02-03 16:12:05 +0100 | <maerwald> | kuribas: I trolled back by telling them that pointfree style can lead to memory leaks (and it can) |
2021-02-03 16:12:07 +0100 | <dminuoso> | It depends on the transformers involved |
2021-02-03 16:12:35 +0100 | <maerwald> | but that's so rare that the average programmer probably doesn't need to care |
2021-02-03 16:12:36 +0100 | <kuribas> | maerwald: besides, if they pick you or not based on just style, you don't want to work there anyway. |
2021-02-03 16:12:56 +0100 | toorevitimirp | (~tooreviti@117.182.181.145) |
2021-02-03 16:13:25 +0100 | paintcan` | (~user@cpe-69-206-241-99.nyc.res.rr.com) |
2021-02-03 16:14:06 +0100 | <dminuoso> | ph88_: Consider the difference between `MaybeT (StateT Identity Int)` and `StateT Int (MaybeT Identity)` when throwing an exception in MaybeT with respect to state. |
2021-02-03 16:14:25 +0100 | <maerwald> | I haven't experienced that much picking on style elsewhere though. E.g. in Go tech challenges, ppl usually care about performance only |
2021-02-03 16:14:27 +0100 | <kuribas> | ph88_: in general, the inner monad takes preference. Which means inner state is still passed when you throw an exception. |
2021-02-03 16:14:55 +0100 | <kuribas> | ph88_: if you move state to the outside, it doesn't. But for your code that doesn't matter. |
2021-02-03 16:15:19 +0100 | bitmagie | (~Thunderbi@200116b806108700484948e27a931f58.dip.versatel-1u1.de) |
2021-02-03 16:15:26 +0100 | <dminuoso> | @unmtl MaybeT (StateT Int Identity) () |
2021-02-03 16:15:26 +0100 | <lambdabot> | Int -> (Maybe (), Int) |
2021-02-03 16:15:28 +0100 | <dminuoso> | @unmtl StateT Int (MaybeT Identity) () |
2021-02-03 16:15:28 +0100 | <lambdabot> | Int -> Maybe ((), Int) |
2021-02-03 16:15:35 +0100 | <dminuoso> | Those are clearly not the same thing. :) |
2021-02-03 16:15:56 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 240 seconds) |
2021-02-03 16:16:03 +0100 | <ph88_> | ye they look different |
2021-02-03 16:18:03 +0100 | <ph88_> | how can i put these together ? newtype ExceptT e (m :: * -> *) a newtype StateT s (m :: * -> *) a |
2021-02-03 16:18:44 +0100 | conal | (~conal@64.71.133.70) |
2021-02-03 16:18:44 +0100 | <ph88_> | can * -> * be written with arguments like a lambda function ? |
2021-02-03 16:18:59 +0100 | Major_Biscuit | (~Major_Bis@x065156.citg-m.tudelft.nl) (Ping timeout: 272 seconds) |
2021-02-03 16:19:33 +0100 | <kuribas> | ph88_: like I said, it doesn't matter, since you don't need state in your exceptions. |
2021-02-03 16:20:03 +0100 | <ph88_> | then how to handle code_lookup ? |
2021-02-03 16:20:26 +0100 | bitmagie | (~Thunderbi@200116b806108700484948e27a931f58.dip.versatel-1u1.de) (Quit: bitmagie) |
2021-02-03 16:20:43 +0100 | <ph88_> | line 37 and 52 |
2021-02-03 16:21:11 +0100 | Major_Biscuit | (~Major_Bis@82.169.100.198) |
2021-02-03 16:21:17 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) |
2021-02-03 16:21:30 +0100 | <kuribas> | ph88_: just swap the types, and the unwrappers. |
2021-02-03 16:21:53 +0100 | <ph88_> | yes that's what i'm trying, but i don't know how the types work so i was just asking about it |
2021-02-03 16:22:12 +0100 | kritzefitz | (~kritzefit@212.86.56.80) |
2021-02-03 16:22:30 +0100 | texasmynsted_ | (~texasmyns@99.96.221.112) |
2021-02-03 16:22:39 +0100 | <kuribas> | what don't you understand? |
2021-02-03 16:22:51 +0100 | <ph88_> | what's a ? |
2021-02-03 16:22:52 +0100 | texasmynsted | (~texasmyns@99.96.221.112) (Ping timeout: 265 seconds) |
2021-02-03 16:22:58 +0100 | <kuribas> | a is a type variable |
2021-02-03 16:23:17 +0100 | texasmynsted_ | texasmynsted |
2021-02-03 16:23:18 +0100 | <ph88_> | it's missing documentation https://hackage.haskell.org/package/mtl-2.2.2/docs/Control-Monad-Except.html#t:ExceptT |
2021-02-03 16:23:23 +0100 | <ph88_> | only e and m have docs |
2021-02-03 16:23:29 +0100 | <dminuoso> | Sometimes they 16:19:34 kuribas | ph88_: like I said, it doesn't matter, since you don't need state in your exceptions. |
2021-02-03 16:23:32 +0100 | <dminuoso> | That's not the only difference |
2021-02-03 16:24:09 +0100 | <kuribas> | dminuoso: I am talking about ph88_ 's code, not in general |
2021-02-03 16:24:17 +0100 | <dminuoso> | Ah, okay. |
2021-02-03 16:25:04 +0100 | <kuribas> | ph88_: why would there need to be a doc for a type variable? |
2021-02-03 16:25:33 +0100 | <dminuoso> | So you know what the meaning of it is? |
2021-02-03 16:25:39 +0100 | <ph88_> | obviously ? |
2021-02-03 16:25:44 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) (Ping timeout: 258 seconds) |
2021-02-03 16:26:00 +0100 | p-core1 | (~Thunderbi@195.138.249.4) |
2021-02-03 16:26:19 +0100 | <kuribas> | standard library documentation is not a tutorial on Monads, it's reference documentation. |
2021-02-03 16:26:37 +0100 | <dminuoso> | ph88_: The `a` is your own choice. Consider: |
2021-02-03 16:26:57 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0) |
2021-02-03 16:26:59 +0100 | <dminuoso> | newtype ExceptT e m a = ExceptT { runExceptT :: m (Either e a) } |
2021-02-03 16:27:39 +0100 | p-core | (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Ping timeout: 258 seconds) |
2021-02-03 16:27:39 +0100 | p-core1 | p-core |
2021-02-03 16:27:40 +0100 | <kuribas> | ph88_: if you're confused about monad transformers, it may be more productive to read some tutorial or handbook. |
2021-02-03 16:27:56 +0100 | <dminuoso> | `ExceptT E M` gives you a monad (that is, something * -> * kinded). `a` can losely be thought of as the "result type" of the monadic computation. |
2021-02-03 16:28:01 +0100 | <ph88_> | removed pure $ Right and switched Except and State https://bpa.st/3L3A |
2021-02-03 16:28:15 +0100 | Jd007 | (~Jd007@162.156.11.151) |
2021-02-03 16:28:38 +0100 | <kuribas> | ph88_: for example: http://book.realworldhaskell.org/read/monad-transformers.html |
2021-02-03 16:28:40 +0100 | <ph88_> | kuribas, i'm not good with books |
2021-02-03 16:28:43 +0100 | <dminuoso> | ph88_: But really, `ExceptT` is only considered with two arguments, really. |
2021-02-03 16:28:57 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 16:29:35 +0100 | <dminuoso> | So think of `ExceptT String IO a` as `type M = ExceptT String IO; ... M a` perhaps, so `ExceptT String M` adds a "string exception" effect to an arbitrary monad M. |
2021-02-03 16:29:56 +0100 | <dminuoso> | Okay, I confusingly used `M` in different places there. |
2021-02-03 16:30:25 +0100 | <ph88_> | when i look at this newtype ExceptT e m a = ExceptT { runExceptT :: m (Either e a) } i imagine m a was IO a |
2021-02-03 16:30:53 +0100 | deviantfero | (~deviantfe@190.150.27.58) |
2021-02-03 16:31:15 +0100 | <dminuoso> | Well, let's say you want to have a base monad called `App`, you could define it as `type App = ExceptT String IO`, and then write code like `getNumber :: App Int`, then you would pick `a ~ Int` |
2021-02-03 16:31:24 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 16:32:31 +0100 | <dminuoso> | Similarly to how `Either E` adds an exception to arbitrary computations, `ExceptT E` adds an exception effect to arbitrary effects. |
2021-02-03 16:32:34 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:acd4:a5be:3be2:2313) |
2021-02-03 16:32:54 +0100 | <average> | so let me see if I understand this correctly |
2021-02-03 16:33:47 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 256 seconds) |
2021-02-03 16:36:19 +0100 | <average> | damn, I can't find that quote, but anyway, it was something like "Haskell is a programming language whose main purpose is writing core business logic" |
2021-02-03 16:36:33 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 264 seconds) |
2021-02-03 16:37:23 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
2021-02-03 16:37:42 +0100 | <average> | to me this sounds like "We will protect the core business logic and restrict it to a very limited set of individuals through using a high-entry barrier language that has a steep learning curve" |
2021-02-03 16:37:49 +0100 | <average> | this is how I read that |
2021-02-03 16:38:03 +0100 | <average> | if I'm wrong, please let me know and also why |
2021-02-03 16:38:08 +0100 | <sshine> | this one? 06:15:06 <average> "While Haskell is a general purpose language that can be used in any domain and use case, it is ideally suited for proprietary business logic and data analysis[..]" |
2021-02-03 16:38:21 +0100 | <average> | yes exactly sshine , you found it, thanks |
2021-02-03 16:38:26 +0100 | <dminuoso> | average: I dont agree with that assessment in any way. |
2021-02-03 16:38:35 +0100 | <average> | dminuoso: ok, please tell me why |
2021-02-03 16:38:41 +0100 | <merijn> | average: That's kinda the opposite of how I'd interpret it (although I don't really agree either) |
2021-02-03 16:38:55 +0100 | <average> | merijn: that's perfectly fine. why do you disagree ? |
2021-02-03 16:39:02 +0100 | <dminuoso> | average: Firstly, the purpose (that is what the creators intended it for), was just satisfying the creators academic curiosity. |
2021-02-03 16:39:18 +0100 | <dminuoso> | Namely, whether a lazy pure functional programming language with a rich type system is useful. |
2021-02-03 16:39:24 +0100 | <dminuoso> | And what you can do with it |
2021-02-03 16:39:38 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:acd4:a5be:3be2:2313) (Ping timeout: 264 seconds) |
2021-02-03 16:39:40 +0100 | <dminuoso> | That's how it was born, anyway. |
2021-02-03 16:39:53 +0100 | <merijn> | average: My interpretaton is: Haskell's purity and abstraction means that it's easy to create (e)DSLs for your business logic, detached from the IO/messy implementation bits to make it work |
2021-02-03 16:40:00 +0100 | <sshine> | average, a related point is: typed, algebraic data types with records is a really neat way to express a domain model. if I have to interpret "proprietary" constructively, perhaps what's meant is: this works really well for domain models of commercial companies. |
2021-02-03 16:40:03 +0100 | <average> | dminuoso: academia is always associated with the expression Ivory Towers, and we kindof know the direction that expression goes in https://en.wikipedia.org/wiki/Ivory_tower#Academic_usage |
2021-02-03 16:40:40 +0100 | <merijn> | average: I also don't think Haskell is especially high barrier to entry nor has that steep a learning curve |
2021-02-03 16:40:57 +0100 | guest23 | (~user@49.5.6.87) (Remote host closed the connection) |
2021-02-03 16:41:10 +0100 | guest23 | (~user@49.5.6.87) |
2021-02-03 16:41:21 +0100 | <dminuoso> | average: Right. Perhaps to some degree, the reason is that academics tend to focus on one area so well, that often (but not always) nobody except their peers understands any of what they do well enough. |
2021-02-03 16:41:34 +0100 | <merijn> | average: Most people who know at least 1 mainstream programming language are used to new languages being basically reskins of what they already know, therefore requiring almost no effort to learn (and forgetting how hard it was to learn their first programming language originally) |
2021-02-03 16:41:40 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) |
2021-02-03 16:41:49 +0100 | <average> | sshine: alright. and yet the reality is that, that in practice, most such systems are implemented in Java and not Haskell. And everyone who's worked for a while in companies knows that Java is prevalent |
2021-02-03 16:41:50 +0100 | <dminuoso> | average: But I find, this sort of argument is made primarily by people who reject the notion you have to spend time studying formal methods to become good. |
2021-02-03 16:42:28 +0100 | <merijn> | average: Haskell is hard because it's different from most mainstream languages people know, and therefore learning it feels like learning programming from scratch. But most people have forgotten how hard learning programming from scratch was |
2021-02-03 16:42:44 +0100 | <average> | dminuoso: so Haskell requires knowledge of formal methods, which is not easy to attain. Does that not prove the high barrier for entry ? |
2021-02-03 16:42:49 +0100 | <dminuoso> | Nope! |
2021-02-03 16:42:58 +0100 | <dminuoso> | average: But it requires knowledge of formal methods to have invented it. |
2021-02-03 16:43:00 +0100 | <merijn> | average: Anecdotally I have taught Haskell to a bunch of people as their first language and they didn't struggle significantly more than people I've taught, like, Java as first language |
2021-02-03 16:43:09 +0100 | <sshine> | average, trololo :) just because Haskell is a good choice for expressing a domain model doesn't mean it has a low cost of entry, if that's all you plan to do with it. |
2021-02-03 16:43:49 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) (Remote host closed the connection) |
2021-02-03 16:43:50 +0100 | toorevitimirp | (~tooreviti@117.182.181.145) (Remote host closed the connection) |
2021-02-03 16:43:50 +0100 | <dminuoso> | average: Haskell happens to be so clean, that it attracts many academic folks. This creates an ecosystem in which libraries arise that look complicated and/or mathy. The fact that we have complicated extensions to cater to those people doesn't help of course. |
2021-02-03 16:44:03 +0100 | <merijn> | Actually, with my partner I'd say her experience learning Haskell was considerably easier than the Java degree/job she got afterwards |
2021-02-03 16:44:15 +0100 | <sshine> | merijn, anecdotally: I've taught SML for a bunch of years and have always experienced that people without prior programming experience struggle less than many who have prior experience with a non-functional language. :-D |
2021-02-03 16:44:28 +0100 | <merijn> | sshine: Same |
2021-02-03 16:44:46 +0100 | <merijn> | I TAed functional languages in OCaml for a few years, that was always a struggle |
2021-02-03 16:44:49 +0100 | <dminuoso> | But, admittedly, the fact that Haskell *gives* the impression of being hard to learn certainly keeps certain demographics out of its users. |
2021-02-03 16:45:05 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 16:45:32 +0100 | toorevitimirp | (~tooreviti@117.182.181.145) |
2021-02-03 16:45:36 +0100 | <sshine> | average, bootstrapping a company with Haskell is a lot tougher than joining a company that did it already. |
2021-02-03 16:45:45 +0100 | <merijn> | sshine: With my SO she studied Java a few months after getting through HFFP and I could just hear the sighs and facepalming as she was studying :p |
2021-02-03 16:46:23 +0100 | <sshine> | average, only last year books started coming out about how to do this, meaning everyone who did it before that probably had a *lot* of individual trial-end-error behind them. :) |
2021-02-03 16:47:33 +0100 | <average> | I will be very curious to know if Haskell will still be considered fit for writing core business logic once the herds of programmers start flocking around it and its user-base grows "too much" |
2021-02-03 16:47:59 +0100 | <merijn> | Entirely unrelatedly: What's the inverse of "making clear"/"clearing up"? |
2021-02-03 16:48:19 +0100 | <average> | my prediction is that once this happens (Haskell becoming too popular) or some time before it happens, everyone will move to some other lesser-known language that is fundamentally different from the mainstream |
2021-02-03 16:48:26 +0100 | <dminuoso> | average: At the end of the day, what Haskell offers is utilities to avoid writing wrong code and to guide you in writing right code. |
2021-02-03 16:48:29 +0100 | <dolio> | Obsucuring? |
2021-02-03 16:48:35 +0100 | <dminuoso> | average: To me, this is a useful properties regardless of what kind of code you write |
2021-02-03 16:48:52 +0100 | evanjs | (~evanjs@075-129-098-007.res.spectrum.com) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-02-03 16:48:59 +0100 | <sshine> | merijn, my partner started with Python on CodinGame. there was one task that involved checking some condition the same way 8 times, and the question went something like "Isn't there some way I can do that for all of them?" and my response would be: I don't know, let's Google... yeah, "all()"! -- I think if you appeal to people's high-level way of thinking, functional programming can be a giant relief |
2021-02-03 16:49:05 +0100 | <sshine> | before you start internalizing low-level thinking out of pure necessity because of poor libraries. |
2021-02-03 16:49:23 +0100 | <merijn> | dolio: hmm, not quite, but that's a good place to start browsing the thesaurus from :) |
2021-02-03 16:49:45 +0100 | <dolio> | Probably depends on the exact context of the phrase. |
2021-02-03 16:49:52 +0100 | evanjs | (~evanjs@075-129-098-007.res.spectrum.com) |
2021-02-03 16:50:27 +0100 | michalz | (~user@185.246.204.78) (Remote host closed the connection) |
2021-02-03 16:50:41 +0100 | Foritus | (~buggery@cpc91316-watf11-2-0-cust68.15-2.cable.virginm.net) |
2021-02-03 16:51:13 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:cd3d:a18d:b2f7:b84a) |
2021-02-03 16:51:23 +0100 | <sshine> | average, you're quite right... Haskell (and other FP research languages) tends to spawn languages, language features and libraries that are much more immediately applicable to everyone. this is a cascading effect with a much larger value than Haskell itself. but this is "Haskell the research language". there's also "Haskell the industry language". :-D |
2021-02-03 16:51:46 +0100 | <dminuoso> | average: I dont think that Haskellers use their language out of elitism. If we had an influx of less experienced developers, I dont think that would sway developers away. |
2021-02-03 16:51:50 +0100 | <merijn> | dolio: Something along the lines of "the datadependence of these implementations makes it unclear how to usefully compare them", but that feels very clumsy |
2021-02-03 16:52:00 +0100 | <merijn> | I don't think that'll happen anyway |
2021-02-03 16:52:01 +0100 | <sshine> | average, LINQ is a byproduct of FP research. LINQ is much more appreciated by quantity of programmers than Haskell. :-D |
2021-02-03 16:52:16 +0100 | <merijn> | Haskell is in a sweet spot due to having a reasonable library ecosystem |
2021-02-03 16:52:28 +0100 | <merijn> | I don't see, say, Idris catching up with that anytime soon |
2021-02-03 16:52:49 +0100 | <sshine> | merijn, yep, Idris doesn't have the momentum. which is GOOD, because it can stay lean. |
2021-02-03 16:52:54 +0100 | <dolio> | I think 'obscures' could work there, maybe. But there might be a better word. |
2021-02-03 16:52:55 +0100 | <dminuoso> | merijn: Of course, the more unprincipled/low quality programmers join, the the more the quality on hackage degrades. :) |
2021-02-03 16:53:16 +0100 | <merijn> | dminuoso: I mean, Hackage is already long-tailed in quality |
2021-02-03 16:53:20 +0100 | <merijn> | Lots of junk on there |
2021-02-03 16:53:43 +0100 | <dminuoso> | merijn: Sure, but relative to many others, Id say hackage generally has superb quality package. |
2021-02-03 16:53:47 +0100 | <dminuoso> | That is |
2021-02-03 16:54:09 +0100 | <dminuoso> | The percentage of high quality packages is relatively high, compared to other package/library databases of other languages. |
2021-02-03 16:54:11 +0100 | <merijn> | I'm not sure the quality distribution of Hackage is meaningfully different from pypi |
2021-02-03 16:54:24 +0100 | <sshine> | merijn, for all the many, many points where Haskell isn't "best in class" yet, I just have to admit that most languages I've worked with, this is equally true. e.g. in PHP, "roll your own X" is the predominant solution for *everything*. |
2021-02-03 16:54:28 +0100 | <merijn> | Just the absolute numbers |
2021-02-03 16:55:05 +0100 | conal | (~conal@64.71.133.70) (Ping timeout: 240 seconds) |
2021-02-03 16:55:12 +0100 | <dminuoso> | merijn: Perhaps I just happen to navigate a special subset of Hackage that is just of good quality.. but then again I audit my dependencies (transitively sometimes) |
2021-02-03 16:55:16 +0100 | dminuoso | shrugs |
2021-02-03 16:55:21 +0100 | <dminuoso> | that might skew my feelings |
2021-02-03 16:55:40 +0100 | michalz | (~user@185.246.204.76) |
2021-02-03 16:55:51 +0100 | <dolio> | If you watch the bot, you might think differently. :) |
2021-02-03 16:56:09 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
2021-02-03 16:56:26 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:cd3d:a18d:b2f7:b84a) (Ping timeout: 264 seconds) |
2021-02-03 16:56:36 +0100 | <dolio> | I think there are a lot of things on hackage that seem like, 'I just made a github repo, I should also upload to hackage.' |
2021-02-03 16:56:52 +0100 | forgottenone | (~forgotten@176.42.24.1) |
2021-02-03 16:57:00 +0100 | <average> | dolio: self-promotion |
2021-02-03 16:57:02 +0100 | <merijn> | hell |
2021-02-03 16:57:05 +0100 | <average> | dolio: invaluable in this day and age |
2021-02-03 16:57:21 +0100 | <merijn> | There's some package that don't even have a repo and just seem to use Hackage as version control >.> |
2021-02-03 16:57:25 +0100 | slack1256 | (~slack1256@dvc-186-186-101-190.movil.vtr.net) |
2021-02-03 16:57:32 +0100 | <sshine> | merijn, heh yeah. |
2021-02-03 16:58:24 +0100 | ArConan | (9de62a69@157.230.42.105) |
2021-02-03 16:58:47 +0100 | raichoo | (~raichoo@dslb-188-109-063-185.188.109.pools.vodafone-ip.de) (Quit: Lost terminal) |
2021-02-03 16:58:51 +0100 | <dolio> | The stuff most people actually use is naturally way above that. |
2021-02-03 16:59:45 +0100 | <ski> | int-e : the idea was that it's typically to be used as map `asTypeIn` \map -> map reverse "foo" .. where you repeat the name as the parameter name, and then give the expression using it |
2021-02-03 16:59:46 +0100 | ArConan | (9de62a69@157.230.42.105) (Client Quit) |
2021-02-03 16:59:53 +0100 | <slack1256> | To use the hackage-next repository, do I need to modify the ~/.cabal/config file right? is there a way to have both allowed at the same time? |
2021-02-03 17:00:24 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:8867:d061:b0e1:86b9) |
2021-02-03 17:00:26 +0100 | forgottenone | (~forgotten@176.42.24.1) (Client Quit) |
2021-02-03 17:00:33 +0100 | coot | (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) |
2021-02-03 17:00:36 +0100 | Rudd0 | (~Rudd0@185.189.115.103) |
2021-02-03 17:00:58 +0100 | <dminuoso> | slack1256: Yes, you can add both |
2021-02-03 17:01:42 +0100 | <nshepperd> | i wonder if some people upload things to hackage just because they can't figure out how to install locally developed packages otherwise |
2021-02-03 17:01:43 +0100 | conal | (~conal@66.115.157.67) |
2021-02-03 17:01:45 +0100 | <sshine> | average, the part that makes Haskell fit for expressing core business logic isn't going to change. :) this is the least controversial part of the language and is often the part that people say "Just go back and use more of this instead of your fancy freer monananads. |
2021-02-03 17:02:17 +0100 | <dminuoso> | slack1256: https://cabal.readthedocs.io/en/3.4/installing-packages.html#repository-specification |
2021-02-03 17:02:26 +0100 | <dminuoso> | slack1256: Note, that if the package is on both the last one wins |
2021-02-03 17:02:30 +0100 | <dminuoso> | (I think?) |
2021-02-03 17:02:46 +0100 | <average> | sshine: well it would definitely be great if it someone came along to separate that part of Haskell from the rest |
2021-02-03 17:02:48 +0100 | <average> | there is a lot of fluff |
2021-02-03 17:02:49 +0100 | <slack1256> | dminuoso: That is exactly what I wanted to know. I will just add the common repository last. |
2021-02-03 17:03:07 +0100 | <merijn> | slack1256: What's hackage-next? |
2021-02-03 17:03:11 +0100 | <average> | I think I have seen many blog posts about Haskell fluff |
2021-02-03 17:03:29 +0100 | <average> | at its peak, the Haskell fluff turns into woo-woo |
2021-02-03 17:03:30 +0100 | deviantfero | (~deviantfe@190.150.27.58) (Read error: Connection reset by peer) |
2021-02-03 17:03:39 +0100 | <merijn> | average: So? There's lots of fluff about *any* language |
2021-02-03 17:03:49 +0100 | <sshine> | average, you can restrict yourself to that part. this movement is called "Boring Haskell". :-D |
2021-02-03 17:03:57 +0100 | <merijn> | This just in, 90% of Haskell blogposts are trash, because 90% of *all* blogposts are trash |
2021-02-03 17:04:00 +0100 | <sshine> | average, https://www.snoyman.com/blog/2019/11/boring-haskell-manifesto/ |
2021-02-03 17:04:02 +0100 | <merijn> | Welcome to Sturgeon's Law |
2021-02-03 17:05:00 +0100 | <average> | well yes, Sturgeon's Law seems applicable here, just as well as Pareto's law .. |
2021-02-03 17:05:04 +0100 | <merijn> | sshine: I like "boring Haskell", but I dislike the "Boring Haskell" movement, since their definition of "Boring Haskell" is either to vague or too limiting to be useful |
2021-02-03 17:05:12 +0100 | <average> | but in essence, there is some overlap betweewn Sturgeon and Pareto |
2021-02-03 17:05:19 +0100 | <average> | except Sturgeon is a more radical view than Pareto |
2021-02-03 17:05:22 +0100 | <sshine> | merijn, the same goes for books. I promised myself I'd never write a book. I realize I could take all my StackOverflow answers and jam them in a book of several thousands of pages, so I don't know if I implicitly broke my promise. |
2021-02-03 17:05:25 +0100 | <average> | Pareto is more polite I think |
2021-02-03 17:05:37 +0100 | soft-warm | (4408f588@ip68-8-245-136.sd.sd.cox.net) |
2021-02-03 17:05:43 +0100 | <merijn> | sshine: I think people should try and be minimalist about the extensions and type level stuff they adopt and make sure the ROI is good |
2021-02-03 17:06:14 +0100 | <merijn> | sshine: But programmers *hate* "think about what you're doing and make nuanced decisions" and *love* blind adherence to dogmatic statements |
2021-02-03 17:06:35 +0100 | <dolio> | Yeah, that will be the problem with any kind of 'movement' like that. |
2021-02-03 17:07:00 +0100 | forgottenone | (~forgotten@176.42.24.1) |
2021-02-03 17:07:08 +0100 | deviantfero | (~deviantfe@190.150.27.58) |
2021-02-03 17:07:10 +0100 | <sshine> | merijn, I bet every concrete application of boring Haskell is slightly different. and yeah, most importantly is the incentive. :) |
2021-02-03 17:07:11 +0100 | <merijn> | A little bit of GADTs and DataKinds can dramatically improve code where "lots of it" will make your code a painful unmaintainable mess |
2021-02-03 17:07:20 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) |
2021-02-03 17:07:36 +0100 | <merijn> | Even type families can be "boring" IMO |
2021-02-03 17:07:45 +0100 | <dolio> | The problem is pointlessly over-engineering, not the particular tools used to do so. |
2021-02-03 17:07:51 +0100 | <sshine> | yeah. a bit PatternSynonym shouldn't have to complicate a module's interface, either. |
2021-02-03 17:07:55 +0100 | <merijn> | The simple realisation is "stop trying to encode and enforce every damn thing on the type level" |
2021-02-03 17:07:59 +0100 | <dolio> | People over-engineer in Java. |
2021-02-03 17:08:40 +0100 | <sshine> | new DisdainingJavaStatementFactoryBuilder(); |
2021-02-03 17:08:45 +0100 | pgib | (~textual@lmms/pgib) (Ping timeout: 240 seconds) |
2021-02-03 17:08:50 +0100 | <merijn> | The only way to stop people from over-engineering is "experienced seniors thwapping people with rolled up newspapers" |
2021-02-03 17:08:58 +0100 | <merijn> | And a sense of aesthetics |
2021-02-03 17:09:18 +0100 | <Logio> | the bigger problem is people not being able to properly model their problems mathematically in general. |
2021-02-03 17:09:57 +0100 | <Logio> | if you have a model of your problem, the problem of expressing it is at least well defined. otherwise you're not even wrong |
2021-02-03 17:10:17 +0100 | kw | (d4662d5d@212.102.45.93) |
2021-02-03 17:10:39 +0100 | <slack1256> | merijn: Is another hackage repository with backpack signatures and packages. Stuff that currently hackage doesn't ship. |
2021-02-03 17:10:51 +0100 | <Logio> | expressing it in Haskell (or other programming language) I mean |
2021-02-03 17:11:55 +0100 | <tdammers> | and then there's also the whole agenda thing (i.e., pushing for a particular dogma because it suits your business case) |
2021-02-03 17:12:07 +0100 | pzzl | (~pzzl@eimer.scc.uni-weimar.de) (Quit: Leaving) |
2021-02-03 17:12:20 +0100 | <sshine> | merijn, it seems like an art form. when I showed my gf my Haskell version of that introductory programming problem, my first reaction was to define two helper functions with meaningful names, and then the problem became a one-liner. it was one of those cases where my brain has done too much of this, and that if you plot 1000 people's solutions, you'd get all kinds of variations of short/long, |
2021-02-03 17:12:26 +0100 | <sshine> | verbose/concise, readable/cryptic, and I just always go for most readable and fewest edge cases, or something like that... |
2021-02-03 17:13:07 +0100 | p-core | (~Thunderbi@195.138.249.4) (Read error: Connection reset by peer) |
2021-02-03 17:13:24 +0100 | <slack1256> | (how great having your GF also know haskell :-) ) |
2021-02-03 17:13:35 +0100 | <sshine> | but "most readable" is still point-free, applicative. I don't know why that is so appealing. |
2021-02-03 17:13:39 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) (Ping timeout: 258 seconds) |
2021-02-03 17:13:49 +0100 | <sshine> | slack1256, my gf doesn't know Haskell. she's just learning Python because she is unemployed right now. ;) |
2021-02-03 17:14:35 +0100 | <merijn> | slack1256: That's easy |
2021-02-03 17:14:45 +0100 | <slack1256> | sshine: Nice, I am doing kind of the same. |
2021-02-03 17:15:05 +0100 | <sshine> | slack1256, learning programming while unemployed? |
2021-02-03 17:15:13 +0100 | <merijn> | slack1256: Step 1) get a partner, Haskell knowledge optional, Step 2) teach Haskell if not yet known :p |
2021-02-03 17:15:33 +0100 | <slack1256> | merijn: Well she has to have a natural interest in the first place for that to work. |
2021-02-03 17:16:04 +0100 | <merijn> | Some things are dealbreakers :p |
2021-02-03 17:16:05 +0100 | <slack1256> | But she liked 3d printing and fusion 360. That program can be scripted, so through there I started teaching her python. |
2021-02-03 17:16:30 +0100 | <slack1256> | sshine: Not unemployed but certainly under-employed. Well me too. |
2021-02-03 17:18:15 +0100 | <average> | sshine: re "take all my SO answers and jam them in a book of several thousand pages" . I do that here, but it's not a book.. just a repo https://github.com/wsdookadr/so/ |
2021-02-03 17:18:40 +0100 | <average> | sshine: this is my SO https://stackoverflow.com/users/827519/wsdookadr |
2021-02-03 17:18:53 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) |
2021-02-03 17:20:14 +0100 | ichimaru | (~ichimaru@45.63.97.131) (Quit: ichimaru) |
2021-02-03 17:20:16 +0100 | plutoniix | (~q@node-unx.pool-125-24.dynamic.totinternet.net) |
2021-02-03 17:20:26 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection) |
2021-02-03 17:20:29 +0100 | <sshine> | average, that's pretty neat. :) |
2021-02-03 17:21:13 +0100 | <ski> | a book is presumably more/different, than a collection of short, probably quite informal (and disconnected), pieces |
2021-02-03 17:21:53 +0100 | <merijn> | ski: pigworker disagrees ;) |
2021-02-03 17:21:54 +0100 | Foritus | (~buggery@cpc91316-watf11-2-0-cust68.15-2.cable.virginm.net) (Quit: ლ(ಠ益ಠლ) .:. <Ashley> my porn is hidden in a folder called "BBC Micro Emulator") |
2021-02-03 17:22:04 +0100 | <ski> | heh :) |
2021-02-03 17:22:13 +0100 | <dolio> | He does? |
2021-02-03 17:22:15 +0100 | <merijn> | ski: https://personal.cis.strath.ac.uk/conor.mcbride/so-pigworker.pdf |
2021-02-03 17:22:18 +0100 | <merijn> | dolio: ^^ |
2021-02-03 17:22:47 +0100 | Foritus | (~buggery@cpc91316-watf11-2-0-cust68.15-2.cable.virginm.net) |
2021-02-03 17:25:01 +0100 | <ski> | there's certainly some books which are more a collection of short articles (e.g. "The Fun of Programming", where each chapter is by a different person) |
2021-02-03 17:25:11 +0100 | <exarkun> | https://hackage.haskell.org/package/binary-0.8.7.0/docs/Data-Binary-Get.html#v:runGet says it returns `a` and `stack ls dependencies` says "binary 0.8.7.0" but when I declare that "readVersion share = runGet getWord32be share" has type "B.ByteString -> Word32" then ghc says: Couldn't match expected type ‘Word32’ with actual type ‘Either String Word32’ |
2021-02-03 17:25:13 +0100 | heatsink | (~heatsink@2600:1700:bef1:5e10:cd3d:a18d:b2f7:b84a) |
2021-02-03 17:25:35 +0100 | <exarkun> | I don't understand |
2021-02-03 17:25:39 +0100 | <ski> | but in that case, there's some kind of common (perhaps a bit nebulous) theme, still |
2021-02-03 17:25:41 +0100 | <dolio> | Yeah. I guess the connotation was some kind of text book. |
2021-02-03 17:26:04 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) |
2021-02-03 17:26:41 +0100 | <merijn> | exarkun: What's the type of "share"? |
2021-02-03 17:26:47 +0100 | <merijn> | And what's the type of readVersion? |
2021-02-03 17:26:50 +0100 | <ski> | merijn : looks like it might be fun, ty :) |
2021-02-03 17:27:07 +0100 | <exarkun> | Oh hell I'm using runGet from Data.Serialize instead of Data.Binary.Get |
2021-02-03 17:27:16 +0100 | <merijn> | exarkun: hah |
2021-02-03 17:27:51 +0100 | <exarkun> | ty for your indulgence |
2021-02-03 17:27:59 +0100 | <merijn> | exarkun: Although you should probably use runGetOrFail instead :p |
2021-02-03 17:28:42 +0100 | <exarkun> | probably, though this is in a test suite |
2021-02-03 17:29:49 +0100 | <exarkun> | heh, and now head is failing before runGet ever gets a chance... |
2021-02-03 17:32:14 +0100 | toorevitimirp | (~tooreviti@117.182.181.145) (Remote host closed the connection) |
2021-02-03 17:33:41 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) (Read error: Connection reset by peer) |
2021-02-03 17:34:31 +0100 | Narinas | (~Narinas@189.223.62.254.dsl.dyn.telnor.net) |
2021-02-03 17:39:43 +0100 | slack1256 | (~slack1256@dvc-186-186-101-190.movil.vtr.net) (Remote host closed the connection) |
2021-02-03 17:40:01 +0100 | ski | read that as "head is falling" |
2021-02-03 17:41:27 +0100 | igghibu | (~igghibu@37.120.201.121) |
2021-02-03 17:42:54 +0100 | rcdilorenzo | (~rcdiloren@62.182.99.136) (Ping timeout: 265 seconds) |
2021-02-03 17:44:25 +0100 | catt | (~r@31.124.181.226) (Ping timeout: 240 seconds) |
2021-02-03 17:44:26 +0100 | <sm[m]> | g'day all. Failing to do something simple in ghci: |
2021-02-03 17:44:26 +0100 | <sm[m]> | parseTimeM True defaultTimeLocale "%Y-%m-%dT%s%Q%Z" "2021-02-03T000247.0581Z" |
2021-02-03 17:44:26 +0100 | <sm[m]> | This has type (MonadFail m, ParseTime t) => m t, how would you make it showable ? |
2021-02-03 17:44:27 +0100 | <maerwald> | merijn: you think teaching haskell is fun? (or teaching at all) |
2021-02-03 17:44:37 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:acd4:a5be:3be2:2313) |
2021-02-03 17:44:52 +0100 | danza | (~francesco@151.53.69.219) (Quit: Leaving) |
2021-02-03 17:45:21 +0100 | frozenErebus | (~frozenEre@37.231.239.43) (Ping timeout: 246 seconds) |
2021-02-03 17:45:24 +0100 | <maerwald> | sm[m]: use the MonadFail Maybe instance? |
2021-02-03 17:45:49 +0100 | <sm[m]> | I've been trying.. |
2021-02-03 17:45:53 +0100 | rcdilorenzo | (~rcdiloren@62.182.99.136) |
2021-02-03 17:46:03 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:acd4:a5be:3be2:2313) (Remote host closed the connection) |
2021-02-03 17:46:09 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds) |
2021-02-03 17:46:19 +0100 | mmohammadi9812 | (~mmohammad@2.178.213.79) (Read error: Connection reset by peer) |
2021-02-03 17:46:31 +0100 | mmohammadi9812 | (~mmohammad@198.12.95.182) |
2021-02-03 17:47:05 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) |
2021-02-03 17:47:07 +0100 | <sm[m]> | ah finally.. fromJust $ parseTimeM True defaultTimeLocale "%Y-%m-%dT%s%Q%Z" "2021-02-03T000247.0581Z" :: UTCTime . Thanks! |
2021-02-03 17:47:10 +0100 | brandonhamilton | (~brandonha@2a04:3542:1000:910:905f:f9ff:fe67:4d32) |
2021-02-03 17:47:47 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-02-03 17:48:02 +0100 | <maerwald> | sm[m]: or: parseTimeM @Maybe @UTCTime True defaultTimeLocale "%Y-%m-%dT%s%Q%Z" "2021-02-03T000247.0581Z" |
2021-02-03 17:48:32 +0100 | <sm[m]> | interesting |
2021-02-03 17:49:48 +0100 | <sm[m]> | haskell keeps.. changing :) |
2021-02-03 17:50:03 +0100 | cfricke | (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0) |
2021-02-03 17:50:51 +0100 | <maerwald> | TypeApplications is there since 8.0.1 |
2021-02-03 17:51:07 +0100 | <sm[m]> | ghci> :t parseTimeM :: (MonadFail m, ParseTime t) => Bool -> TimeLocale -> String -> String -> m t |
2021-02-03 17:51:07 +0100 | <sm[m]> | ghci> :t parseTimeM @Maybe @UTCTime :: Bool -> TimeLocale -> String -> String -> Maybe UTCTime |
2021-02-03 17:51:36 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) (Ping timeout: 258 seconds) |
2021-02-03 17:51:59 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 17:52:02 +0100 | <sm[m]> | still quite new to most haskellers I think |
2021-02-03 17:52:05 +0100 | elfets | (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) |
2021-02-03 17:53:40 +0100 | <sm[m]> | https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#extension-TypeAp… |
2021-02-03 17:53:43 +0100 | polyphem | (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) |
2021-02-03 17:54:09 +0100 | <swarmcollective> | :t parseTimeM @Maybe @UTCTime |
2021-02-03 17:54:11 +0100 | <lambdabot> | error: |
2021-02-03 17:54:11 +0100 | <lambdabot> | Pattern syntax in expression context: parseTimeM@Maybe |
2021-02-03 17:54:11 +0100 | <lambdabot> | Did you mean to enable TypeApplications? |
2021-02-03 17:54:21 +0100 | <swarmcollective> | Interesting. |
2021-02-03 17:54:34 +0100 | <c_wraith> | Nah. "new" is -XImpredicativeTypes working. and by "new" I mean "not technically released yet" |
2021-02-03 17:54:40 +0100 | <sm[m]> | I see.. the @'s are simply used to fill in type variables in the type signature, from left to right |
2021-02-03 17:54:57 +0100 | <sm[m]> | (of the thing to the left of them) |
2021-02-03 17:55:03 +0100 | <maerwald> | sm[m]: hmm, not always left to right, I always forget the exact rules |
2021-02-03 17:55:08 +0100 | <maerwald> | unless there is a forall |
2021-02-03 17:55:13 +0100 | <c_wraith> | It's always left to right |
2021-02-03 17:55:28 +0100 | <maerwald> | c_wraith: let me find the counter-example then |
2021-02-03 17:55:35 +0100 | <c_wraith> | it's just that a forall clause is considered the first use of the variable, if it's present |
2021-02-03 17:55:41 +0100 | <sm[m]> | oh yikes, this doc section is much longer than I thought |
2021-02-03 17:56:51 +0100 | igghibu | (~igghibu@37.120.201.121) (Quit: Textual IRC Client: www.textualapp.com) |
2021-02-03 17:57:12 +0100 | hnOsmium0001 | (uid453710@gateway/web/irccloud.com/x-vcqnqeayruwjdhxh) |
2021-02-03 17:59:40 +0100 | ep1ctetus | (~epictetus@ip184-187-162-163.sb.sd.cox.net) |
2021-02-03 18:00:33 +0100 | kupi | (uid212005@gateway/web/irccloud.com/x-qetuytxtunbuqszx) |
2021-02-03 18:00:52 +0100 | <merijn> | maerwald: I like teaching, so yes |
2021-02-03 18:00:57 +0100 | <kuribas> | sshine: I don't think conciseness is a good metric, however if you stick to the stuff that matters, and eliminate cruft, you usually do end up with less code. |
2021-02-03 18:01:25 +0100 | <merijn> | c_wraith: It's not that ImpredicativeTypes works, it's that we can actually *tell* if it works now :p |
2021-02-03 18:01:29 +0100 | <kuribas> | but actively trying to make code more concise will end up with unreadable code. |
2021-02-03 18:01:41 +0100 | <sm[m]> | "If any of the variables depend on other variables (that is, if some of the variables are kind variables), the variables are reordered so that kind variables come before type variables, preserving the left-to-right order as much as possible." |
2021-02-03 18:01:53 +0100 | <maerwald> | ah |
2021-02-03 18:02:11 +0100 | <merijn> | maerwald, sm[m]: I strongly oppose the use of TypeApplication in "real" code as it's incredibly brittle |
2021-02-03 18:02:48 +0100 | <merijn> | Using it means you are making something part of upstream's public API that is normally *not* considered part of the API and thus no care is taken not to break it |
2021-02-03 18:03:03 +0100 | <c_wraith> | merijn: nah, it's that it actually works. There are lots of places before you could enable it and it wouldn't reject things as a syntax error, but it would give you a type error like cannot match (forall b. b-> b) with (forall b. b -> b) |
2021-02-03 18:03:24 +0100 | <sm[m]> | and @_ can be used as a wildcard placeholder |
2021-02-03 18:03:27 +0100 | <merijn> | c_wraith: How would you even tell whether it worked before? Nobody had a specification of what it meant :p |
2021-02-03 18:03:40 +0100 | <monochrom> | My code is short, but it's a side effect not an objective. My objective is eliminating XY problems. |
2021-02-03 18:03:43 +0100 | <sm[m]> | merijn: noted |
2021-02-03 18:03:55 +0100 | geekosaur | (82650c7c@130.101.12.124) |
2021-02-03 18:04:07 +0100 | ubert | (~Thunderbi@2a02:8109:9880:303c:54a5:5901:5ae5:e9e0) (Remote host closed the connection) |
2021-02-03 18:04:08 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) |
2021-02-03 18:04:22 +0100 | <c_wraith> | merijn: well, "working" would definitely include "doesn't produce errors saying identical types don't match" |
2021-02-03 18:04:22 +0100 | <sm[m]> | I guess if I dug into ghc dev history I'd find the rationale for it |
2021-02-03 18:04:26 +0100 | <merijn> | maerwald, sm[m]: There has *already* been a change in GHC's type inference that changed the order in which type variables were inferred in the forall clause, meaning that uses of TypeApplications on functions with no explicit forall broke |
2021-02-03 18:04:58 +0100 | <maerwald> | yeah and I remember an example where it wasn't left to right and pretty confusing |
2021-02-03 18:05:01 +0100 | <maerwald> | can't find it anymore |
2021-02-03 18:05:13 +0100 | <merijn> | And if someone adds an explicit forall (say, to use ScopedTypeVariables) and writes out their type variables differently from GHCs order, that also breaks |
2021-02-03 18:05:49 +0100 | <merijn> | The number of people (even hardcore PVP adherents) that account for that as part of their public API is probably roughly zero |
2021-02-03 18:05:53 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) (Remote host closed the connection) |
2021-02-03 18:06:30 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) |
2021-02-03 18:06:55 +0100 | <merijn> | So unless you use exact versions for all your dependencies that's potential breakage, but exact versions for dependencies is nightmare of bounds maintenance |
2021-02-03 18:07:19 +0100 | conal | (~conal@66.115.157.67) (Ping timeout: 258 seconds) |
2021-02-03 18:07:37 +0100 | <ski> | kuribas : hm, i guess conciseness is often a kind of happy accidental side-effect of striving to make code better, but not a goal one should aim directly at |
2021-02-03 18:07:50 +0100 | pavonia | (~user@unaffiliated/siracusa) (Quit: Bye!) |
2021-02-03 18:09:19 +0100 | <ski> | (at least we're not letting uses of polymorphic values depend on the *names* used for the tyvars in the type signature .. unlike some other language) |
2021-02-03 18:09:52 +0100 | <kuribas> | which other language? |
2021-02-03 18:10:03 +0100 | <monochrom> | Haskell itself already causes a lot of conciseness just because it's so bloody high-level. For example you just write "Ctor x y" not "new Ctor x y" compared to Java and Rust. That already cuts down length by 30-50%. |
2021-02-03 18:10:37 +0100 | <kuribas> | and the tendency to write short function names and short variables, which isn't always good IMO... |
2021-02-03 18:11:46 +0100 | ryantrinkle | (~ryan@cpe-24-168-87-184.si.res.rr.com) |
2021-02-03 18:12:07 +0100 | <c_wraith> | I still don't know why theValueIDon'tKnowAnythingAbout is a better variable name than x |
2021-02-03 18:12:17 +0100 | conal | (~conal@64.71.133.70) |
2021-02-03 18:12:31 +0100 | <maerwald> | you type less |
2021-02-03 18:12:36 +0100 | <monochrom> | This is why I say that "meaningful name" is a religion. |
2021-02-03 18:12:37 +0100 | <merijn> | Length/descriptiveness of name should depend on two factors |
2021-02-03 18:12:50 +0100 | <c_wraith> | maerwald: I think you may have read that backwards |
2021-02-03 18:12:53 +0100 | <merijn> | 1) scope, the bigger the scope, the more descriptive the name should be |
2021-02-03 18:12:57 +0100 | <maerwald> | when you have RSI, you stop caring about clear variable names :) |
2021-02-03 18:13:14 +0100 | <kuribas> | c_wraith: it isn't |
2021-02-03 18:13:20 +0100 | <merijn> | 2) frequency of use, less frequently used names should be more descriptive |
2021-02-03 18:13:23 +0100 | <c_wraith> | but people tell me it is! |
2021-02-03 18:13:25 +0100 | <maerwald> | c_wraith: wasn't a response to your sentence |
2021-02-03 18:13:25 +0100 | <c_wraith> | constantly! |
2021-02-03 18:13:33 +0100 | <c_wraith> | maerwald: oh, oops. sorry |
2021-02-03 18:13:58 +0100 | <maerwald> | I cut down the chars here as well... |
2021-02-03 18:14:11 +0100 | <kuribas> | merijn: indeed, I am more bother by badly named exported functions than by badly named local variables. |
2021-02-03 18:15:23 +0100 | ski | seconds merijn |
2021-02-03 18:15:48 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds) |
2021-02-03 18:15:57 +0100 | <maerwald> | merijn: my favorite is "removeFile"... is it descriptive? :) |
2021-02-03 18:16:57 +0100 | carlomagno | (~cararell@148.87.23.7) (Remote host closed the connection) |
2021-02-03 18:16:59 +0100 | <maerwald> | I'd argue not much more than "unlink" |
2021-02-03 18:17:12 +0100 | <maerwald> | you'll end up reading the documentation regardless |
2021-02-03 18:17:31 +0100 | <maerwald> | and then still forget half of it when using it and get confused later |
2021-02-03 18:17:35 +0100 | <geekosaur> | its behavior depends on the platform, too |
2021-02-03 18:18:18 +0100 | bitmagie | (~Thunderbi@200116b806108700484948e27a931f58.dip.versatel-1u1.de) |
2021-02-03 18:18:22 +0100 | carlomagno | (~cararell@148.87.23.7) |
2021-02-03 18:18:40 +0100 | bitmagie | (~Thunderbi@200116b806108700484948e27a931f58.dip.versatel-1u1.de) (Client Quit) |
2021-02-03 18:19:20 +0100 | coot | (~coot@37.30.55.141.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
2021-02-03 18:20:08 +0100 | <maerwald> | so here's a poor counter-thought: do unclear names force ppl to read the documentation? |
2021-02-03 18:20:22 +0100 | Saukk | (~Saukk@83-148-239-3.dynamic.lounea.fi) |
2021-02-03 18:20:36 +0100 | rcdilorenzo | (~rcdiloren@62.182.99.136) (Ping timeout: 240 seconds) |
2021-02-03 18:20:44 +0100 | <dolio> | If it does, that's not a good argument in their favor. |
2021-02-03 18:20:46 +0100 | <maerwald> | I surely read the whole manpage when I first saw "unlink", because what the hell |
2021-02-03 18:20:47 +0100 | <geekosaur> | they force people to google |
2021-02-03 18:21:01 +0100 | <geekosaur> | people will do anything before resorting to documentation |
2021-02-03 18:21:07 +0100 | brandonhamilton | (~brandonha@2a04:3542:1000:910:905f:f9ff:fe67:4d32) (Ping timeout: 258 seconds) |
2021-02-03 18:21:07 +0100 | frozenErebus | (~frozenEre@37.231.239.43) |
2021-02-03 18:22:43 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-02-03 18:23:14 +0100 | <maerwald> | geekosaur: well, documentation is often trash, but we'll never know if that started, because no one reads it or no one reads it, because it's trash |
2021-02-03 18:23:30 +0100 | nineonin_ | (~nineonine@50.216.62.2) |
2021-02-03 18:23:49 +0100 | <maerwald> | I'd argue that search engines made documentation worse, though |
2021-02-03 18:23:58 +0100 | ski | idly wonders whether there's a stated law about the lengths people will go to, to avoid looking into docs |
2021-02-03 18:24:27 +0100 | <swarmcollective> | <opinion> Haskell library documentation would be greatly improved with some examples. Doctest samples would work well for this. |
2021-02-03 18:25:06 +0100 | swarmcollective | would like to find time to update some of the docs. |
2021-02-03 18:25:43 +0100 | <maerwald> | https://hackage.haskell.org/package/directory-1.3.6.1/docs/System-Directory.html#v:removeFile I can't even figure out if it follows symlinks |
2021-02-03 18:25:45 +0100 | <aveltras> | examples is clearly the most important thing lacking when trying to use some libraries |
2021-02-03 18:26:17 +0100 | nineonine | (~nineonine@2604:3d08:7785:9600:95c8:88e9:a60d:8dfa) (Ping timeout: 260 seconds) |
2021-02-03 18:27:00 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 18:30:03 +0100 | <aveltras> | im porting some oo code and wondering if there is a better way to accomplish the following. I have an InlineNotification class with many fields and a ToastNotification class which extends it adding one field. The obvious way to port it (and how i do it for now) is to have an InlineNotification record and a ToastNotification with an _inlineNotification field in it. But then the problem is that whenever you want to |
2021-02-03 18:30:03 +0100 | <aveltras> | access the inner fields for the toast notification, you have to dig through the "_inlineNotification" field, which you don't have to do in oop lang. Is there another approach to this ? |
2021-02-03 18:30:29 +0100 | <koz_> | aveltras: You can use lenses which make this a bit less awkward. |
2021-02-03 18:30:45 +0100 | <aveltras> | im using lenses already |
2021-02-03 18:30:50 +0100 | Ariakenom | (~Ariakenom@2001:9b1:efb:fc00:6006:2ad2:8fc2:e1e4) |
2021-02-03 18:30:50 +0100 | <enikar> | maerwald: I think, i don't follow symlink, because the doc says « removes a directory entry », but is it true? |
2021-02-03 18:31:16 +0100 | <aveltras> | but i still have to use the intermediary lense (or at least i think so using makeLenses TH) |
2021-02-03 18:31:30 +0100 | <geekosaur> | but you can define your own composed lenses to hide it |
2021-02-03 18:31:32 +0100 | <koz_> | aveltras: Then that's pretty much it. If you wanna do OOP stuff, Haskell's not the language - you can't port the same idea of 'extending' stuff directly without awkwardness. |
2021-02-03 18:31:37 +0100 | <koz_> | What geekosaur said. |
2021-02-03 18:32:32 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 18:32:38 +0100 | <maerwald> | enikar: it doesn't follow them |
2021-02-03 18:33:10 +0100 | pera | (~pera@unaffiliated/pera) (Ping timeout: 265 seconds) |
2021-02-03 18:33:11 +0100 | <maerwald> | enikar: any proper manpage (e.g. of `unlink`) says explicitly what happens with symlinks |
2021-02-03 18:34:02 +0100 | <maerwald> | but then again, this is a cross platform lib and there's even a (poor) hint about a major complication on windows, that most ppl won't be able to infer, unless they already know it |
2021-02-03 18:34:03 +0100 | <enikar> | maerwald: nice, I guess the correct behaviour, but this is just a happy luck… |
2021-02-03 18:35:29 +0100 | rajivr | (uid269651@gateway/web/irccloud.com/x-rezdfhgnedgqggyb) (Quit: Connection closed for inactivity) |
2021-02-03 18:36:33 +0100 | knupfer | (~Thunderbi@200116b82c27b900ad15eb691b6438af.dip.versatel-1u1.de) (Remote host closed the connection) |
2021-02-03 18:36:39 +0100 | <aveltras> | i'll do custom lenses then i think, not sure i can get those with TH easily |
2021-02-03 18:36:58 +0100 | knupfer | (~Thunderbi@200116b82c27b900392e02b43800d436.dip.versatel-1u1.de) |
2021-02-03 18:37:05 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds) |
2021-02-03 18:37:14 +0100 | Yumasi | (~guillaume@2a01:e0a:5cb:4430:572d:5f36:41d6:1475) (Ping timeout: 264 seconds) |
2021-02-03 18:38:00 +0100 | mastarija | (~mastarija@188.252.197.178) |
2021-02-03 18:38:08 +0100 | <enikar> | maerwald: I'm agree with you, this documentation has a lack… |
2021-02-03 18:40:56 +0100 | rcdilorenzo | (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) |
2021-02-03 18:42:33 +0100 | <maerwald> | so my claim is this: names don't have to be accurate, just memorable |
2021-02-03 18:45:19 +0100 | <maerwald> | `cutTree` for recursive directory removal is ok imo |
2021-02-03 18:51:00 +0100 | <ski> | it can help, at times, if names don't evoke previous (irrelevant or even countering) associations |
2021-02-03 18:52:16 +0100 | geekosaur | (82650c7c@130.101.12.124) (Quit: Ping timeout (120 seconds)) |
2021-02-03 18:52:23 +0100 | soft-warm | (4408f588@ip68-8-245-136.sd.sd.cox.net) (Quit: Connection closed) |
2021-02-03 18:53:18 +0100 | chele | (~chele@ip5b40237d.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
2021-02-03 18:53:53 +0100 | <monochrom> | My criteria for names is mnemonics and hamming distance. Length and "meaning" are side effects. |
2021-02-03 18:54:08 +0100 | <monochrom> | s/ is / are / # I hate English |
2021-02-03 18:54:33 +0100 | <shapr> | Has anyone used the cookie functionality in http-client? |
2021-02-03 18:54:45 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-02-03 18:54:52 +0100 | <shapr> | If yes, what's the right way to thread cookies through multiple requests? |
2021-02-03 18:54:52 +0100 | geekosaur | (82650c7c@130.101.12.124) |
2021-02-03 18:55:11 +0100 | <shapr> | My code logs into a server, I get an auth cookie in return. |
2021-02-03 18:55:50 +0100 | <shapr> | I'd like to correctly thread the cookies from each response through each request to the server after that. |
2021-02-03 18:55:51 +0100 | f-a | (~f-a@151.34.30.157) |
2021-02-03 18:56:19 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 18:56:44 +0100 | <maerwald> | https://hackage.haskell.org/package/http-client-0.7.4/docs/Network-HTTP-Client.html#v:managerModif… and then share the manager across requests (which you should do anyway)? |
2021-02-03 18:57:18 +0100 | hseg | (~gesh@185.120.124.95) |
2021-02-03 18:58:37 +0100 | <hseg> | hi. am packaging up some haskell programs, is there a way to tell stack to cache package archives somewhere outside of the build directory? |
2021-02-03 18:58:59 +0100 | <hseg> | eg i see it's taking a while to download https://s3.amazonaws.com/hackage.fpcomplete.com/package/pandoc-2.11.4.tar.gz |
2021-02-03 18:58:59 +0100 | pera | (~pera@unaffiliated/pera) |
2021-02-03 18:59:04 +0100 | <maerwald> | hseg: https://github.com/fpco/cache-s3 |
2021-02-03 18:59:35 +0100 | <hseg> | meant caching locally |
2021-02-03 19:00:07 +0100 | <hseg> | so e.g. having ~/.local/var/cache/stack/sources/... that contains the source tarballs |
2021-02-03 19:00:26 +0100 | <hseg> | and then download the tarballs stack needs myself (eg with aria2) |
2021-02-03 19:00:38 +0100 | <hseg> | so that it doesn't need to do so every time |
2021-02-03 19:00:57 +0100 | <hseg> | especially if the dependencies change much more slowly than the package |
2021-02-03 19:01:18 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
2021-02-03 19:02:05 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 19:02:17 +0100 | kw | (d4662d5d@212.102.45.93) (Quit: Connection closed) |
2021-02-03 19:03:34 +0100 | dyeplexer | (~lol@unaffiliated/terpin) (Remote host closed the connection) |
2021-02-03 19:04:39 +0100 | <hseg> | hrm. looking at stack's fds, it is looking at something called pantry.sqlite3? |
2021-02-03 19:04:45 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
2021-02-03 19:04:48 +0100 | Foritus | (~buggery@cpc91316-watf11-2-0-cust68.15-2.cable.virginm.net) (Ping timeout: 246 seconds) |
2021-02-03 19:06:11 +0100 | frozenErebus | (~frozenEre@37.231.239.43) (Ping timeout: 272 seconds) |
2021-02-03 19:07:05 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-02-03 19:07:28 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
2021-02-03 19:07:49 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 19:08:37 +0100 | philopsos | (~caecilius@gateway/tor-sasl/caecilius) |
2021-02-03 19:10:19 +0100 | <hseg> | stack is taking much longer than aria2 to download the pandoc tarball, is there any way I can just drop the tarball in the right location? |
2021-02-03 19:10:33 +0100 | p-core | (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) |
2021-02-03 19:10:58 +0100 | <shapr> | maerwald: I don't see any code in http-client where a manager handles cookie updating, is there such a thing? |
2021-02-03 19:11:27 +0100 | rcdilorenzo_ | (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) |
2021-02-03 19:11:33 +0100 | <maerwald> | don't think so, it's all about the Ruqeust type afais |
2021-02-03 19:11:36 +0100 | <texasmynsted> | If I have a lazy ByteString with escapes like \n \t, how to I print so that \n becomes newline? |
2021-02-03 19:11:54 +0100 | Major_Biscuit | (~Major_Bis@82.169.100.198) (Ping timeout: 272 seconds) |
2021-02-03 19:12:05 +0100 | rcdilorenzo | (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Ping timeout: 240 seconds) |
2021-02-03 19:12:10 +0100 | <texasmynsted> | When I print the ByteString directly I see \n in the output. This makes sense. |
2021-02-03 19:12:56 +0100 | <maerwald> | shapr: but there is `mModifyRequest :: Request -> IO Request` |
2021-02-03 19:13:10 +0100 | <maerwald> | I just can't see currently how to set it... |
2021-02-03 19:13:14 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection) |
2021-02-03 19:13:15 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 258 seconds) |
2021-02-03 19:13:18 +0100 | <maerwald> | https://hackage.haskell.org/package/http-client-0.7.4/docs/src/Network.HTTP.Client.Types.html#Mana… |
2021-02-03 19:13:24 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 19:13:48 +0100 | dnlkrgr | (~dnlkrgr@HSI-KBW-046-005-005-235.hsi8.kabel-badenwuerttemberg.de) |
2021-02-03 19:13:52 +0100 | Saukk | (~Saukk@83-148-239-3.dynamic.lounea.fi) (Remote host closed the connection) |
2021-02-03 19:14:51 +0100 | <geekosaur> | texasmynsted, first make sure there's no "show" involved anywhere. |
2021-02-03 19:15:22 +0100 | <texasmynsted> | well show is. |
2021-02-03 19:15:30 +0100 | <geekosaur> | beyond that, you may need to add double quotes and take a trip through read, or use a string parser (I don't think there's any predefined beyond the Read instance) |
2021-02-03 19:15:38 +0100 | rcdilorenzo_ | (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) (Client Quit) |
2021-02-03 19:15:41 +0100 | <geekosaur> | show converts actual control characters to escapes |
2021-02-03 19:15:46 +0100 | <maerwald> | shapr: maybe: defaultManagerSettings { managerModifyRequest = ... } |
2021-02-03 19:15:50 +0100 | <geekosaur> | if you don't want that, don't use show |
2021-02-03 19:15:52 +0100 | rcdilorenzo | (~rcdiloren@cpe-76-182-87-188.nc.res.rr.com) |
2021-02-03 19:16:17 +0100 | <geekosaur> | > show "\tabc" |
2021-02-03 19:16:19 +0100 | <lambdabot> | "\"\\tabc\"" |
2021-02-03 19:16:34 +0100 | <shapr> | maerwald: ah, you think a function could be supplied to update cookies? |
2021-02-03 19:16:46 +0100 | <geekosaur> | wait |
2021-02-03 19:16:49 +0100 | <geekosaur> | "\tabc" |
2021-02-03 19:16:52 +0100 | <maerwald> | yeah, the cookie would be "hidden" in the partially applied function |
2021-02-03 19:16:56 +0100 | <texasmynsted> | I think it is happening automatically |
2021-02-03 19:16:59 +0100 | <geekosaur> | it's already doing show in lb |
2021-02-03 19:17:03 +0100 | <geekosaur> | > text "\tabc" |
2021-02-03 19:17:05 +0100 | <lambdabot> | abc |
2021-02-03 19:17:11 +0100 | <geekosaur> | (text is speific to lambdabot) |
2021-02-03 19:17:16 +0100 | jluttine | (~jluttine@85-23-95-149.bb.dnainternet.fi) |
2021-02-03 19:18:16 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
2021-02-03 19:18:34 +0100 | <hseg> | hrm, lsof suggests stack downloads archives to temporary directories |
2021-02-03 19:18:34 +0100 | <texasmynsted> | say I have a bytestring foo |
2021-02-03 19:18:38 +0100 | <texasmynsted> | print foo |
2021-02-03 19:18:54 +0100 | <hseg> | any way of giving it an already-downloaded tarball |
2021-02-03 19:18:55 +0100 | <hseg> | ? |
2021-02-03 19:19:04 +0100 | <texasmynsted> | also print (foo :: ByteString) |
2021-02-03 19:19:06 +0100 | f-a | (~f-a@151.34.30.157) () |
2021-02-03 19:19:08 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 19:19:23 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) |
2021-02-03 19:19:48 +0100 | <geekosaur> | texasmynsted, why use print at all? it's just putStrLn . show |
2021-02-03 19:19:56 +0100 | mastarija | (~mastarija@188.252.197.178) (Quit: Leaving) |
2021-02-03 19:19:59 +0100 | <geekosaur> | so use putStrLn directly if you don't want the show |
2021-02-03 19:20:08 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds) |
2021-02-03 19:20:09 +0100 | <texasmynsted> | heh, I thought that putStrLn used show |
2021-02-03 19:21:12 +0100 | soft-warm | (4408f588@ip68-8-245-136.sd.sd.cox.net) |
2021-02-03 19:21:15 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Ping timeout: 246 seconds) |
2021-02-03 19:21:22 +0100 | <texasmynsted> | hmm putStrLn expects String not ByteString |
2021-02-03 19:21:43 +0100 | Deide | (~Deide@217.155.19.23) |
2021-02-03 19:22:04 +0100 | <hseg> | why on earth does 'stack path' require 'stack setup'? |
2021-02-03 19:22:11 +0100 | pera | (~pera@unaffiliated/pera) (Quit: leaving) |
2021-02-03 19:22:32 +0100 | <hseg> | all i want is to know where to drop the tarball stack is taking ages to download |
2021-02-03 19:22:57 +0100 | <shapr> | hseg: Are you the person who makes math art? |
2021-02-03 19:22:58 +0100 | Tario | (~Tario@201.192.165.173) (Read error: Connection reset by peer) |
2021-02-03 19:23:01 +0100 | <geekosaur> | so BS.unpack it (probably using .Char8, which is safe in this direction if less than ideal depending on the encoding embedded in the ByteString) |
2021-02-03 19:23:28 +0100 | <hseg> | what math art? you mean byorgey's blog? |
2021-02-03 19:23:42 +0100 | jluttine | (~jluttine@85-23-95-149.bb.dnainternet.fi) (Ping timeout: 246 seconds) |
2021-02-03 19:23:42 +0100 | <shapr> | ah, never mind |
2021-02-03 19:23:44 +0100 | Foritus | (~buggery@cpc91316-watf11-2-0-cust68.15-2.cable.virginm.net) |
2021-02-03 19:23:52 +0100 | Tario | (~Tario@201.192.165.173) |
2021-02-03 19:24:24 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 246 seconds) |
2021-02-03 19:24:32 +0100 | <hseg> | am doing some computer algebra in haskell, though |
2021-02-03 19:24:54 +0100 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-02-03 19:25:00 +0100 | <geekosaur> | show is an easy way to make something a String, at a price since it does things like turning anything that's not in the ord range 32-126 to an escape. You have to decide what you want done with anything not in that range if you want to do it without show |
2021-02-03 19:25:17 +0100 | dnlkrgr | (~dnlkrgr@HSI-KBW-046-005-005-235.hsi8.kabel-badenwuerttemberg.de) (Read error: Connection reset by peer) |
2021-02-03 19:25:21 +0100 | <geekosaur> | this may include decoding UTF8 or a locale encoding |
2021-02-03 19:25:32 +0100 | pmikkelsen | (~pmikkelse@vps1.pmikkelsen.com) |
2021-02-03 19:25:46 +0100 | <sshine> | kuribas, good point (about conciseness.) |
2021-02-03 19:25:49 +0100 | <geekosaur> | (no, strings are not a simple no-thought topic. anywhere, although most programming languages pretend they are) |
2021-02-03 19:25:59 +0100 | lukaswilkeer | (b3438885@179-67-136-133.user3p.veloxzone.com.br) |
2021-02-03 19:26:47 +0100 | <sshine> | geekosaur, I think Java did an efficient job at hiding that. |
2021-02-03 19:26:47 +0100 | <kuribas> | and many language conflate binary blobs with strings. |
2021-02-03 19:27:17 +0100 | <sshine> | geekosaur, at least wrt. StringBuilder/StringBuffer |
2021-02-03 19:28:25 +0100 | ixaxaar | (~ixaxaar@49.207.210.215) (Ping timeout: 240 seconds) |
2021-02-03 19:29:21 +0100 | son0p | (~son0p@181.136.122.143) |
2021-02-03 19:30:14 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 19:31:11 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection) |
2021-02-03 19:31:35 +0100 | kciN | (~zaba@212.58.119.153) |
2021-02-03 19:33:09 +0100 | <kciN> | Hey, guys! I've got `OpenGL` and `GLUT` up to date, but keep getting `user error (unknown GLUT entry glutInit)` when I try to run my app. |
2021-02-03 19:33:15 +0100 | <shapr> | After further digging, looks like Wreq handles cookies transparently by never worrying about expiration. |
2021-02-03 19:33:40 +0100 | <monochrom> | On the flip side, I had Java students who had trouble realizing that they're mistakenly outputting control characters because Java's String.toString() does not escape. |
2021-02-03 19:33:57 +0100 | <geekosaur> | kciN, are you on Windows? you may have to install OpenGL support |
2021-02-03 19:34:03 +0100 | <monochrom> | I had to go to the trouble of suggesting them to use a hexeditor. |
2021-02-03 19:34:04 +0100 | <kciN> | Linux |
2021-02-03 19:34:05 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-02-03 19:34:12 +0100 | <texasmynsted> | Data.ByteString.Lazy.Internal.unpackChars did what I wanted |
2021-02-03 19:34:46 +0100 | <geekosaur> | hm. may still need to install it but it's more likely to be automatically installed on most distros |
2021-02-03 19:34:57 +0100 | <merijn> | texasmynsted: Almost 100% certainly it didn't |
2021-02-03 19:35:17 +0100 | <merijn> | texasmynsted: It merely *appears* to do what you want |
2021-02-03 19:35:23 +0100 | <texasmynsted> | well |
2021-02-03 19:35:29 +0100 | <monochrom> | Hell, I had to use a hexeditor to see why their output mismatched with expected output. |
2021-02-03 19:36:06 +0100 | <monochrom> | This would not have happened with Haskell's show |
2021-02-03 19:36:24 +0100 | <merijn> | monochrom: It's 2021 and I'm still linking to JoelOnSoftware's 2 decade old article about "the bare minimum everyone should know about unicode" :\ |
2021-02-03 19:36:33 +0100 | <kciN> | fixed |
2021-02-03 19:36:48 +0100 | <kciN> | (by installing `libfreeglut` on voidlinux) |
2021-02-03 19:36:55 +0100 | <texasmynsted> | what I want is to take the lazy ByteString that is read in from the stdout stream of a process and temporarily write it to the console. |
2021-02-03 19:37:05 +0100 | <merijn> | texasmynsted: That function is a one way trip to "corrupted garbage data town" >.> |
2021-02-03 19:37:20 +0100 | ClaudiusMaximus | (~claude@unaffiliated/claudiusmaximus) (Quit: ->) |
2021-02-03 19:37:26 +0100 | <texasmynsted> | merijn: What _should_ I do? |
2021-02-03 19:37:29 +0100 | <merijn> | texasmynsted: You can do that without corrupting it/going through String, though? |
2021-02-03 19:37:37 +0100 | kciN | (~zaba@212.58.119.153) () |
2021-02-03 19:37:43 +0100 | <merijn> | texasmynsted: Well, what do you mean by "console"? stdout/stderr? |
2021-02-03 19:38:24 +0100 | <texasmynsted> | I do not care about String. I care about the stdout stream. It seems to be using \n as newlines in the lazy bytestring |
2021-02-03 19:38:42 +0100 | <maerwald> | use unix package and write to stdout |
2021-02-03 19:39:06 +0100 | <monochrom> | I have trouble believing that you can read stdout. |
2021-02-03 19:39:16 +0100 | <texasmynsted> | stdout for _my_ app, rather than the process that ran where the lazy bytestring was captured |
2021-02-03 19:39:20 +0100 | <merijn> | texasmynsted: https://hackage.haskell.org/package/bytestring-0.11.0.0/docs/Data-ByteString-Lazy.html#v:putStr for example |
2021-02-03 19:39:41 +0100 | <geekosaur> | monochrom, you can if it's a terminal |
2021-02-03 19:40:22 +0100 | <merijn> | monochrom: He said "from a process" reading the stdout of a process is pretty reasonable |
2021-02-03 19:40:28 +0100 | <texasmynsted> | https://hackage.haskell.org/package/typed-process-0.2.6.0/docs/System-Process-Typed.html#t:Process… |
2021-02-03 19:40:30 +0100 | <geekosaur> | the terminal (either a terminal emulator or getty) opens one fd on 0 and dup()s it onto 1 and 2 |
2021-02-03 19:40:42 +0100 | lukaswilkeer | (b3438885@179-67-136-133.user3p.veloxzone.com.br) (Ping timeout: 240 seconds) |
2021-02-03 19:40:43 +0100 | <merijn> | texasmynsted: FYI you can also simply forward stdout of the child to stdout of the parent directly |
2021-02-03 19:40:46 +0100 | mmohammadi9812 | (~mmohammad@198.12.95.182) (Read error: Connection reset by peer) |
2021-02-03 19:40:54 +0100 | <maerwald> | yay, unix pipes |
2021-02-03 19:40:57 +0100 | mmohammadi9812 | (~mmohammad@2.178.213.79) |
2021-02-03 19:41:08 +0100 | urdh | (~urdh@unaffiliated/urdh) (Quit: Boom!) |
2021-02-03 19:41:20 +0100 | <geekosaur> | that one doesn;t even need pipes, just default fd inheritance |
2021-02-03 19:41:22 +0100 | <maerwald> | merijn is gonna get high blood pressure |
2021-02-03 19:41:26 +0100 | <texasmynsted> | merijn: That sounds better |
2021-02-03 19:41:47 +0100 | <merijn> | texasmynsted: Incidentally I (personally) find typed-process rather complex |
2021-02-03 19:41:52 +0100 | <merijn> | Needlessly so, that is |
2021-02-03 19:42:02 +0100 | neiluj | (~jco@91-167-203-101.subs.proxad.net) |
2021-02-03 19:42:02 +0100 | neiluj | (~jco@91-167-203-101.subs.proxad.net) (Changing host) |
2021-02-03 19:42:02 +0100 | neiluj | (~jco@unaffiliated/neiluj) |
2021-02-03 19:42:29 +0100 | <merijn> | texasmynsted: In fact, looks like that's the default |
2021-02-03 19:42:46 +0100 | <merijn> | texasmynsted: https://hackage.haskell.org/package/typed-process-0.2.6.0/docs/System-Process-Typed.html#v:inherit that's the default for stdout according to the docs |
2021-02-03 19:43:25 +0100 | catt | (~r@31.124.181.226) |
2021-02-03 19:45:10 +0100 | frozenErebus | (~frozenEre@37.231.239.43) |
2021-02-03 19:45:17 +0100 | <texasmynsted> | okay. Let me see. |
2021-02-03 19:48:47 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) |
2021-02-03 19:49:15 +0100 | juuandyy | (~juuandyy@90.106.228.121) |
2021-02-03 19:50:48 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-02-03 19:51:09 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 19:51:44 +0100 | jiribenes | (~jiribenes@rosa.jiribenes.com) (Read error: Connection reset by peer) |
2021-02-03 19:52:21 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) |
2021-02-03 19:52:30 +0100 | jiribenes | (~jiribenes@rosa.jiribenes.com) |
2021-02-03 19:52:31 +0100 | jonatanb | (~jonatanb@83.24.13.14.ipv4.supernova.orange.pl) (Remote host closed the connection) |
2021-02-03 19:53:30 +0100 | alx741 | (~alx741@181.196.69.29) (Ping timeout: 258 seconds) |
2021-02-03 19:55:09 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-02-03 19:55:45 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds) |
2021-02-03 19:56:36 +0100 | ph88_ | (~ph88@ip5f5af71a.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds) |
2021-02-03 19:57:29 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Client Quit) |
2021-02-03 19:59:04 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-02-03 20:00:38 +0100 | Tops2 | (~Tobias@dyndsl-095-033-093-253.ewe-ip-backbone.de) (Read error: Connection reset by peer) |
2021-02-03 20:01:23 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection) |
2021-02-03 20:01:49 +0100 | asheshambasta | (~user@ptr-e1lysavd5pllo57cw5p.18120a2.ip6.access.telenet.be) (Ping timeout: 272 seconds) |
2021-02-03 20:02:40 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) (Remote host closed the connection) |
2021-02-03 20:02:50 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-02-03 20:03:02 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 20:03:05 +0100 | jb55 | (~jb55@gateway/tor-sasl/jb55) |
2021-02-03 20:03:20 +0100 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-02-03 20:03:22 +0100 | berberman_ | (~berberman@unaffiliated/berberman) |
2021-02-03 20:03:51 +0100 | berberman | (~berberman@unaffiliated/berberman) (Ping timeout: 258 seconds) |
2021-02-03 20:04:42 +0100 | shush | (~pawn@2603-8000-3703-51f4-217f-fa24-0553-46d3.res6.spectrum.com) |
2021-02-03 20:05:03 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-02-03 20:05:45 +0100 | <shush> | I'm wanting to give haskell a go, but I'm not sure what to build. Any good programs/prompts to follow to really get down the type system and the cool FP things like monads and some other category theory things? |
2021-02-03 20:06:56 +0100 | alx741 | (~alx741@186.178.110.33) |
2021-02-03 20:07:16 +0100 | jluttine | (~jluttine@85-23-95-149.bb.dnainternet.fi) |
2021-02-03 20:07:53 +0100 | <Logio> | shush: if you haven't done a simple "ask a number, print the number"-program yet, start with that. There's enough monads and type theory there to get started |
2021-02-03 20:10:51 +0100 | <[exa]> | shush: also depends on how much functional programming you already tried&survived, for the beginning I'd recommend some simple text processing, or perhaps small games |
2021-02-03 20:11:04 +0100 | <glguy> | shush: if you just want a bunch of things to implement you could do some of the Advent of Code tasks. Many other people have done them so after you implement one, or if you get stuck, you can look up what others did and compare |
2021-02-03 20:11:33 +0100 | <shush> | I'm a JS and TS script kiddie |
2021-02-03 20:11:41 +0100 | d3od | (~nickmeno3@78-0-108-194.adsl.net.t-com.hr) |
2021-02-03 20:11:56 +0100 | <shush> | So, I've dealt with the more bastardized versions of FP concepts I guess you could say |
2021-02-03 20:11:57 +0100 | <[exa]> | shush: re games, there's Graphics.Gloss which is just unbelievably good for starting up -- you get a 2D canvas and just supply a function that generates description of what to draw, and you have it drawn. Great for experiments |
2021-02-03 20:12:11 +0100 | <swarmcollective> | I agree with glguy, Advent of Code in Haskell is good fun. |
2021-02-03 20:12:39 +0100 | <shush> | What is the community's preferred package manager for haskell? |
2021-02-03 20:12:45 +0100 | <[exa]> | shush: cabal |
2021-02-03 20:13:08 +0100 | <aveltras> | shush: you could also try https://github.com/kowainik/learn4haskell, haven't used it personally but i think it had good reviews |
2021-02-03 20:13:23 +0100 | <[exa]> | there's also stack but that's a multipurposed compatibility&reproducibility layer above cabal, for starting up it just adds complexity |
2021-02-03 20:13:51 +0100 | <ski> | shush : you're also welcome to ask beginner questions in here |
2021-02-03 20:14:16 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
2021-02-03 20:14:46 +0100 | <shush> | What are some notable, cool things built in haskell? |
2021-02-03 20:15:04 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-02-03 20:15:07 +0100 | ChaiTRex | (~ChaiTRex@gateway/tor-sasl/chaitrex) (Remote host closed the connection) |
2021-02-03 20:15:09 +0100 | <merijn> | shush: pandoc and https://www.shellcheck.net/ |
2021-02-03 20:15:17 +0100 | kuribas | (~user@ptr-25vy0i8e6su9fkcjvkw.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3)) |
2021-02-03 20:15:28 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 20:15:32 +0100 | <glguy> | shush: I'm chatting with you from something built in Haskell |
2021-02-03 20:15:37 +0100 | ChaiTRex | (~ChaiTRex@gateway/tor-sasl/chaitrex) |
2021-02-03 20:15:41 +0100 | <ski> | shush : btw, note that one doesn't really have to learn much CT, if any, to learn how to use the applications in Haskell. but if you happen to be mathematically interested, there are some cool things (which may or may not be that useful practically, atm at least) |
2021-02-03 20:15:41 +0100 | <merijn> | As for Haskell and package managers: https://gist.github.com/merijn/8152d561fb8b011f9313c48d876ceb07 |
2021-02-03 20:15:59 +0100 | <swarmcollective> | shush lambdabot https://github.com/lambdabot/lambdabot |
2021-02-03 20:16:02 +0100 | <swarmcollective> | :t zip |
2021-02-03 20:16:03 +0100 | <lambdabot> | [a] -> [b] -> [(a, b)] |
2021-02-03 20:16:24 +0100 | <ski> | @version |
2021-02-03 20:16:24 +0100 | <lambdabot> | lambdabot 5.3.0.1 |
2021-02-03 20:16:24 +0100 | <lambdabot> | git clone https://github.com/lambdabot/lambdabot |
2021-02-03 20:16:29 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 256 seconds) |
2021-02-03 20:16:36 +0100 | <merijn> | I would go further and say that "learning category theory" and "learning/becoming better at Haskell programming" are pretty much entirely unrelated goals |
2021-02-03 20:17:09 +0100 | <merijn> | And if learning Haskell programming is the real goal, category theory is mostly a waste of time |
2021-02-03 20:17:56 +0100 | <aveltras> | i'd say the more practice you get, the better |
2021-02-03 20:18:00 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) |
2021-02-03 20:18:02 +0100 | geekosaur | (82650c7c@130.101.12.124) (Ping timeout: 240 seconds) |
2021-02-03 20:18:15 +0100 | o1lo01ol1o | (~o1lo01ol1@bl11-140-216.dsl.telepac.pt) |
2021-02-03 20:18:29 +0100 | <ski> | some CT *might* be useful to know, to design certain types of advanced abstractions or efficiency improvements .. but that's for people who already know all the basics, and one can use Haskell well, and be a power user in it, without having to do anything of the sort |
2021-02-03 20:18:30 +0100 | <aveltras> | don't waste to much time on theory early on |
2021-02-03 20:19:12 +0100 | <swarmcollective> | There's a twitch streamer building the game "Dominion" in Haskell. |
2021-02-03 20:19:31 +0100 | <merijn> | ski: By the time CT might help your Haskell, you would know enough Haskell that you're not asking others how to learn more Haskell ;) |
2021-02-03 20:19:42 +0100 | <ski> | some people learn better, by being motivated by concrete practical uses, applications. some people want to get a clearer overview of the theory and possibilities first. you should try to go for what makes you tick |
2021-02-03 20:19:52 +0100 | <ski> | merijn : yes |
2021-02-03 20:20:20 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 258 seconds) |
2021-02-03 20:20:36 +0100 | <[exa]> | shush: one fun thing with haskell is taking a program and finding patterns that can be expressed with high-level library functions, thus minimizing the program to a fraction of original code volume. For the "white what I read" program you can follow from sequential getline/putstring, then >>=, then `interact`, and probably further if 2-words program isn't short enough. |
2021-02-03 20:20:45 +0100 | o1lo01ol_ | (~o1lo01ol1@bl7-89-228.dsl.telepac.pt) (Ping timeout: 240 seconds) |
2021-02-03 20:21:04 +0100 | <merijn> | aveltras: Lots of theory is useful to learn as a beginner, CT just isn't part of that ;) |
2021-02-03 20:21:07 +0100 | urodna_ | (~urodna@unaffiliated/urodna) |
2021-02-03 20:21:12 +0100 | <maerwald> | [exa]: you mean golfing |
2021-02-03 20:21:29 +0100 | <aveltras> | the problem with haskell and theory is that it is a bottomless well |
2021-02-03 20:21:39 +0100 | <shush> | main = doEverything input |
2021-02-03 20:21:44 +0100 | <shush> | That'd be the ideal program |
2021-02-03 20:21:51 +0100 | <shush> | jk |
2021-02-03 20:21:55 +0100 | <aveltras> | whenever you try to learn something you always learn about something else connected and you can go on endlessly |
2021-02-03 20:21:59 +0100 | <[exa]> | maerwald: not necessarily golfing, it's more about finding the patterns to memoize them |
2021-02-03 20:22:39 +0100 | <shush> | I think really I want to be proficient to be able to write in haskell, but then I'd like to understand the higher level concepts to be able to get creative |
2021-02-03 20:23:01 +0100 | <[exa]> | such as "oh look this is a traversal" |
2021-02-03 20:23:28 +0100 | urodna | (~urodna@unaffiliated/urodna) (Ping timeout: 272 seconds) |
2021-02-03 20:23:54 +0100 | <[exa]> | shush: you will learn lot of highlevel patterns just by coding and refactoring sometimes, don't worry |
2021-02-03 20:23:55 +0100 | cole-h | (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
2021-02-03 20:24:13 +0100 | <merijn> | shush: Even basic Haskell includes plenty of higher level concepts to keep you busy :p |
2021-02-03 20:24:22 +0100 | <shush> | noice |
2021-02-03 20:24:34 +0100 | <aveltras> | love to discover new things via hlint suggestions |
2021-02-03 20:25:00 +0100 | <[exa]> | yeah, making `hlint` shut up is super educative. :D |
2021-02-03 20:25:17 +0100 | <glguy> | you have to look up the pragma to turn off the suggestion, paste it in each file, etc |
2021-02-03 20:25:19 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 258 seconds) |
2021-02-03 20:25:20 +0100 | <ski> | a lot of learning is often to memorize various small nifty tricks and patterns |
2021-02-03 20:26:12 +0100 | <[exa]> | shush: btw does TS have monads? |
2021-02-03 20:26:21 +0100 | <shush> | Uh |
2021-02-03 20:26:25 +0100 | deviantfero | (~deviantfe@190.150.27.58) (Ping timeout: 240 seconds) |
2021-02-03 20:26:45 +0100 | <ski> | shush : often, one will not immediately see the point of, or use of, various abstraction. or may think that it's not that important. but when one's learned the idea, one may (or may not) find that one spots opportunities for it more often than one would've thought |
2021-02-03 20:26:59 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) |
2021-02-03 20:27:01 +0100 | <shush> | You can implement monads in JS, so I'd say yes, but I don't know if there is some formal definition that it misses |
2021-02-03 20:27:06 +0100 | <ski> | (this is related to "blub") |
2021-02-03 20:27:53 +0100 | <ski> | shush : lurking in this channel, sometimes trying to see what other people are talking about, and also trying to help others, can also be a good way to learn and reinforce, and to be exposed to new things |
2021-02-03 20:28:00 +0100 | <shush> | [exa]: like a monad in its type system? |
2021-02-03 20:28:31 +0100 | urdh | (~urdh@unaffiliated/urdh) |
2021-02-03 20:29:38 +0100 | <shush> | My understanding of monads are that they implement two operations: 1. the ability to map over the monad given a lambda which if a monad is returned from the lambda, is the new monad. 2. A way to fold, or get the final value |
2021-02-03 20:29:49 +0100 | <shush> | By of course, that may be an incorrect understanding |
2021-02-03 20:29:57 +0100 | <[exa]> | shush: not necessarily formal definition, the point is just getting the intuition for using them... For me the point where it "clicked" was parsing combinators (these are very cool and quite specific to haskell) |
2021-02-03 20:30:44 +0100 | <ski> | shush : oh, and btw, there is a #haskell-beginners channel. but this channel (#haskell) definitely also welcomes beginner questions and issues. the difference is more one of volume. in here, sometimes one's question may get lost in the noise, or the heat of another discussion. in there, sometimes there's not enough people around who have a clue of how to help. but in there, it can be easier to focus, because |
2021-02-03 20:30:49 +0100 | <shush> | Combinator is a monad that combines the thing? Like addition or string concatenation? |
2021-02-03 20:30:50 +0100 | <ski> | of less other conversation, while in here, it can sometimes be easier (take a shorter time) to get someone's attention |
2021-02-03 20:31:09 +0100 | <monochrom> | shush, neither sounds like "return", and both sound like ">>=", so I think you have a misunderstanding. |
2021-02-03 20:31:32 +0100 | <shush> | monochrom: fold is return, and map is >>= |
2021-02-03 20:31:42 +0100 | <shush> | At least that was what I was attempting to describe |
2021-02-03 20:31:58 +0100 | <monochrom> | Of all concrete examples of Monad and return I have seen, none feel like fold. |
2021-02-03 20:31:59 +0100 | <ski> | "combinator" is a word that is sometimes used to describe library operations that provide "building blocks" for an (Embedded) Domain Specific Language, of some sort |
2021-02-03 20:32:00 +0100 | <shush> | Is there a haskell online playground? |
2021-02-03 20:32:11 +0100 | <[exa]> | shush: combinator is a fancy name for a function with nicely closed scope, worry not about the precise definitions now |
2021-02-03 20:32:36 +0100 | jluttine | (~jluttine@85-23-95-149.bb.dnainternet.fi) (Ping timeout: 258 seconds) |
2021-02-03 20:33:19 +0100 | <ski> | shush : "the ability to map over the monad" -- monads are not things you pass to functions (nor return from them). `getLine', of type `IO String', is not a monad (it's an action, a monadic action, an `IO'-action). `IO' itself (together with its `Monad IO' instance, implementing `return' and `(>>=)' for it), is the monad |
2021-02-03 20:33:45 +0100 | <texasmynsted> | okay thank you merijn. I was trying to do things the wrong way. |
2021-02-03 20:33:58 +0100 | juuandyy | (~juuandyy@90.106.228.121) (Quit: Konversation terminated!) |
2021-02-03 20:34:20 +0100 | <texasmynsted> | It is far better and less complicated to simply use the parent stream |
2021-02-03 20:34:22 +0100 | <shush> | return will give the internal value of the monad? |
2021-02-03 20:34:23 +0100 | <monochrom> | But at the end of the day, all wordings are useless unless you write correct code and you can predict the outcome of someone else's code. |
2021-02-03 20:34:23 +0100 | hexfive | (~hexfive@50.35.83.177) |
2021-02-03 20:34:26 +0100 | <[exa]> | shush: the point is that in haskell, monads are used to write imperative-like code; you can view them (in a very limited view!) as overloaded semicolons and assignment. So for example, monads can do sequential IO (the semicolon makes sure that actions are executed in order), or parsing (the semicolons make sure that parsing context gets carried around correctly) or exceptions (the semicolon doesn't execute |
2021-02-03 20:34:26 +0100 | <shush> | I think of monads as boxes |
2021-02-03 20:34:32 +0100 | <[exa]> | the rest of the program if there was an error), etc. |
2021-02-03 20:35:38 +0100 | <ski> | in the case of parsing, you have parsing combinators that help build up larger parsers from smaller ones (as opposed to defining larger parsing *functions*, by calling smaller ones). only "at the end" do you actually run the parser with some input. the building process happens before that |
2021-02-03 20:35:38 +0100 | <glguy> | shush: you'll do better to use monads for a while to develop an understanding than to guess |
2021-02-03 20:35:53 +0100 | <shush> | glguy: Yeah, I'll need to grok at it more |
2021-02-03 20:36:21 +0100 | <tdammers> | honestly, I think the box analogy does more harm than good, at least until you have developed an intuition for the "monad" abstraction |
2021-02-03 20:36:26 +0100 | <monochrom> | Yeah I don't understand spending a month crafting a wording before any example, or even a million examples. |
2021-02-03 20:36:35 +0100 | <monochrom> | I don't see people learning chess like that. |
2021-02-03 20:36:40 +0100 | <ski> | shush : `return' is a function that, given any value, will give you back a monadic *action*, which, when later (if ever) executed, will perform no "effect", and just yield the passed value back as result |
2021-02-03 20:37:02 +0100 | <shush> | But in my JS/TS experience, a Promise is a monad. The justification here is that I can do .then(f) as the next imperative execution on that monad. |
2021-02-03 20:37:08 +0100 | deviantfero | (~deviantfe@190.150.27.58) |
2021-02-03 20:37:15 +0100 | <ski> | shush : it expresses a "nop", a "do nothing" operation (apart from specifying what the result value should be) |
2021-02-03 20:37:20 +0100 | <monochrom> | I don't see people discussing "the knight is about ..." or "the knight means ..." before they have even played a hundred games. |
2021-02-03 20:37:46 +0100 | <monochrom> | Imagine stepping into a chess club and seeing everyone talking not playing. |
2021-02-03 20:37:49 +0100 | <shush> | ski: Is return like a way of defining the case for a monad? |
2021-02-03 20:37:59 +0100 | <shush> | or the return for a particular case? |
2021-02-03 20:38:28 +0100 | <monochrom> | And even better, congratulating each other for "nailing how to do an elevator pitch for the rook". |
2021-02-03 20:38:54 +0100 | <ski> | shush : `return' is used when you have branching, and in some branch you want to do nothing at all. it's also used to explicitly set the result value of executing the action, in case the otherwise last action (in your sequence of action) doesn't provide the result value that you wanted |
2021-02-03 20:39:05 +0100 | thongpv87 | (~thongpv87@103.6.151.121) |
2021-02-03 20:39:29 +0100 | <tdammers> | I think it's best to think of `return` simply as a function for lifting values to monadic actions |
2021-02-03 20:39:40 +0100 | <ephemient> | shush: .then(_ => 1) and .then(_ => Promise.resolve(1)) have the same behavior, which is not really monadic... but JS isn't typed so ¯\_(ツ)_/¯ |
2021-02-03 20:40:04 +0100 | <[exa]> | shush: promises carry some very relevant intuition, yes. `then` has the same "parameter types" as >>=. Highly suggest you go try some simple programs (writing a few numbers etc) and try to see the type of everything with :t in ghci. |
2021-02-03 20:40:05 +0100 | <shush> | ephemient: I thought was the reason why it was monadic |
2021-02-03 20:40:06 +0100 | <shush> | haha |
2021-02-03 20:40:15 +0100 | <tdammers> | I also think that trying to form an intuition for monads is *much* harder without the help of a type system like Haskell's |
2021-02-03 20:40:18 +0100 | deviantfero | (~deviantfe@190.150.27.58) (Read error: Connection reset by peer) |
2021-02-03 20:40:30 +0100 | <ephemient> | `>>= 1` and `>>= return 1` aren't the same thing |
2021-02-03 20:40:43 +0100 | <ski> | shush : it appears to be the case, that for most people, the way to learn monads is not to learn the abstract idea first, but to learn many concrete monads (`Maybe',`Either e',`[]',`Reader r',`Writer w',`State s',`Cont o',`IO',`Parser',...), and only *then* start to realize what all these *wildly* differing things have in common |
2021-02-03 20:40:44 +0100 | <shush> | Gotta get my hands dirty before I can fully get it then |
2021-02-03 20:41:05 +0100 | <tdammers> | http://dev.stephendiehl.com/hask/#eightfold-path-to-monad-satori <- relevant |
2021-02-03 20:41:09 +0100 | <shush> | ski: Spot the pattern ;) |
2021-02-03 20:41:20 +0100 | <monochrom> | Anyway, you can enter and run some Haskell code at http://codepad.org/ |
2021-02-03 20:42:23 +0100 | <monochrom> | IMO more people should learn chess, and learn things more like learning chess. |
2021-02-03 20:42:30 +0100 | <[exa]> | shush: anyway, don't hesitate to pastebin your code and post it here (or in #haskell-beginners) for suggestions, people here love nitpicking others' code. :] |
2021-02-03 20:42:33 +0100 | <ski> | shush : but to give a very brief (and incomplete) overview/analogy. "monad" is an abstract interface, comparable to "priority queue". just like you can have many differing implementations of a priority queue, you can also have many differing implementations of the monad interface |
2021-02-03 20:42:48 +0100 | <shush> | (\ x -> y) is a lambda in haskell? |
2021-02-03 20:42:51 +0100 | <swarmcollective> | let x = Just 1 |
2021-02-03 20:42:54 +0100 | <swarmcollective> | :t x |
2021-02-03 20:42:55 +0100 | <lambdabot> | Expr |
2021-02-03 20:42:56 +0100 | kritzefitz | (~kritzefit@212.86.56.80) (Remote host closed the connection) |
2021-02-03 20:43:34 +0100 | <monochrom> | You learn chess you learn that you don't start with a white-paper drivel that a management type or marketing type understands. |
2021-02-03 20:43:53 +0100 | <ski> | shush : *however*, while for priority queues, most of the useful functionality is in the interface, and only very little is in the specific implementation (perhaps you set an initial capacity for an array-backed PQ), for *monads* otoh, *most* of the useful functionality is *specific* to the monad in question you're using, and only very little is in the "monad" interface |
2021-02-03 20:44:01 +0100 | <monochrom> | You start with the "dry" "meaningless" rules. Then you play. And fail. Repeat 100 times. |
2021-02-03 20:44:14 +0100 | <monochrom> | Only then, you are ready to discuss meanings and strategies. |
2021-02-03 20:44:18 +0100 | <ephemient> | \ is how Haskell spells λ in ASCII |
2021-02-03 20:44:32 +0100 | <swarmcollective> | >show x |
2021-02-03 20:44:45 +0100 | <swarmcollective> | (lambdabot says "Nope.") |
2021-02-03 20:44:47 +0100 | <[exa]> | shush: it's a function, lambda is the \ sign. |
2021-02-03 20:45:09 +0100 | <ephemient> | hmm it seems that λ isn't recognized even in -XUnicodeSyntax mode though |
2021-02-03 20:45:27 +0100 | <ephemient> | I guess it's difficult since it parses as a letter rather than a symbol |
2021-02-03 20:46:11 +0100 | jluttine | (~jluttine@85-23-95-149.bb.dnainternet.fi) |
2021-02-03 20:46:24 +0100 | <ski> | shush : oh right .. most "monad tutorials" don't really help much, often arguably even hinders understanding |
2021-02-03 20:47:10 +0100 | <ski> | swarmcollective : you need to use `@let' |
2021-02-03 20:47:27 +0100 | <ski> | (also, it will be ambiguous with an existing binding for `x') |
2021-02-03 20:47:33 +0100 | <ski> | @type let x = Just 1 in x |
2021-02-03 20:47:34 +0100 | <lambdabot> | Num a => Maybe a |
2021-02-03 20:47:38 +0100 | worc3131 | (~quassel@2a02:c7f:dcc4:6500:217b:6c7a:eac3:3be9) |
2021-02-03 20:48:01 +0100 | <swarmcollective> | ski, thank you! |
2021-02-03 20:48:21 +0100 | <ski> | monochrom : i wonder whether the management type or marketing type really understands it .. |
2021-02-03 20:48:22 +0100 | <monochrom> | But monad is much much broader than priority queue. |
2021-02-03 20:48:42 +0100 | <ski> | ephemient : yes |
2021-02-03 20:48:42 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 20:48:43 +0100 | <monochrom> | monad and container are more or less equally broad. |
2021-02-03 20:49:00 +0100 | <ski> | yep |
2021-02-03 20:49:00 +0100 | <monochrom> | Fortunately, monad has a rigorous definition, container doesn't. |
2021-02-03 20:49:24 +0100 | ski | . o O ( representable functor ) |
2021-02-03 20:50:51 +0100 | deviantfero | (~deviantfe@190.150.27.58) |
2021-02-03 20:51:01 +0100 | <monochrom> | I'm sure if your white paper says "one thing monads can do very well is expressing proprietory business logic" they will understand perfectly. |
2021-02-03 20:51:12 +0100 | <maerwald> | lol |
2021-02-03 20:51:30 +0100 | <dolio> | That might even be true. |
2021-02-03 20:51:43 +0100 | <monochrom> | Inspired by just last night average's drivel included "I found this in huffington post, haskell is ideally suited for proprietory business logic..." |
2021-02-03 20:51:45 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 20:51:46 +0100 | knupfer | (~Thunderbi@200116b82c27b900392e02b43800d436.dip.versatel-1u1.de) (Ping timeout: 258 seconds) |
2021-02-03 20:52:09 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 20:52:14 +0100 | <monochrom> | So yeah basically I have nailed writing the perfect white paper. Just bring up "proprietory business logic". |
2021-02-03 20:52:24 +0100 | <maerwald> | monads are like relationships: you join, but you can't get out of it |
2021-02-03 20:52:51 +0100 | <monochrom> | That sounds like fairly specifically relationships with spies and/or gangs, but yeah. |
2021-02-03 20:53:05 +0100 | <maerwald> | Yeah, grew up in the hood... |
2021-02-03 20:53:11 +0100 | <swarmcollective> | maerwald The "Hotel California" of programming. |
2021-02-03 20:53:17 +0100 | <ski> | swarmcollective : note that numeric literals are overloaded. hence the `Num a =>' |
2021-02-03 20:53:54 +0100 | <ski> | well, i'm not so sure what "expressing proprietory business logic" even means, more specifically |
2021-02-03 20:54:09 +0100 | <swarmcollective> | ski, thanks for that. I had skimmed over the `Num a =>` constraint. |
2021-02-03 20:54:24 +0100 | <ski> | swarmcollective : do you know how to read the type it gave ? |
2021-02-03 20:54:32 +0100 | <swarmcollective> | Yes. |
2021-02-03 20:55:09 +0100 | <swarmcollective> | ski, err, I *think* so. ;) |
2021-02-03 20:55:37 +0100 | <monochrom> | ski, that's the point I would think. |
2021-02-03 20:56:09 +0100 | mouseghost | (~draco@wikipedia/desperek) |
2021-02-03 20:56:15 +0100 | <ski> | well, `x :: Num a => Maybe a' means that for any type `a' (that the user/consumer/caller picks), `x' will have type `Maybe a', as long as `a' is an instance of the type class `Num' (iow, "is a numeric type") |
2021-02-03 20:56:38 +0100 | <monochrom> | The human mind wants to look for comfort words, and wants to avoid asking difficult semantic questions. |
2021-02-03 20:56:59 +0100 | <ski> | monochrom : well, the question is whether there's actually something for them to understand, in there, or if it's just a kind of bonding phrase or something |
2021-02-03 20:57:23 +0100 | <monochrom> | I think "bonding phrase" nails it. |
2021-02-03 20:57:33 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 264 seconds) |
2021-02-03 20:57:40 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 272 seconds) |
2021-02-03 20:57:45 +0100 | lawid | (~quassel@dslb-090-186-199-238.090.186.pools.vodafone-ip.de) (Ping timeout: 240 seconds) |
2021-02-03 20:57:58 +0100 | geekosaur | (82650c7c@130.101.12.124) |
2021-02-03 20:58:10 +0100 | <ski> | (and not to derail bonding phrases and the like .. such things are important, in a community. but one'd hope there'd be more to most of the interactions, than such things) |
2021-02-03 20:58:22 +0100 | ixian | (~mgold@2002:4a74:ba78:1701:0:ff:fe78:6269) (Ping timeout: 265 seconds) |
2021-02-03 20:58:33 +0100 | livvy | (~livvy@gateway/tor-sasl/livvy) (Remote host closed the connection) |
2021-02-03 20:58:43 +0100 | mmohammadi9812 | (~mmohammad@2.178.213.79) (Remote host closed the connection) |
2021-02-03 20:58:49 +0100 | livvy | (~livvy@gateway/tor-sasl/livvy) |
2021-02-03 20:58:52 +0100 | lawid | (~quassel@dslb-088-073-132-251.088.073.pools.vodafone-ip.de) |
2021-02-03 20:59:01 +0100 | mmohammadi9812 | (~mmohammad@2.178.213.79) |
2021-02-03 20:59:25 +0100 | ski | always found it confusing when people say "you're arguing semantics", as if that would be a rebuttal |
2021-02-03 20:59:30 +0100 | stef204 | (~stef204@unaffiliated/stef-204/x-384198) (Quit: WeeChat 3.0) |
2021-02-03 20:59:37 +0100 | <Rembane> | What would you otherwise argue? Syntax? |
2021-02-03 20:59:56 +0100 | <ski> | presumably. or perhaps pragmatics .. or maybe something else, i dunno |
2021-02-03 21:00:10 +0100 | <ski> | but semantics seems to be quite important, in many areas |
2021-02-03 21:00:16 +0100 | <maerwald> | logic? |
2021-02-03 21:00:30 +0100 | <ski> | (i suppose e.g. aesthetics is another one that's important) |
2021-02-03 21:01:23 +0100 | ixian | (~mgold@2002:4a74:ba78:1701:0:ff:fe78:6269) |
2021-02-03 21:01:26 +0100 | <ski> | (e.g. "every structure ought to come with a notion of structure-preserving morphism" is an *aesthetic* dogma) |
2021-02-03 21:02:01 +0100 | <maerwald> | is it? It allows to make assumptions |
2021-02-03 21:02:17 +0100 | <ski> | is what what ? |
2021-02-03 21:02:38 +0100 | geyaeb | (~geyaeb@gateway/tor-sasl/geyaeb) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-02-03 21:02:54 +0100 | <maerwald> | an asthetic dogma |
2021-02-03 21:02:58 +0100 | ph88_ | (~ph88@2a02:8109:9e00:7e5c:ade8:bbad:5afb:2c7) |
2021-02-03 21:03:00 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection) |
2021-02-03 21:03:00 +0100 | geyaeb | (~geyaeb@gateway/tor-sasl/geyaeb) |
2021-02-03 21:03:32 +0100 | <monochrom> | That one I tend to go the opposite direction. I don't understand what "structure" refers to. Ah but if you tell me what your morphisms preserve, then "ah so that's your structure". |
2021-02-03 21:04:37 +0100 | finn_elija | (~finn_elij@gateway/tor-sasl/finnelija/x-67402716) (Remote host closed the connection) |
2021-02-03 21:05:10 +0100 | finn_elija | (~finn_elij@gateway/tor-sasl/finnelija/x-67402716) |
2021-02-03 21:06:30 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) |
2021-02-03 21:07:03 +0100 | worc3131 | (~quassel@2a02:c7f:dcc4:6500:217b:6c7a:eac3:3be9) (Ping timeout: 272 seconds) |
2021-02-03 21:07:50 +0100 | cods | (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 264 seconds) |
2021-02-03 21:08:13 +0100 | mputz | (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) |
2021-02-03 21:08:14 +0100 | cods | (~fred@82-65-232-44.subs.proxad.net) |
2021-02-03 21:09:02 +0100 | ph88_ | (~ph88@2a02:8109:9e00:7e5c:ade8:bbad:5afb:2c7) (Ping timeout: 260 seconds) |
2021-02-03 21:09:21 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) |
2021-02-03 21:09:22 +0100 | <ski> | maerwald : i'm not sure how you're connecting "allows to make assumptions" with it (what do you even mean by that phrase ?) |
2021-02-03 21:10:16 +0100 | <ski> | monochrom : i commonly use that route for "container","effect","execute" |
2021-02-03 21:10:19 +0100 | <maerwald> | "every X has to come with Y" allows to make assumptions in a system, where you have X |
2021-02-03 21:10:45 +0100 | <ski> | iow, if it's a monad, then, by definition, it expresses a notion of effect, comes with a notion of execution |
2021-02-03 21:11:13 +0100 | <ski> | if it's a (covariant) functor, it corresponds to a notion of "container" |
2021-02-03 21:11:47 +0100 | <ski> | (perhaps one should make some assumptions about relevant categories being "concrete" .. but i'm not sure whether that's always warranted) |
2021-02-03 21:12:23 +0100 | <ski> | maerwald : in this case, it's an "ought", not necessarily a "will" |
2021-02-03 21:13:19 +0100 | <maerwald> | ok, I hate english too |
2021-02-03 21:13:29 +0100 | <ski> | :) |
2021-02-03 21:15:19 +0100 | <dolio> | Are morphisms the right thing, though? |
2021-02-03 21:15:43 +0100 | <ski> | any other candidates or generalizations in mind ? |
2021-02-03 21:15:50 +0100 | <dolio> | Relations. |
2021-02-03 21:15:52 +0100 | <maerwald> | transformers, lol |
2021-02-03 21:16:11 +0100 | <monochrom> | Allegories have relations as morphisms. >:) |
2021-02-03 21:16:18 +0100 | frozenErebus | (~frozenEre@37.231.239.43) (Ping timeout: 258 seconds) |
2021-02-03 21:16:24 +0100 | <ski> | yea, was just about to mention allegories |
2021-02-03 21:16:32 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-02-03 21:16:34 +0100 | <dolio> | Category theorists use morphisms to determine structure, as monochrom said. However, that ends up classifying some things unnaturally in some ways. |
2021-02-03 21:17:45 +0100 | <ski> | "Algebra of Programming" uses relations as specifications of problems, and then particular implementations are functional relations that're derived from them |
2021-02-03 21:18:02 +0100 | <dolio> | For instance, the inverse operation on a group is classified as a property, not structure, on a monoid by category theorists. |
2021-02-03 21:18:35 +0100 | <dolio> | But if you use structure preserving relations, it is structure. |
2021-02-03 21:18:38 +0100 | <ski> | i've seen both |
2021-02-03 21:19:21 +0100 | <ski> | can you elaborate on the "But" part ? |
2021-02-03 21:19:57 +0100 | average | (uid473595@gateway/web/irccloud.com/x-rcklrhokomuilocj) (Quit: Connection closed for inactivity) |
2021-02-03 21:22:27 +0100 | <dolio> | Monoid morphisms always are always group morphisms provided the monoids happen to be groups. So that gets classified as a property by the sysematic category theory study of this sort of thing. However, monoid congruences need not respect inverses for monoids that happen to be groups. |
2021-02-03 21:24:40 +0100 | <dolio> | You can go in the other direction, too, to homotopy type theory, and consider equivalences. Then being a monoid is a property of a semigroup, because equivalences of semigroups necessarily respect units. However, morphisms of semigroups need not take units to units for semigroups that are monoids, so it gets classified as structure that way. |
2021-02-03 21:25:10 +0100 | hiroaki | (~hiroaki@ip4d167562.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
2021-02-03 21:25:26 +0100 | Sheilong | (uid293653@gateway/web/irccloud.com/x-duetsgbgiyfgeatn) |
2021-02-03 21:26:27 +0100 | hiroaki | (~hiroaki@ip4d167562.dynamic.kabel-deutschland.de) |
2021-02-03 21:26:37 +0100 | <ski> | a monoid congruence ⌜R : M → Ω ← N⌝ is a binary relation between two monoids ⌜M⌝ and ⌜N⌝ such that ⌜1 R 1⌝ and, if ⌜m₀ R n₀⌝ and ⌜m₁ R n₁⌝, then ⌜m₀⋅m₁ R n₀⋅n₁⌝ ? |
2021-02-03 21:27:01 +0100 | <dolio> | Yes. |
2021-02-03 21:28:23 +0100 | <ski> | "consider equivalences" as the morphisms in question ? |
2021-02-03 21:28:54 +0100 | son0p | (~son0p@181.136.122.143) (Quit: Lost terminal) |
2021-02-03 21:29:22 +0100 | sh9 | (~sh9@softbank060116136158.bbtec.net) |
2021-02-03 21:30:05 +0100 | Guest88 | (~textual@2607:fea8:1300:266:dd64:bfef:2d87:cdc4) |
2021-02-03 21:30:43 +0100 | Guest88 | (~textual@2607:fea8:1300:266:dd64:bfef:2d87:cdc4) (Client Quit) |
2021-02-03 21:32:16 +0100 | <dolio> | You can probably look at it that way. But equivalences are the analogues of morphisms for groupoids, and you might want to consider groupoids to be more fundamental than categories. |
2021-02-03 21:33:28 +0100 | <dolio> | Because, like, type theory naturally gives rise to that sort of notion for every type. |
2021-02-03 21:34:45 +0100 | shiraeeshi | (~shiraeesh@109.166.56.5) (Ping timeout: 240 seconds) |
2021-02-03 21:36:19 +0100 | <hseg> | ok, so type formation/elimination rules give rise to a notion of congruence, which are weaker than what we'd call morphism laws? |
2021-02-03 21:37:08 +0100 | <hseg> | which means that the property/structure classification becomes more systematic? |
2021-02-03 21:38:02 +0100 | dhouthoo | (~dhouthoo@ptr-eitgbj2w0uu6delkbrh.18120a2.ip6.access.telenet.be) (Quit: WeeChat 3.0) |
2021-02-03 21:41:01 +0100 | <swarmcollective> | Do discussions about Monads always become discussions around Category Theory? :) (Where's the "my head is spinning emoji?) |
2021-02-03 21:41:31 +0100 | <monochrom> | Yes. |
2021-02-03 21:41:36 +0100 | <geekosaur> | only in #haskell |
2021-02-03 21:41:53 +0100 | <hseg> | dolio: would appreciate pointers in this regard |
2021-02-03 21:42:08 +0100 | rmk236 | (~lcampos@2a02:908:3616:b100:9d94:72c:d22d:2612) |
2021-02-03 21:42:12 +0100 | <monochrom> | This is a good thing. The theory of reinforcement learning says that this teaches you to not discuss monads in the first place. |
2021-02-03 21:42:27 +0100 | jess | (jess@freenode/staff/jess) (Quit: Leaving) |
2021-02-03 21:42:27 +0100 | <swarmcollective> | geekosaur, I thought that was #haskell-in-depth |
2021-02-03 21:42:47 +0100 | <monochrom> | There is really nothing to discuss. Use monads. Get things done. Don't talk. |
2021-02-03 21:43:02 +0100 | <geekosaur> | #haskell-in-depth was one of several failed attempts to get the whole mess out of #haskell |
2021-02-03 21:44:31 +0100 | <swarmcollective> | In my personal experience, "doing" is helping more than "asking / discussing", but it was hard to find a project to dig into. |
2021-02-03 21:44:56 +0100 | <swarmcollective> | At the same time, I appreciate those who have been patient enough to explain to me. |
2021-02-03 21:45:06 +0100 | jess| | (jess@freenode/staff/jess) |
2021-02-03 21:45:12 +0100 | <monochrom> | No. Exercises. Typoclasspedia and data61 have exercises. |
2021-02-03 21:45:35 +0100 | <dolio> | hseg: All the classifications are systematic. But relations/congruence classifies the most stuff as "structure" instead of "properties" and equivalences classify the most stuff as "properties". Morphisms is intermediate between the two. |
2021-02-03 21:45:55 +0100 | <monochrom> | And at the scale of data61 (spamming you with exercises), it begins to feel like a neverending project anyway. |
2021-02-03 21:46:06 +0100 | <monochrom> | or a death march project, who knows. |
2021-02-03 21:47:06 +0100 | jess| | jess |
2021-02-03 21:47:29 +0100 | <dolio> | Probably no one can tell you any good reason for one being chosen as the 'right' choice. |
2021-02-03 21:48:17 +0100 | <dolio> | The congruence stuff is discussed in this paper: https://www.cs.bham.ac.uk/~udr/papers/logical-relations-and-parametricity.pdf |
2021-02-03 21:49:49 +0100 | kupi | (uid212005@gateway/web/irccloud.com/x-qetuytxtunbuqszx) (Quit: Connection closed for inactivity) |
2021-02-03 21:50:24 +0100 | <dolio> | And there is some sense in which congruences characterize something about the algebraic structures that morphism fail to characterize. |
2021-02-03 21:54:18 +0100 | <hseg> | ok, thanks |
2021-02-03 21:54:19 +0100 | fendor | (~fendor@91.141.2.117.wireless.dyn.drei.com) (Remote host closed the connection) |
2021-02-03 21:54:43 +0100 | <dolio> | "Isomorphism" in that paper is what I've been calling equivalence. |
2021-02-03 21:55:26 +0100 | <ski> | dolio : ".. naturally gives rise to that sort of notion for every type" -- are you thinking of things like ⌜∀ X. X → X⌝ ? |
2021-02-03 21:56:23 +0100 | <ski> | swarmcollective : we like talking about both more beginner and more advanced stuff, and both more practical-oriented and theoretical stuff |
2021-02-03 21:56:45 +0100 | honigkuchen | (~honigkuch@ip5b429953.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
2021-02-03 21:56:55 +0100 | <ski> | (different people may have differing inclinations, obviously. i was talking about the general picture) |
2021-02-03 21:57:25 +0100 | <dolio> | I mean that the identity type in Martin-löf type theory is the type of equivalences. Every type has an identity type, and MLTT is pretty easy to get a handle on. The type theories where every type is a category are super complicated. |
2021-02-03 21:58:11 +0100 | <ski> | monochrom : "Shut up and code !" ? :P |
2021-02-03 21:58:34 +0100 | <monochrom> | Sometimes, shut up and calculate. |
2021-02-03 21:58:46 +0100 | ski | . o O ( "Calculemus !" ) |
2021-02-03 21:58:49 +0100 | <monochrom> | My definition of "understand" is "have predictive power". |
2021-02-03 21:58:59 +0100 | <dolio> | And lots of types will just have 'categorical' structure that is just forgetting that the groupoid structure is symmetric. |
2021-02-03 21:59:51 +0100 | <monochrom> | "monad is about computation" doesn't help you predict much. However, a simple law like ">>= is associative" can get you very far. |
2021-02-03 22:00:00 +0100 | p-core | (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Ping timeout: 258 seconds) |
2021-02-03 22:00:11 +0100 | <ski> | dolio : ooh, Uday Reddy |
2021-02-03 22:00:12 +0100 | _ht | (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
2021-02-03 22:00:18 +0100 | <ski> | ty |
2021-02-03 22:01:19 +0100 | swarmcollective | (~joseph@cpe-65-31-18-174.insight.res.rr.com) (Ping timeout: 256 seconds) |
2021-02-03 22:01:24 +0100 | <ski> | monochrom : not about "cavalier power", as well ? |
2021-02-03 22:03:17 +0100 | <monochrom> | Oh, there is no cavalier power on either side in the context of comparing a blog post with a monad law in terms of how much they help understanding. |
2021-02-03 22:03:55 +0100 | <monochrom> | Instead, in this context, predictive power is opposed to feeling good about yourself. |
2021-02-03 22:03:58 +0100 | p-core | (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) |
2021-02-03 22:04:33 +0100 | nfip^ | (nfip@ip98-184-89-2.mc.at.cox.net) () |
2021-02-03 22:04:37 +0100 | usr25 | (~J@145.red-83-58-207.dynamicip.rima-tde.net) |
2021-02-03 22:04:47 +0100 | <monochrom> | Right? When a management type sees "this thing helps with business logic" they understand nothing, they have actually learned nothing, they just feel better. |
2021-02-03 22:06:08 +0100 | fendor | (~fendor@91.141.2.117.wireless.dyn.drei.com) |
2021-02-03 22:07:31 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2021-02-03 22:08:24 +0100 | hiroaki | (~hiroaki@ip4d167562.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
2021-02-03 22:08:33 +0100 | Younder | (~john@33.51-174-155.customer.lyse.net) |
2021-02-03 22:08:49 +0100 | p-core | (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Ping timeout: 258 seconds) |
2021-02-03 22:10:10 +0100 | ADG1089__ | (~aditya@223.236.190.35) |
2021-02-03 22:13:53 +0100 | hiroaki | (~hiroaki@ip4d167562.dynamic.kabel-deutschland.de) |
2021-02-03 22:14:44 +0100 | conal | (~conal@64.71.133.70) |
2021-02-03 22:18:15 +0100 | <koz_> | Is there something equivalent to 'SomeProxy'? |
2021-02-03 22:19:45 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds) |
2021-02-03 22:21:02 +0100 | knupfer | (~Thunderbi@200116b82c27b9002d81d776aa1cc87b.dip.versatel-1u1.de) |
2021-02-03 22:23:45 +0100 | fendor_ | (~fendor@77.119.129.25.wireless.dyn.drei.com) |
2021-02-03 22:24:45 +0100 | p-core | (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) |
2021-02-03 22:26:32 +0100 | <ij> | what document should I consult to learn about what is WHNF? |
2021-02-03 22:26:57 +0100 | fendor | (~fendor@91.141.2.117.wireless.dyn.drei.com) (Ping timeout: 264 seconds) |
2021-02-03 22:27:17 +0100 | dxld | (~dxld@rush.pub.dxld.at) (Quit: Bye) |
2021-02-03 22:28:16 +0100 | <[exa]> | ij: it shold have a "rigorous" definition somewhere... https://wiki.haskell.org/Weak_head_normal_form |
2021-02-03 22:28:17 +0100 | ADG1089__ | (~aditya@223.236.190.35) (Remote host closed the connection) |
2021-02-03 22:29:18 +0100 | <wz1000> | koz_: Some Proxy? https://hackage.haskell.org/package/some-1.0.2/docs/Data-Some.html |
2021-02-03 22:29:21 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-02-03 22:29:49 +0100 | tsrt^ | (tsrt@ip98-184-89-2.mc.at.cox.net) |
2021-02-03 22:29:52 +0100 | <koz_> | wz1000: Yes, that will do very nicely. |
2021-02-03 22:30:27 +0100 | <ij> | what are examples of values that aren't in WHNF? |
2021-02-03 22:30:40 +0100 | xff0x_ | (~xff0x@2001:1a81:536f:2100:2f3c:8f56:462:e9ab) (Ping timeout: 258 seconds) |
2021-02-03 22:30:55 +0100 | <[exa]> | ij: if you heard "redex" definition (an applied lambda, basically), expression in HNF is one with no redex in the topmost grammar production |
2021-02-03 22:31:08 +0100 | <geekosaur> | that's not how WHNF works |
2021-02-03 22:31:26 +0100 | deviantfero | (~deviantfe@190.150.27.58) (Ping timeout: 258 seconds) |
2021-02-03 22:31:37 +0100 | <geekosaur> | WHNF is a state in the lazy evluation of some value, not an attribute which some values have |
2021-02-03 22:32:32 +0100 | xff0x_ | (xff0x@gateway/vpn/mullvad/xff0x) |
2021-02-03 22:32:45 +0100 | <[exa]> | geekosaur: hm, does the definition on haskell wiki make sense then? |
2021-02-03 22:32:57 +0100 | <geekosaur> | for example, if you have the list ['a'], successive evaluations to WHNF get you: (_:_), ('a':_), ('a':[]). the _ represents something which is not yet in WHNF and is therefore not yet known |
2021-02-03 22:33:36 +0100 | <ij> | geekosaur, what I meant by that "value" is the state in the evaluation |
2021-02-03 22:34:21 +0100 | soft-warm | (4408f588@ip68-8-245-136.sd.sd.cox.net) (Quit: Connection closed) |
2021-02-03 22:35:11 +0100 | <ij> | ah, function applications aren't in whnf |
2021-02-03 22:36:12 +0100 | <ij> | what is wrong with calling it a value? should it be term? |
2021-02-03 22:37:03 +0100 | sord937 | (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
2021-02-03 22:37:19 +0100 | <geekosaur> | in my example they're all the same value. what differs is how far evaluation has proceeded |
2021-02-03 22:37:22 +0100 | soft-warm | (4408f588@ip68-8-245-136.sd.sd.cox.net) |
2021-02-03 22:37:46 +0100 | <geekosaur> | also arguably there's an initial state _ when nothing has been evaluated to WHNF yet |
2021-02-03 22:37:48 +0100 | <ij> | term then? |
2021-02-03 22:38:03 +0100 | <ij> | I read a book about progarmming languages, I know there must be a word for it |
2021-02-03 22:38:37 +0100 | <[exa]> | geekosaur: my understanding is that `undefined:undefined` is a WHNF, does that sound right? |
2021-02-03 22:39:01 +0100 | <ij> | I think so, because it's a data constructor (:) undefined undefined |
2021-02-03 22:39:10 +0100 | <[exa]> | ij: there's the "normal forms" in lambda calculus, and there's their use in haskell, which is slightly different |
2021-02-03 22:40:16 +0100 | xff0x_ | (xff0x@gateway/vpn/mullvad/xff0x) (Ping timeout: 272 seconds) |
2021-02-03 22:40:26 +0100 | <[exa]> | in lambda calculus, the head normal form means that the topmost term structure is not in form of `(λx.A)B` (that's a redex) |
2021-02-03 22:40:47 +0100 | <[exa]> | "normal form" means there's no redexes at all in whole expression, getting normal forms is undecidable btw. |
2021-02-03 22:41:04 +0100 | <ij> | why not call it just application? :) but sure, if you say redex = application, no problem |
2021-02-03 22:41:16 +0100 | <ij> | http://lampwww.epfl.ch/teaching/archive/type_systems/2008/exercises/3-typed/ it's called an application here |
2021-02-03 22:41:23 +0100 | <ij> | but that is not too important |
2021-02-03 22:41:28 +0100 | <geekosaur> | [exa], the constructor (:) is in WHNF, the rest of the expression is not. I suppose in that sense we can speak of values |
2021-02-03 22:41:41 +0100 | <[exa]> | in haskell, the weak head normal form is useful because it describes the fact that something can be patternmatched "a bit" |
2021-02-03 22:41:45 +0100 | xff0x_ | (~xff0x@2001:1a81:536f:2100:2f3c:8f56:462:e9ab) |
2021-02-03 22:42:25 +0100 | <dolio> | Head normal form is a weird one that rarely corresponds to any actual evaluation strategy. |
2021-02-03 22:42:44 +0100 | sh9 | (~sh9@softbank060116136158.bbtec.net) (Quit: WeeChat 2.8) |
2021-02-03 22:42:50 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 22:42:58 +0100 | <merijn> | [exa]: Not true that it's undecidable :p |
2021-02-03 22:42:59 +0100 | <[exa]> | ij: if you have `((\x.x) (\x.x)) A`, it's an application but not a redex. |
2021-02-03 22:43:06 +0100 | <merijn> | [exa]: It depends on the exact lambda calculus |
2021-02-03 22:43:20 +0100 | <ij> | [exa], ah |
2021-02-03 22:43:22 +0100 | <[exa]> | merijn: ah okay |
2021-02-03 22:43:34 +0100 | <ij> | https://wiki.haskell.org/Performance/Strictness |
2021-02-03 22:43:38 +0100 | <merijn> | [exa]: In the simply typed lambda calculus the algorithm for determining the existence is easy, for example |
2021-02-03 22:43:43 +0100 | <ij> | why is "lgo" strict in "z"? |
2021-02-03 22:43:50 +0100 | <merijn> | [exa]: Since the algorithm is "const True" ;) |
2021-02-03 22:43:51 +0100 | <[exa]> | I know, worry not. I didn't want to jump to types |
2021-02-03 22:44:01 +0100 | <ij> | with -O flag, that is |
2021-02-03 22:44:02 +0100 | swarmcollective | (~joseph@cpe-65-31-18-174.insight.res.rr.com) |
2021-02-03 22:44:11 +0100 | <[exa]> | ij: because it's fasterer |
2021-02-03 22:44:39 +0100 | <ij> | so being or not being strict is not set in stone/arbitrary |
2021-02-03 22:45:12 +0100 | <[exa]> | if something is strict, the compiler can on one side assume that the data is always there (not an exception/undefined/thunk/whatever), and on the other side it needs to produce the WHNF so that the thing is actually there |
2021-02-03 22:45:19 +0100 | cr3 | (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving) |
2021-02-03 22:45:37 +0100 | <ij> | alright, makes sense |
2021-02-03 22:46:07 +0100 | <[exa]> | making stuff strict is a vital means of optimization (each strictness annotation removes one "if" from the code), but if done wrong, it can make your program fail even if it normally wouldn't |
2021-02-03 22:46:19 +0100 | <ij> | really |
2021-02-03 22:46:49 +0100 | <ij> | how could it make it fail? wouldn't having a well-typed program prohibit that? |
2021-02-03 22:46:51 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2021-02-03 22:47:07 +0100 | <[exa]> | ij: consider `f = 1+f; g = const 1 f` |
2021-02-03 22:47:12 +0100 | ukari | (~ukari@unaffiliated/ukari) (Remote host closed the connection) |
2021-02-03 22:47:25 +0100 | <merijn> | Even easier |
2021-02-03 22:47:29 +0100 | <ij> | ah, in light of recursion, sure |
2021-02-03 22:47:36 +0100 | <merijn> | Consider: "length (repeat 1)" |
2021-02-03 22:47:40 +0100 | <merijn> | > repeat 1 |
2021-02-03 22:47:42 +0100 | <lambdabot> | [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1... |
2021-02-03 22:47:43 +0100 | ukari | (~ukari@unaffiliated/ukari) |
2021-02-03 22:47:49 +0100 | <ij> | > length $ repeat 1 |
2021-02-03 22:47:58 +0100 | <lambdabot> | mueval.real: ExitFailure 1 |
2021-02-03 22:48:00 +0100 | <[exa]> | oh noes |
2021-02-03 22:48:10 +0100 | <ij> | merijn, it wouldn't work anyway – what's the difference? |
2021-02-03 22:48:17 +0100 | <merijn> | ij: It loops infinitely |
2021-02-03 22:48:25 +0100 | <ij> | but it doesn't crash? |
2021-02-03 22:48:30 +0100 | <geekosaur> | head (repeat 1) |
2021-02-03 22:48:32 +0100 | <merijn> | ij: No |
2021-02-03 22:48:45 +0100 | <[exa]> | merijn: I wanted to have a working case for comparison :D |
2021-02-03 22:48:46 +0100 | <geekosaur> | overstrict you hit an infinite loop |
2021-02-03 22:48:57 +0100 | <ij> | I guess I mean stop |
2021-02-03 22:49:01 +0100 | <[exa]> | yeah it's better with head |
2021-02-03 22:49:13 +0100 | <merijn> | ij: In Turing complete language you can't rule out non-termination (like infinite loops), but some things that are infinite loops in a strict setting aren't in a lazy setting |
2021-02-03 22:49:22 +0100 | <merijn> | > head $ map (+1) (repeat 1) |
2021-02-03 22:49:24 +0100 | geekosaur | (82650c7c@130.101.12.124) (Quit: Connection closed) |
2021-02-03 22:49:24 +0100 | <lambdabot> | 2 |
2021-02-03 22:49:39 +0100 | <merijn> | ij: In a strict setting the map never terminates and that whole thing doesn't work |
2021-02-03 22:49:48 +0100 | <ij> | gotcha |
2021-02-03 22:50:06 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds) |
2021-02-03 22:50:11 +0100 | <ij> | makes sense when recursive defs come into play |
2021-02-03 22:50:23 +0100 | rwdrich28 | (560395a9@cpc159427-cmbg20-2-0-cust424.5-4.cable.virginm.net) |
2021-02-03 22:50:30 +0100 | geekosaur | (82650c7c@130.101.12.124) |
2021-02-03 22:50:34 +0100 | <ij> | I think I have some thunks to kill in my program |
2021-02-03 22:50:46 +0100 | <[exa]> | ij: anyway, the final point is that the definition of WHNF (either a straightforward accessible patternmatchable data, or surely a function, or surely a builtin) kindof precisely describes the strictness problems, so haskell uses it |
2021-02-03 22:50:50 +0100 | <ij> | -O sped it up by 5x already |
2021-02-03 22:51:00 +0100 | swarmcollective | sees dead thunks, all the time |
2021-02-03 22:51:14 +0100 | <ij> | [exa], alright, cool! |
2021-02-03 22:51:19 +0100 | <[exa]> | ij: Int vs. Integer |
2021-02-03 22:51:19 +0100 | <[exa]> | :] |
2021-02-03 22:51:26 +0100 | <monochrom> | With lazy evaluation and conceptually infinite data (sure you'll only consume a finite prefix) you need a finer distinction than the false dichotomy "terminates" "doesn't terminate". |
2021-02-03 22:51:58 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2021-02-03 22:52:02 +0100 | <monochrom> | Either that, or you have to classify "f x : map f xs" as "terminates". |
2021-02-03 22:52:10 +0100 | <[exa]> | ij: anyway, the divergence (aka infinite loop) is one common case where you need to care about strictness, the second common case is just plain bottom (aka undefined aka exception) |
2021-02-03 22:52:27 +0100 | <monochrom> | In fact, in that sense, "f x : map f xs" is O(1)-time. |
2021-02-03 22:52:46 +0100 | <ij> | monochrom, wouldn't "terminates or not" be enough, if you also specify "with these semantics"? |
2021-02-03 22:53:05 +0100 | <monochrom> | See my "or" |
2021-02-03 22:54:07 +0100 | <ij> | you mean it depends what's around the expression/how it's used? |
2021-02-03 22:54:21 +0100 | <monochrom> | There are many correct models that disagree on how to use terminologies. |
2021-02-03 22:54:43 +0100 | <monochrom> | And they are equivalent after you ignore disputes on terminologies. |
2021-02-03 22:55:14 +0100 | <monochrom> | There are people who use the word "productive, though not terminating" for "f x : map f xs". |
2021-02-03 22:55:24 +0100 | michalz | (~user@185.246.204.76) (Remote host closed the connection) |
2021-02-03 22:56:16 +0100 | <monochrom> | They are not wrong as long as they are self-consistent and, you have to take into account the rest of their model, they still make the right predictions, e.g., "head (map f [1..]) takes as little time as [f 1]" |
2021-02-03 22:56:32 +0100 | rwdrich28 | (560395a9@cpc159427-cmbg20-2-0-cust424.5-4.cable.virginm.net) (Quit: Connection closed) |
2021-02-03 22:57:23 +0100 | <monochrom> | So I mean there are many incompatible ways of defining "terminates". |
2021-02-03 22:57:32 +0100 | <ij> | is a thunk something that is boxed? |
2021-02-03 22:57:35 +0100 | <ij> | "However, the parameter acc isn't strict, because there's no guarantee that the caller will evaluate it. The compiler will use a fully boxed Int to represent acc" |
2021-02-03 22:58:07 +0100 | <monochrom> | What do you already know of "box"? |
2021-02-03 22:58:30 +0100 | <monochrom> | Because if you don't know, then using it to explain other things is meaningful. |
2021-02-03 22:58:34 +0100 | <monochrom> | err, meaningless. |
2021-02-03 22:59:08 +0100 | <ij> | a box can be a pointer to the data, but I guess I don't |
2021-02-03 22:59:28 +0100 | <ij> | is that something very internal or can I read about it? |
2021-02-03 22:59:30 +0100 | <monochrom> | I know a lot of people preserve their Dunning-Kruger by tossing around "thunk" and "box" without knowing anything. |
2021-02-03 22:59:32 +0100 | Varis | (~Tadas@unaffiliated/varis) (Remote host closed the connection) |
2021-02-03 22:59:48 +0100 | johnw | (~johnw@haskell/developer/johnw) |
2021-02-03 22:59:49 +0100 | <monochrom> | No, a box is what that pointer points to. |
2021-02-03 23:00:27 +0100 | deviantfero | (~deviantfe@179.51.60.188) |
2021-02-03 23:00:35 +0100 | <monochrom> | I never use the word "box", because everyonoe already knows "heap object", and "box" means that, no more no less. |
2021-02-03 23:00:38 +0100 | danvet | (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 264 seconds) |
2021-02-03 23:00:41 +0100 | <ij> | that makes no sense at all |
2021-02-03 23:01:04 +0100 | <monochrom> | The only advantage of the word "box" is it mitigates RSI. |
2021-02-03 23:01:40 +0100 | <monochrom> | But you should set up a macro in your IRC client to auto-expand "box" to "heap object". :) |
2021-02-03 23:01:47 +0100 | kupi | (uid212005@gateway/web/irccloud.com/x-hwbscpvqcraoqtak) |
2021-02-03 23:01:55 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection) |
2021-02-03 23:01:58 +0100 | <ephemient> | https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/rts/storage/heap-objects |
2021-02-03 23:02:09 +0100 | <monochrom> | A thunk is stored on the heap, so it is one of many kinds of heap objects. |
2021-02-03 23:02:26 +0100 | <kupi> | >> is the same as *> ? |
2021-02-03 23:02:38 +0100 | <monochrom> | But of course, as usual, a lot of people still don't know what's in a thunk. |
2021-02-03 23:02:45 +0100 | <ephemient> | yes-ish |
2021-02-03 23:02:55 +0100 | <ij> | monochrom, box = heap object sounds good, certainly much more straight-forward |
2021-02-03 23:03:22 +0100 | <monochrom> | Yes for law-abiding instances. And if "same" means observationally equivalent esp. ignoring possible tiny performance differences. |
2021-02-03 23:03:36 +0100 | <swarmcollective> | monochrom, explain RSI? |
2021-02-03 23:03:57 +0100 | <ij> | swarmcollective, repetitive strain injury – i.e. what happens when you smash the keys all day |
2021-02-03 23:04:05 +0100 | <Uniaika> | carpian canal? |
2021-02-03 23:04:08 +0100 | <monochrom> | If you have fewer keys to type because the word is shorter, you don't stress your hand and wrist as much. :) |
2021-02-03 23:04:10 +0100 | <Uniaika> | or is it different? |
2021-02-03 23:04:32 +0100 | <swarmcollective> | ij, Ahhhh! Yes. |
2021-02-03 23:04:36 +0100 | <Uniaika> | kupi: kinda-sorta |
2021-02-03 23:04:45 +0100 | <ephemient> | carpal tunnel syndrome is one possible effect of RSI. there are others |
2021-02-03 23:04:45 +0100 | <ij> | Uniaika, I think cts should be when you have a weak hand with numbness |
2021-02-03 23:04:52 +0100 | <Uniaika> | thanks ephemient |
2021-02-03 23:04:55 +0100 | tromp | (~tromp@dhcp-077-249-230-040.chello.nl) |
2021-02-03 23:04:57 +0100 | <kupi> | which is faster? |
2021-02-03 23:05:03 +0100 | <ij> | ha! |
2021-02-03 23:05:07 +0100 | <ephemient> | mu |
2021-02-03 23:05:20 +0100 | <Uniaika> | kupi: dump the core IR :P |
2021-02-03 23:05:45 +0100 | <swarmcollective> | box & RSI > Abbr. |
2021-02-03 23:06:59 +0100 | geekosaur | (82650c7c@130.101.12.124) (Quit: Connection closed) |
2021-02-03 23:07:18 +0100 | <kupi> | nvm, i am still too newbie to optimize, i will stick to *> because that is more general |
2021-02-03 23:07:31 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed) |
2021-02-03 23:07:45 +0100 | <ephemient> | *> vs >> is not going to be a worthwhile optimization anyway |
2021-02-03 23:07:48 +0100 | conal | (~conal@64.71.133.70) (Read error: Connection reset by peer) |
2021-02-03 23:07:52 +0100 | <ij> | ^ |
2021-02-03 23:07:53 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 23:08:56 +0100 | <ij> | how should I go about finding unnecessary thunks? I have a program that I'm pretty sure could have everything strict |
2021-02-03 23:09:03 +0100 | <ij> | just add bangs everywhere? |
2021-02-03 23:09:26 +0100 | <merijn> | "could have" is not "should" |
2021-02-03 23:09:52 +0100 | <monochrom> | In some cases, I use >> when I'm already using >>=, I use *> when I'm already sticking to <*>. |
2021-02-03 23:10:04 +0100 | <monochrom> | In other cases, I use *> so I don't have to teach >> |
2021-02-03 23:10:12 +0100 | <ij> | merijn, why? |
2021-02-03 23:10:28 +0100 | <ephemient> | there is a {-# LANGUAGE Strict #-} pragma |
2021-02-03 23:10:33 +0100 | <ij> | because you might not need all the data, I guess |
2021-02-03 23:10:52 +0100 | <merijn> | ij: Randomly making things strict is about as likely to make things slower as it is to make things faster |
2021-02-03 23:10:52 +0100 | <ephemient> | although at that point I think you're working in a Haskell-like language rather than Haskell |
2021-02-03 23:11:06 +0100 | <merijn> | There are no shortcuts that let you skip "understanding what you're doing" |
2021-02-03 23:11:43 +0100 | swarmcollective | avoids symbolic representations of functions, except for <$> :/ :\ |
2021-02-03 23:11:54 +0100 | <ij> | merijn, everything is strict in C. it is pretty fast |
2021-02-03 23:12:07 +0100 | <monochrom> | I don't even worry about these things until empirically it is very pressing that the time or space cost is really unbearable. |
2021-02-03 23:12:12 +0100 | <ij> | except for like True && println() |
2021-02-03 23:12:17 +0100 | <ij> | I mean false |
2021-02-03 23:12:25 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds) |
2021-02-03 23:12:32 +0100 | <monochrom> | source code sanity is more important than "5% cheaper" |
2021-02-03 23:12:45 +0100 | <merijn> | ij: C is a very different language, with a very different compiler, a very different implementation strategy |
2021-02-03 23:12:56 +0100 | <monochrom> | well, usually anyway, I know exceptional scenerios. |
2021-02-03 23:13:17 +0100 | conal | (~conal@64.71.133.70) |
2021-02-03 23:13:32 +0100 | <monochrom> | C is a bad example. |
2021-02-03 23:13:45 +0100 | <ij> | I am not sure I'll gain anything by chatting in IRC |
2021-02-03 23:13:55 +0100 | <yushyin> | :D |
2021-02-03 23:13:58 +0100 | <monochrom> | Why don't you argue "everything is strict in bash, it is pretty fast" and shoot yourself. |
2021-02-03 23:14:23 +0100 | <swarmcollective> | ij, gain and/or give, it is your choice. |
2021-02-03 23:14:27 +0100 | <ij> | monochrom, what? |
2021-02-03 23:14:37 +0100 | <monochrom> | what what? |
2021-02-03 23:14:56 +0100 | <monochrom> | I am testing your understand of your own <ij> merijn, everything is strict in C. it is pretty fast |
2021-02-03 23:15:18 +0100 | <monochrom> | If you really understood that argument, you would also apply it with s/C/bash/ |
2021-02-03 23:15:40 +0100 | <ij> | bash is pretty fast |
2021-02-03 23:15:43 +0100 | <ephemient> | I'm gaining some annoyance by listening to people who appear to be failing to learn in IRC |
2021-02-03 23:15:48 +0100 | <ij> | 🎉 |
2021-02-03 23:15:50 +0100 | <koz_> | OK, I have something like 'Gen.element [mkSome @Proxy @Bool Proxy, mkSome @Proxy @Int Proxy]. GHC complains about a kind error (expects Gen (Some @{k1} (Proxy @{k1})), actually got Gen (Some @{*} (Proxy @{*}))). |
2021-02-03 23:15:53 +0100 | <koz_> | How do I resolve this? |
2021-02-03 23:15:58 +0100 | <koala_man> | some things like array indices and integer expressions sometimes end up being accidentally lazily evaluated in bash |
2021-02-03 23:16:08 +0100 | <ij> | ephemient, I am sorry for whining |
2021-02-03 23:16:13 +0100 | <ij> | it's just a little frustratign |
2021-02-03 23:17:02 +0100 | <monochrom> | OK, I'll stop. |
2021-02-03 23:17:25 +0100 | <ij> | monochrom, thank you for indulging as far as you did |
2021-02-03 23:18:12 +0100 | <koz_> | Do I need to provide a _kind_ signature for Gen in this case? |
2021-02-03 23:18:17 +0100 | <koz_> | s/Gen/Some/ |
2021-02-03 23:19:04 +0100 | <monochrom> | Yikes, I don't even know @{*} |
2021-02-03 23:19:32 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 23:19:33 +0100 | <koz_> | I assume that's the kind Type? |
2021-02-03 23:19:42 +0100 | <monochrom> | Oh! That * |
2021-02-03 23:19:44 +0100 | <koz_> | My understanding is that Some is polykinded in a way Proxy isn't? |
2021-02-03 23:19:54 +0100 | <koz_> | Or vice versa? |
2021-02-03 23:20:01 +0100 | <merijn> | I assume this is the kinda code that I would write if I hated myself |
2021-02-03 23:20:11 +0100 | <koz_> | merijn: I don't have many other options. |
2021-02-03 23:20:24 +0100 | <koz_> | Other folks insisted on a TypeApplication-driven API which I now have to write tests for. |
2021-02-03 23:20:34 +0100 | <koz_> | I wouldn't have designed it that way, but them's the breaks. |
2021-02-03 23:20:38 +0100 | <merijn> | koz_: I recommend flogging said people |
2021-02-03 23:20:39 +0100 | soft-warm | (4408f588@ip68-8-245-136.sd.sd.cox.net) (Quit: Connection closed) |
2021-02-03 23:20:45 +0100 | <koz_> | merijn: Said people are paying me. |
2021-02-03 23:20:45 +0100 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
2021-02-03 23:20:49 +0100 | <monochrom> | Yeah Some may need a kind-polymorphic sig so things don't default to Type |
2021-02-03 23:20:54 +0100 | <merijn> | Doesn't change my advice :) |
2021-02-03 23:20:59 +0100 | <merijn> | In fact |
2021-02-03 23:21:01 +0100 | <koz_> | monochrom: How do I provide that in this context? |
2021-02-03 23:21:13 +0100 | <merijn> | If they're paying you I'd recommend even *worse* punishment |
2021-02-03 23:21:17 +0100 | shush | (~pawn@2603-8000-3703-51f4-217f-fa24-0553-46d3.res6.spectrum.com) (Remote host closed the connection) |
2021-02-03 23:21:25 +0100 | <monochrom> | I don't know. I'm new to this using @ for kinds. |
2021-02-03 23:21:47 +0100 | <ephemient> | I don't know if it would make a difference, but `[mkSome (Proxy @Bool), mkSome (Proxy @Int)]` would be less stuttery |
2021-02-03 23:21:56 +0100 | <koz_> | ephemient: It makes no difference. |
2021-02-03 23:22:03 +0100 | <koz_> | That's how I spelled it originally. |
2021-02-03 23:22:58 +0100 | <monochrom> | I think this is the watershed turning point from "I want a Haskell job" to "I don't want a Haskell job" :) |
2021-02-03 23:23:17 +0100 | <koz_> | Oh, this is unusual for me. |
2021-02-03 23:23:22 +0100 | lmw | (95e04f63@gateway/web/thelounge/ip.149.224.79.99) |
2021-02-03 23:23:23 +0100 | <koz_> | Mostly things tend not to be this gory. |
2021-02-03 23:23:52 +0100 | <ephemient> | yeah I have no clue, `choose [mkSome (Proxy @Bool), mkSome (Proxy @Int)]` works for me and there really shouldn't be a difference between QuickCheck and hedgehog |
2021-02-03 23:23:53 +0100 | <monochrom> | if "Haskell job" entails using so much DataKinds TypeApplication for a Rube Goldberg to fake dependent typing. |
2021-02-03 23:24:20 +0100 | <koz_> | ephemient: It's in a where binding with an explicit sig of Gen (Some Proxy). |
2021-02-03 23:24:22 +0100 | soft-warm | (4408f588@ip68-8-245-136.sd.sd.cox.net) |
2021-02-03 23:24:40 +0100 | <monochrom> | I guess in 5-10 years https://aphyr.com/posts/342-typing-the-technical-interview would be reality instead of joke. |
2021-02-03 23:24:42 +0100 | <koz_> | monochrom: Again, it's pretty unusual for me, and I'm actually helping _eliminate_ a lot of said Rube Goldberging. |
2021-02-03 23:25:06 +0100 | <koz_> | This is really rather exceptional, but yeah... TypeApplications-driven APIs don't make me a happy panda. |
2021-02-03 23:25:32 +0100 | p-core | (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Ping timeout: 260 seconds) |
2021-02-03 23:26:23 +0100 | <monochrom> | Actually I'm wondering about the notation @{k1} which is not simply @k1. Does the {} matter? |
2021-02-03 23:26:38 +0100 | <koz_> | monochrom: Let me paste exact error message. |
2021-02-03 23:26:54 +0100 | <ij> | merijn, if all your definitions are finite how could making code strict make it slower? |
2021-02-03 23:27:01 +0100 | ADG1089__ | (~aditya@223.236.190.35) |
2021-02-03 23:27:24 +0100 | <monochrom> | merijn, I agree with maerwald's assessment about blood pressure :) |
2021-02-03 23:27:32 +0100 | <ephemient> | making && strict can make things slower too |
2021-02-03 23:27:39 +0100 | <monochrom> | (Why are you getting yourself into these things all the time?) |
2021-02-03 23:27:56 +0100 | <koz_> | monochrom: https://paste.tomsmeding.com/pmDDEw2Y/raw/1 |
2021-02-03 23:28:01 +0100 | <koz_> | Sorry for lack of linebreaks. |
2021-02-03 23:28:18 +0100 | <ij> | ephemient, ah, gotcha |
2021-02-03 23:28:27 +0100 | d3od | (~nickmeno3@78-0-108-194.adsl.net.t-com.hr) (Remote host closed the connection) |
2021-02-03 23:29:42 +0100 | <merijn> | monochrom: hmm? |
2021-02-03 23:30:20 +0100 | <monochrom> | Getting yourself into conversations that become pointless but the negative effect is increasing stress. |
2021-02-03 23:30:43 +0100 | <merijn> | monochrom: lol |
2021-02-03 23:30:50 +0100 | <merijn> | I'm impervious to increased stress |
2021-02-03 23:31:03 +0100 | <merijn> | I've been maxed out for, like, 3 months |
2021-02-03 23:31:12 +0100 | <monochrom> | Ah OK that's true enough heh |
2021-02-03 23:31:44 +0100 | <monochrom> | OK carry on! It's entertaining for the rest of us bystanders anyway! |
2021-02-03 23:32:22 +0100 | <monochrom> | BTW have you ever seen ij's actual code? |
2021-02-03 23:32:40 +0100 | <merijn> | A few weeks ago |
2021-02-03 23:33:21 +0100 | <zzz> | what is the current recommended Natural number module? |
2021-02-03 23:33:31 +0100 | jedws | (~jedws@121.209.199.128) |
2021-02-03 23:33:41 +0100 | <merijn> | 5? *ducks* |
2021-02-03 23:34:04 +0100 | <monochrom> | Numeric.Natural |
2021-02-03 23:34:05 +0100 | <ij> | monochrom, did you not like it? |
2021-02-03 23:34:26 +0100 | miguel_clean | (~Miguel@89-72-187-203.dynamic.chello.pl) (Quit: Leaving.) |
2021-02-03 23:36:02 +0100 | Franciman | (~francesco@host-95-235-155-82.retail.telecomitalia.it) (Quit: Leaving) |
2021-02-03 23:36:45 +0100 | jedws | (~jedws@121.209.199.128) (Client Quit) |
2021-02-03 23:37:13 +0100 | <zzz> | lol thanks |
2021-02-03 23:38:23 +0100 | dxld | (~dxld@rush.pub.dxld.at) |
2021-02-03 23:38:58 +0100 | <koz_> | monochrom: Found the solution - turn off PolyKinds. |
2021-02-03 23:39:00 +0100 | nbloomf | (~nbloomf@2600:1700:ad14:3020:8867:d061:b0e1:86b9) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-02-03 23:39:41 +0100 | <monochrom> | Hrm. That's anti-climatic. |
2021-02-03 23:39:43 +0100 | livvy | (~livvy@gateway/tor-sasl/livvy) (Quit: Network issue or system upgrade probably or maybe I'm testing a new kernel.) |
2021-02-03 23:39:43 +0100 | <koz_> | (before you ask, no, I didn't decide on having it on by default either) |
2021-02-03 23:40:06 +0100 | <koz_> | The thing is, if PolyKinds causes this situation, there has to be a way of resolving it surely. |
2021-02-03 23:40:29 +0100 | <koz_> | But it turns out TypeApplications is also secretly KindApplications. |
2021-02-03 23:40:41 +0100 | <koz_> | Some @(Type -> Type) Proxy is 100% a thing. |
2021-02-03 23:41:02 +0100 | <monochrom> | If you turn on PolyKinds, then you have to write explicit kind sigs to assert "I really want Type, the whole Type and nothing but Type" |
2021-02-03 23:41:04 +0100 | <koz_> | (didn't work for me, but it parses and GHC even recognizes it as a kind application) |
2021-02-03 23:41:27 +0100 | <koz_> | monochrom: This I understand, but I've never had this kind of issue before, since I typically only deal with the kinds of type _variables_. |
2021-02-03 23:41:42 +0100 | <monochrom> | Well yeah that one is natural in retrospect because TypeInType = KindMeansType |
2021-02-03 23:42:12 +0100 | jedws | (~jedws@121.209.199.128) |
2021-02-03 23:42:27 +0100 | knupfer | (~Thunderbi@200116b82c27b9002d81d776aa1cc87b.dip.versatel-1u1.de) (Ping timeout: 260 seconds) |
2021-02-03 23:42:40 +0100 | <koz_> | TypeInType = EverythingIsSecretlyType |
2021-02-03 23:42:51 +0100 | <merijn> | koz_: Well, yes |
2021-02-03 23:42:54 +0100 | <koz_> | ZFC = everything is a set; GHC = everything is Type |
2021-02-03 23:43:10 +0100 | <koz_> | It really is types all the way down. |
2021-02-03 23:43:32 +0100 | <monochrom> | Nah, GHC still distinguishes types from terms. |
2021-02-03 23:43:48 +0100 | <monochrom> | ZFC on the other hand asserts that even "elements" are sets. |
2021-02-03 23:43:54 +0100 | <ephemient> | -XDataKinds :p |
2021-02-03 23:44:17 +0100 | fendor_ | (~fendor@77.119.129.25.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
2021-02-03 23:44:21 +0100 | <koz_> | DataKinds doesn't actually unify term and type. |
2021-02-03 23:44:26 +0100 | <koz_> | It just blindly clones upward. |
2021-02-03 23:44:39 +0100 | royal_screwup216 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) |
2021-02-03 23:44:45 +0100 | royal_screwup21 | (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Ping timeout (120 seconds)) |
2021-02-03 23:44:45 +0100 | lmw0 | (95e04f63@gateway/web/thelounge/session) |
2021-02-03 23:44:45 +0100 | lmw0 | (95e04f63@gateway/web/thelounge/session) (Changing host) |
2021-02-03 23:44:45 +0100 | lmw0 | (95e04f63@gateway/web/thelounge/ip.149.224.79.99) |
2021-02-03 23:44:51 +0100 | fendor__ | (~fendor@77.119.129.25.wireless.dyn.drei.com) |
2021-02-03 23:45:02 +0100 | <ephemient> | sure, that's fair... |
2021-02-03 23:45:29 +0100 | <koz_> | Hence why singletons has to abuse type classes to their limits to achieve (something like) that. |
2021-02-03 23:45:33 +0100 | fendor__ | (~fendor@77.119.129.25.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
2021-02-03 23:45:55 +0100 | lmw | (95e04f63@gateway/web/thelounge/ip.149.224.79.99) (Ping timeout: 276 seconds) |
2021-02-03 23:49:02 +0100 | <ij> | I guess it's pretty hard to ask help for something I am very much unskilled to fix |
2021-02-03 23:49:28 +0100 | puke | (~vroom@217.138.252.186) (Quit: puke) |
2021-02-03 23:49:38 +0100 | nhs | (~nhs@c-24-20-87-79.hsd1.or.comcast.net) (Ping timeout: 258 seconds) |
2021-02-03 23:50:02 +0100 | conal | (~conal@64.71.133.70) (Quit: Computer has gone to sleep.) |
2021-02-03 23:50:26 +0100 | <monochrom> | No. It is really hard to get abstract generalized help. |
2021-02-03 23:50:54 +0100 | <monochrom> | Many years ago on a math channel there was a "how do I solve equations?" |
2021-02-03 23:51:03 +0100 | <monochrom> | How would you even begin? |
2021-02-03 23:51:32 +0100 | <monochrom> | It turned out the student only needed "how do I solve the kind of linear one-unknown equations like 2x+3=5" |
2021-02-03 23:51:46 +0100 | livvy | (~livvy@gateway/tor-sasl/livvy) |
2021-02-03 23:53:14 +0100 | puke | (~vroom@217.138.252.203) |
2021-02-03 23:54:44 +0100 | ph88_ | (~ph88@2a02:8109:9e00:7e5c:ade8:bbad:5afb:2c7) |
2021-02-03 23:55:22 +0100 | lmw0 | (95e04f63@gateway/web/thelounge/ip.149.224.79.99) (Quit: The Lounge - https://thelounge.chat) |
2021-02-03 23:58:20 +0100 | <zzz> | is there an alternative prelude that uses naturals instead of ints for functions like take? |
2021-02-03 23:58:41 +0100 | <merijn> | zzz: Maybe, but you probably don't want that anyway |
2021-02-03 23:58:57 +0100 | <zzz> | i don't? |
2021-02-03 23:59:00 +0100 | <ephemient> | :t Data.List.genericTake |
2021-02-03 23:59:01 +0100 | <lambdabot> | Integral i => i -> [a] -> [a] |
2021-02-03 23:59:15 +0100 | <merijn> | I speak from experience when I say: Turns out it's *real* annoying when you gotta call "fromIntegral" on every Int you have before indexing something |
2021-02-03 23:59:20 +0100 | <monochrom> | I think such an alternative prelude doesn't exist. |