Logs on 2022-01-10 (liberachat/#haskell)
| 00:01:10 | <dolio> | Also what is the accumulator for `null`? |
| 00:01:46 | <dolio> | Was that language just copied from foldl or something? |
| 00:02:44 | <EvanR> | at one point Foldable had laws and that was the first thing in the docs, iirc |
| 00:03:16 | <geekosaur> | they got moved to the bottom of the docs supposedly |
| 00:03:29 | <geekosaur> | too confusing for newcomers or something like that |
| 00:03:30 | <EvanR> | now I'm don't know what's going on, and I implemented foldl strict for my structure xD |
| 00:03:36 | <Axman6> | what should foldl for snoclist actually do... |
| 00:04:13 | × | vglfr quits (~vglfr@88.155.96.35) (Ping timeout: 240 seconds) |
| 00:04:14 | <c_wraith> | I'd say foldl should be the catamorphism for a snoclist |
| 00:04:28 | <monochrom> | Yeah :) |
| 00:04:39 | <EvanR> | no, I hate this |
| 00:04:57 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 00:05:12 | <EvanR> | it's a damn list and the fact that we write things left to right has no bearing on the theory |
| 00:05:41 | <Axman6> | but the order matters |
| 00:06:35 | → | cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
| 00:06:54 | <c_wraith> | more precisely, the 'l' and 'r' in the names of foldl and foldr mean something |
| 00:07:10 | <c_wraith> | they tell you what side the base case goes on |
| 00:07:37 | <c_wraith> | when you reverse what side is the end, you reverse what side the base case goes on |
| 00:08:08 | <EvanR> | what |
| 00:08:17 | <EvanR> | side of what |
| 00:08:36 | <EvanR> | I took the 'r' to mean catamorphism |
| 00:08:58 | <dolio> | r means 'right'. |
| 00:09:03 | <c_wraith> | fold left = put the base case on the left (the start). fold right = put the base case on the right (the end) |
| 00:09:16 | → | vglfr joins (~vglfr@88.155.96.35) |
| 00:09:28 | <EvanR> | the left = the start? |
| 00:09:37 | <c_wraith> | for english speakers, yes |
| 00:09:39 | <dolio> | Left means left. |
| 00:09:40 | <EvanR> | not in arabic |
| 00:10:14 | <EvanR> | what if I'm communicating about this with someone who is in australia and it looks backwards from down there |
| 00:10:19 | <EvanR> | (in english) |
| 00:10:45 | <c_wraith> | then they should turn their monitor off of reverse. (australia is upside down, not backwards. get your memes organized!) |
| 00:10:46 | <BrokenClutch> | It will be russian, I think |
| 00:10:53 | <EvanR> | left and right are symmetric where as foldl and foldr are not |
| 00:10:57 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 240 seconds) |
| 00:10:59 | <BrokenClutch> | like, in australia, english is russian and russian is english |
| 00:11:20 | <EvanR> | so literal meaning of l and r are bad |
| 00:11:34 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 00:12:33 | <EvanR> | if your point is the Foldable docs are bad, you made it |
| 00:12:57 | → | notzmv joins (~zmv@user/notzmv) |
| 00:13:11 | <Inst> | do you know |
| 00:13:18 | <sonny> | someone mentioned the difference is the argument order? |
| 00:13:20 | <Inst> | if it's possible to code in Cmm within a .hs file? |
| 00:13:27 | <dolio> | It doesn't seem like your problem is that the Foldable docs are bad. |
| 00:13:29 | <EvanR> | it's not about argument order |
| 00:14:16 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 00:14:19 | × | DNH quits (~DNH@2a02:8108:1100:16d8:c0bf:721a:fdec:b791) (Quit: Textual IRC Client: www.textualapp.com) |
| 00:14:40 | <sonny> | this is not allowed in Haskell right []:foo |
| 00:14:55 | <EvanR> | > let foo = [] in []:foo |
| 00:14:57 | <lambdabot> | [[]] |
| 00:15:13 | <EvanR> | i.e. []:[] |
| 00:15:16 | <sonny> | brb |
| 00:15:46 | <geekosaur> | Inst, you can create and use .cmm files, but it's not really recommended unless you really know what you are doing |
| 00:16:05 | <Inst> | is .cmm incredibly hard to use? |
| 00:16:15 | → | little_mac joins (~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e) |
| 00:16:16 | <geekosaur> | it's very low level |
| 00:16:35 | <Inst> | i mean, i'm a proponent of functional / imperative synthesis, both have their strengths |
| 00:16:40 | <geekosaur> | be very careful with what registers you use because it won't protect you from overwriting important ones |
| 00:17:08 | <geekosaur> | you can see some cmm files here https://gitlab.haskell.org/ghc/ghc/-/tree/master/rts |
| 00:17:42 | <Inst> | looks just like normal C |
| 00:17:50 | <geekosaur> | looks like it but is not |
| 00:18:30 | <Inst> | so, in theory, i could easily build a transpiler to cmm |
| 00:19:06 | <Inst> | so i could get Haskell-type syntax alongside features to make it more easily integrated into Haskell |
| 00:19:23 | <EvanR> | wait... that sounds like Haskell |
| 00:19:41 | <geekosaur> | I was thinking STG |
| 00:19:45 | <EvanR> | it has Haskell-like syntax and transpiles (compiles) to Cmm |
| 00:19:55 | <geekosaur> | which is fairly close to Core and compiles to Cmm |
| 00:21:48 | × | Tuplanolla quits (~Tuplanoll@91-159-69-16.elisa-laajakaista.fi) (Quit: Leaving.) |
| 00:23:26 | <Inst> | erm, the way I had it explained to me is that .cmm is faster than C |
| 00:24:09 | <Inst> | but Haskell doesn't transpile fluently into .cmm because .cmm is imperative, while Haskell is imperative |
| 00:24:13 | <Inst> | erm, functional |
| 00:24:25 | <c_wraith> | I think you've misunderstood a few steps along the way |
| 00:24:28 | × | acidjnk quits (~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 00:24:28 | × | acidjnk_new quits (~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 00:24:29 | <Inst> | probably |
| 00:24:33 | <Inst> | sorry for wasting your time |
| 00:24:43 | <c_wraith> | It's not a waste of time if you learn stuff |
| 00:24:58 | <Inst> | what did I misunderstand? |
| 00:26:21 | <c_wraith> | Well, "cmm is faster than c" is not a statement that is true or false. |
| 00:26:37 | <c_wraith> | cmm is *more predictable* than c |
| 00:27:15 | <c_wraith> | (it also has fewer constructs, which is helpful for a language that's really only intended as an intermediate compilation target) |
| 00:29:05 | × | sonny quits (~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) (Ping timeout: 256 seconds) |
| 00:31:00 | <geekosaur> | if you really want to be able to mix imperative and functional code, you may be interested in |
| 00:31:04 | <geekosaur> | @hackage inline-c |
| 00:31:05 | <lambdabot> | https://hackage.haskell.org/package/inline-c |
| 00:32:37 | × | jgeerds quits (~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 240 seconds) |
| 00:33:17 | × | mvk quits (~mvk@2607:fea8:5cdd:f000::45db) (Ping timeout: 240 seconds) |
| 00:33:51 | <Inst> | c_wraith: what I've read is that Cmm is designed for GHC's specialized Cmm compiler, which, because Cmm is more predictable, can do optimizations gcc or clang can't |
| 00:34:16 | → | sonny joins (~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) |
| 00:34:34 | <c_wraith> | yes, but it also can't do some optimizations gcc or clang do, because they take advantage of that imprecision to interpret things in the way that gives the fastest code |
| 00:34:38 | <sonny> | EvanR: what about []:1 ? |
| 00:34:40 | <geekosaur> | but it also does less, which makes those optimizations easier |
| 00:35:17 | <geekosaur> | > []:1 |
| 00:35:18 | <lambdabot> | error: |
| 00:35:18 | <lambdabot> | • No instance for (Num [[()]]) arising from a use of ‘e_11’ |
| 00:35:18 | <lambdabot> | • In the expression: e_11 |
| 00:35:34 | <sonny> | yes, so the second elem would have to be a list if the first is [] |
| 00:35:46 | <geekosaur> | oh, my, lambdabot, you're being particularly obtuse today |
| 00:35:57 | <EvanR> | the second argument to : must be a list no matter what |
| 00:36:07 | <EvanR> | that's just how it's defined |
| 00:36:14 | <pfurla-matrix> | > flip (:) [] 1 |
| 00:36:14 | <geekosaur> | :t (:) |
| 00:36:14 | <lambdabot> | a -> [a] -> [a] |
| 00:36:15 | <lambdabot> | [1] |
| 00:36:20 | <sonny> | oh |
| 00:36:25 | → | alkjdflkjs joins (~alkjdflkj@187.173.201.254) |
| 00:36:46 | <EvanR> | you always cons onto a list |
| 00:36:47 | <Inst> | : I believe, is a type constructor, right? |
| 00:36:51 | <Inst> | erm, data constructor |
| 00:36:57 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 00:36:57 | <Axman6> | data constreuctor, yes |
| 00:37:01 | <Axman6> | -e |
| 00:37:08 | <pfurla-matrix> | data, yeah |
| 00:38:12 | <Inst> | c_wraith: has anyone ever tested it, like, attempted to outperform gcc etc using just .cmm? |
| 00:38:34 | <alkjdflkjs> | s |
| 00:38:51 | <Axman6> | well over a decade ago people were writing faster haskell than equivalent C - see Don Stewart's work |
| 00:39:00 | <c_wraith> | I doubt it. cmm is not really intended to be a user interface. It's only very recently that ghc added support for using it in libraries other than the RTS at all |
| 00:39:29 | <geekosaur> | .cmm is not really suitable for writing production code; it's intended to be a compiler intermediate language, which is a rather different use case |
| 00:39:31 | <c_wraith> | ... Ok, my age might be getting to me. "very recently" might be as much as like 8 years ago. :) |
| 00:39:39 | <Inst> | Axman6: iirc, GHC compares favorably to Clang in benchmarks |
| 00:40:01 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 00:40:01 | <geekosaur> | I think the old C-- (standalone cmm) sitew got archived a couple years back |
| 00:40:05 | <Inst> | it's that gcc is just so superior (i.e, has been able to get high-quality talent and labor) to Clang that makes Haskell work hard to compete in performance |
| 00:40:11 | <geekosaur> | it might have had some useful comparisons |
| 00:40:11 | <pfurla-matrix> | c_wraith: shut up, Sinclair Spectrum is still very recent |
| 00:40:23 | <Inst> | lol |
| 00:40:36 | <Axman6> | https://donsbot.com/2008/06/04/haskell-as-fast-as-c-working-at-a-high-altitude-for-low-level-performance/ is an example from 2008 |
| 00:40:49 | <sonny> | EvanR: (cons 3 (cons 2 (cons 1 []))) = [3, 2, 1]. I'm going to guess this is not in the right order, what should it be? |
| 00:41:06 | <EvanR> | that looks right |
| 00:41:14 | <Axman6> | why would that not be the right order? |
| 00:41:16 | <monochrom> | \∩/ Sinclair Spectrum :) |
| 00:41:31 | <geekosaur> | > let cons = (:) in (cons 3 (cons 2 (cons 1 []))) |
| 00:41:32 | <lambdabot> | [3,2,1] |
| 00:41:34 | <sonny> | Axman6: well if it is, I'm not sure where flip happens |
| 00:41:38 | <pfurla-matrix> | > let cons = (:) in (cons 3 (cons 2 (cons 1 []))) |
| 00:41:39 | <lambdabot> | [3,2,1] |
| 00:41:44 | <Axman6> | what flip? |
| 00:41:45 | <monochrom> | I have a retired prof who owns a PDP-11. |
| 00:42:06 | <sonny> | Axman6: when you define reverse with foldl, it requires flip |
| 00:42:08 | <Inst> | https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/haskell-beats-C.pdf?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fum%2Fpeople%2Fsimonpj%2Fpapers%2Fndp%2Fhaskell-beats-c.pdf |
| 00:42:13 | <Axman6> | monochrom: pretty sure there's one or two at my uni's CS department too |
| 00:42:30 | <Axman6> | sonny: do you understand what flip does? |
| 00:42:39 | <Axman6> | > flip f x y :: Expr |
| 00:42:40 | <Inst> | is sonny new to Haskell? |
| 00:42:40 | <pfurla-matrix> | monochrom: I was dying to play with one of these when I learned they existed (back in the '90s) |
| 00:42:40 | <lambdabot> | f y x |
| 00:42:59 | <sonny> | yeah |
| 00:43:15 | × | xb0o2 quits (~xb0o2@user/xb0o2) (Quit: Client closed) |
| 00:43:17 | <sonny> | Inst: yes |
| 00:43:20 | <EvanR> | ah a good use of Expr xD |
| 00:43:25 | <Axman6> | and did you follow the whole conversation we've been havving about the order of arguments for the function passed to foldl? |
| 00:43:41 | <Inst> | do you know what a data declaration looks like? |
| 00:43:43 | <Axman6> | :t foldl |
| 00:43:44 | <lambdabot> | Foldable t => (b -> a -> b) -> b -> t a -> b |
| 00:43:46 | <Axman6> | :t (:) |
| 00:43:47 | <lambdabot> | a -> [a] -> [a] |
| 00:43:56 | <Inst> | in Haskell, of course |
| 00:43:58 | <sonny> | yeah, but I thought the problem wasn't the order? |
| 00:44:08 | <pfurla-matrix> | :t foldr -- compare with foldr |
| 00:44:09 | <lambdabot> | Foldable t => (a -> b -> b) -> b -> t a -> b |
| 00:44:31 | <pfurla-matrix> | > foldr (:) [] [1,2,3] |
| 00:44:33 | <lambdabot> | [1,2,3] |
| 00:44:33 | <Axman6> | we need the b's to be [a], so we need a function with type ([a] -> a -> [a]). (:) has type a -> [a] -> [a], so if we apply flip, we get [a] -> a -> [a] |
| 00:44:37 | <sonny> | Inst: data foo = bar ? |
| 00:44:40 | <alkjdflkjs> | Hi, I've been trying to install GHCup but when I run the command of the page (curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh) I get the next error, what's the problem? |
| 00:44:41 | <alkjdflkjs> | Warning: ~/.ghcup/cache/ghcup-0.0.6.yaml.tmp: Permission denied |
| 00:44:41 | <alkjdflkjs> | 0 139k 0 909 0 0 4024 0 0:00:35 --:--:-- 0:00:35 4040 |
| 00:44:42 | <alkjdflkjs> | curl: (23) Failure writing output to destination |
| 00:44:42 | <alkjdflkjs> | [ Warn ] Could not get download info, trying cached version (this may not be r> |
| 00:44:43 | <alkjdflkjs> | [ ... ] If this problem persists, consider switching downloader via: |
| 00:44:43 | <alkjdflkjs> | [ ... ] ghcup config set downloader Wget |
| 00:44:44 | <alkjdflkjs> | [ Error ] JSON decoding failed with: YAML exception: |
| 00:44:44 | <alkjdflkjs> | [ ... ] Yaml file not found: ~/.ghcup/cache/ghcup-0.0.6.yaml |
| 00:44:45 | <alkjdflkjs> | [ ... ] Consider removing ~/.ghcup/cache/ghcup-0.0.6.yaml manually. |
| 00:44:45 | <alkjdflkjs> | [ ... ] |
| 00:44:46 | <alkjdflkjs> | "_eghcup upgrade" failed! |
| 00:44:46 | <Axman6> | alkjdflkjs: stop |
| 00:44:56 | <Axman6> | @where paste |
| 00:44:56 | <lambdabot> | Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com |
| 00:45:02 | <monochrom> | . o O ( good timing ) |
| 00:45:02 | <Inst> | sonny: more like data [] a = [] | a | [a] iirc |
| 00:45:09 | <Inst> | erm, not that |
| 00:45:13 | <geekosaur> | you have a permission problem somewhere |
| 00:45:23 | <Inst> | data [] a = [] | a : [a] |
| 00:45:54 | <geekosaur> | alkjdflkjs, you have a permission problem somewhere. perhaps at some point you tried to run ghcup as root? |
| 00:46:12 | <Inst> | there |
| 00:46:13 | <Inst> | data [] a = [] | a : [a] |
| 00:46:17 | <geekosaur> | ls -ld ~/.ghcup |
| 00:46:26 | <Inst> | the version you get if you do :i [] |
| 00:46:35 | <Inst> | do you know how to read this, sonny? |
| 00:46:50 | <sonny> | Axman6: (b -> {a -> b}) right? |
| 00:47:20 | <Axman6> | the definition of list in Haskell is quite magical and not really a good example of defining data types, because _you_ are not allowed to write that definition |
| 00:47:32 | <Inst> | yeah, iirc, it's a primitive |
| 00:47:33 | <Axman6> | sonny: I don't understand what the question is |
| 00:47:43 | × | xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer) |
| 00:47:43 | <Inst> | i'd have to drag out a custom implementation of list |
| 00:47:44 | <Axman6> | b -> a -> b is the same as b -> (a -> b) |
| 00:47:44 | <sonny> | the order to read the signature |
| 00:48:28 | <Inst> | and tbh, that's why I think it might be worthwhile to set up own pedagogy, i.e, people don't spend enough time being taught how type signatures work, how to read it, took me weeks before I had a sufficient understanding of it |
| 00:48:29 | <geekosaur> | alkjdflkjs, can you join #haskell-beginners instead? it's a bit noisy in here currently, as you've probably noticed |
| 00:48:56 | <ephemient> | % :i -> |
| 00:48:56 | <yahb> | ephemient: type (->) :: * -> * -> *; type (->) = FUN 'Many :: * -> * -> *; -- Defined in `GHC.Types'; infixr -1 ->; instance Applicative ((->) r) -- Defined in `GHC.Base'; instance Functor ((->) r) -- Defined in `GHC.Base'; instance Monad ((->) r) -- Defined in `GHC.Base'; instance Monoid b => Monoid (a -> b) -- Defined in `GHC.Base'; instance Semigroup b => Semigroup (a -> b) -- Defined in `GHC.Base'; instance [s |
| 00:48:59 | <Inst> | i'll read up |
| 00:48:59 | <alkjdflkjs> | ok, thanks |
| 00:49:03 | → | Kaiepi joins (~Kaiepi@156.34.47.253) |
| 00:49:16 | <ephemient> | oh I was hoping that would print out "infixr -1 ->" |
| 00:49:23 | <sonny> | haskell uses * and letters? |
| 00:49:35 | <EvanR> | Inst, all that is really not helping the original problem of why flip is required |
| 00:49:40 | <Axman6> | c_wraith: I've spent too much time reading low level haskell and my brain keeps trying to figure out what the "wraith" function in C would be for |
| 00:49:51 | <c_wraith> | it makes your data vanish |
| 00:49:57 | <Axman6> | D: |
| 00:50:01 | <Axman6> | likeMongoDB? |
| 00:50:05 | → | xkuru joins (~xkuru@user/xkuru) |
| 00:50:08 | <c_wraith> | like /dev/null |
| 00:50:09 | <pfurla-matrix> | > data List a = EmptyList | a :. (List a) deriving Show; infixr 5 :. |
| 00:50:10 | <lambdabot> | <hint>:1:1: error: parse error on input ‘data’ |
| 00:50:16 | <Axman6> | yeah, so like MongoDB |
| 00:50:23 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 00:50:33 | <Axman6> | pfurla-matrix: use % for yahb, it'll remember |
| 00:50:37 | <geekosaur> | pfurla-matrix, use @let for definitions |
| 00:50:43 | <Axman6> | or that |
| 00:50:43 | <geekosaur> | or yahb, yeh |
| 00:51:16 | <pfurla-matrix> | @let data List a = EmptyList | a :. (List a) deriving Show; infixr 5 :. |
| 00:51:17 | <lambdabot> | Defined. |
| 00:51:25 | <sonny> | so in this case b is the list and a is the numbers? |
| 00:51:29 | <pfurla-matrix> | > 1 :. 2 :. 3 :. EmptyList |
| 00:51:30 | <lambdabot> | 1 :. (2 :. (3 :. EmptyList)) |
| 00:51:50 | <pfurla-matrix> | sonny: y |
| 00:52:23 | <pfurla-matrix> | :t foldr (.:) EmptyList [1,2,3] |
| 00:52:24 | <lambdabot> | error: |
| 00:52:24 | <lambdabot> | • Variable not in scope: (.:) :: a0 -> List a -> List a |
| 00:52:24 | <lambdabot> | • Perhaps you meant one of these: |
| 00:52:41 | <EvanR> | oof |
| 00:52:46 | <Axman6> | :. |
| 00:52:53 | <pfurla-matrix> | s/.:/:./ |
| 00:52:54 | <Axman6> | constructors start with : |
| 00:53:01 | <Axman6> | small oof |
| 00:53:10 | <sonny> | pfurla-matrix: I'm talking about Foldable t => (b -> a -> b) -> b -> t a -> b and foldl (flip(:)) [] |
| 00:53:12 | <pfurla-matrix> | :t foldr (:.) EmptyList [1,2,3] |
| 00:53:13 | <lambdabot> | Num a => List a |
| 00:53:28 | <EvanR> | sonny, yeah, b = [Int], a = Int, in your examples |
| 00:53:50 | <EvanR> | and t = [], if you are looking at that Foldable version |
| 00:53:57 | <Axman6> | :t foldl -- here, all the b's are the type we want to return |
| 00:53:58 | <lambdabot> | Foldable t => (b -> a -> b) -> b -> t a -> b |
| 00:54:15 | × | Kaiepi quits (~Kaiepi@156.34.47.253) (Remote host closed the connection) |
| 00:54:16 | <Axman6> | % :t foldl @[] |
| 00:54:16 | <yahb> | Axman6: (b -> a -> b) -> b -> [a] -> b |
| 00:54:59 | <sonny> | EvanR: ok, so is the scheme version (a->a->b) ? |
| 00:55:09 | <EvanR> | no... |
| 00:55:17 | → | juri_ joins (~juri@178.63.35.222) |
| 00:55:23 | <Axman6> | it's (a -> b -> b) |
| 00:55:33 | <sonny> | one sec |
| 00:55:35 | <Axman6> | ... I think, I've already forgotten! |
| 00:55:53 | <Inst> | wait, does sonny understand operators and operator sections? |
| 00:55:56 | <sonny> | ok ok ok |
| 00:56:06 | <sonny> | someone do the lambda bot on : |
| 00:56:07 | <ephemient> | the accumulator has to be an input to the function being used to fold; whether it's the first argument or the second varies by language |
| 00:56:15 | <EvanR> | :t (:) |
| 00:56:16 | <lambdabot> | a -> [a] -> [a] |
| 00:56:20 | <sonny> | ohhhh |
| 00:56:25 | <sonny> | hmm |
| 00:57:06 | <EvanR> | if you rename the variables, foldl is |
| 00:57:14 | <Inst> | so what i'm assuming is happening with foldl is that (:) can't get its arguments in the right order, so flip is being used to reverse the order (:) is taking its arguments in |
| 00:57:52 | <Axman6> | exactly |
| 00:57:55 | <pfurla-matrix> | This is eye-opener https://wiki.haskell.org/Fold#List_folds_as_structural_transformations |
| 00:57:57 | <Axman6> | nothing more, nothing less |
| 00:57:59 | × | wagle quits (~wagle@quassel.wagle.io) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.) |
| 00:58:07 | <Inst> | user-defined list: members of the type UDF can either be of value (nil), which is a root that starts the list |
| 00:58:14 | <EvanR> | belaying that |
| 00:58:14 | <Inst> | UDF -> user-defined list |
| 00:58:17 | × | little_mac quits (~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e) (Ping timeout: 240 seconds) |
| 00:58:30 | → | wagle joins (~wagle@quassel.wagle.io) |
| 00:58:42 | <Inst> | or, a construction of some value (of the same type as existing values in the list) appended to an existing list type |
| 00:59:17 | <Inst> | you can't just have the second, because then there's no existing list value to append to |
| 00:59:23 | <pfurla-matrix> | I'd rather talk about PDP-11 than Scheme (although Scheme is awesome too) |
| 01:00:00 | <Inst> | but when you have the second, the list is composed out of stuff of type a being appended to existing values of type list a |
| 01:00:13 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 01:00:13 | <ephemient> | or you could have a list type that can only represent infinite lists :) |
| 01:00:23 | <Inst> | i've never seen that |
| 01:00:24 | <c_wraith> | we usually call that Stream |
| 01:00:24 | <sonny> | Axman6: do you say (a -> b -> b) because of how cons in scheme is defined? |
| 01:00:49 | <sonny> | iirc it is not as strict as haskell |
| 01:01:21 | <Inst> | why i'm full of shit / utterly nuts: want students to define a custom list type (while being hand-held) on the first problem set |
| 01:01:41 | <pfurla-matrix> | @let ListInf a = a ::. ListInf a |
| 01:01:42 | <lambdabot> | /sandbox/tmp/.L.hs:170:1: error: |
| 01:01:42 | <lambdabot> | Not in scope: data constructor ‘ListInf’ |
| 01:01:42 | <lambdabot> | | |
| 01:01:43 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 01:01:55 | <pfurla-matrix> | @let data ListInf a = a ::. ListInf a |
| 01:01:56 | <lambdabot> | Defined. |
| 01:02:16 | <Inst> | ah, and how does that work? |
| 01:02:25 | <Inst> | will that toss out an infinite type error any time you try to use it? |
| 01:02:31 | <c_wraith> | sonny: (a -> b -> b) is closely related to lists. In particular, it's closely related to the church encoding of the (:) constructor |
| 01:02:43 | <ephemient> | > fix (1 ::.) |
| 01:02:44 | <lambdabot> | error: |
| 01:02:44 | <lambdabot> | • No instance for (Show (ListInf Integer)) |
| 01:02:44 | <lambdabot> | arising from a use of ‘show_M85587785111551100718’ |
| 01:02:49 | <Inst> | whoops |
| 01:02:49 | → | califax joins (~califax@user/califx) |
| 01:02:52 | <Inst> | forgot to derive show |
| 01:03:11 | <pfurla-matrix> | that was on purpose :P |
| 01:03:32 | <ephemient> | it's fine to derive Show, lambdabot will truncate |
| 01:03:50 | <pfurla-matrix> | @def infconst a = a ::. (infconst a) |
| 01:03:51 | <lambdabot> | Defined. |
| 01:04:04 | <sonny> | pfurla-matrix: the mystery lies here "Note that the parameters to cons must be flipped, because the element to add is now the right hand parameter of the combining function." |
| 01:04:43 | → | gallup joins (~gallup@192-222-138-215.qc.cable.ebox.net) |
| 01:04:46 | <Inst> | a : b = (:) a b |
| 01:04:50 | × | gallup quits (~gallup@192-222-138-215.qc.cable.ebox.net) (Client Quit) |
| 01:04:58 | × | ouestbillie quits (~gallup@192-222-138-215.qc.cable.ebox.net) (Quit: leaving) |
| 01:05:05 | <Inst> | b has to be an existing list type |
| 01:05:15 | <geekosaur> | value |
| 01:05:19 | <Inst> | list value, sorry |
| 01:05:20 | <Inst> | ;_; |
| 01:06:15 | → | ouestbillie joins (~gallup@192-222-138-215.qc.cable.ebox.net) |
| 01:08:05 | <sonny> | so what I don't get is that it's like if the param list is x y, the zero value get's sent to x first in haskell and y first in scheme |
| 01:08:30 | <geekosaur> | I told you that earlier, it's just an arbitrary choice each language made |
| 01:08:42 | <sonny> | from there, I need to get to (a -> b -> b) |
| 01:08:44 | <geekosaur> | scheme went for programmer convenience by having them match |
| 01:09:01 | <sonny> | geekosaur: I understand but I don't understand |
| 01:09:06 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 01:09:06 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 01:09:06 | → | wroathe joins (~wroathe@user/wroathe) |
| 01:09:08 | <geekosaur> | haskell went for mathematical convenience with how the functions naturally associate |
| 01:09:20 | <sonny> | ok |
| 01:09:24 | <geekosaur> | each has arguments for and against |
| 01:09:46 | <sonny> | so what haskell does, is that it allows for left association to work properly right? |
| 01:09:52 | <geekosaur> | you'd have to hunt down the scheme and haskell language designers to find out why they made those choices |
| 01:10:20 | <geekosaur> | it just makes left associativity match up with a natural left-associative function |
| 01:10:30 | <sonny> | so fold can be universal, and when you use - it will keep the properties |
| 01:10:38 | <geekosaur> | > foldr (*) z [a,b,c] |
| 01:10:39 | <lambdabot> | a * (b * (c * z)) |
| 01:10:45 | <geekosaur> | > foldl (*) z [a,b,c] |
| 01:10:46 | <lambdabot> | z * a * b * c |
| 01:11:02 | <Axman6> | > foldl (\accumlatingList headValue -> headValue : accumulatingList) [] [1,2,3] |
| 01:11:03 | <lambdabot> | error: |
| 01:11:03 | <lambdabot> | • Variable not in scope: accumulatingList :: [a] |
| 01:11:03 | <lambdabot> | • Perhaps you meant ‘accumlatingList’ (line 1) |
| 01:11:06 | <sonny> | err I don't actually remember - associativity |
| 01:11:25 | <Axman6> | > foldl (\accumulatingList headValue -> headValue : accumulatingList) [] [1,2,3] |
| 01:11:26 | <lambdabot> | [3,2,1] |
| 01:11:27 | <sonny> | + is left but it doesn't matter |
| 01:11:30 | <geekosaur> | see how nicely those both come out in Haskell? in Scheme the corresponding expansions are uglier because fold flips the argument order |
| 01:11:49 | <geekosaur> | but it's more convenient for most programmers to remember |
| 01:11:56 | <sonny> | ok |
| 01:12:08 | <sonny> | much thanks |
| 01:12:18 | → | hololeap_ joins (~hololeap@user/hololeap) |
| 01:12:45 | <dolio> | I don't see how these conveniences are more or less 'programmer' oriented. |
| 01:12:58 | <Inst> | also, a question, is it useful to speak of FAM instead of Monad? |
| 01:13:25 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 01:13:34 | <dolio> | It's convenient to be able to remember that the argument types are the same order in both, and it's convenient to remember a simple rule for what the result of the function will actually be. |
| 01:13:34 | <pfurla-matrix> | you guys are almost going bananas and barbed wire |
| 01:13:47 | <dolio> | Those are both convenient when programming. |
| 01:14:12 | <pfurla-matrix> | what is FAM? |
| 01:14:17 | <sonny> | dolio: (a->b->b) is probably what'd you do if you defined it though |
| 01:14:21 | <Inst> | functor - applicative - monad |
| 01:14:23 | <pfurla-matrix> | Functor-Applicative-Monad? |
| 01:14:34 | <Inst> | then again, for a lot of types you might end up with FAMTSM or something like that |
| 01:14:56 | <Inst> | just a way to avoid saying the M word, as well as making it clear you're talking about typeclasses |
| 01:15:16 | <geekosaur> | Inst, to most of us FAM refers to the proposal to make Applicative (and thereby Functor) a "superclass" of Monad |
| 01:15:22 | <Inst> | i see |
| 01:15:27 | <Inst> | which went through |
| 01:15:27 | <geekosaur> | because Applicative didn't exist when Monad was invented |
| 01:15:39 | <geekosaur> | yes, some years back |
| 01:15:45 | × | hololeap quits (~hololeap@user/hololeap) (Ping timeout: 276 seconds) |
| 01:15:46 | <Inst> | so functor only became a superclass of monad when applicative became a superclass of monad? |
| 01:16:14 | <dolio> | sonny: I would probably do what is done in Haskell, because I'm used to it, and have no problems remembering how it is. |
| 01:16:24 | <geekosaur> | yes |
| 01:16:55 | <geekosaur> | there's even an old holdover, liftM should be fmap but because Functor was not a superclass of Monad it had to be "rebuilt" from >>= |
| 01:18:24 | <Inst> | yeah i thought monads became a subclass of functor before then |
| 01:18:42 | <geekosaur> | it really needs Applicative in between |
| 01:18:52 | <pfurla-matrix> | does "being lazy with class" cover these? |
| 01:19:03 | <Inst> | i actually don't see how monads are a subclass of applicative, tbh |
| 01:19:15 | <Inst> | return = pure is natural |
| 01:19:24 | <geekosaur> | because Monad claims to have two methods, return and (>>=) — but "return" is actually "pure" from Applicative, in the same way "liftM" is really "fmap" |
| 01:19:40 | → | alekhine joins (~alekhine@c-73-38-152-33.hsd1.ma.comcast.net) |
| 01:19:44 | <Inst> | but why monads need <*> is more questionable |
| 01:19:52 | <geekosaur> | they have it |
| 01:19:57 | <c_wraith> | It's not so much that they need it as they have it |
| 01:19:59 | <c_wraith> | :t ap |
| 01:20:00 | <lambdabot> | Monad m => m (a -> b) -> m a -> m b |
| 01:20:01 | <geekosaur> | we called it "ap" before Applicative |
| 01:20:06 | <c_wraith> | :t (<*>) |
| 01:20:07 | <lambdabot> | Applicative f => f (a -> b) -> f a -> f b |
| 01:21:10 | × | alekhine quits (~alekhine@c-73-38-152-33.hsd1.ma.comcast.net) (Client Quit) |
| 01:21:24 | <EvanR> | sonny, I recently defined something with argument order like (b -> a -> b) instead of (a -> b -> b) because I forsaw myself wanting to partial the b alot, and so tried to avoid a lot of flips |
| 01:21:36 | <EvanR> | still questioning my sanity |
| 01:22:47 | <Inst> | i'm wondering, why can't monads and applicatives both have pure and return as separate methods? |
| 01:22:53 | <Inst> | or is this something with the instance system? |
| 01:23:43 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 01:23:46 | <Inst> | i.e, have them both be subclasses of fmap, but not subclasses of each other |
| 01:23:48 | <sonny> | EvanR: I don't know what partial means there :( |
| 01:23:54 | <Inst> | partial application |
| 01:23:58 | <Inst> | did you learn about currying yet? |
| 01:24:08 | <Inst> | (also planning to put that on first problem set) |
| 01:24:08 | <sonny> | yeah, but I don't think about it |
| 01:24:18 | <Axman6> | Inst: I use <*> _all_ the time, probably more often than I use anything from Monad |
| 01:24:22 | → | kayvank joins (~user@52-119-115-185.PUBLIC.monkeybrains.net) |
| 01:24:27 | <pfurla-matrix> | :t (1 :) |
| 01:24:28 | <lambdabot> | Num a => [a] -> [a] |
| 01:24:31 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 01:24:46 | <Axman6> | "the function which adds 1 to the front of any lists of numbers" |
| 01:24:47 | <lyxia> | It would subvert established expectations and you would have to have two parallel sets of combinators for Monad and Applicative |
| 01:25:13 | <Inst> | i see |
| 01:25:16 | <sonny> | EvanR: that is a dilema then :/ |
| 01:25:18 | <jackdk> | every monad is an applicative, so there's no point having `return` (apart from historical baggage) |
| 01:25:26 | <pfurla-matrix> | would the laws hold for anything but return = pure? |
| 01:25:42 | <lyxia> | Requiring that the Applicative instance agree with the Monad instance means you can freely use applicative combinators for monads. |
| 01:25:52 | <Axman6> | Inst: all Monads are Applicatives, which implies Monad is a subclass of Applicative. it is a monad law that <*> and ap behave the same |
| 01:26:03 | <Inst> | i know |
| 01:26:09 | <Inst> | or wait, is ap defined in monad? |
| 01:26:13 | × | kayvank quits (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Remote host closed the connection) |
| 01:26:15 | <Axman6> | no |
| 01:26:43 | <pfurla-matrix> | :i ap |
| 01:26:43 | <Axman6> | but it is defined for all monads as: ap mf ma = mf >>= \f -> f <$> ma |
| 01:27:00 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 01:27:00 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 01:27:00 | → | wroathe joins (~wroathe@user/wroathe) |
| 01:27:17 | <Inst> | tbh i sort of hate the applicative class, courtesy Hutton, I know what it's for |
| 01:27:34 | <Inst> | *typeclass |
| 01:27:36 | <geekosaur> | pfurla-matrix, :i doesn't work in lambdabot. it does in yahb but you probably want to use %% :i <whatever> so it'll pastebin the response |
| 01:27:51 | <Inst> | but I can't figure out how to work with dissimilar nested monads in applicative |
| 01:28:10 | <pfurla-matrix> | geekosaur: thanks |
| 01:28:21 | <Inst> | yes yes, go learn monad transformers and i won't have this problem |
| 01:28:27 | <EvanR> | sonny, not really |
| 01:28:48 | <sonny> | what is the solution then? |
| 01:28:54 | <pfurla-matrix> | Inst: keep doing what you are doing and you probably going to invent transformers yourself |
| 01:29:11 | <EvanR> | sonny, pick argument order that makes usage most convenient |
| 01:29:20 | <Inst> | i'm not that comfortable with the type system |
| 01:29:39 | <Inst> | i.e, taking a function type as an argument in data / newtype? That's wild. |
| 01:29:45 | <sonny> | good point |
| 01:30:04 | <Inst> | with hutton, i think it's the first time anyone teaches you you can put in a function type as an argument in data /newtype |
| 01:30:23 | <Axman6> | Inst: Applicative is probably one of the most useful type classes we have in Haskell, it is difficult to describe just how useful it is, and how pleasant it is to use once you know the pattern |
| 01:30:50 | <Inst> | as far as i understand it, it's only useful with single layer applicative types |
| 01:30:53 | <Axman6> | and it's one of the reasons why Facebook's Sigma spam filtering system can run as fast as it does |
| 01:31:15 | <Axman6> | Inst: then I guess you don't understand it :) |
| 01:31:23 | <Inst> | ;___; |
| 01:31:31 | <Inst> | (emoticon denotes tears) |
| 01:31:54 | → | Guest2113 joins (~Guest21@2a00:23c8:1510:8b01:f5c5:cd35:22b1:ed5c) |
| 01:32:23 | <pfurla-matrix> | Axman6: very true... parsec *sigh* |
| 01:32:37 | <Inst> | i can't figure out what it should look like, say, <*> <*> if I have two layers |
| 01:32:42 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 01:33:04 | <Inst> | and iirc operators (or functions) can't take operators as arguments |
| 01:33:06 | <c_wraith> | if you have two layers and want to stay sane, use Compose |
| 01:33:08 | × | TonyStone quits (~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com) (Remote host closed the connection) |
| 01:33:14 | <Inst> | i don't want to stay sane! |
| 01:33:28 | <c_wraith> | and you can pass an operator as an argument by putting it in parens |
| 01:33:37 | <Inst> | which converts it to a function |
| 01:33:42 | <Inst> | so <*> (<*>)? |
| 01:33:43 | <Axman6> | % getCompose $ (+) <$> Compose [Just 1, Just 2, Nothing] <*> Compose [Just 10, Nothing, Just 30] |
| 01:33:43 | <yahb> | Axman6: [Just 11,Nothing,Just 31,Just 12,Nothing,Just 32,Nothing,Nothing,Nothing] |
| 01:33:45 | <c_wraith> | what's the difference? |
| 01:33:59 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 01:34:16 | <Inst> | the exact reason ($) is useful? |
| 01:34:25 | <Inst> | I never learned evaluation order properly |
| 01:34:27 | <Axman6> | :t liftA2 (<*>) |
| 01:34:27 | <Inst> | need exercises for that |
| 01:34:28 | <lambdabot> | (Applicative f1, Applicative f2) => f1 (f2 (a -> b)) -> f1 (f2 a) -> f1 (f2 b) |
| 01:34:30 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
| 01:34:41 | <c_wraith> | ($) isn't about evaluation order, it's about parsing |
| 01:34:47 | <Inst> | the way I understand it is that functions of infix need to be ( ... ) |
| 01:34:49 | <geekosaur> | ($) can reduce the number of parentheses you need |
| 01:34:49 | <Inst> | parsing, I guess |
| 01:34:50 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 01:34:58 | <Inst> | $ works because the function can't take $ as an argument |
| 01:35:03 | → | burnsidesLlama joins (~burnsides@client-8-64.eduroam.oxuni.org.uk) |
| 01:35:17 | <Inst> | and $ has infix (l or r? I forget) of 0 |
| 01:35:20 | <Inst> | so it gets parsed last |
| 01:35:35 | <Inst> | parsing is a better term than evaluation, since trying to use evaluation gets confused with lazy evaluation, which is a whole another beast |
| 01:35:53 | <geekosaur> | it's about associativity |
| 01:36:06 | <geekosaur> | normal function application is left-associative and highest precedence |
| 01:36:15 | <geekosaur> | \($) is right-associative and lowest precedence |
| 01:36:26 | <geekosaur> | so it kinda acts like inside-out parentheses |
| 01:36:38 | <Inst> | which is why you see it everywhere in Haskell code and people get confused |
| 01:36:48 | → | vysn joins (~vysn@user/vysn) |
| 01:37:00 | <Inst> | iirc infixl / infixr only throws errors if they have the same precedence, right? |
| 01:37:05 | × | Guest2113 quits (~Guest21@2a00:23c8:1510:8b01:f5c5:cd35:22b1:ed5c) (Ping timeout: 256 seconds) |
| 01:37:21 | <ephemient> | also infix (without infixl/infixr) |
| 01:38:00 | <Inst> | a ^^l b ^^r c, assuming ^^r and l are user-defined operators |
| 01:38:05 | × | Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep) |
| 01:38:14 | <Inst> | that only blows up if they have the same precedence level? |
| 01:38:52 | <Axman6> | I;d love to have an infixb for balanced, so a * b * b * d = (a * b) * (c * d), but that would be a very weird feature |
| 01:39:01 | × | burnsidesLlama quits (~burnsides@client-8-64.eduroam.oxuni.org.uk) (Ping timeout: 240 seconds) |
| 01:39:16 | <c_wraith> | that would confuse the heck out of people |
| 01:39:32 | <Axman6> | the fixity number would be "n" where only * has n, you can't mix with other operators |
| 01:39:35 | <Inst> | only if anyone actually uses it |
| 01:39:48 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 01:39:48 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 01:39:48 | → | wroathe joins (~wroathe@user/wroathe) |
| 01:40:39 | <lyxia> | Have you heard about our lord and savior Agda |
| 01:41:03 | <Axman6> | "If a shitty feature exists and no one uses it, is it really a problem?" |
| 01:41:03 | <Inst> | parsing still has a problem, tbh, as a term |
| 01:41:07 | <Inst> | since you'll confuse it with parsers |
| 01:41:09 | → | TonyStone joins (~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com) |
| 01:41:22 | <Axman6> | mixfix+-_+ |
| 01:41:34 | <lyxia> | <3 |
| 01:42:22 | <Inst> | so, i'll treat it as a homework assignment from you, axman6 |
| 01:42:50 | <Inst> | the reason i had that openfiledialog crap was because i was trying to set up an environment where learning haskell would be "user friendly", for some definition of user and friendly |
| 01:42:57 | × | euandreh quits (~euandreh@2804:14c:33:9fe5:f755:55d9:216b:76f6) (Ping timeout: 240 seconds) |
| 01:43:11 | <Inst> | learning IO, the biggest thing that pops to mind is "why do I have to specify the filepath in code?" |
| 01:43:24 | <Inst> | "if i specify it with a user prompt, why does it have to be command line?" |
| 01:43:31 | <Axman6> | I believe several people have encouraged to learn haskell first, then you can try and make it easier, once you know why things are the way they are |
| 01:43:45 | <Inst> | yeah, i'm learning haskell right now |
| 01:43:57 | <Inst> | my time for deployment is delayed to late march at the earliest, but i wouldn't be surprised if it were june |
| 01:44:05 | → | mvk joins (~mvk@2607:fea8:5cdd:f000::55f8) |
| 01:44:23 | <Inst> | but sorry, i guess i'm using you guys as a public journal of "why the hell is this so hard?" |
| 01:44:31 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 01:44:35 | <Inst> | the homework assignment is: |
| 01:44:36 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 01:44:36 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
| 01:44:56 | → | little_mac joins (~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e) |
| 01:45:18 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 01:45:21 | <Inst> | I've figured out how to use >>= \foo -> ... as a way to feed openFile a type of IO Maybe [Text] |
| 01:45:27 | → | shriekingnoise joins (~shrieking@186.137.144.80) |
| 01:45:34 | <Inst> | I've figured out how to use fmap to do so |
| 01:45:40 | <Inst> | now I need to figure out how to use pure / <*> |
| 01:45:44 | <Inst> | I was thinking it wasn't possible |
| 01:45:51 | <Inst> | openFile, in this context, requires String |
| 01:46:03 | <Axman6> | you need to stop forgetting the parens :) |
| 01:46:09 | <Inst> | ;___; |
| 01:46:24 | <Inst> | why do the parens matter? |
| 01:46:48 | <Axman6> | because what you wrote is ((IO Maybe) [Text]), which is a kind error |
| 01:47:02 | <Inst> | why do we default to this? |
| 01:47:07 | <Axman6> | :kind IO |
| 01:47:14 | <Axman6> | % :kind IO |
| 01:47:14 | <yahb> | Axman6: * -> * |
| 01:47:20 | <Axman6> | % :kind Maybe |
| 01:47:20 | <yahb> | Axman6: * -> * |
| 01:47:27 | <Axman6> | * /= * -> * |
| 01:47:31 | <Inst> | other than perhaps laziness (type-level function application follows the same rules as function application) |
| 01:47:52 | <Inst> | Is there actually a context where (TC1 TC2) TC3 is useful as a series of type constructors? |
| 01:47:57 | → | azimut_ joins (~azimut@gateway/tor-sasl/azimut) |
| 01:48:14 | <Axman6> | it's for exactly the same reason as we do the same thing for function, " " is function and type application, so it associates to the left |
| 01:48:14 | <dolio> | It works exactly like `f x y z` at the term level. |
| 01:48:15 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds) |
| 01:48:28 | <Inst> | i mean why does it need to left associate as opposed to right associate? |
| 01:48:32 | <Axman6> | % :kind Either |
| 01:48:32 | <yahb> | Axman6: * -> * -> * |
| 01:48:46 | <Axman6> | which is * -> (* -> *) |
| 01:49:11 | <Axman6> | that means we can talk about Either Int, which is something of kind * -> *, we have partially applied the Either constructor |
| 01:49:15 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 01:49:35 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 01:49:36 | <Axman6> | :t fmap @(Either Int) |
| 01:49:36 | <lambdabot> | error: |
| 01:49:37 | <lambdabot> | Pattern syntax in expression context: fmap@(Either Int) |
| 01:49:37 | <lambdabot> | Did you mean to enable TypeApplications? |
| 01:49:38 | <Inst> | (Either Int) String |
| 01:49:41 | <Axman6> | % :t fmap @(Either Int) |
| 01:49:41 | <yahb> | Axman6: (a -> b) -> Either Int a -> Either Int b |
| 01:49:59 | <Axman6> | so, we can talk about Either where f = Either Int |
| 01:50:22 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 01:50:39 | <Inst> | hence why I suspect it's reasonable to introduce early "Haskell has a powerful type system", except I don't know what a type system is and why it's powerful |
| 01:51:33 | <Inst> | but w/e, that's my problem, at this point, I've already found Haskell in Depth and they discuss (in something I can almost understand) the type system |
| 01:52:39 | <Inst> | thanks for humoring me, have a good night |
| 01:53:29 | <Axman6> | o/ |
| 01:55:03 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 01:55:44 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 01:56:04 | × | alkjdflkjs quits (~alkjdflkj@187.173.201.254) (Quit: Connection closed) |
| 02:00:00 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 02:00:00 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 02:00:00 | → | wroathe joins (~wroathe@user/wroathe) |
| 02:01:20 | → | boletales joins (~boletales@p98076-ipoefx.ipoe.ocn.ne.jp) |
| 02:05:33 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 02:06:12 | <monochrom> | "powerful" is a very vague and much abused word. |
| 02:06:24 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 02:06:30 | <monochrom> | "expressive" is how I would describe Haskell's type system. |
| 02:07:27 | <qrpnxz> | it's also powerful |
| 02:09:01 | <EvanR> | C++ is powerful |
| 02:09:09 | <EvanR> | in the shoot yourself in the foot sense |
| 02:09:18 | <EvanR> | i.e. high voltage |
| 02:09:59 | <jackson99> | not sure I'd associate power of the type system with its unsoundness |
| 02:10:44 | <EvanR> | wouldn't an unsound logic be the strongest of all? xD |
| 02:11:19 | <jackson99> | that being said C++ has a pretty expressive type system as well, most of the unsafety was inherited from C |
| 02:11:57 | <geekosaur> | .oO { Paul Lynde singing "I'm my own grandmother" } |
| 02:13:23 | → | califax- joins (~califax@user/califx) |
| 02:14:01 | <sonny> | it's a type system that meets the programmers expectations |
| 02:14:37 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds) |
| 02:16:06 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 02:16:12 | × | califax quits (~califax@user/califx) (Ping timeout: 276 seconds) |
| 02:16:12 | califax- | is now known as califax |
| 02:16:57 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 02:17:45 | → | lavaman joins (~lavaman@98.38.249.169) |
| 02:19:36 | <sonny> | are n+k patterns gone? |
| 02:21:49 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds) |
| 02:24:37 | → | mbuf joins (~Shakthi@182.77.103.82) |
| 02:25:57 | × | waleee quits (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) (Ping timeout: 240 seconds) |
| 02:26:22 | → | waleee joins (~waleee@h-98-128-229-110.NA.cust.bahnhof.se) |
| 02:26:39 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 02:27:20 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 02:29:05 | → | neurocyte09172 joins (~neurocyte@IP-094046066140.dynamic.medianet-world.de) |
| 02:29:05 | × | neurocyte09172 quits (~neurocyte@IP-094046066140.dynamic.medianet-world.de) (Changing host) |
| 02:29:05 | → | neurocyte09172 joins (~neurocyte@user/neurocyte) |
| 02:30:37 | × | neurocyte0917 quits (~neurocyte@user/neurocyte) (Ping timeout: 240 seconds) |
| 02:30:37 | neurocyte09172 | is now known as neurocyte0917 |
| 02:31:30 | → | emf joins (~emf@2620:10d:c090:400::5:b9c2) |
| 02:31:36 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 02:31:37 | × | xff0x quits (~xff0x@2001:1a81:52d4:9900:5627:62b8:c837:dd4a) (Ping timeout: 240 seconds) |
| 02:31:48 | → | sunarch joins (uid526836@user/sunarch) |
| 02:33:06 | × | wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds) |
| 02:33:45 | → | xff0x joins (~xff0x@2001:1a81:5310:700:7a4c:f58f:8e12:e28b) |
| 02:37:09 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 02:38:00 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 02:38:52 | <Inst> | https://stackoverflow.com/questions/3748592/what-are-nk-patterns-and-why-are-they-banned-from-haskell-2010 sonny |
| 02:39:08 | → | wyrd joins (~wyrd@gateway/tor-sasl/wyrd) |
| 02:39:26 | <EvanR> | banned patterns |
| 02:39:46 | <sonny> | was super easy to define stirling numbers with them |
| 02:42:13 | × | Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 240 seconds) |
| 02:42:58 | <Inst> | you can still do n+k |
| 02:43:02 | <Inst> | just have to be a bit creative |
| 02:43:11 | <Inst> | *Main> factorial (n) =( \k -> ((*) (k+1) (factorial k))) (n+1) |
| 02:43:21 | <Inst> | inner parens are not needed |
| 02:43:45 | <Inst> | at least, in the lambda, other than to specify arguments for (*) and to sectionize * |
| 02:44:03 | <Inst> | oh derp, that code doesn't work |
| 02:45:13 | <EvanR> | I saw a proposal to remove numeric literals from patterns |
| 02:45:40 | <sonny> | sometimes you just want to copy the formula into Haskell you know? ;) |
| 02:46:29 | <Inst> | factorial 0 = 1 |
| 02:46:29 | <Inst> | factorial (n) = (\n -> (*) (n+1) (factorial n)) (n-1) |
| 02:47:16 | <EvanR> | factorial n = product [1..n] -- xD |
| 02:47:41 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 02:48:19 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 02:48:31 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 02:48:49 | <Inst> | but that's equivalent to an n+k pattern, except without the wonkiness |
| 02:49:08 | <sonny> | EvanR: lol |
| 02:49:30 | <sonny> | afk |
| 02:49:37 | × | sabx quits (~sabbas@user/sabbas) (Ping timeout: 256 seconds) |
| 02:50:08 | × | stef204 quits (~stef204@user/stef204) (Quit: WeeChat 3.4) |
| 02:51:13 | <Inst> | sonny: even if it worked, if you check the link |
| 02:51:39 | <Inst> | it'd probably end up bugging out, and tbh i don't get why ghc isn't smart enough to avoid bugging out |
| 02:52:37 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds) |
| 02:57:33 | × | sonny quits (~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) (Ping timeout: 256 seconds) |
| 02:58:14 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 02:58:54 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 03:00:04 | <Inst> | apparently n+k was defined to bug out |
| 03:00:05 | <Inst> | https://sites.google.com/site/haskell/notes/nkpatterns |
| 03:00:38 | <Inst> | sort of wish haskell was smart enough that n+k or, for that matter, an arbitrary expression in pattern matching, would be processed correctly |
| 03:00:57 | → | sabx joins (~sabbas@user/sabbas) |
| 03:01:16 | <jackson99> | I thought n+k pattern is no longer supported? |
| 03:01:33 | <Inst> | it's gone |
| 03:01:43 | <EvanR> | pattern matching isn't some AI thing, it's part of a carefully defined calculus related to ADTs |
| 03:02:25 | <EvanR> | there are cool new kind of patterns out there but it's not a thing to understand arbitrary expressions |
| 03:03:00 | <EvanR> | e.g. patterns for list could be converted to a fold |
| 03:03:34 | <EvanR> | for any Num, that's not the case for + |
| 03:04:45 | × | lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in) |
| 03:06:08 | <Inst> | + on fixed precision integral messes up once you get close enough to overflow |
| 03:06:49 | <Inst> | besides, i've shown the workaround to produce something roughly equivalent to n+k |
| 03:06:54 | × | wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds) |
| 03:06:55 | <EvanR> | does Int mess up or does the programmer xD |
| 03:07:02 | <Inst> | without the wonkiness |
| 03:07:12 | <Inst> | is the self-other dichotomy real or fictive? :) |
| 03:07:45 | <EvanR> | true the user and the computer probably have irreversible entanglement |
| 03:08:45 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 03:09:35 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 03:11:17 | → | sonny joins (~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) |
| 03:12:41 | × | xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer) |
| 03:14:16 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
| 03:14:16 | → | finn_elija joins (~finn_elij@user/finn-elija/x-0085643) |
| 03:14:16 | finn_elija | is now known as FinnElija |
| 03:17:54 | → | wyrd joins (~wyrd@gateway/tor-sasl/wyrd) |
| 03:18:21 | → | lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) |
| 03:18:31 | × | sonny quits (~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) (Ping timeout: 256 seconds) |
| 03:19:15 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 03:19:56 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 03:19:59 | <Inst> | erm, could someone explain Type to me? |
| 03:20:33 | <Inst> | the problem is, my orientation is, well, "you don't understand anything unless you can derive it yourself" -> comp sci version: "you don't understand anything unless you can implement it yourself" |
| 03:20:43 | <Inst> | erm, not Type |
| 03:20:45 | <Inst> | Text |
| 03:20:54 | <Inst> | String is bad because it's linked lists and thus not performant |
| 03:21:02 | <Inst> | but then what is Text? Is it some hack to produce arrays? |
| 03:21:43 | <EvanR> | lists are bad if they are big and stick around |
| 03:21:53 | <EvanR> | which is not necessarily the case |
| 03:22:15 | <EvanR> | Text is implemented as an array |
| 03:22:42 | <EvanR> | you could make it yourself if you really wanted, it's just a library |
| 03:25:36 | <EvanR> | one issue with String is, a lot of processing goes into each Char when they go through Handles. If you use packed encoded text it is faster |
| 03:27:56 | <Inst> | i guess it's my problem, i.e, how do you implement arrays in haskell |
| 03:29:15 | <EvanR> | for performance there are GHC primitives |
| 03:29:37 | <EvanR> | but several libraries exist which put a nice API on top |
| 03:29:46 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 03:30:25 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 03:30:43 | <EvanR> | and set you up for fusion |
| 03:31:06 | <EvanR> | see `vector' |
| 03:35:49 | × | BrokenClutch quits (~pioneer@2804:d41:c292:6c00:33d8:d2f1:d8af:153e) (Read error: Connection reset by peer) |
| 03:41:35 | → | Kaiepi joins (~Kaiepi@156.34.47.253) |
| 03:41:45 | × | Inst quits (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 256 seconds) |
| 03:44:10 | × | td_ quits (~td@muedsl-82-207-238-021.citykom.de) (Ping timeout: 256 seconds) |
| 03:44:29 | → | x88x88x_ joins (~x88x88x@gateway/vpn/pia/x88x88x) |
| 03:45:49 | → | td_ joins (~td@94.134.91.23) |
| 03:46:21 | × | x88x88x_ quits (~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit) |
| 03:46:42 | → | x88x88x_ joins (~x88x88x@gateway/vpn/pia/x88x88x) |
| 03:48:00 | → | dyeplexer joins (~dyeplexer@user/dyeplexer) |
| 03:49:16 | × | little_mac quits (~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e) (Remote host closed the connection) |
| 03:50:11 | → | little_mac joins (~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e) |
| 04:00:00 | × | Taneb quits (~Taneb@2001:41c8:51:10d:aaaa:0:aaaa:0) (Quit: I seem to have stopped.) |
| 04:01:07 | → | Taneb joins (~Taneb@runciman.hacksoc.org) |
| 04:04:59 | × | waleee quits (~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 256 seconds) |
| 04:05:06 | × | jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection) |
| 04:05:12 | → | Inst joins (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) |
| 04:05:13 | → | jonathanx_ joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
| 04:08:02 | ← | jakalx parts (~jakalx@base.jakalx.net) () |
| 04:10:03 | <albet70> | how to construct ExceptT e IO a? IO isn't a constructor |
| 04:10:42 | → | thejuan24f[m] joins (~thejuan2m@2001:470:69fc:105::1:6569) |
| 04:10:54 | <dibblego> | given which? |
| 04:12:53 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4) |
| 04:13:57 | <albet70> | any |
| 04:16:00 | <albet70> | :t ExceptT $ print $ Left 3 |
| 04:16:01 | <lambdabot> | error: |
| 04:16:01 | <lambdabot> | • Couldn't match type ‘()’ with ‘Either e a’ |
| 04:16:01 | <lambdabot> | Expected type: IO (Either e a) |
| 04:16:42 | × | ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Quit: Leaving) |
| 04:16:57 | <Axman6> | :t ExceptT $ print (Left 3 :: Either String Int) |
| 04:16:58 | <lambdabot> | error: |
| 04:16:58 | <lambdabot> | • Couldn't match type ‘()’ with ‘Either e a’ |
| 04:16:58 | <lambdabot> | Expected type: IO (Either e a) |
| 04:17:05 | <Axman6> | :t ExceptT |
| 04:17:06 | <lambdabot> | m (Either e a) -> ExceptT e m a |
| 04:17:11 | <Axman6> | uh, of course |
| 04:17:36 | <Axman6> | :t ExceptT $ fmap Left $ print "foo" |
| 04:17:36 | <lambdabot> | ExceptT () IO a |
| 04:17:43 | <Axman6> | :t print |
| 04:17:44 | <lambdabot> | Show a => a -> IO () |
| 04:18:30 | <EvanR> | :t throw |
| 04:18:31 | <lambdabot> | Exception e => e -> a |
| 04:18:52 | <EvanR> | :t throwError |
| 04:18:53 | <lambdabot> | MonadError e m => e -> m a |
| 04:19:01 | <EvanR> | ExceptT is a MonadError |
| 04:19:32 | <EvanR> | a non-error result of ExceptT can be created with pure / return |
| 04:20:02 | <EvanR> | so basically, pure/return or throwError are two good ways to construct an ExceptT |
| 04:20:55 | <EvanR> | albet70, to print from ExceptT e IO... use liftIO |
| 04:22:21 | <EvanR> | :t liftIO |
| 04:22:22 | <lambdabot> | MonadIO m => IO a -> m a |
| 04:22:33 | <albet70> | "🟢 EvanR :albet70, to print from ExceptT e IO... use liftIO", but I want to construct with Left way |
| 04:22:51 | → | sonny joins (~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) |
| 04:23:31 | <EvanR> | well, then you have use Axman6's :t ExceptT directly |
| 04:23:38 | → | [_] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 04:23:56 | <EvanR> | irl you probably want to stick to the API though |
| 04:26:13 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds) |
| 04:27:39 | <EvanR> | :t ExceptT (return (Left (userError "I'm out"))) |
| 04:27:40 | <lambdabot> | Monad m => ExceptT IOError m a |
| 04:28:03 | <EvanR> | :t runExceptT $ ExceptT (return (Left (userError "I'm out"))) |
| 04:28:04 | <lambdabot> | Monad m => m (Either IOError a) |
| 04:28:45 | <EvanR> | e.g. m=IO |
| 04:28:46 | → | notzmv joins (~zmv@user/notzmv) |
| 04:31:13 | <EvanR> | :t ExceptT (throwError (userError "I'm out")) |
| 04:31:14 | <lambdabot> | MonadError IOError m => ExceptT e m a |
| 04:31:38 | <EvanR> | :t throwError (userError "I'm out") |
| 04:31:39 | <lambdabot> | MonadError IOError m => m a |
| 04:31:49 | <EvanR> | ignore second to last one |
| 04:36:53 | × | x88x88x_ quits (~x88x88x@gateway/vpn/pia/x88x88x) (Quit: leaving) |
| 04:39:17 | → | x88x88x_ joins (~x88x88x@gateway/vpn/pia/x88x88x) |
| 04:40:16 | → | razetime joins (~quassel@49.207.213.63) |
| 04:42:00 | × | x88x88x_ quits (~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit) |
| 04:42:14 | → | x88x88x_ joins (~x88x88x@gateway/vpn/pia/x88x88x) |
| 04:43:44 | × | x88x88x_ quits (~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit) |
| 04:43:58 | → | x88x88x_ joins (~x88x88x@gateway/vpn/pia/x88x88x) |
| 04:46:11 | → | deadmarshal joins (~deadmarsh@95.38.231.124) |
| 04:47:18 | <Axman6> | albet70: are you sure that's the beaviour you want?That would ve a very unusual thing to do |
| 04:47:23 | <Axman6> | be* |
| 04:48:27 | <hololeap_> | albet70: normally you use throwError to get a Left value, regardless of what your MonadExcept is |
| 04:48:37 | × | sonny quits (~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) (Ping timeout: 256 seconds) |
| 04:48:59 | hololeap_ | is now known as hololeap |
| 04:49:16 | <Axman6> | liftIO (print Something) >> throwError SomethingWentWrong feels mor elike maybe what you want? |
| 04:49:36 | <Inst> | also lol |
| 04:49:39 | <Inst> | this is an absolute treasure |
| 04:49:48 | <Inst> | "that feel when you know what monads are but not what objects are" |
| 04:49:48 | <Axman6> | I thought you were going to sleep :P |
| 04:49:59 | <Inst> | have a fwb i'm helping with her python |
| 04:50:00 | × | x88x88x_ quits (~x88x88x@gateway/vpn/pia/x88x88x) (Quit: leaving) |
| 04:50:15 | → | x88x88x_ joins (~x88x88x@gateway/vpn/pia/x88x88x) |
| 04:50:20 | <Inst> | they're literally teaching "stack four if statements" in her python class, but we're paranoid she'll have objects dumped on her lap |
| 04:50:24 | <hololeap> | :t liftEither -- albet70: you can also use this |
| 04:50:25 | <lambdabot> | MonadError e m => Either e a -> m a |
| 04:50:29 | <Axman6> | Not sure your sexual history was necessary there |
| 04:50:47 | <Inst> | sorry! |
| 04:50:59 | <Axman6> | also, the hoist-errors package is fantastic for working with ExceptT |
| 04:51:15 | <EvanR> | Inst, since this is haskell and not python... I think of this picture from the cover of Theory of Objects http://lucacardelli.name/Topics/TheoryOfObjects/ObjectSubject.html |
| 04:51:48 | × | shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit) |
| 04:52:40 | × | x88x88x_ quits (~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit) |
| 04:52:53 | → | x88x88x_ joins (~x88x88x@gateway/vpn/pia/x88x88x) |
| 04:53:00 | <Inst> | well, tbh, it's just funny when you know what monads are and you're trying to understand objects in the context of monads |
| 04:53:59 | <Inst> | at some point someone is going to write a coherent comparison between monads and objects as concepts |
| 04:54:05 | <hololeap> | aren't objects just data with extra steps? |
| 04:54:07 | <EvanR> | no, please don' |
| 04:54:11 | <Inst> | okay, i'll stop |
| 04:55:08 | <EvanR> | unlike objects, monads have a very precise description with very little in the way of "remixing" of interpretation xD |
| 04:55:36 | <EvanR> | leibniz notwithstanding |
| 04:56:04 | <Inst> | i'd see them both as ways of data encapsulation. in certain areas, monads are more flexible, in others, less flexible |
| 04:56:12 | × | x88x88x_ quits (~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit) |
| 04:56:13 | → | sonny joins (~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) |
| 04:56:14 | <EvanR> | no monads aren't about data encapsulation |
| 04:56:26 | <Inst> | a type constructor is about data encapsulation |
| 04:57:01 | <EvanR> | your data encapsulation scheme may be described with types, but not nearly all types are about data encapsulation |
| 04:57:17 | <dibblego> | I thought they were about constructing types |
| 04:57:36 | <EvanR> | actually, most basic types in haskell intentionally tell you everything that is going on, (), Bool, Either, Maybe, etc |
| 04:57:47 | <EvanR> | cards on the table |
| 04:58:03 | → | shriekingnoise joins (~shrieking@186.137.144.80) |
| 04:58:12 | → | x88x88x_ joins (~x88x88x@gateway/vpn/pia/x88x88x) |
| 04:58:24 | <hololeap> | monads need a join function. can you do that with any object? |
| 04:58:29 | <EvanR> | and the monad instance for the basic types just formalize certain operations |
| 04:58:34 | × | x88x88x_ quits (~x88x88x@gateway/vpn/pia/x88x88x) (Client Quit) |
| 04:59:48 | <EvanR> | (that already existed and didn't need monads to do) |
| 05:00:09 | <hololeap> | if I have a car in my car, so I can drive while I drive... can that be joined into a single car? |
| 05:00:31 | <Inst> | hololeap: i mean that's where i see monads as more flexible if you see them as a set of methods for dealing with types that have been placed into a monadic type, but the monad typeclass is useful for more than just containerizing types |
| 05:00:52 | <Inst> | hololeap: the real reason people love Haskell xD |
| 05:01:27 | <hololeap> | it's a very limited set of methods, namely return and join/bind |
| 05:01:40 | <EvanR> | class Circle a => Ellipse a |
| 05:01:44 | <EvanR> | class Ellipse a => Circle a |
| 05:02:10 | <Inst> | and it's actually possible to instance into that! |
| 05:02:41 | <EvanR> | in before the "monads are just spreadsheets" blog post |
| 05:03:00 | <hololeap> | but ultimately monads are about composition of functions with extra "stuff" |
| 05:03:14 | <hololeap> | monads are much closer to functions than they are to objects |
| 05:03:17 | <Inst> | i don't think it's possible to create a monads are just (monads are just (monads are just...) blog posts |
| 05:03:36 | <Inst> | but given the recursion, it'd be very haskell |
| 05:05:33 | <EvanR> | monad is an algebraic structure, like monoid or semigroup. It doesn't make sense to talk about containerization in general. But the other way around, many containers can be flattened and this is monadic. Also many other phenomena fit the same shape |
| 05:05:45 | <Inst> | sorry, i'll run off, i do need to get objects though, although, it gets me wondering, since monads are implementable in languages with interfaces and algebraic data types |
| 05:05:59 | <Inst> | what would a monadic structure over an object look like? |
| 05:06:09 | <Inst> | OCaml / C++ / Java etc |
| 05:06:25 | <EvanR> | monadic structure pertains to a Functor, not an object |
| 05:07:38 | <EvanR> | but there have been monad interfaces in those languages |
| 05:07:59 | <EvanR> | without syntax sugar it's a bit annoying |
| 05:08:03 | <hololeap> | if you're thinking of generic "objects" in other langauges, the monad interface is how to string them together, not how to construct them in general |
| 05:08:37 | <Inst> | >>= is about composability of functions that are a -> m a, the join cancels out of the m |
| 05:08:45 | <EvanR> | no join doesn't |
| 05:08:57 | <EvanR> | you stay in the m |
| 05:09:01 | <Inst> | it cancels out m (m a) into (m a) |
| 05:09:07 | <Inst> | otherwise you'd end up with monadic stacking |
| 05:09:11 | <EvanR> | monad's don't let you leave, unlike comonads |
| 05:09:26 | <EvanR> | which don't let you enter |
| 05:09:34 | <hololeap> | and the basic monads in haskell are very close to the complete set of all possible monads available in any language. Maybe, State, Reader, Writer, Cont... it's very difficult to find a monad that isn't expressible as (a combination of) any of these |
| 05:10:08 | <Inst> | EvanR: yeah, I'm aware, and that's been annoying at times |
| 05:10:13 | <Inst> | would be nice to just kill the monad sometimes |
| 05:11:13 | <Inst> | except, of course :) |
| 05:11:24 | <EvanR> | maybe you'd like comonads then, you can leave any time |
| 05:11:25 | <Inst> | what happens if it's a maybe type with a value constructor of Nothing? |
| 05:11:43 | <Inst> | how could you intelligibly define a extract against Nothing? |
| 05:11:51 | <EvanR> | Maybe isn't a Comonad |
| 05:11:55 | <hololeap> | you can't because Maybe is not a comonad |
| 05:11:58 | <Inst> | because of that reason |
| 05:11:58 | <Axman6> | > join Nothing |
| 05:11:59 | <lambdabot> | Nothing |
| 05:12:00 | <dibblego> | it's a semi-comonad though |
| 05:12:11 | <Axman6> | > join (Just Nothing) |
| 05:12:12 | <lambdabot> | Nothing |
| 05:12:17 | <dibblego> | @type fmap Just |
| 05:12:18 | <hololeap> | a properly defined comonad always needs a value to extract |
| 05:12:18 | <lambdabot> | Functor f => f a -> f (Maybe a) |
| 05:13:26 | <dibblego> | we gettin' the annual monad anti-tutorial outta the way early? :) |
| 05:13:48 | <EvanR> | at some point was there comonadic IO called OI floating around? |
| 05:14:13 | ← | sonny parts (~sonny@bras-base-london1483w-grc-32-70-52-175-166.dsl.bell.ca) () |
| 05:14:22 | <hololeap> | no, because a comonad needs a natural transformation back to Identity, and IO doesn't have that |
| 05:14:36 | <dolio> | People floated the idea, but it doesn't make a lot of sense. |
| 05:14:48 | <dibblego> | OI was discussed a while back |
| 05:14:59 | <hololeap> | unsafePerformIO? |
| 05:15:07 | <EvanR> | oh |
| 05:15:39 | <Inst> | also, just to make it simple, Identity monad: just a type constructor that does nothing but block a -> a functions? |
| 05:15:47 | <Inst> | without fmap / bind, of course |
| 05:16:26 | <hololeap> | it doesn't do anything but wrap any value in the Identity constructor |
| 05:17:09 | <hololeap> | it's supposed to be a way of describing pure values in the context of something that needs a functor/monad |
| 05:17:39 | <hololeap> | like how id doesn't do anything but return the value you give it |
| 05:18:17 | × | xff0x quits (~xff0x@2001:1a81:5310:700:7a4c:f58f:8e12:e28b) (Ping timeout: 240 seconds) |
| 05:18:29 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 05:18:58 | <hololeap> | which seems useless until you need something that takes an (a -> a) function and you need the most basic case |
| 05:19:35 | → | xff0x joins (~xff0x@port-92-193-159-86.dynamic.as20676.net) |
| 05:22:51 | <EvanR> | you need something takes a resistor, so you give it a zero ohm link in a resistor package xD |
| 05:23:00 | <hololeap> | this is why State = StateT s Identity -- `StateT s` takes a type constructor as an argument, so if you don't need one, you pass it Identity |
| 05:23:02 | <EvanR> | you have something that takes a resistor |
| 05:23:26 | <hololeap> | *State s = StateT s Identity |
| 05:26:54 | <hololeap> | the zero ohm link is the zero element in the monoid of resistor arrays |
| 05:32:30 | × | nunggu quits (~q@gateway/tor-sasl/nunggu) (Ping timeout: 276 seconds) |
| 05:32:52 | → | sagax joins (~sagax_nb@user/sagax) |
| 05:33:00 | → | s2k joins (~textual@122.172.234.134) |
| 05:35:03 | <Axman6> | EvanR: OI is what we call ExceptT in Australia, OI YouFuckedUpMate IO a |
| 05:35:25 | <EvanR> | oof |
| 05:36:36 | <Axman6> | OI YouFuckedUpMate IO eh* which when runs gives you back IO (Either YouFuckedUpMate eh) |
| 05:39:17 | → | Jing joins (~hedgehog@240e:390:7c53:a7e1:15fa:c22e:b1fb:575a) |
| 05:47:33 | × | deadmarshal quits (~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds) |
| 05:48:57 | → | arahael joins (~arahael@203.158.51.1) |
| 05:49:29 | → | nunggu joins (~q@gateway/tor-sasl/nunggu) |
| 05:54:44 | → | ymirhotfoot55 joins (~ymirhotfo@user/ymirhotfoot) |
| 05:56:34 | × | little_mac quits (~little_ma@2601:410:4300:3ce0:54ff:c767:ef1d:433e) (Remote host closed the connection) |
| 05:57:27 | <albet70> | "🟢 Axman6 :albet70: are you sure that's the beaviour you want?That would ve a very unusual thing to do", yes |
| 05:58:04 | <Axman6> | so, you specifically want to print the result, and then produce something of type ExceptT () IO a? |
| 05:58:28 | <Axman6> | far out, what's going on with my typing today |
| 05:59:03 | <Axman6> | "So you specifically want to print the result, and produce something of type ExceptT () IO a?" |
| 06:00:44 | <albet70> | "Axman6 :so, you specifically want to print the result, and then produce something of type ExceptT () IO a?", paste.tomsmeding.com/DQWLn8rX |
| 06:01:47 | <ymirhotfoot55> | Dear Haskellers, the picture is wonderful: |
| 06:01:49 | <albet70> | short circuit a IO action list |
| 06:01:53 | <ymirhotfoot55> | http://lucacardelli.name/Topics/TheoryOfObjects/ObjectSubject.html |
| 06:02:46 | <ymirhotfoot55> | I am glad to see that John Stewart Bell's is finally making it through to |
| 06:03:10 | → | nhatanh02 joins (~satori@123.24.172.30) |
| 06:03:34 | <ymirhotfoot55> | the great Tribe of Objectivists! |
| 06:04:05 | <ymirhotfoot55> | Jogn Stewart Bell's Second Theorem. |
| 06:04:14 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 06:05:00 | <ymirhotfoot55> | Naturally, a beginner in Haskell will ask: |
| 06:05:04 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 06:05:23 | <ymirhotfoot55> | Can all the three views be consistent? |
| 06:05:44 | <ymirhotfoot55> | John, not Jogn. |
| 06:07:03 | <Axman6> | albet70: personally, I would use liftIO $ do print "greater ..." >> print x; throwE (). reusing the () from the print feels awkward to me |
| 06:10:22 | <Axman6> | ymirhotfoot55: What does this have to do with HAskell? |
| 06:11:25 | <ymirhotfoot55> | Well, I think Chris Penners inytoduction to a planned, ah, |
| 06:12:14 | <ymirhotfoot55> | I will not say, a Lisp, but a more flexiible Haskell, as proposed in |
| 06:12:21 | <ymirhotfoot55> | https://www.youtube.com/watch?v=xZmPuz9m2t0 |
| 06:13:17 | × | shapr quits (~user@2601:7c0:c202:5190:ed4f:33d2:c7d1:3eb) (Ping timeout: 240 seconds) |
| 06:13:48 | <ymirhotfoot55> | One famous case of the General Problem of Consistency |
| 06:14:15 | <ymirhotfoot55> | is Bell's Second Theorem. |
| 06:14:45 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 06:15:03 | <ymirhotfoot55> | I do not know haskell, I have actually written 'hello world', |
| 06:15:25 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 06:15:32 | <ymirhotfoot55> | well, no, but I once wrote 'hello Penrose Inverse' in Haskell. |
| 06:16:58 | <ymirhotfoot55> | 'hello world' was a mite offputting, with the giant builtin Monad |
| 06:17:09 | <ymirhotfoot55> | IO beging required. |
| 06:18:04 | <Axman6> | "giant" |
| 06:18:06 | <Axman6> | @src IO |
| 06:18:06 | <lambdabot> | Source not found. There are some things that I just don't know. |
| 06:18:09 | <Axman6> | :( |
| 06:18:33 | <Axman6> | @hoogle IO |
| 06:18:34 | <lambdabot> | Prelude data IO a |
| 06:18:34 | <lambdabot> | module System.IO |
| 06:18:34 | <lambdabot> | System.IO data IO a |
| 06:18:48 | <ymirhotfoot55> | Conjecture: the type guessing and type checking of Haskell uses something like\ |
| 06:18:49 | <ymirhotfoot55> | a (very special) SAT solver. |
| 06:19:14 | <c_wraith> | nah. It's way simpler than that |
| 06:19:32 | → | lavaman joins (~lavaman@98.38.249.169) |
| 06:19:43 | <Axman6> | just plain old hindley-milner |
| 06:20:01 | <Axman6> | https://en.wikipedia.org/wiki/Hindley–Milner_type_system |
| 06:20:34 | <ymirhotfoot55> | Yes, I supected it to be special, and in many cases, quick and easy. |
| 06:20:55 | <Axman6> | it's about as simple as a useful type system can get |
| 06:21:06 | <Axman6> | not always quick though |
| 06:22:08 | × | modnar quits (~quassel@162.195.88.254) (Remote host closed the connection) |
| 06:22:12 | <ymirhotfoot55> | O was impressed with Loader's result that the for real simply typed lambda calculus |
| 06:22:29 | → | modnar joins (~modnar@shell.sonic.net) |
| 06:22:48 | <ymirhotfoot55> | with some specal concret types added, also with actual elements of the rtpes specified, |
| 06:23:25 | <ymirhotfoot55> | gets you to Turing Machines Unlimited. |
| 06:23:47 | <razetime> | anyone program haskell on vim? |
| 06:23:49 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
| 06:24:26 | <razetime> | i've been trying to use vim with vim-haskell plugin lately and it often flubs on indentation. |
| 06:24:34 | <ymirhotfoot55> | I have heard that when K. Goedel was presented with |
| 06:26:28 | <ymirhotfoot55> | Alonzo Church's proof that Herbrand-Goedel style "recursive function computer systems" |
| 06:27:33 | <ymirhotfoot55> | compited the same set of functions as Church's "lambda calculus" machine, |
| 06:27:52 | × | s2k quits (~textual@122.172.234.134) (Quit: Textual IRC Client: www.textualapp.com) |
| 06:28:25 | <ymirhotfoot55> | Goedel saw that Church's machine was |
| 06:28:39 | <ymirhotfoot55> | a weird machine. |
| 06:29:11 | <ymirhotfoot55> | loke unto the dirty page macgine on x86 computer chips. |
| 06:29:28 | <ymirhotfoot55> | Phil Wadler tells the story. |
| 06:30:25 | <ymirhotfoot55> | Goedel no doubted that Herbrand-Foeded could be right, as an |
| 06:31:05 | <ymirhotfoot55> | analysis of compiyability. |
| 06:31:20 | <ymirhotfoot55> | No compuled, computed. |
| 06:32:00 | <ymirhotfoot55> | Not "compiled", "computed". |
| 06:32:57 | <ymirhotfoot55> | now doubted |
| 06:33:56 | <ymirhotfoot55> | Oi, I must be more careful with this hard to use keyboard. |
| 06:35:53 | <ymirhotfoot55> | @Axman6 thank you for reference! |
| 06:35:53 | <lambdabot> | Unknown command, try @list |
| 06:38:46 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:41:22 | <ymirhotfoot55> | '@Axman6' conceptually giant. |
| 06:41:55 | <ymirhotfoot55> | The dread Input-Output! |
| 06:42:45 | <Axman6> | I have absolutely no idea what you're on about ymirhotfoot55 |
| 06:43:14 | × | nhatanh02 quits (~satori@123.24.172.30) (Ping timeout: 256 seconds) |
| 06:44:15 | <ymirhotfoot55> | Dear '@Axman6', I am just happy to be in IRC again, so |
| 06:44:19 | → | bitmapper joins (uid464869@id-464869.lymington.irccloud.com) |
| 06:45:00 | <Axman6> | ok, well you're not making much sense. Do you have any questions about Haskell? |
| 06:45:43 | <ymirhotfoot55> | perhaps I am a mite loose in my associations and a mite obscure in my speech. |
| 06:46:13 | → | _ht joins (~quassel@82-169-194-8.biz.kpn.net) |
| 06:46:40 | <ymirhotfoot55> | Well, I suspect that a "type class", when, as happens sometimes, |
| 06:47:13 | <ymirhotfoot55> | "automayically" hands you an instance, that we are close to the |
| 06:47:45 | <ymirhotfoot55> | universal algebra mecganism of giving |
| 06:47:57 | <ymirhotfoot55> | an algebra by giving |
| 06:48:05 | <ymirhotfoot55> | generators and relations. |
| 06:48:06 | <Axman6> | Are you a markov chain trained on #haskell and Elizabethan English? |
| 06:48:11 | <ymirhotfoot55> | Is this so? |
| 06:48:45 | <Axman6> | I genuinely have no idea what you're trying to ask |
| 06:48:47 | <ymirhotfoot55> | No. Or if I am I am iperate with unkimited k-feams, and |
| 06:49:11 | <ymirhotfoot55> | I have enough dinebstions that I am not boind by by Earth's |
| 06:49:20 | <Axman6> | I'm getting pretty close to using my new found OP powers to kick you ymirhotfoot55 |
| 06:49:41 | <ymirhotfoot55> | speed of signal 3+1 dimension limitations. |
| 06:49:47 | <hololeap> | I'm getting some new vocab here... "dinebstions" "boind" |
| 06:50:17 | <ymirhotfoot55> | as pelling: Please accept apologies! |
| 06:51:07 | <ymirhotfoot55> | as spelling, that is better. |
| 06:51:55 | <ymirhotfoot55> | '@Axman6' serious question, why no mention of |
| 06:52:29 | <ymirhotfoot55> | Galois correpondeces in the beginnersl literature on type classes? |
| 06:53:21 | <Axman6> | I've been programming in Haskell for over a decade and never heard of "Galois correpondeces", so I suspect because no one needs to know what they are to use Haskell |
| 06:53:29 | <hololeap> | because deep theory is irrelevant to most newcomers looking to learn a language? |
| 06:53:46 | <ymirhotfoot55> | '@Axman5' I will ask ny type class question again. |
| 06:54:00 | × | cheater quits (~Username@user/cheater) (Ping timeout: 256 seconds) |
| 06:54:06 | <hololeap> | just write it yourself if you think it needs to exist so badly |
| 06:55:04 | <ymirhotfoot55> | Hololeap, thank you for suggestion! |
| 06:55:09 | <ymirhotfoot55> | No josh. |
| 06:55:31 | <hololeap> | there are tutorials on category theory for haskell programmers that exist because someone decided to make them |
| 06:55:59 | <ymirhotfoot55> | Rtpe class question: Sometimes, a declaration of a type class results is a sibfle |
| 06:56:12 | <ymirhotfoot55> | most geberal instance being defined. |
| 06:56:22 | <ymirhotfoot55> | Defined automatically. |
| 06:56:22 | <Axman6> | "rtpe"? "sibfle"? |
| 06:56:30 | <ymirhotfoot55> | Wgeb does this happen? |
| 06:56:36 | <ymirhotfoot55> | Thanks. |
| 06:57:13 | <ymirhotfoot55> | When, not Wgeb. |
| 06:57:17 | → | michalz joins (~michalz@185.246.204.126) |
| 06:57:53 | <Axman6> | rtpe = type? sibfle = ? |
| 06:58:03 | <ymirhotfoot55> | single most general |
| 06:58:45 | <ymirhotfoot55> | Yes, Type class question |
| 06:59:09 | → | hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) |
| 07:00:07 | <hololeap> | can you give an example that illustrates your question? |
| 07:00:18 | <Axman6> | ok, so we've got to a point where that sentense's words are understandable, now to try and decipher what you're actually trying to say |
| 07:01:17 | × | Garbanzo quits (~Garbanzo@2602:304:6eac:dc10::46) (Ping timeout: 240 seconds) |
| 07:03:25 | <ymirhotfoot55> | Consider giving a group by giving |
| 07:04:04 | <ymirhotfoot55> | three generators a, b, c; then giving some relations, say |
| 07:04:33 | <Axman6> | please stop using the return key as punctuation, if you look at the lasy hour's history of this channel, it's almost all you saying half sentenses with typos. at least make typos on one line |
| 07:04:41 | <ymirhotfoot55> | a^-1 * b * a = c^17 |
| 07:04:57 | <ymirhotfoot55> | Thanks, '@Axman6'. |
| 07:06:08 | <ymirhotfoot55> | Though are many froups geberated by am bm c, which satisft the relation, there is one that is special, namely the least constrained sych group. |
| 07:06:48 | <ymirhotfoot55> | Does an analogue if this happen with type classes? |
| 07:07:04 | <ymirhotfoot55> | groups, not froups. |
| 07:07:40 | × | boletales quits (~boletales@p98076-ipoefx.ipoe.ocn.ne.jp) (Quit: Leaving) |
| 07:08:06 | <hololeap> | I'm not sure how type classes relate to groups. for instance, there is no notion of an inverse for type classes |
| 07:09:23 | <ymirhotfoot55> | hololeap, here is the sort of onkects that I think may come in here: |
| 07:09:34 | <ymirhotfoot55> | https://en.wikipedia.org/wiki/Horn_clause |
| 07:10:04 | <ymirhotfoot55> | Oi, Sorry for linefeed! |
| 07:12:12 | <hololeap> | there is also no disjunction for typeclasses, unfortunately. you can't specify that a type is either a member of Show _or_ Eq in practice |
| 07:12:25 | <ymirhotfoot55> | Here is a pdf on the sort of thating that reading about type classes suggested to me; https://core.ac.uk/download/pdf/82190596.pdf I wish there were ab arXive version, and I will look now. |
| 07:12:34 | × | slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving) |
| 07:14:58 | × | razetime quits (~quassel@49.207.213.63) (Read error: Connection reset by peer) |
| 07:15:45 | → | cheater joins (~Username@user/cheater) |
| 07:16:21 | <ymirhotfoot55> | hololeap, yes, that meta-constraint on the allowable constraints of a type class definition is in part what makes me suspect that often one does get a "most free" instance. |
| 07:22:37 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 07:23:34 | <ymirhotfoot55> | hololeap and '@Axman6' I began to write out a note for this IRC session, but I realized 1. that note would be a bit long, and 2. I should look at some published stuff. |
| 07:24:44 | × | shriekingnoise quits (~shrieking@186.137.144.80) (Quit: Quit) |
| 07:30:29 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 07:30:29 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 07:30:29 | → | wroathe joins (~wroathe@user/wroathe) |
| 07:35:22 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 07:35:57 | <ymirhotfoot55> | The paper by Makowski looks very good, and seems to have most of what led me to think about "automatic instances" if type classes. IWJKNAL OF COMPUTER AND SYSTEM SCIENCES 34, 266-292 (1987) |
| 07:35:57 | <ymirhotfoot55> | Why Horn Formulas Matter in Computer Science: |
| 07:35:58 | <ymirhotfoot55> | Initial Structures and Generic Examples |
| 07:35:58 | <ymirhotfoot55> | J. A. MAKOWSKY |
| 07:35:59 | <ymirhotfoot55> | The Encyclopedia of Mathematics article looks useful too: https://encyclopediaofmath.org/wiki/Horn_clauses,_theory_of |
| 07:36:34 | → | ParsaAlizadeh[m] joins (~lizadehma@2001:470:69fc:105::1:65a4) |
| 07:37:18 | <ymirhotfoot55> | Dear Haskell folk, thank you! and Heaven forwarding, I will be back before the snows melt. |
| 07:37:22 | → | deadmarshal joins (~deadmarsh@95.38.231.124) |
| 07:37:41 | <hololeap> | speaking independently, there are a _lot_ of references in that paper you linked that I would have to read through to get an understanding sufficient to even attempt to answer your question |
| 07:40:54 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 07:40:54 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 07:40:54 | → | wroathe joins (~wroathe@user/wroathe) |
| 07:41:41 | <ymirhotfoot55> | hololeap, I am not joking when I say that I think, for some folk, starting with the sort of stuff in that paper is the right way to learn Haskell. Basic, which I like has, or had wgeb I was in grade school in the middle of the last century, one big advantage: most people already, if they got to high school, already had a command of the |
| 07:41:42 | <ymirhotfoot55> | presenting ideas. |
| 07:43:37 | <hololeap> | it seems like something that is worth looking into, but I can't give you any answers with my current knowledge. maybe someone else can, but you'll have better luck formulating your question with specific examples most haskellers will understand |
| 07:44:26 | × | timCF quits (~timCF@m91-129-100-224.cust.tele2.ee) (Ping timeout: 256 seconds) |
| 07:44:40 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 07:45:25 | <ymirhotfoot55> | But for Haskell I might start with the elementary theory of Galois connections, then do the Conpleteness Theorem for the lower predicate calculus, then, ah, well then set them down at the repl. Of course, talking to people who know, and practice, are the most important things. |
| 07:46:05 | <ymirhotfoot55> | hololeap, I am actually leaving now. Good night! |
| 07:46:08 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 07:46:23 | ← | ymirhotfoot55 parts (~ymirhotfo@user/ymirhotfoot) () |
| 07:46:46 | → | razetime joins (~quassel@49.207.213.63) |
| 07:53:32 | → | cfricke joins (~cfricke@user/cfricke) |
| 07:57:14 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 07:58:59 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 08:06:57 | × | deadmarshal quits (~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds) |
| 08:07:04 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 08:09:01 | × | glguy quits (x@libera/staff/glguy) (*.net *.split) |
| 08:09:01 | × | litharge quits (litharge@libera/bot/litharge) (*.net *.split) |
| 08:09:01 | × | hgolden quits (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (*.net *.split) |
| 08:09:01 | × | _ht quits (~quassel@82-169-194-8.biz.kpn.net) (*.net *.split) |
| 08:09:01 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (*.net *.split) |
| 08:09:01 | × | td_ quits (~td@94.134.91.23) (*.net *.split) |
| 08:09:01 | × | Kaiepi quits (~Kaiepi@156.34.47.253) (*.net *.split) |
| 08:09:01 | × | lemonsnicks quits (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (*.net *.split) |
| 08:09:01 | × | juhp quits (~juhp@128.106.188.82) (*.net *.split) |
| 08:09:01 | × | AlexNoo quits (~AlexNoo@178.34.162.219) (*.net *.split) |
| 08:09:01 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (*.net *.split) |
| 08:09:01 | × | Erutuon quits (~Erutuon@user/erutuon) (*.net *.split) |
| 08:09:01 | × | xsperry quits (~xs@user/xsperry) (*.net *.split) |
| 08:09:01 | × | mstksg quits (~jle`@cpe-23-240-75-236.socal.res.rr.com) (*.net *.split) |
| 08:09:01 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (*.net *.split) |
| 08:09:01 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (*.net *.split) |
| 08:09:01 | × | tremon quits (~tremon@217-120-53-183.cable.dynamic.v4.ziggo.nl) (*.net *.split) |
| 08:09:01 | × | kawpuh quits (~kawpuh@66.42.81.80) (*.net *.split) |
| 08:09:01 | × | n3t quits (n3t@user/n3t) (*.net *.split) |
| 08:09:01 | × | xsarnik quits (xsarnik@lounge.fi.muni.cz) (*.net *.split) |
| 08:09:01 | × | polux quits (~polux@51.15.169.172) (*.net *.split) |
| 08:09:01 | × | wrengr quits (~wrengr@150.12.83.34.bc.googleusercontent.com) (*.net *.split) |
| 08:09:01 | × | simpleauthority quits (~simpleaut@user/simpleauthority) (*.net *.split) |
| 08:09:01 | × | motherfsck quits (~motherfsc@user/motherfsck) (*.net *.split) |
| 08:09:01 | × | nurupo quits (~nurupo.ga@user/nurupo) (*.net *.split) |
| 08:09:02 | × | puke quits (~puke@user/puke) (*.net *.split) |
| 08:09:02 | × | Codaraxis_ quits (~Codaraxis@user/codaraxis) (*.net *.split) |
| 08:09:02 | × | hyiltiz quits (~quassel@31.220.5.250) (*.net *.split) |
| 08:09:02 | × | gentauro quits (~gentauro@user/gentauro) (*.net *.split) |
| 08:09:02 | × | ishutin quits (~ishutin@178-164-188-6.pool.digikabel.hu) (*.net *.split) |
| 08:09:02 | × | byorgey quits (~byorgey@155.138.238.211) (*.net *.split) |
| 08:09:02 | × | forell quits (~forell@user/forell) (*.net *.split) |
| 08:09:02 | × | koolazer quits (~koo@user/koolazer) (*.net *.split) |
| 08:09:02 | × | remedan quits (~remedan@octo.cafe) (*.net *.split) |
| 08:09:02 | × | SoF quits (~skius@user/skius) (*.net *.split) |
| 08:09:02 | × | emergence quits (~emergence@vm0.max-p.me) (*.net *.split) |
| 08:09:02 | × | biberu quits (~biberu@user/biberu) (*.net *.split) |
| 08:09:02 | × | bliminse quits (~bliminse@host86-186-17-7.range86-186.btcentralplus.com) (*.net *.split) |
| 08:09:02 | × | mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (*.net *.split) |
| 08:09:02 | × | tristanC quits (~tristanC@user/tristanc) (*.net *.split) |
| 08:09:02 | × | drewr quits (~drew@user/drewr) (*.net *.split) |
| 08:09:02 | × | hueso quits (~root@user/hueso) (*.net *.split) |
| 08:09:02 | × | vgtw quits (~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se) (*.net *.split) |
| 08:09:02 | × | mrmr quits (~mrmr@user/mrmr) (*.net *.split) |
| 08:09:02 | × | aku quits (~aku@163.172.137.34) (*.net *.split) |
| 08:09:02 | × | Jing quits (~hedgehog@240e:390:7c53:a7e1:15fa:c22e:b1fb:575a) (*.net *.split) |
| 08:09:02 | × | notzmv quits (~zmv@user/notzmv) (*.net *.split) |
| 08:09:02 | × | [_] quits (~itchyjunk@user/itchyjunk/x-7353470) (*.net *.split) |
| 08:09:02 | × | dyeplexer quits (~dyeplexer@user/dyeplexer) (*.net *.split) |
| 08:09:02 | × | sabx quits (~sabbas@user/sabbas) (*.net *.split) |
| 08:09:02 | × | emf quits (~emf@2620:10d:c090:400::5:b9c2) (*.net *.split) |
| 08:09:02 | × | mvk quits (~mvk@2607:fea8:5cdd:f000::55f8) (*.net *.split) |
| 08:09:02 | × | TonyStone quits (~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com) (*.net *.split) |
| 08:09:02 | × | ouestbillie quits (~gallup@192-222-138-215.qc.cable.ebox.net) (*.net *.split) |
| 08:09:02 | × | vglfr quits (~vglfr@88.155.96.35) (*.net *.split) |
| 08:09:02 | × | remexre quits (~remexre@user/remexre) (*.net *.split) |
| 08:09:02 | × | kimjetwav quits (~user@2607:fea8:2363:8f00:62f3:c8e:2d83:a34f) (*.net *.split) |
| 08:09:02 | × | johnw quits (~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0) (*.net *.split) |
| 08:09:02 | × | econo quits (uid147250@user/econo) (*.net *.split) |
| 08:09:02 | × | zaquest quits (~notzaques@5.130.79.72) (*.net *.split) |
| 08:09:02 | × | cls quits (~cls@chalk.lubutu.com) (*.net *.split) |
| 08:09:02 | × | sprout_ quits (~quassel@2a02:a467:ccd6:1:d9b7:23d6:79dd:2e64) (*.net *.split) |
| 08:09:03 | × | aeka quits (~aeka@user/hiruji) (*.net *.split) |
| 08:09:03 | × | xlei quits (~akans@pool-71-125-19-142.nycmny.fios.verizon.net) (*.net *.split) |
| 08:09:03 | × | elvishjerricco quits (sid237756@id-237756.helmsley.irccloud.com) (*.net *.split) |
| 08:09:03 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (*.net *.split) |
| 08:09:03 | × | choucavalier quits (~choucaval@peanutbuttervibes.com) (*.net *.split) |
| 08:09:03 | × | Alex_test quits (~al_test@178.34.162.219) (*.net *.split) |
| 08:09:03 | × | jrm quits (~jrm@156.34.249.199) (*.net *.split) |
| 08:09:03 | × | Hafydd quits (~Hafydd@user/hafydd) (*.net *.split) |
| 08:09:03 | × | stefan-_ quits (~cri@42dots.de) (*.net *.split) |
| 08:09:03 | × | jespada quits (~jespada@87.74.36.188) (*.net *.split) |
| 08:09:03 | × | haasn quits (~nand@haasn.dev) (*.net *.split) |
| 08:09:03 | × | EvanR quits (~EvanR@user/evanr) (*.net *.split) |
| 08:09:03 | × | dextaa quits (~DV@user/dextaa) (*.net *.split) |
| 08:09:03 | × | jinsun quits (~quassel@user/jinsun) (*.net *.split) |
| 08:09:03 | × | Hash quits (~Hash@hashsecurity.org) (*.net *.split) |
| 08:09:03 | × | mtjm quits (~mutantmel@2604:a880:2:d0::208b:d001) (*.net *.split) |
| 08:09:03 | × | jushur quits (~human@user/jushur) (*.net *.split) |
| 08:09:03 | × | mud quits (~mud@user/kadoban) (*.net *.split) |
| 08:09:03 | × | Megant quits (megant@user/megant) (*.net *.split) |
| 08:09:03 | × | incertia quits (~incertia@24.42.241.219) (*.net *.split) |
| 08:09:03 | × | caubert quits (~caubert@136.244.111.235) (*.net *.split) |
| 08:09:03 | × | rubin55 quits (sid175221@id-175221.hampstead.irccloud.com) (*.net *.split) |
| 08:09:03 | × | sander quits (~sander@user/sander) (*.net *.split) |
| 08:09:03 | × | absence quits (torgeihe@hildring.pvv.ntnu.no) (*.net *.split) |
| 08:09:03 | × | infinity0 quits (~infinity0@occupy.ecodis.net) (*.net *.split) |
| 08:09:03 | × | sus quits (zero@user/zeromomentum) (*.net *.split) |
| 08:09:03 | × | yaroot quits (~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953) (*.net *.split) |
| 08:09:03 | × | ddb quits (~ddb@ipv6two.tilde.club) (*.net *.split) |
| 08:09:03 | × | tito quits (tito@tilde.team) (*.net *.split) |
| 08:09:03 | × | awpr quits (uid446117@id-446117.lymington.irccloud.com) (*.net *.split) |
| 08:09:03 | × | theproffesor quits (~theproffe@user/theproffesor) (*.net *.split) |
| 08:09:03 | × | carbolymer quits (~carbolyme@dropacid.net) (*.net *.split) |
| 08:09:03 | × | hrdl quits (~hrdl@mail.hrdl.eu) (*.net *.split) |
| 08:09:03 | × | mrmonday quits (~robert@what.i.hope.is.not.a.tabernaevagant.es) (*.net *.split) |
| 08:09:03 | × | obfusk quits (~quassel@a82-161-150-56.adsl.xs4all.nl) (*.net *.split) |
| 08:09:03 | × | lagash quits (lagash@lagash.shelltalk.net) (*.net *.split) |
| 08:09:03 | × | Techcable quits (~Techcable@168.235.93.147) (*.net *.split) |
| 08:09:03 | × | szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (*.net *.split) |
| 08:09:04 | × | neverwas quits (jpneverwas@swissbox.unperson.link) (*.net *.split) |
| 08:09:04 | × | bsima1 quits (9d7e39c8ad@2604:bf00:561:2000::dd) (*.net *.split) |
| 08:09:04 | × | opqdonut quits (opqdonut@pseudo.fixme.fi) (*.net *.split) |
| 08:09:04 | × | nisstyre quits (~wes@user/nisstyre) (*.net *.split) |
| 08:09:04 | × | greyrat quits (~greyrat@ip202.ip-51-178-215.eu) (*.net *.split) |
| 08:09:04 | × | Clint quits (~Clint@user/clint) (*.net *.split) |
| 08:09:04 | × | kristjansson quits (sid126207@id-126207.tinside.irccloud.com) (*.net *.split) |
| 08:09:04 | × | hexology quits (~hexology@user/hexology) (*.net *.split) |
| 08:09:04 | × | landonf quits (landonf@mac68k.info) (*.net *.split) |
| 08:09:04 | × | Logio quits (em@kapsi.fi) (*.net *.split) |
| 08:09:04 | × | raghavgururajan quits (ea769b8000@user/raghavgururajan) (*.net *.split) |
| 08:09:04 | × | totte quits (~totte@h-82-196-112-155.A166.priv.bahnhof.se) (*.net *.split) |
| 08:09:04 | × | w1gz quits (~do@159.89.11.133) (*.net *.split) |
| 08:09:04 | × | In0perable quits (~PLAYER_1@fancydata.science) (*.net *.split) |
| 08:09:04 | × | iteratee_ quits (~kyle@162.218.222.107) (*.net *.split) |
| 08:09:04 | × | ridcully quits (~ridcully@p57b52a9a.dip0.t-ipconnect.de) (*.net *.split) |
| 08:09:04 | × | dolio quits (~dolio@130.44.130.54) (*.net *.split) |
| 08:09:04 | × | stilgart quits (~Christoph@chezlefab.net) (*.net *.split) |
| 08:09:04 | × | enikar quits (~enikar@user/enikar) (*.net *.split) |
| 08:09:04 | × | farn quits (~farn@2a03:4000:7:3cd:d4ab:85ff:feeb:f505) (*.net *.split) |
| 08:09:04 | × | andjjj23 quits (~irc@107.170.228.47) (*.net *.split) |
| 08:09:04 | × | tubogram4 quits (~tubogram@user/tubogram) (*.net *.split) |
| 08:09:04 | × | Axman6 quits (~Axman6@user/axman6) (*.net *.split) |
| 08:09:04 | × | Boarders_ quits (sid425905@id-425905.lymington.irccloud.com) (*.net *.split) |
| 08:09:04 | × | JSharp quits (sid4580@id-4580.lymington.irccloud.com) (*.net *.split) |
| 08:09:04 | × | ysh quits (sid6017@id-6017.ilkley.irccloud.com) (*.net *.split) |
| 08:09:04 | × | saolsen quits (sid26430@id-26430.lymington.irccloud.com) (*.net *.split) |
| 08:09:04 | × | tapas quits (sid467876@id-467876.ilkley.irccloud.com) (*.net *.split) |
| 08:09:04 | × | cbarrett quits (sid192934@id-192934.helmsley.irccloud.com) (*.net *.split) |
| 08:09:04 | × | enemeth79 quits (sid309041@id-309041.lymington.irccloud.com) (*.net *.split) |
| 08:09:04 | × | bjs quits (sid190364@user/bjs) (*.net *.split) |
| 08:09:04 | × | sclv quits (sid39734@haskell/developer/sclv) (*.net *.split) |
| 08:09:04 | × | mrianbloom quits (sid350277@id-350277.ilkley.irccloud.com) (*.net *.split) |
| 08:09:04 | × | dmj` quits (sid72307@id-72307.hampstead.irccloud.com) (*.net *.split) |
| 08:09:04 | × | acertain quits (sid470584@id-470584.hampstead.irccloud.com) (*.net *.split) |
| 08:09:04 | × | gaze___ quits (sid387101@id-387101.helmsley.irccloud.com) (*.net *.split) |
| 08:09:04 | × | V quits (~v@anomalous.eu) (*.net *.split) |
| 08:09:04 | × | SethTisue__ quits (sid14912@id-14912.ilkley.irccloud.com) (*.net *.split) |
| 08:09:04 | × | hongminhee quits (sid295@id-295.tinside.irccloud.com) (*.net *.split) |
| 08:09:04 | × | bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (*.net *.split) |
| 08:09:04 | × | modnar quits (~modnar@shell.sonic.net) (*.net *.split) |
| 08:09:04 | × | sunarch quits (uid526836@user/sunarch) (*.net *.split) |
| 08:09:04 | × | cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (*.net *.split) |
| 08:09:04 | × | kronicma1 quits (user27604@neotame.csclub.uwaterloo.ca) (*.net *.split) |
| 08:09:04 | × | riatre quits (~quassel@2001:310:6000:f::5198:1) (*.net *.split) |
| 08:09:04 | × | polyphem quits (~rod@2a02:810d:640:776c:e450:3ca3:b389:687a) (*.net *.split) |
| 08:09:04 | × | noddy quits (~user@user/noddy) (*.net *.split) |
| 08:09:04 | × | sphynx quits (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288) (*.net *.split) |
| 08:09:04 | × | siers quits (~ij@user/ij) (*.net *.split) |
| 08:09:04 | × | sim590 quits (~simon@modemcable090.207-203-24.mc.videotron.ca) (*.net *.split) |
| 08:09:04 | × | retro_ quits (~retro@2e40edd9.skybroadband.com) (*.net *.split) |
| 08:09:04 | × | terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (*.net *.split) |
| 08:09:04 | × | lally quits (sid388228@id-388228.uxbridge.irccloud.com) (*.net *.split) |
| 08:09:04 | × | hugo quits (znc@verdigris.lysator.liu.se) (*.net *.split) |
| 08:09:04 | × | megaTherion quits (~therion@unix.io) (*.net *.split) |
| 08:09:04 | × | dagit quits (~dagit@2001:558:6025:38:6476:a063:d05a:44da) (*.net *.split) |
| 08:09:05 | × | berberman quits (~berberman@user/berberman) (*.net *.split) |
| 08:09:05 | × | adamCS quits (~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com) (*.net *.split) |
| 08:09:05 | × | fjmorazan quits (~quassel@user/fjmorazan) (*.net *.split) |
| 08:09:05 | × | xdej quits (~xdej@quatramaran.salle-s.org) (*.net *.split) |
| 08:09:05 | × | eco_ quits (~ubuntu@ec2-54-201-230-197.us-west-2.compute.amazonaws.com) (*.net *.split) |
| 08:09:05 | × | ldlework quits (~hexeme@user/hexeme) (*.net *.split) |
| 08:09:05 | × | MasseR quits (~MasseR@51.15.143.128) (*.net *.split) |
| 08:09:05 | × | Katarushisu quits (~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) (*.net *.split) |
| 08:09:05 | × | synthmeat quits (~synthmeat@user/synthmeat) (*.net *.split) |
| 08:09:05 | × | hubvu quits (sid495858@user/hubvu) (*.net *.split) |
| 08:09:05 | × | burakcank quits (~burakcank@has.arrived.and.is.ready-to.party) (*.net *.split) |
| 08:09:05 | × | statusbot quits (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) (*.net *.split) |
| 08:09:05 | × | feetwind quits (~mike@user/feetwind) (*.net *.split) |
| 08:09:05 | × | Ranhir quits (~Ranhir@157.97.53.139) (*.net *.split) |
| 08:09:05 | × | robbert-vdh quits (~robbert@robbertvanderhelm.nl) (*.net *.split) |
| 08:09:05 | × | Firedancer quits (sid336191@id-336191.hampstead.irccloud.com) (*.net *.split) |
| 08:09:05 | × | degraafk quits (sid71464@id-71464.lymington.irccloud.com) (*.net *.split) |
| 08:09:05 | × | glowcoil quits (sid3405@id-3405.tinside.irccloud.com) (*.net *.split) |
| 08:09:05 | × | carter quits (sid14827@id-14827.helmsley.irccloud.com) (*.net *.split) |
| 08:09:05 | × | aweinstock quits (~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com) (*.net *.split) |
| 08:09:05 | × | pie_ quits (~pie_bnc@user/pie/x-2818909) (*.net *.split) |
| 08:09:05 | × | [exa] quits (exa@user/exa/x-3587197) (*.net *.split) |
| 08:09:05 | × | derelict quits (derelict@user/derelict) (*.net *.split) |
| 08:09:05 | × | ystael quits (~ystael@user/ystael) (*.net *.split) |
| 08:09:05 | × | ts2 quits (~ts@46.101.20.9) (*.net *.split) |
| 08:09:05 | × | g quits (x@libera/staff/glguy) (*.net *.split) |
| 08:09:05 | × | swistak quits (~swistak@185.21.216.141) (*.net *.split) |
| 08:09:05 | × | Arsen quits (arsen@managarm/dev/Arsen) (*.net *.split) |
| 08:09:05 | × | nrr__ quits (sid20938@id-20938.lymington.irccloud.com) (*.net *.split) |
| 08:09:05 | × | integral quits (sid296274@user/integral) (*.net *.split) |
| 08:09:05 | × | gmc quits (sid58314@id-58314.ilkley.irccloud.com) (*.net *.split) |
| 08:09:05 | × | dispater quits (~dispater@user/brprice) (*.net *.split) |
| 08:09:05 | × | jamestmartin quits (~james@jtmar.me) (*.net *.split) |
| 08:09:05 | × | vjoki quits (~vjoki@2a00:d880:3:1::fea1:9ae) (*.net *.split) |
| 08:09:05 | × | ehamberg quits (sid18208@id-18208.hampstead.irccloud.com) (*.net *.split) |
| 08:09:05 | × | TimWolla quits (~timwolla@2a01:4f8:150:6153:beef::6667) (*.net *.split) |
| 08:09:05 | × | TMA quits (tma@twin.jikos.cz) (*.net *.split) |
| 08:09:05 | × | iphy quits (sid67735@id-67735.lymington.irccloud.com) (*.net *.split) |
| 08:09:05 | × | whez quits (sid470288@id-470288.lymington.irccloud.com) (*.net *.split) |
| 08:09:05 | × | _0x47_ quits (sid508683@id-508683.tinside.irccloud.com) (*.net *.split) |
| 08:09:05 | × | teehemkay_ quits (sid14792@id-14792.lymington.irccloud.com) (*.net *.split) |
| 08:09:05 | × | gregberns__ quits (sid315709@id-315709.helmsley.irccloud.com) (*.net *.split) |
| 08:09:05 | × | MironZ quits (~MironZ@nat-infra.ehlab.uk) (*.net *.split) |
| 08:09:05 | × | micro quits (~micro@user/micro) (*.net *.split) |
| 08:09:05 | × | russruss quits (~russruss@my.russellmcc.com) (*.net *.split) |
| 08:09:05 | × | S11001001 quits (sid42510@id-42510.ilkley.irccloud.com) (*.net *.split) |
| 08:09:05 | × | NiKaN quits (sid385034@id-385034.helmsley.irccloud.com) (*.net *.split) |
| 08:09:06 | × | tnks quits (sid412124@id-412124.helmsley.irccloud.com) (*.net *.split) |
| 08:09:06 | × | marienz quits (~marienz@libera/staff/marienz) (*.net *.split) |
| 08:09:06 | × | davetapley quits (sid666@id-666.uxbridge.irccloud.com) (*.net *.split) |
| 08:09:06 | × | rtpg quits (sid443069@id-443069.ilkley.irccloud.com) (*.net *.split) |
| 08:09:06 | × | b20n quits (sid115913@id-115913.uxbridge.irccloud.com) (*.net *.split) |
| 08:09:06 | × | lightandlight quits (sid135476@id-135476.helmsley.irccloud.com) (*.net *.split) |
| 08:09:06 | × | caasih quits (sid13241@id-13241.ilkley.irccloud.com) (*.net *.split) |
| 08:09:06 | × | edmundnoble quits (sid229620@id-229620.helmsley.irccloud.com) (*.net *.split) |
| 08:09:06 | × | PotatoGim quits (sid99505@id-99505.lymington.irccloud.com) (*.net *.split) |
| 08:09:06 | × | travv0 quits (sid293381@user/travv0) (*.net *.split) |
| 08:09:06 | × | philpax_ quits (sid516926@id-516926.lymington.irccloud.com) (*.net *.split) |
| 08:09:06 | × | jakesyl_ quits (sid56879@id-56879.hampstead.irccloud.com) (*.net *.split) |
| 08:09:06 | × | Ekho quits (~Ekho@user/ekho) (*.net *.split) |
| 08:09:06 | × | bbear quits (~znc@21212.s.t4vps.eu) (*.net *.split) |
| 08:09:06 | × | dragestil quits (~znc@user/dragestil) (*.net *.split) |
| 08:09:06 | × | welterde quits (welterde@thinkbase.srv.welterde.de) (*.net *.split) |
| 08:09:06 | × | earthy quits (~arthurvl@2001:984:275b:1:ba27:ebff:fea0:40b0) (*.net *.split) |
| 08:09:06 | × | cawfee quits (~root@2406:3003:2077:2758::babe) (*.net *.split) |
| 08:09:06 | × | liskin quits (~liskin@xmonad/liskin) (*.net *.split) |
| 08:09:06 | × | defanor quits (~defanor@tart.uberspace.net) (*.net *.split) |
| 08:09:06 | × | codedmart quits (codedmart@2600:3c01::f03c:92ff:fefe:8511) (*.net *.split) |
| 08:09:06 | × | xnbya quits (~xnbya@2a01:4f8:c17:cbdd::1) (*.net *.split) |
| 08:09:06 | × | bastelfreak quits (~bastelfre@basteles-bastelknecht.bastelfreak.org) (*.net *.split) |
| 08:09:06 | × | Adran quits (~adran@botters/adran) (*.net *.split) |
| 08:09:06 | × | energizer quits (~energizer@user/energizer) (*.net *.split) |
| 08:09:06 | × | tomjaguarpaw quits (~tom@li367-225.members.linode.com) (*.net *.split) |
| 08:09:06 | × | immae quits (~immae@2a01:4f8:141:53e7::) (*.net *.split) |
| 08:09:06 | × | cross quits (~cross@spitfire.i.gajendra.net) (*.net *.split) |
| 08:09:06 | × | janus quits (janus@anubis.0x90.dk) (*.net *.split) |
| 08:09:06 | × | dixie quits (~dixie@real.wilbury.sk) (*.net *.split) |
| 08:09:06 | × | dunj3 quits (~dunj3@kingdread.de) (*.net *.split) |
| 08:09:06 | × | cpape quits (~user@2a01:4f9:c010:632d::1) (*.net *.split) |
| 08:09:06 | × | sm[i] quits (~user@plaintextaccounting/sm) (*.net *.split) |
| 08:09:15 | → | biberu\ joins (~biberu@user/biberu) |
| 08:10:06 | → | yauhsien_ joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 08:10:06 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Read error: Connection reset by peer) |
| 08:10:43 | biberu\ | is now known as biberu |
| 08:11:10 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 08:11:33 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 08:11:49 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds) |
| 08:12:37 | × | yahb quits (xsbot@user/mniip/bot/yahb) (Ping timeout: 256 seconds) |
| 08:13:45 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
| 08:14:45 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 08:16:55 | → | litharge joins (litharge@libera/bot/litharge) |
| 08:17:45 | → | yahb joins (xsbot@user/mniip/bot/yahb) |
| 08:20:44 | → | deadmarshal joins (~deadmarsh@95.38.231.124) |
| 08:20:44 | → | dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be) |
| 08:20:44 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:c274:f734:3361:cf1c) |
| 08:20:44 | → | hgolden joins (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) |
| 08:20:44 | → | _ht joins (~quassel@82-169-194-8.biz.kpn.net) |
| 08:20:44 | → | bitmapper joins (uid464869@id-464869.lymington.irccloud.com) |
| 08:20:44 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 08:20:44 | → | modnar joins (~modnar@shell.sonic.net) |
| 08:20:44 | → | Jing joins (~hedgehog@240e:390:7c53:a7e1:15fa:c22e:b1fb:575a) |
| 08:20:44 | → | notzmv joins (~zmv@user/notzmv) |
| 08:20:44 | → | [_] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 08:20:44 | → | td_ joins (~td@94.134.91.23) |
| 08:20:44 | → | Kaiepi joins (~Kaiepi@156.34.47.253) |
| 08:20:44 | → | lemonsnicks joins (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) |
| 08:20:44 | → | sabx joins (~sabbas@user/sabbas) |
| 08:20:44 | → | sunarch joins (uid526836@user/sunarch) |
| 08:20:44 | → | emf joins (~emf@2620:10d:c090:400::5:b9c2) |
| 08:20:44 | → | mvk joins (~mvk@2607:fea8:5cdd:f000::55f8) |
| 08:20:44 | → | TonyStone joins (~TonyStone@2603-7080-8607-c36a-9cdb-69bc-753b-1e50.res6.spectrum.com) |
| 08:20:44 | → | ouestbillie joins (~gallup@192-222-138-215.qc.cable.ebox.net) |
| 08:20:44 | → | vglfr joins (~vglfr@88.155.96.35) |
| 08:20:44 | → | cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
| 08:20:44 | → | kronicma1 joins (user27604@neotame.csclub.uwaterloo.ca) |
| 08:20:44 | → | juhp joins (~juhp@128.106.188.82) |
| 08:20:44 | → | remexre joins (~remexre@user/remexre) |
| 08:20:44 | → | kimjetwav joins (~user@2607:fea8:2363:8f00:62f3:c8e:2d83:a34f) |
| 08:20:44 | → | AlexNoo joins (~AlexNoo@178.34.162.219) |
| 08:20:44 | → | johnw joins (~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0) |
| 08:20:44 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 08:20:44 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 08:20:44 | → | econo joins (uid147250@user/econo) |
| 08:20:44 | → | zaquest joins (~notzaques@5.130.79.72) |
| 08:20:44 | → | xsperry joins (~xs@user/xsperry) |
| 08:20:44 | → | mstksg joins (~jle`@cpe-23-240-75-236.socal.res.rr.com) |
| 08:20:44 | → | cls joins (~cls@chalk.lubutu.com) |
| 08:20:44 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 08:20:44 | → | sprout_ joins (~quassel@2a02:a467:ccd6:1:d9b7:23d6:79dd:2e64) |
| 08:20:44 | → | aeka joins (~aeka@user/hiruji) |
| 08:20:44 | → | Hash joins (~Hash@hashsecurity.org) |
| 08:20:44 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 08:20:44 | → | tremon joins (~tremon@217-120-53-183.cable.dynamic.v4.ziggo.nl) |
| 08:20:44 | → | xlei joins (~akans@pool-71-125-19-142.nycmny.fios.verizon.net) |
| 08:20:44 | → | elvishjerricco joins (sid237756@id-237756.helmsley.irccloud.com) |
| 08:20:44 | → | kawpuh joins (~kawpuh@66.42.81.80) |
| 08:20:44 | → | n3t joins (n3t@user/n3t) |
| 08:20:44 | → | xsarnik joins (xsarnik@lounge.fi.muni.cz) |
| 08:20:44 | → | polux joins (~polux@51.15.169.172) |
| 08:20:44 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 08:20:44 | → | riatre joins (~quassel@2001:310:6000:f::5198:1) |
| 08:20:44 | → | choucavalier joins (~choucaval@peanutbuttervibes.com) |
| 08:20:44 | → | Alex_test joins (~al_test@178.34.162.219) |
| 08:20:44 | → | wrengr joins (~wrengr@150.12.83.34.bc.googleusercontent.com) |
| 08:20:44 | → | simpleauthority joins (~simpleaut@user/simpleauthority) |
| 08:20:44 | → | polyphem joins (~rod@2a02:810d:640:776c:e450:3ca3:b389:687a) |
| 08:20:44 | → | motherfsck joins (~motherfsc@user/motherfsck) |
| 08:20:44 | → | glguy joins (x@libera/staff/glguy) |
| 08:20:44 | → | jrm joins (~jrm@156.34.249.199) |
| 08:20:44 | → | nurupo joins (~nurupo.ga@user/nurupo) |
| 08:20:44 | → | Hafydd joins (~Hafydd@user/hafydd) |
| 08:20:44 | → | stefan-_ joins (~cri@42dots.de) |
| 08:20:44 | → | noddy joins (~user@user/noddy) |
| 08:20:44 | → | jespada joins (~jespada@87.74.36.188) |
| 08:20:44 | → | puke joins (~puke@user/puke) |
| 08:20:44 | → | Codaraxis_ joins (~Codaraxis@user/codaraxis) |
| 08:20:44 | → | haasn joins (~nand@haasn.dev) |
| 08:20:44 | → | EvanR joins (~EvanR@user/evanr) |
| 08:20:44 | → | hyiltiz joins (~quassel@31.220.5.250) |
| 08:20:44 | → | gentauro joins (~gentauro@user/gentauro) |
| 08:20:44 | → | dextaa joins (~DV@user/dextaa) |
| 08:20:44 | → | ishutin joins (~ishutin@178-164-188-6.pool.digikabel.hu) |
| 08:20:44 | → | byorgey joins (~byorgey@155.138.238.211) |
| 08:20:44 | → | jinsun joins (~quassel@user/jinsun) |
| 08:20:44 | → | sphynx joins (~xnyhps@2a02:2770:3:0:216:3eff:fe67:3288) |
| 08:20:44 | → | mtjm joins (~mutantmel@2604:a880:2:d0::208b:d001) |
| 08:20:44 | → | jushur joins (~human@user/jushur) |
| 08:20:44 | → | mud joins (~mud@user/kadoban) |
| 08:20:44 | → | forell joins (~forell@user/forell) |
| 08:20:44 | → | Megant joins (megant@user/megant) |
| 08:20:44 | → | incertia joins (~incertia@24.42.241.219) |
| 08:20:44 | → | caubert joins (~caubert@136.244.111.235) |
| 08:20:44 | → | koolazer joins (~koo@user/koolazer) |
| 08:20:44 | → | remedan joins (~remedan@octo.cafe) |
| 08:20:44 | → | siers joins (~ij@user/ij) |
| 08:20:44 | → | rubin55 joins (sid175221@id-175221.hampstead.irccloud.com) |
| 08:20:44 | → | SoF joins (~skius@user/skius) |
| 08:20:44 | → | sander joins (~sander@user/sander) |
| 08:20:44 | → | absence joins (torgeihe@hildring.pvv.ntnu.no) |
| 08:20:44 | → | infinity0 joins (~infinity0@occupy.ecodis.net) |
| 08:20:44 | → | sim590 joins (~simon@modemcable090.207-203-24.mc.videotron.ca) |
| 08:20:44 | → | sus joins (zero@user/zeromomentum) |
| 08:20:44 | → | emergence joins (~emergence@vm0.max-p.me) |
| 08:20:44 | → | bliminse joins (~bliminse@host86-186-17-7.range86-186.btcentralplus.com) |
| 08:20:44 | → | retro_ joins (~retro@2e40edd9.skybroadband.com) |
| 08:20:44 | → | yaroot joins (~yaroot@2409:12:ac0:2300:680e:dbff:fe1e:4953) |
| 08:20:44 | → | mjs2600 joins (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) |
| 08:20:44 | → | ddb joins (~ddb@ipv6two.tilde.club) |
| 08:20:44 | → | tristanC joins (~tristanC@user/tristanc) |
| 08:20:44 | → | drewr joins (~drew@user/drewr) |
| 08:20:44 | → | hueso joins (~root@user/hueso) |
| 08:20:44 | → | tito joins (tito@tilde.team) |
| 08:20:44 | → | awpr joins (uid446117@id-446117.lymington.irccloud.com) |
| 08:20:44 | → | vgtw joins (~vgtw@c-2359205c.07-348-756d651.bbcust.telenor.se) |
| 08:20:44 | → | theproffesor joins (~theproffe@user/theproffesor) |
| 08:20:44 | → | carbolymer joins (~carbolyme@dropacid.net) |
| 08:20:44 | → | terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1) |
| 08:20:44 | → | mrmr joins (~mrmr@user/mrmr) |
| 08:20:44 | → | hrdl joins (~hrdl@mail.hrdl.eu) |
| 08:20:44 | → | aku joins (~aku@163.172.137.34) |
| 08:20:44 | → | mrmonday joins (~robert@what.i.hope.is.not.a.tabernaevagant.es) |
| 08:20:44 | → | obfusk joins (~quassel@a82-161-150-56.adsl.xs4all.nl) |
| 08:20:44 | → | lagash joins (lagash@lagash.shelltalk.net) |
| 08:20:44 | → | Techcable joins (~Techcable@168.235.93.147) |
| 08:20:44 | → | szkl joins (uid110435@id-110435.uxbridge.irccloud.com) |
| 08:20:44 | → | neverwas joins (jpneverwas@swissbox.unperson.link) |
| 08:20:44 | → | bsima1 joins (9d7e39c8ad@2604:bf00:561:2000::dd) |
| 08:20:44 | → | opqdonut joins (opqdonut@pseudo.fixme.fi) |
| 08:20:44 | → | nisstyre joins (~wes@user/nisstyre) |
| 08:20:44 | → | greyrat joins (~greyrat@ip202.ip-51-178-215.eu) |
| 08:20:44 | → | Clint joins (~Clint@user/clint) |
| 08:20:44 | → | lally joins (sid388228@id-388228.uxbridge.irccloud.com) |
| 08:20:44 | → | kristjansson joins (sid126207@id-126207.tinside.irccloud.com) |
| 08:20:44 | → | hugo joins (znc@verdigris.lysator.liu.se) |
| 08:20:44 | → | landonf joins (landonf@mac68k.info) |
| 08:20:44 | → | hexology joins (~hexology@user/hexology) |
| 08:20:44 | → | Logio joins (em@kapsi.fi) |
| 08:20:44 | → | raghavgururajan joins (ea769b8000@user/raghavgururajan) |
| 08:20:44 | → | totte joins (~totte@h-82-196-112-155.A166.priv.bahnhof.se) |
| 08:20:44 | → | megaTherion joins (~therion@unix.io) |
| 08:20:44 | → | dagit joins (~dagit@2001:558:6025:38:6476:a063:d05a:44da) |
| 08:20:44 | → | berberman joins (~berberman@user/berberman) |
| 08:20:44 | → | In0perable joins (~PLAYER_1@fancydata.science) |
| 08:20:44 | → | adamCS joins (~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com) |
| 08:20:44 | → | fjmorazan joins (~quassel@user/fjmorazan) |
| 08:20:44 | → | w1gz joins (~do@159.89.11.133) |
| 08:20:44 | → | xdej joins (~xdej@quatramaran.salle-s.org) |
| 08:20:44 | → | eco_ joins (~ubuntu@ec2-54-201-230-197.us-west-2.compute.amazonaws.com) |
| 08:20:44 | → | ldlework joins (~hexeme@user/hexeme) |
| 08:20:44 | → | iteratee_ joins (~kyle@162.218.222.107) |
| 08:20:44 | → | MasseR joins (~MasseR@51.15.143.128) |
| 08:20:44 | → | ridcully joins (~ridcully@p57b52a9a.dip0.t-ipconnect.de) |
| 08:20:44 | → | Katarushisu joins (~Katarushi@cpc147334-finc20-2-0-cust27.4-2.cable.virginm.net) |
| 08:20:44 | → | travv0 joins (sid293381@user/travv0) |
| 08:20:44 | → | synthmeat joins (~synthmeat@user/synthmeat) |
| 08:20:44 | → | dolio joins (~dolio@130.44.130.54) |
| 08:20:44 | → | stilgart joins (~Christoph@chezlefab.net) |
| 08:20:44 | → | hubvu joins (sid495858@user/hubvu) |
| 08:20:44 | → | enikar joins (~enikar@user/enikar) |
| 08:20:44 | → | burakcank joins (~burakcank@has.arrived.and.is.ready-to.party) |
| 08:20:44 | → | farn joins (~farn@2a03:4000:7:3cd:d4ab:85ff:feeb:f505) |
| 08:20:44 | → | Axman6 joins (~Axman6@user/axman6) |
| 08:20:44 | → | statusbot joins (~statusbot@ec2-34-198-122-184.compute-1.amazonaws.com) |
| 08:20:44 | → | tubogram4 joins (~tubogram@user/tubogram) |
| 08:20:44 | → | feetwind joins (~mike@user/feetwind) |
| 08:20:44 | → | Ranhir joins (~Ranhir@157.97.53.139) |
| 08:20:44 | → | robbert-vdh joins (~robbert@robbertvanderhelm.nl) |
| 08:20:44 | → | Firedancer joins (sid336191@id-336191.hampstead.irccloud.com) |
| 08:20:44 | → | degraafk joins (sid71464@id-71464.lymington.irccloud.com) |
| 08:20:44 | → | glowcoil joins (sid3405@id-3405.tinside.irccloud.com) |
| 08:20:44 | → | carter joins (sid14827@id-14827.helmsley.irccloud.com) |
| 08:20:44 | → | andjjj23 joins (~irc@107.170.228.47) |
| 08:20:44 | → | aweinstock joins (~aweinstoc@cpe-67-248-65-250.nycap.res.rr.com) |
| 08:20:44 | → | pie_ joins (~pie_bnc@user/pie/x-2818909) |
| 08:20:44 | → | [exa] joins (exa@user/exa/x-3587197) |
| 08:20:44 | → | derelict joins (derelict@user/derelict) |
| 08:20:44 | → | g joins (x@libera/staff/glguy) |
| 08:20:44 | → | ystael joins (~ystael@user/ystael) |
| 08:20:44 | → | ts2 joins (~ts@46.101.20.9) |
| 08:20:44 | → | swistak joins (~swistak@185.21.216.141) |
| 08:20:44 | → | Arsen joins (arsen@managarm/dev/Arsen) |
| 08:20:44 | → | nrr__ joins (sid20938@id-20938.lymington.irccloud.com) |
| 08:20:44 | → | gmc joins (sid58314@id-58314.ilkley.irccloud.com) |
| 08:20:44 | → | integral joins (sid296274@user/integral) |
| 08:20:44 | → | dispater joins (~dispater@user/brprice) |
| 08:20:44 | → | jamestmartin joins (~james@jtmar.me) |
| 08:20:44 | → | vjoki joins (~vjoki@2a00:d880:3:1::fea1:9ae) |
| 08:20:44 | → | ehamberg joins (sid18208@id-18208.hampstead.irccloud.com) |
| 08:20:44 | → | TimWolla joins (~timwolla@2a01:4f8:150:6153:beef::6667) |
| 08:20:44 | → | TMA joins (tma@twin.jikos.cz) |
| 08:20:44 | → | iphy joins (sid67735@id-67735.lymington.irccloud.com) |
| 08:20:44 | → | _0x47_ joins (sid508683@id-508683.tinside.irccloud.com) |
| 08:20:44 | → | whez joins (sid470288@id-470288.lymington.irccloud.com) |
| 08:20:44 | → | teehemkay_ joins (sid14792@id-14792.lymington.irccloud.com) |
| 08:20:44 | → | gregberns__ joins (sid315709@id-315709.helmsley.irccloud.com) |
| 08:20:44 | → | MironZ joins (~MironZ@nat-infra.ehlab.uk) |
| 08:20:44 | → | micro joins (~micro@user/micro) |
| 08:20:44 | → | sm[i] joins (~user@plaintextaccounting/sm) |
| 08:20:44 | → | russruss joins (~russruss@my.russellmcc.com) |
| 08:20:44 | mercury.libera.chat | sets mode +o Axman6 |
| 08:20:44 | → | hongminhee joins (sid295@id-295.tinside.irccloud.com) |
| 08:20:44 | → | SethTisue__ joins (sid14912@id-14912.ilkley.irccloud.com) |
| 08:20:44 | → | V joins (~v@anomalous.eu) |
| 08:20:44 | → | gaze___ joins (sid387101@id-387101.helmsley.irccloud.com) |
| 08:20:44 | → | acertain joins (sid470584@id-470584.hampstead.irccloud.com) |
| 08:20:44 | → | dmj` joins (sid72307@id-72307.hampstead.irccloud.com) |
| 08:20:44 | → | mrianbloom joins (sid350277@id-350277.ilkley.irccloud.com) |
| 08:20:44 | → | sclv joins (sid39734@haskell/developer/sclv) |
| 08:20:44 | → | bjs joins (sid190364@user/bjs) |
| 08:20:44 | → | enemeth79 joins (sid309041@id-309041.lymington.irccloud.com) |
| 08:20:44 | → | cbarrett joins (sid192934@id-192934.helmsley.irccloud.com) |
| 08:20:44 | → | tapas joins (sid467876@id-467876.ilkley.irccloud.com) |
| 08:20:44 | → | saolsen joins (sid26430@id-26430.lymington.irccloud.com) |
| 08:20:44 | → | ysh joins (sid6017@id-6017.ilkley.irccloud.com) |
| 08:20:44 | → | JSharp joins (sid4580@id-4580.lymington.irccloud.com) |
| 08:20:44 | → | Boarders_ joins (sid425905@id-425905.lymington.irccloud.com) |
| 08:20:44 | → | S11001001 joins (sid42510@id-42510.ilkley.irccloud.com) |
| 08:20:44 | → | NiKaN joins (sid385034@id-385034.helmsley.irccloud.com) |
| 08:20:44 | → | tnks joins (sid412124@id-412124.helmsley.irccloud.com) |
| 08:20:44 | → | marienz joins (~marienz@libera/staff/marienz) |
| 08:20:44 | → | davetapley joins (sid666@id-666.uxbridge.irccloud.com) |
| 08:20:44 | → | rtpg joins (sid443069@id-443069.ilkley.irccloud.com) |
| 08:20:44 | → | b20n joins (sid115913@id-115913.uxbridge.irccloud.com) |
| 08:20:44 | → | lightandlight joins (sid135476@id-135476.helmsley.irccloud.com) |
| 08:20:44 | → | caasih joins (sid13241@id-13241.ilkley.irccloud.com) |
| 08:20:44 | → | edmundnoble joins (sid229620@id-229620.helmsley.irccloud.com) |
| 08:20:44 | → | PotatoGim joins (sid99505@id-99505.lymington.irccloud.com) |
| 08:20:44 | → | philpax_ joins (sid516926@id-516926.lymington.irccloud.com) |
| 08:20:44 | → | jakesyl_ joins (sid56879@id-56879.hampstead.irccloud.com) |
| 08:20:44 | → | Ekho joins (~Ekho@user/ekho) |
| 08:20:44 | → | bbear joins (~znc@21212.s.t4vps.eu) |
| 08:20:44 | → | dragestil joins (~znc@user/dragestil) |
| 08:20:44 | → | welterde joins (welterde@thinkbase.srv.welterde.de) |
| 08:20:44 | → | earthy joins (~arthurvl@2001:984:275b:1:ba27:ebff:fea0:40b0) |
| 08:20:44 | → | cawfee joins (~root@2406:3003:2077:2758::babe) |
| 08:20:44 | → | liskin joins (~liskin@xmonad/liskin) |
| 08:20:44 | → | defanor joins (~defanor@tart.uberspace.net) |
| 08:20:44 | → | codedmart joins (codedmart@2600:3c01::f03c:92ff:fefe:8511) |
| 08:20:44 | → | xnbya joins (~xnbya@2a01:4f8:c17:cbdd::1) |
| 08:20:44 | → | bastelfreak joins (~bastelfre@basteles-bastelknecht.bastelfreak.org) |
| 08:20:44 | → | Adran joins (~adran@botters/adran) |
| 08:20:44 | → | energizer joins (~energizer@user/energizer) |
| 08:20:44 | → | tomjaguarpaw joins (~tom@li367-225.members.linode.com) |
| 08:20:44 | → | immae joins (~immae@2a01:4f8:141:53e7::) |
| 08:20:44 | → | cross joins (~cross@spitfire.i.gajendra.net) |
| 08:20:44 | → | janus joins (janus@anubis.0x90.dk) |
| 08:20:44 | → | dixie joins (~dixie@real.wilbury.sk) |
| 08:20:44 | → | cpape joins (~user@2a01:4f9:c010:632d::1) |
| 08:20:44 | → | dunj3 joins (~dunj3@kingdread.de) |
| 08:21:25 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 240 seconds) |
| 08:22:52 | × | litharge quits (litharge@libera/bot/litharge) (Remote host closed the connection) |
| 08:22:55 | → | litharge joins (litharge@libera/bot/litharge) |
| 08:24:55 | × | [_] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 08:25:53 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:28:05 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 08:28:12 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 08:30:52 | → | dyeplexer joins (~dyeplexer@user/dyeplexer) |
| 08:33:10 | × | deadmarshal quits (~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds) |
| 08:33:42 | → | coot joins (~coot@89-64-85-93.dynamic.chello.pl) |
| 08:39:47 | × | nunggu quits (~q@gateway/tor-sasl/nunggu) (Remote host closed the connection) |
| 08:40:16 | → | nunggu joins (~q@gateway/tor-sasl/nunggu) |
| 08:41:31 | × | dyeplexer quits (~dyeplexer@user/dyeplexer) (Ping timeout: 256 seconds) |
| 08:44:47 | → | d0ku joins (~d0ku@178.43.3.56.ipv4.supernova.orange.pl) |
| 08:46:55 | → | deadmarshal joins (~deadmarsh@95.38.231.124) |
| 08:52:34 | → | nhatanh02 joins (~satori@123.24.172.30) |
| 08:54:00 | × | alMalsamo quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 276 seconds) |
| 08:54:11 | → | Topsi joins (~Tobias@dyndsl-095-033-093-212.ewe-ip-backbone.de) |
| 08:54:43 | → | chele joins (~chele@user/chele) |
| 08:54:53 | → | acidjnk joins (~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) |
| 08:54:53 | → | acidjnk_new joins (~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) |
| 08:55:18 | × | gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 276 seconds) |
| 08:56:22 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 09:01:30 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds) |
| 09:07:50 | × | azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 09:08:09 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 09:09:06 | → | jgeerds joins (~jgeerds@55d4bbed.access.ecotel.net) |
| 09:09:42 | → | dyeplexer joins (~dyeplexer@user/dyeplexer) |
| 09:11:08 | → | MajorBiscuit joins (~MajorBisc@c-001-032-022.client.tudelft.eduvpn.nl) |
| 09:13:25 | × | jgeerds quits (~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 240 seconds) |
| 09:17:36 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
| 09:17:36 | → | allbery_b joins (~geekosaur@xmonad/geekosaur) |
| 09:17:39 | allbery_b | is now known as geekosaur |
| 09:21:52 | × | Jing quits (~hedgehog@240e:390:7c53:a7e1:15fa:c22e:b1fb:575a) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 09:32:25 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 09:33:17 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 09:34:45 | × | dyeplexer quits (~dyeplexer@user/dyeplexer) (Quit: Leaving) |
| 09:36:32 | → | Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
| 09:44:41 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 09:49:37 | × | mvk quits (~mvk@2607:fea8:5cdd:f000::55f8) (Ping timeout: 240 seconds) |
| 09:54:00 | → | __monty__ joins (~toonn@user/toonn) |
| 09:55:30 | × | acidjnk quits (~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 09:55:30 | × | acidjnk_new quits (~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
| 09:59:24 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 10:02:07 | → | Jing joins (~hedgehog@240e:390:7c53:a7e1:ede2:45ee:21e7:7941) |
| 10:03:55 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 10:06:40 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 256 seconds) |
| 10:08:18 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 10:12:11 | × | xff0x quits (~xff0x@port-92-193-159-86.dynamic.as20676.net) (Ping timeout: 256 seconds) |
| 10:12:16 | × | juhp quits (~juhp@128.106.188.82) (Quit: juhp) |
| 10:14:22 | × | jackson99 quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout)) |
| 10:17:31 | → | xff0x joins (~xff0x@2001:1a81:5310:700:f0a4:a961:9964:1b51) |
| 10:18:39 | × | dyniec quits (~dyniec@mail.dybiec.info) (Quit: WeeChat 3.0) |
| 10:21:11 | → | dyniec joins (~dyniec@mail.dybiec.info) |
| 10:28:56 | → | juhp joins (~juhp@128.106.188.82) |
| 10:30:06 | × | yauhsien_ quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 10:30:46 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 10:33:53 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 10:36:42 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds) |
| 10:37:22 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 10:38:13 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds) |
| 10:38:35 | → | dschrempf joins (~dominik@070-207.dynamic.dsl.fonira.net) |
| 10:38:44 | → | acidjnk_new joins (~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) |
| 10:38:45 | → | acidjnk joins (~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) |
| 10:52:20 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 10:54:57 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 10:55:26 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 11:06:21 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 11:07:01 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 11:11:36 | → | DNH joins (~DNH@2a02:8108:1100:16d8:80ee:56b1:c7cc:d16d) |
| 11:13:17 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds) |
| 11:16:51 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 11:17:38 | → | yauhsien joins (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) |
| 11:20:26 | × | dschrempf quits (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.3) |
| 11:25:22 | → | max22- joins (~maxime@2a01cb088335980038ab69ec4eae31f4.ipv6.abo.wanadoo.fr) |
| 11:36:29 | → | ubert joins (~Thunderbi@p200300ecdf0994f82db7d35c756e5286.dip0.t-ipconnect.de) |
| 11:39:25 | × | MajorBiscuit quits (~MajorBisc@c-001-032-022.client.tudelft.eduvpn.nl) (Ping timeout: 240 seconds) |
| 11:41:42 | → | Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) |
| 11:44:45 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 11:48:09 | × | max22- quits (~maxime@2a01cb088335980038ab69ec4eae31f4.ipv6.abo.wanadoo.fr) (Remote host closed the connection) |
| 11:56:02 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 12:00:17 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds) |
| 12:02:41 | × | Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 256 seconds) |
| 12:07:16 | → | ubert1 joins (~Thunderbi@p200300ecdf0994f8385203c98e392e3c.dip0.t-ipconnect.de) |
| 12:11:32 | <Benzi-Junior> | hey, I'm having trouble with stack, and I think the documentation is out of date |
| 12:12:11 | <Benzi-Junior> | I have a file Foo.hs in src and stack finds it but doesn't expose the module |
| 12:12:38 | <Benzi-Junior> | i.e. it puts it under "other modules" |
| 12:13:00 | <Benzi-Junior> | the documentation says I should edit the .cabal file |
| 12:13:02 | × | deadmarshal quits (~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds) |
| 12:13:13 | → | Maxdamantus joins (~Maxdamant@user/maxdamantus) |
| 12:13:34 | × | kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 12:13:45 | <polyphem> | stack uses <project>.cabal to build, you have to add Foo.hs in .cabal under executable/library stanza under exposed modules |
| 12:13:53 | <Benzi-Junior> | but as far as I can tell, stack nowadays writes the .cabal file before doing anything with it |
| 12:16:19 | <polyphem> | stack generates a <project>.cabal file with only standard Main.hs and MyLib.hs files, you have to add your files manually |
| 12:17:13 | <Benzi-Junior> | polyphem, I tried editing the .cabal file but when I run "stack build" it stack writes over it |
| 12:17:15 | → | max22- joins (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) |
| 12:17:39 | <polyphem> | what ? |
| 12:18:10 | <yushyin> | do you maybe have a package.yaml hpack file? |
| 12:18:26 | <polyphem> | haven't seen this behavior of stack |
| 12:19:03 | <Benzi-Junior> | yushyin, yes, |
| 12:19:21 | <Benzi-Junior> | polyphem, it's something that changed a while back |
| 12:19:31 | <Benzi-Junior> | polyphem, it's been bothering me ever since |
| 12:19:55 | <yushyin> | yeah, i guess stack uses hpack to generate your cabal file from the package.yaml |
| 12:20:22 | <polyphem> | yushyin, Benzi-Junior : this has to to with hpack , right , stack alone wouldnt overwrite its .cabal file |
| 12:20:37 | × | max22- quits (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Remote host closed the connection) |
| 12:21:01 | × | acidjnk quits (~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 12:21:01 | × | acidjnk_new quits (~acidjnk@p200300d0c7271e945c697a298a149d84.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 12:21:12 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 12:22:31 | × | nhatanh02 quits (~satori@123.24.172.30) (Ping timeout: 256 seconds) |
| 12:23:50 | <polyphem> | Benzi-Junior: when you stack init , do you give a project template ? |
| 12:24:11 | <Benzi-Junior> | polyphem, no |
| 12:25:30 | <yushyin> | edit package.yaml to your needs |
| 12:26:13 | <polyphem> | how , yushyin said if you have package.yaml from hpack it will generate your .cabal from it, why you have hpack in the first place ? Do you need it ? |
| 12:26:36 | <Benzi-Junior> | yushyin, "rm package.yaml" |
| 12:26:37 | <polyphem> | yushyin: is hpack standard with stack now ? |
| 12:27:22 | <yushyin> | dunno, i don't use stack |
| 12:29:28 | <polyphem> | i have latest stack : Version 2.7.3, Git revision 7927a3aec32e2b2e5e4fb5be76d0d50eddcc197f x86_64 hpack-0.34.4 on debian, and it does not create package.yaml/uses hpack for my projects !? |
| 12:32:41 | <yushyin> | polyphem: 'Since Stack 1.6.1, the package.yaml is the preferred package format that is provided built-in by stack through the hpack tool. The default behaviour is to generate the .cabal file from this package.yaml, and accordingly you should not modify the .cabal file.' -- https://docs.haskellstack.org/en/stable/GUIDE/#stacks-functions |
| 12:36:04 | <polyphem> | i have never seen an hpack/package.yaml in one of my projects !? |
| 12:38:31 | <polyphem> | what are you using yushyin ? plain cabal ? or nix ? |
| 12:39:07 | <yushyin> | ghcup+cabal |
| 12:39:40 | → | phuegrvs[m] joins (~phuegrvsm@2001:470:69fc:105::1:65e4) |
| 12:41:04 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 12:41:10 | → | alx741 joins (~alx741@157.100.93.160) |
| 12:41:16 | <polyphem> | usually, i start with cabal init -i , then later i switch to stack with stack new , maybe stack sees my .cabal and in order to not overwrite it , doesnt generate package.yaml/juses hpack ... , maybe |
| 12:41:49 | <yushyin> | maybe |
| 12:41:54 | → | little_mac joins (~little_ma@2601:410:4300:3ce0:254c:b3ad:2ae7:82d7) |
| 12:43:19 | <maerwald> | trash package.yaml |
| 12:43:39 | <polyphem> | Benzi-Junior: if your project is relativly fresh , only that foo.hs , try to rm all stack artifacts , then do cabal init -i (interactive) to generate your initial cabal file and then run stack new , that might work out not having to deal with hpack/package.yaml |
| 12:43:42 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 12:43:57 | × | vglfr quits (~vglfr@88.155.96.35) (Read error: Connection reset by peer) |
| 12:44:37 | <polyphem> | i like stacks support for different resolvers/ghc versions , and externel packages and git source packages |
| 12:45:00 | → | vglfr joins (~vglfr@88.155.96.35) |
| 12:46:11 | <polyphem> | havent had the need to tryout ghcup |
| 12:46:37 | <yushyin> | https://cabal.readthedocs.io/en/3.6/cabal-project.html#specifying-the-local-packages |
| 12:46:46 | <yushyin> | https://cabal.readthedocs.io/en/3.6/cabal-project.html#specifying-packages-from-remote-version-control-locations |
| 12:47:17 | <maerwald> | stack doesn't have any significant feature that you can't have in cabal... it's just a different usability approach |
| 12:47:46 | <polyphem> | yushyin: i erelativly often end up in a cabal state where it cant resolve dependencies , then i switch to stack |
| 12:49:18 | × | alx741 quits (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
| 12:49:59 | <polyphem> | maerwald: yeah , i know cabal stepped up quite a bit , still i sometimes use stack sometimes only cabal , but cabal uses systeminstallation of ghc, and debian usually is not uptodate |
| 12:50:09 | <yushyin> | if you really wanted to, you could use the constraints file from stackage e.g. https://www.stackage.org/lts-18.21/cabal.config |
| 12:50:21 | <maerwald> | polyphem: then use ghcup to install a recent GHC |
| 12:50:28 | → | xb0o2 joins (~xb0o2@user/xb0o2) |
| 12:50:29 | <yushyin> | cabal can use any ghc you like |
| 12:50:49 | <yushyin> | and ghcup makes it easy to install many ghcs |
| 12:51:03 | <polyphem> | when i need some new ghc feature that debian doesnt have yet , i switch to stack and an different resolver |
| 12:51:13 | <maerwald> | sound complicated |
| 12:52:25 | <polyphem> | hmm , at least i do not have to learn yeat another tool, no offence against ghcup , havent used it once |
| 12:53:19 | <maerwald> | there's no learning curve |
| 12:53:28 | <polyphem> | but fp is flatly focusing more and more towards rust, dont they? wonder how long they will continue stack anyway |
| 12:53:39 | <maerwald> | stack is already abandoned by fp |
| 12:54:02 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 12:54:11 | <maerwald> | https://www.snoyman.com/blog/babies-oss-maintenance/ |
| 12:54:20 | <polyphem> | maerwald: oh, is it ? |
| 12:54:55 | <yushyin> | polyphem: in my experience haskell package from linux distributions are not for development, thus i use ghcup. i usually end up with many ghcs anyway so why bother with the ghc from the distribution |
| 12:55:21 | <yushyin> | IMO ;) |
| 12:55:24 | → | alx741 joins (~alx741@157.100.93.160) |
| 12:57:47 | <polyphem> | maerwald: i see |
| 12:59:13 | × | alx741 quits (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
| 12:59:33 | <polyphem> | so ghcup installs different ghc versions per user or system wide , do i have to bend my links aka update-aletrnatives on debian ? ist it also managing cabal versions ? |
| 13:00:01 | <maerwald> | polyphem: ghcup installs into ~/.ghcup only and requires that you add ~/.ghcup/bin to PATH |
| 13:00:14 | <maerwald> | so you just prepend it to your path |
| 13:00:29 | × | kaph quits (~kaph@net-2-38-107-19.cust.vodafonedsl.it) (Ping timeout: 256 seconds) |
| 13:01:13 | → | euandreh joins (~euandreh@2804:14c:33:9fe5:cb46:c04b:665a:c687) |
| 13:01:40 | <polyphem> | maerwald: and ghc is to be fully quallified then like ghc-9.xy right or has ghcup like a subcomand to specifie wich ghc version ghc points to ? |
| 13:02:29 | → | alx741 joins (~alx741@157.100.93.160) |
| 13:02:33 | <maerwald> | polyphem: yes, it allows to set the default ghc symlinks |
| 13:02:58 | <polyphem> | oh cool , what about cabal versions, same there ? |
| 13:03:25 | <maerwald> | https://www.haskell.org/ghcup/about/#how |
| 13:03:30 | <maerwald> | it's all in the documentation |
| 13:04:16 | <polyphem> | sure , will have a look then to check it out , youre the author right ? |
| 13:06:19 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 13:09:01 | <maerwald> | yes |
| 13:09:20 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 13:09:45 | <polyphem> | maerwald: thank you |
| 13:10:33 | × | alx741 quits (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
| 13:10:48 | → | alx741 joins (~alx741@157.100.93.160) |
| 13:12:18 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 13:12:41 | → | Vajb joins (~Vajb@2001:999:50:e6be:1e98:9376:d93e:4506) |
| 13:13:05 | → | Guest17 joins (~Guest17@wificampus-097061.grenet.fr) |
| 13:13:49 | × | cfricke quits (~cfricke@user/cfricke) (Ping timeout: 240 seconds) |
| 13:14:37 | × | alx741 quits (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
| 13:15:47 | × | JimL quits (~quassel@89-162-2-132.fiber.signal.no) (Ping timeout: 256 seconds) |
| 13:16:34 | → | alx741 joins (~alx741@157.100.93.160) |
| 13:17:25 | × | jonathanx_ quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 240 seconds) |
| 13:17:28 | → | jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
| 13:17:58 | → | slack1256 joins (~slack1256@191.125.99.214) |
| 13:18:45 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4) |
| 13:19:15 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 13:20:37 | × | alx741 quits (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
| 13:21:07 | → | alx741 joins (~alx741@157.100.93.160) |
| 13:21:59 | <janus> | does anyone use tzdata? i want to make a game plan to make sure it is updated (maybe taken over) before daylight saving is due |
| 13:22:42 | <janus> | because the trustee guidelines say there must be a waiting period of 6 weeks, and daylight savings is due in ~24 weeks we may as well start planning now |
| 13:22:58 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 13:23:34 | → | fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
| 13:25:52 | <polyphem> | SPJ said in a talk , they released a ghc version wich wen you had a type error would delete your source file , who got hit by that ? |
| 13:26:42 | × | little_mac quits (~little_ma@2601:410:4300:3ce0:254c:b3ad:2ae7:82d7) (Remote host closed the connection) |
| 13:28:02 | <fizbin> | Hey, when doing advent-of-code last month, on one of the days I came up with this: https://paste.tomsmeding.com/DuK1vFhS -- I know I've seen something like it somewhere before, but can't remember the name. Anyone else know the thing I'm thinking of? |
| 13:29:17 | × | alx741 quits (~alx741@157.100.93.160) (Read error: Connection reset by peer) |
| 13:29:43 | → | max22- joins (~maxime@2a01cb0883359800f3dd99e96a376ecf.ipv6.abo.wanadoo.fr) |
| 13:30:11 | <[exa]> | fizbin: looks bifunctorish or arrowish |
| 13:30:36 | → | lavaman joins (~lavaman@98.38.249.169) |
| 13:31:53 | → | alx741 joins (~alx741@157.100.93.160) |
| 13:32:01 | <[exa]> | and the actual type Both might be defined somewhere, perhaps in the vicinity of `Solo` |
| 13:32:08 | <geekosaur> | polyphem, https://gitlab.haskell.org/ghc/ghc/-/issues/163 |
| 13:32:26 | × | Guest17 quits (~Guest17@wificampus-097061.grenet.fr) (Quit: Client closed) |
| 13:33:32 | <polyphem> | geekosaur: hahaha |
| 13:34:56 | <polyphem> | when creating a library , is it idiomatic to start with typeclasses that cork together and have differerent implementations for different backends ? |
| 13:35:08 | <polyphem> | s/cork/work/ |
| 13:35:08 | × | alx741 quits (~alx741@157.100.93.160) (Client Quit) |
| 13:35:52 | → | MajorBiscuit joins (~MajorBisc@c-001-032-008.client.tudelft.eduvpn.nl) |
| 13:36:58 | <fizbin> | [exa], The only pre-existing thing I can find called Both is in the both library, where it's just Maybe with a different Semigroup instance. |
| 13:37:20 | <polyphem> | or does it scare users away if they have to write instances for their type to use that library ? |
| 13:39:04 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
| 13:39:32 | <[exa]> | fizbin: perhaps https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Functor-Product.html#t:Product ? |
| 13:39:36 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 13:39:57 | <[exa]> | (tried an oldschool search for 'pair' :D ) |
| 13:42:37 | <fizbin> | [exa], Yeah, that looks like it. I suspect that before I had seen this as :*: in GHC.Generics or the functor-combinators library. |
| 13:42:50 | <polyphem> | fizbin: i was latly thinking about parallel composition as contrasted to Compose serial functor composition |
| 13:44:05 | <fizbin> | polyphem, you mean like the difference between (&&&) and (>>>) ? |
| 13:44:16 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 256 seconds) |
| 13:44:49 | <polyphem> | yeah , but (&&&) works on functions , or does it work also for functors |
| 13:44:55 | <fizbin> | I mean, in advent-of-code I just used Both for Both Min Max on day 24. |
| 13:45:15 | <fizbin> | polyphem: functions only. It's the wrong kind to work on functors. |
| 13:45:59 | <polyphem> | what about n-ary parallel composition , instead of pairing , like mappending multiple functors parallelly so noth Both but Many |
| 13:46:29 | <polyphem> | i like your Both class |
| 13:46:59 | → | neverfindme joins (~hayden@158.123.160.43) |
| 13:47:27 | <fizbin> | Well, as [exa] found it's just a restatement of Data.Functor.Product.Product |
| 13:49:58 | <geekosaur> | 162 was also some poor soul who discovered it in ghci |
| 13:50:47 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4) |
| 13:52:46 | × | fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 256 seconds) |
| 13:54:33 | <polyphem> | geekosaur: its not funny when it hapens to you, afterall |
| 13:55:02 | × | coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
| 13:59:12 | → | CiaoSen joins (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 13:59:16 | → | deadmarshal joins (~deadmarsh@95.38.231.124) |
| 14:00:26 | × | neverfindme quits (~hayden@158.123.160.43) (Quit: Leaving) |
| 14:02:28 | <Benzi-Junior> | I have a type "Foo b a" and have been asked to provide an instance for "Applicative (Foo b)" and quite frankly I'm at a loss, there is no restriction on the type b |
| 14:04:20 | → | cfricke joins (~cfricke@user/cfricke) |
| 14:06:18 | <geekosaur> | there's no restriction on ExceptT e, either |
| 14:08:16 | × | slack1256 quits (~slack1256@191.125.99.214) (Remote host closed the connection) |
| 14:09:29 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 14:10:08 | <geekosaur> | start by writing a Functor instance, then write `pure` for it |
| 14:10:42 | → | matrox joins (~bc8147f2@cerf.good1.com) |
| 14:10:46 | <geekosaur> | this should give you enough of a feel for it that you can write <*> |
| 14:12:53 | <hud> | Hi trying to turn a function that takes two arguments and returns some operation into a bytecode stack, I understand from sample-code how to generate bytecode for mathematical ops, but what about defining variables and returning values? https://paste.tomsmeding.com/RNK6Qv6Q |
| 14:13:16 | <Benzi-Junior> | geekosaur, I have the functor instance, and actually <*> as well, the issue I'm having is how to write pure |
| 14:14:23 | → | notzmv joins (~zmv@user/notzmv) |
| 14:16:51 | <polyphem> | installed ghcup and latest ghc , now warp doesnt compile anymore with this error , any suggestions : https://paste.tomsmeding.com/CBI6zmW6 |
| 14:18:28 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 14:18:43 | → | shapr joins (~user@2601:7c0:c202:5190:b29e:1cbf:e21f:c653) |
| 14:18:53 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 14:18:56 | <jneira[m]> | maybe the package does not support ghc-9.2.1 yet |
| 14:19:17 | <jneira[m]> | did you get to build it with ghc-9.2.1 at some point? |
| 14:20:09 | <geekosaur> | try head.hackage? that looks consistent with the changes in 9.2.1 |
| 14:20:20 | <polyphem> | jneira[m]: yea, but this error is about primitive types , that would affect a lot of packages , right , is there such a big breaking api change |
| 14:20:32 | <geekosaur> | yes, because of Apple |
| 14:20:37 | <polyphem> | geekosaur: how so ? |
| 14:20:59 | <polyphem> | as a version constraint in cabal file ? |
| 14:21:00 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3) |
| 14:21:09 | <geekosaur> | ghc used to treat all sized types internally as full CPU words. but the M1 requires all types to be their correct native sizes |
| 14:21:10 | → | cfricke joins (~cfricke@user/cfricke) |
| 14:21:15 | <geekosaur> | in its ABI |
| 14:21:38 | <geekosaur> | so Woord8# is actually 8 bits, and ghc can't get away with tossing around Word#s for them any more |
| 14:21:39 | <Benzi-Junior> | I feel like I'm missing some key insight, there is no way to default on the type "b" but I need to have "pure :: a -> Foo b a" |
| 14:21:49 | <jneira[m]> | the error looks similar to https://github.com/yesodweb/wai/issues/867 |
| 14:22:11 | <jneira[m]> | oops already linked |
| 14:22:53 | × | xsperry quits (~xs@user/xsperry) (Remote host closed the connection) |
| 14:23:08 | <geekosaur> | and yes, it causes a fair amount of breakage, but not as much as you might think because it's transparent if you're not actually operating on MagicHash-ed types |
| 14:23:29 | → | xsperry joins (~xs@user/xsperry) |
| 14:23:39 | <polyphem> | geekosaur: how do i use the head.hackage , what do y you mean by that ? |
| 14:23:51 | <lortabac> | Benzi-Junior: can you share the definition of Foo? |
| 14:24:06 | → | coot joins (~coot@89-64-85-93.dynamic.chello.pl) |
| 14:24:07 | <geekosaur> | http://head.hackage.haskell.org/ |
| 14:24:21 | <geekosaur> | has a snippet for adding the repository to a cabal file |
| 14:24:36 | <geekosaur> | this repo is just patches to hackage packages to support 9.2.1 and HEAD |
| 14:24:38 | <jneira[m]> | yeah only a relative small number of packages deal directly with primitive types (and some of them are boot libs) |
| 14:25:14 | <polyphem> | .cabal or cabal.project ? |
| 14:25:27 | <geekosaur> | I think either |
| 14:25:38 | <polyphem> | geekosaur: will try |
| 14:26:26 | <geekosaur> | Benzi-Junior, there's an obvious way to deal if it's an Either-like type. if it's not, you need to state the problem (I presume this is homework and/or an exercise from the web) in more detail |
| 14:29:50 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 14:29:50 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 14:29:50 | → | wroathe joins (~wroathe@user/wroathe) |
| 14:31:18 | → | `2jt joins (~jtomas@10.red-83-58-228.dynamicip.rima-tde.net) |
| 14:31:33 | <geekosaur> | also I think a lot of package maintainers are waiting for 9.2.2 to drop later this month before adding support for it |
| 14:31:42 | <geekosaur> | especially so soon after 9.0.2 |
| 14:32:34 | <geekosaur> | (and even more espeically since that dropped on Christmas so I bet a lot of maintainers didn't even get to look at it until January 3 or so) |
| 14:33:35 | <Benzi-Junior> | geekosaur, "Foo b a" should be a messaging agent that sends and receives messages of type "b" and at the end of communications should return a type "a" |
| 14:34:08 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
| 14:34:10 | → | jgeerds joins (~jgeerds@55d4bbed.access.ecotel.net) |
| 14:34:48 | <polyphem> | warp works now , but now ther is this error https://paste.tomsmeding.com/k5mVUVO8 ; guess if have to stap back from latest and go to 9.0.2 with older base , no problem thanks to ghcup :) |
| 14:35:49 | × | Inst quits (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 240 seconds) |
| 14:36:19 | → | shriekingnoise joins (~shrieking@186.137.144.80) |
| 14:36:24 | <yushyin> | i guess 8.10.7 is still the recommended ghc for a reason ^^ |
| 14:37:50 | → | fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
| 14:38:55 | <Hecate> | yes it is |
| 14:39:06 | <Hecate> | 9.0 should be more advertised as a dev preview imo |
| 14:39:59 | × | fjmorazan quits (~quassel@user/fjmorazan) (Quit: fjmorazan) |
| 14:40:15 | → | fjmorazan joins (~quassel@user/fjmorazan) |
| 14:46:35 | <jneira[m]> | and 9.2 to live in the bleeding edge 😜 |
| 14:46:50 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 14:47:54 | <geekosaur> | 9.0.2 seems fine. 9.2.1 seems the dev preview |
| 14:47:54 | × | Vajb quits (~Vajb@2001:999:50:e6be:1e98:9376:d93e:4506) (Read error: Connection reset by peer) |
| 14:48:22 | <geekosaur> | (arguably all x.y.1 releases are dev previews, but that's more or less true of every piece of software :) |
| 14:52:04 | → | epolanski joins (uid312403@id-312403.helmsley.irccloud.com) |
| 14:54:06 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 14:54:37 | × | deadmarshal quits (~deadmarsh@95.38.231.124) (Ping timeout: 240 seconds) |
| 14:58:50 | <janus> | the next stackage nightly will have 9.0.2! yaay |
| 15:02:06 | <matrox> | 9.0.2, not 9.2.1? |
| 15:03:29 | <geekosaur> | still too early for 9.2.1 |
| 15:03:48 | <geekosaur> | and it's been stuck on 9.0.1 for a couple months now, waiting for 9.0.2 to drop |
| 15:04:30 | <geekosaur> | hopefully this means we will rapidly progress to having a useful 9.0.2 ecosystem |
| 15:04:55 | → | xkuru joins (~xkuru@user/xkuru) |
| 15:05:08 | <geekosaur> | the earliest 9.2.x I would expect them to support is 9.2.2, scheduled for later this month |
| 15:05:30 | × | max22- quits (~maxime@2a01cb0883359800f3dd99e96a376ecf.ipv6.abo.wanadoo.fr) (Remote host closed the connection) |
| 15:05:40 | → | jkaye joins (~jkaye@2601:281:8300:7530:d171:6c14:e395:f91b) |
| 15:05:41 | <geekosaur> | but various maintainers are moving slowly enough that I thing even 9.0.2 will be pushing things a bit |
| 15:05:42 | → | max22- joins (~maxime@2a01cb0883359800f3dd99e96a376ecf.ipv6.abo.wanadoo.fr) |
| 15:05:46 | <geekosaur> | *think |
| 15:06:17 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 15:07:01 | <yushyin> | ghc9.2.1 is no fun without hls :/ |
| 15:07:58 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 15:09:07 | × | fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 256 seconds) |
| 15:11:45 | × | jgeerds quits (~jgeerds@55d4bbed.access.ecotel.net) (Ping timeout: 250 seconds) |
| 15:14:54 | × | gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 276 seconds) |
| 15:16:21 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 15:18:04 | <jneira[m]> | we are on it 😅 |
| 15:24:22 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 15:26:37 | × | razetime quits (~quassel@49.207.213.63) (Ping timeout: 240 seconds) |
| 15:31:31 | → | nhatanh02 joins (~satori@123.24.172.30) |
| 15:32:12 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 15:35:42 | × | fjmorazan quits (~quassel@user/fjmorazan) (Quit: fjmorazan) |
| 15:36:16 | × | zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection) |
| 15:36:20 | → | fjmorazan joins (~quassel@user/fjmorazan) |
| 15:40:59 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 15:40:59 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 15:40:59 | → | wroathe joins (~wroathe@user/wroathe) |
| 15:46:06 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 15:49:40 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 15:56:20 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 16:03:42 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 16:04:21 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 16:04:58 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 16:04:58 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 16:04:58 | → | wroathe joins (~wroathe@user/wroathe) |
| 16:09:15 | × | jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection) |
| 16:09:49 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 16:10:09 | <polyphem> | geekosaur: stack is discontinued but stackage is still maintained ? |
| 16:10:19 | → | bontaq joins (~user@ool-45779fe5.dyn.optonline.net) |
| 16:10:38 | <geekosaur> | stack is not discontinued, it is community-maintained instead of being an fpco "product" |
| 16:10:53 | <polyphem> | ah ,ok |
| 16:14:14 | → | jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
| 16:17:28 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 16:18:32 | → | a6a45081-2b83 joins (~aditya@pal-210-106-57.itap.purdue.edu) |
| 16:25:59 | <tomsmeding> | my mind made a little jump at reading "stack is discontinued", half the haskell community would be in a frenzy |
| 16:26:29 | <tomsmeding> | never mind half, the whole haskell community -- the other half would just be gleeful instead of panicking |
| 16:27:39 | × | _xor quits (~xor@dsl-50-5-233-169.fuse.net) (Quit: brb) |
| 16:28:00 | <Taneb> | I'm sure there's a handful of people out there who think "cabal? stack? Why would I need something like that, when there's wget and make" |
| 16:29:25 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) |
| 16:29:47 | × | coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
| 16:29:53 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 16:30:01 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:c274:f734:3361:cf1c) (Quit: WeeChat 2.8) |
| 16:31:31 | → | zaquest joins (~notzaques@5.130.79.72) |
| 16:32:44 | × | DNH quits (~DNH@2a02:8108:1100:16d8:80ee:56b1:c7cc:d16d) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 16:33:07 | → | Inst joins (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) |
| 16:33:56 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 16:36:31 | × | jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Quit: Leaving) |
| 16:40:30 | <tomsmeding> | I mean, I made do with just make (without wget) for AOC, but that's hardly a production codebase |
| 16:40:31 | → | Everything joins (~Everythin@37.115.210.35) |
| 16:40:49 | <polyphem> | tomsmeding: sorry for the shocks |
| 16:43:56 | <mjrosenb> | I've yet to understand stack, and in general hate the idea of languages having their own package managers, so am 100% fine with this. |
| 16:45:03 | <geekosaur> | even C sort-of has one these days (pkgconfig) |
| 16:45:32 | <geekosaur> | libraries get ever more complex and just chucking a -lfoo on the end of a link command increasingly doesn't work |
| 16:45:44 | × | CiaoSen quits (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 16:48:50 | <dolio> | Stack and cabal aren't package managers. |
| 16:49:08 | <mjrosenb> | pkgconfig is just a database that your one true package manager should be calling to update, like ghc-pkg |
| 16:49:55 | × | motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit) |
| 16:51:48 | → | motherfsck joins (~motherfsc@user/motherfsck) |
| 16:54:00 | <mjrosenb> | dolio: it may not be a package manager, but I'm pretty sure a package manager should be able to do everything that stack does, so whether it is or it sin't becomes a moot point. |
| 16:55:53 | <geekosaur> | package managers should be able to do more than stack or cabal do |
| 16:56:01 | <geekosaur> | try removing a package with either |
| 16:56:11 | <geekosaur> | they're build managers |
| 16:56:30 | × | a6a45081-2b83 quits (~aditya@pal-210-106-57.itap.purdue.edu) (Remote host closed the connection) |
| 16:56:53 | <dolio> | Well, that seems like an odd expectation to me. Package managers are built as infrastructure for (un)installing pre-built software for users. They're not build tools for programmers. |
| 16:57:30 | <janus> | can you remove a nix package? you just remove your dependency on it. with cabal it works the same way, no? so if cabal isn't a package manager, isn't nix one either? |
| 16:58:19 | <geekosaur> | many people use nix as a build manager instead of a package manager, yes. one could even argue that nixos is taking the path of abusing a build manager as a package manager\ |
| 16:58:34 | <geekosaur> | how often do you have to "gc" your package manager? |
| 16:58:37 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 16:59:03 | <mjrosenb> | dunno, apt tells me there are lots of pacakges that it can uninstall pretty frequently. |
| 16:59:45 | <mjrosenb> | there's even a flag that collects garbage, but they call it 'autoremove' or some such. |
| 16:59:46 | → | timCF joins (~timCF@m91-129-100-224.cust.tele2.ee) |
| 17:00:39 | <mjrosenb> | but in order to be able to build C programs, you normally need the -dev version of a library to be installed via apt |
| 17:00:56 | <mjrosenb> | or in gentoo, you just need the library present in order to get the necessary header files. |
| 17:02:04 | → | little_mac joins (~little_ma@2601:410:4300:3ce0:90ce:993d:d223:5eab) |
| 17:03:32 | <janus> | another gc for dpkg is called deborphan. there is also debfoster which is semi-automatic, asks you for every 'root' whether the whole tree can be uninstalled or pruned |
| 17:04:10 | <mjrosenb> | portage also has a GC built in, and recommends that you run it semi-frequently. |
| 17:04:27 | → | coot joins (~coot@89-64-85-93.dynamic.chello.pl) |
| 17:04:29 | <janus> | i run deborphan typically after each OS version upgrade since you'll have libraries laying around that autoremove somehow didn't pick up on |
| 17:04:36 | → | k`` joins (~user@152.1.137.158) |
| 17:05:46 | → | alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 17:06:52 | <sclv> | i think if cabal-install ever gets the proper gc feature that mirrors that in nix, tracking roots, etc, then it'll be fair to call it a package manager |
| 17:06:59 | <sclv> | until then its a build system, which is fine |
| 17:07:01 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 17:07:04 | <sclv> | that's what developers need :-P |
| 17:08:05 | <k``> | Is there a way to dispatch on whether there's an in-scope constraint? Like `case ifConstraint (Proxy (Show a)) of{ True -> show ; False -> \_-> "unshowable" }` ? |
| 17:08:13 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 17:08:56 | <geekosaur> | there are ways but they're ugly and not something you should rely upon |
| 17:09:00 | <k``> | or like `case maybeContext (Proxy (Show a)) of { Just Dict -> show ; Nothing -> "unshowable" }` ? |
| 17:10:17 | <k``> | That's a shame. |
| 17:10:57 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 26.3)) |
| 17:11:38 | <k``> | I understand that you can't get proof that you don't have an instance globally, but it would be nice to determine whether there's one in scope |
| 17:11:55 | <mjrosenb> | would `class MaybeShow a where mshow :: Maybe (a -> String); instance Show a => MaybeShow where mshow = Just show; instance MaybeShow a where mshow = Nothing` work |
| 17:12:03 | <mjrosenb> | with some level of undecidable instances? |
| 17:12:23 | <mjrosenb> | like it would be perfectly reasonable for ghc to always choose the Nothing instance, but *shrug* |
| 17:12:32 | → | whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com) |
| 17:12:40 | <k``> | mjrosenb: When I've tried to create instances like that, GHC has complained that they are not just overlapping but identical, and refused to allow them. |
| 17:12:49 | <mjrosenb> | hah. |
| 17:13:00 | <k``> | Which, fair enough. |
| 17:13:02 | <geekosaur> | right, constraints don't take part in instance selection |
| 17:13:10 | <mjrosenb> | makes sense, since they're both more or less global. |
| 17:14:17 | × | timCF quits (~timCF@m91-129-100-224.cust.tele2.ee) (Quit: leaving) |
| 17:16:46 | <geekosaur> | https://hackage.haskell.org/package/ifcxt |
| 17:17:09 | <geekosaur> | whether it works with recent ghc is a question, since this seems like it's skating on very thin ice |
| 17:17:28 | <polyphem> | do you have to Data.Typable.cast to a concrete type or can you cast to an constrained polymorphic type ? |
| 17:17:34 | <k``> | Yeah, from the one issue it seems abandoned. |
| 17:18:08 | <geekosaur> | I thought there was anothjer one but I can't find it :( |
| 17:18:50 | <mjrosenb> | https://i.imgur.com/9f8x6MF.mp4 |
| 17:19:29 | <geekosaur> | polyphem, pretty sure Typeable only does concrete types |
| 17:19:50 | <geekosaur> | but these days it is based on something that can do indexed types, I think? |
| 17:20:16 | <polyphem> | latest ghc has support for impredicativity , does that change somthing |
| 17:20:51 | <geekosaur> | https://downloads.haskell.org/ghc/latest/docs/html/libraries/base-4.16.0.0/Type-Reflection.html |
| 17:21:51 | <geekosaur> | no, impredicativity doesn't change anything, Typeable is just too simple to handle anything but concrete types. see the module I just pointed to for the indexed version, it might do what you want |
| 17:23:53 | → | deadmarshal joins (~deadmarsh@95.38.231.124) |
| 17:25:57 | × | little_mac quits (~little_ma@2601:410:4300:3ce0:90ce:993d:d223:5eab) (Remote host closed the connection) |
| 17:26:52 | → | little_mac joins (~little_ma@2601:410:4300:3ce0:5507:3283:c612:c744) |
| 17:27:25 | → | pgib joins (~textual@173.38.117.74) |
| 17:29:57 | × | sander quits (~sander@user/sander) (Ping timeout: 240 seconds) |
| 17:31:22 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 17:32:15 | → | sander joins (~sander@user/sander) |
| 17:35:33 | → | husixu joins (~husixu@137.132.119.2) |
| 17:40:17 | → | kaph joins (~kaph@net-2-38-107-19.cust.vodafonedsl.it) |
| 17:42:31 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 17:44:56 | <k``> | It is possible to do something like `foo :: proxy c -> Maybe (Dict c) ; foo = Nothing ; {-# RULES "c" forall (p :: c => proxy c). foo p = Just Dict #-}` -- but as far as I can tell, the rule never fires... |
| 17:44:57 | × | xb0o2 quits (~xb0o2@user/xb0o2) (Quit: Client closed) |
| 17:46:20 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 17:48:56 | <[itchyjunk]> | Are list comprehensions always a syntactic sugar for some other thing? |
| 17:49:31 | × | mbuf quits (~Shakthi@182.77.103.82) (Quit: Leaving) |
| 17:50:34 | <geekosaur> | yes |
| 17:50:36 | <[exa]> | [itchyjunk]: they can be translated to list monads and `guard` and AFAIK there's even extension to allow the same for anything that allows these two |
| 17:51:02 | <tomsmeding> | % :set -XMonadComprehensions |
| 17:51:02 | <yahb> | tomsmeding: |
| 17:51:07 | <[itchyjunk]> | ah |
| 17:51:09 | <geekosaur> | they also can be translated to map and filter, although I think modern ghc always uses the list (or other) monad |
| 17:51:40 | <geekosaur> | @undo [ f x | x <- xs, bar x ] |
| 17:51:40 | <lambdabot> | concatMap (\ x -> if bar x then [f x] else []) xs |
| 17:51:40 | <tomsmeding> | running `ghc -ddump-simpl` without optimisations on a file containing a list comprehension just gives me a plain-old recursive function |
| 17:52:11 | <tomsmeding> | so I guess you could say they just desugar to a normal recursive implementation? |
| 17:52:45 | <[itchyjunk]> | I think there is a very minor error here : https://wiki.haskell.org/List_comprehension |
| 17:52:49 | <[itchyjunk]> | "In the #haskell channel, or in a private message, say @undo and then your list comprehension, it will should you how it expands:" |
| 17:53:00 | <[itchyjunk]> | it will show you or it should show you, right? |
| 17:53:14 | <geekosaur> | I did that just above |
| 17:53:33 | <tomsmeding> | it will should be incorrect English indeed |
| 17:53:43 | → | _xor joins (~xor@dsl-50-5-233-169.fuse.net) |
| 17:53:43 | <bjs> | I recall from my old supervisor hearing of discussions early on about making comprehensions be generic over Monad |
| 17:53:45 | <geekosaur> | will show, I think |
| 17:54:01 | <[itchyjunk]> | so s/should/show/ |
| 17:54:13 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 17:54:45 | <tomsmeding> | % [x | x <- Just 42, y <- Nothing] |
| 17:54:45 | <yahb> | tomsmeding: Nothing |
| 17:54:49 | <tomsmeding> | % [x | x <- Just 42] |
| 17:54:49 | <yahb> | tomsmeding: Just 42 |
| 17:54:56 | <[itchyjunk]> | Needs verified account so some of you should fix it? :x |
| 17:56:13 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:56:14 | <geekosaur> | done |
| 17:56:26 | × | Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Ping timeout: 256 seconds) |
| 17:56:41 | <[itchyjunk]> | \o/ |
| 17:59:27 | → | benin joins (~benin@183.82.176.241) |
| 18:00:25 | → | Midjak joins (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) |
| 18:00:37 | × | infinity0 quits (~infinity0@occupy.ecodis.net) (Ping timeout: 240 seconds) |
| 18:00:42 | → | infinity0_ joins (~infinity0@occupy.ecodis.net) |
| 18:00:45 | → | DNH joins (~DNH@2a02:8108:1100:16d8:80ee:56b1:c7cc:d16d) |
| 18:00:46 | infinity0_ | is now known as infinity0 |
| 18:01:32 | × | raoul quits (~raoul@95.179.203.88) (Ping timeout: 240 seconds) |
| 18:02:22 | × | Jing quits (~hedgehog@240e:390:7c53:a7e1:ede2:45ee:21e7:7941) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 18:02:39 | × | max22- quits (~maxime@2a01cb0883359800f3dd99e96a376ecf.ipv6.abo.wanadoo.fr) (Remote host closed the connection) |
| 18:03:33 | → | max22- joins (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) |
| 18:05:57 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.3) |
| 18:06:56 | → | mbuf joins (~Shakthi@182.77.103.82) |
| 18:08:14 | × | xff0x quits (~xff0x@2001:1a81:5310:700:f0a4:a961:9964:1b51) (Ping timeout: 252 seconds) |
| 18:10:19 | <[itchyjunk]> | So it says some consider list comphrension unnecessary now because of "list monad" and it gives examples |
| 18:10:29 | <[itchyjunk]> | but what part of that code is the "list monad" ? |
| 18:10:46 | <[itchyjunk]> | Example : do c <- s return (toUpper c) |
| 18:10:50 | → | mvk joins (~mvk@2607:fea8:5cdd:f000::55f8) |
| 18:10:52 | <[itchyjunk]> | the whole thing is a monad? |
| 18:11:22 | <[itchyjunk]> | https://wiki.haskell.org/List_comprehension#List_monad |
| 18:11:26 | <[itchyjunk]> | first example there |
| 18:13:29 | × | kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 18:13:58 | <polyphem> | [] a is a monad ; the effect is nondeterminism; |
| 18:14:21 | <[itchyjunk]> | hmmmmm |
| 18:14:22 | → | vysn joins (~vysn@user/vysn) |
| 18:15:29 | <polyphem> | do c::Char <- s::[Char] ; return (toUpper c) == map toUpper s |
| 18:16:20 | <polyphem> | for each c in s do an operation on c and assamble a list of all transformed cs |
| 18:17:48 | <polyphem> | [c' | c <- s , let c' = toUpper c] |
| 18:18:16 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Read error: Connection reset by peer) |
| 18:19:48 | <polyphem> | you perform operations on a single element and the (nondeterminism effective) list monad gives you all possible solutions for all combinations |
| 18:21:21 | <polyphem> | > let go = do x <- [1..5] ; y <- [6..10] ; return (x,y) in go |
| 18:21:22 | <lambdabot> | [(1,6),(1,7),(1,8),(1,9),(1,10),(2,6),(2,7),(2,8),(2,9),(2,10),(3,6),(3,7),(... |
| 18:21:25 | → | CiaoSen joins (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
| 18:21:28 | × | johnw quits (~johnw@2607:f6f0:3004:1:c8b4:50ff:fef8:6bf0) (Quit: ZNC - http://znc.in) |
| 18:21:29 | <[itchyjunk]> | So monads map one type to another type |
| 18:21:49 | <[itchyjunk]> | and whenever you do such things, you have to list all possible resulting types? |
| 18:22:07 | <polyphem> | you lift a type in a monad (context/effectfull computation) |
| 18:22:28 | → | zincy joins (~zincy@2a00:23c8:970c:4801:8d43:554e:d62c:915d) |
| 18:22:44 | <polyphem> | list monad -> nondeterminism ==> a "lifted to" [a] |
| 18:22:55 | <[itchyjunk]> | in that go example, we go from type Int to type (Int,Int) ? |
| 18:23:13 | <polyphem> | maybe monad -> failure ==> a "lifted to" Maybe a |
| 18:23:15 | <polyphem> | ... |
| 18:23:21 | <k``> | Int to [Int]. |
| 18:23:36 | <[itchyjunk]> | ahh "lift", this is category theory lingo? |
| 18:23:47 | <xerox> | gym rat lingo |
| 18:23:48 | <polyphem> | go :: [(Int,Int)] |
| 18:23:51 | × | MajorBiscuit quits (~MajorBisc@c-001-032-008.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.3) |
| 18:24:05 | <[itchyjunk]> | Hmm, why is it Int to [Int] and not Int to [(Int,Int)] ? |
| 18:24:24 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 18:24:53 | <polyphem> | [itchyjunk]: map for example "lifts" a function a -> b to a context [a] -> [b] |
| 18:25:19 | <polyphem> | go ist just [(Int,Int)] |
| 18:25:29 | <[itchyjunk]> | oh i think i kinda understand that last example |
| 18:25:29 | <polyphem> | go doesnt take a parameter |
| 18:25:49 | <[itchyjunk]> | you have a `a -> b` but after application of map, we have a `[a] -> [b]` |
| 18:25:55 | <[itchyjunk]> | so map is some type of a monad |
| 18:26:10 | <polyphem> | fmap in general "lifts" a function a->b to a functorial context f like f a -> f b |
| 18:26:19 | <EvanR> | hey, [itchyjunk] have you heard of Functors |
| 18:26:35 | <[itchyjunk]> | I've heard of them but nothing more, they are maps between categories right? |
| 18:26:36 | <polyphem> | it transforms te function to work in a enriched setting |
| 18:26:38 | <EvanR> | like, list is a functor, Maybe is a functor |
| 18:26:53 | <geekosaur> | don't worry about categories for now |
| 18:28:02 | <EvanR> | probably better to sort out the ontological status of how a type (constructor) can be a Functor, before moving to monads |
| 18:28:35 | <EvanR> | for reasons |
| 18:28:54 | <[itchyjunk]> | Hmm, and to understand how type constructors can be Functors, i need to understand why there are categories in a programming language :s |
| 18:29:00 | <EvanR> | no not really |
| 18:29:05 | <[itchyjunk]> | I can imagine all the possible types forming a category |
| 18:29:07 | <EvanR> | in haskell Functor has a more limited scope |
| 18:29:13 | <[itchyjunk]> | oh i see |
| 18:29:26 | <monochrom> | I happen to be not convinced that you should care about the "list monad" part now. |
| 18:29:28 | <polyphem> | a haskell functor is a type that has a type variable, eg. [a] (List of a) and it exists a way to modifay the inner type via fmap , eg. for list: map toUpper ['h','i'] === "HI" |
| 18:29:28 | <k``> | I may be wrong about this, but I think when folks talk about 'lifting' they usually mean types. So when you apply `[]` to `Int` you get `[Int]` -- you've 'lifted' `Int` into `[]` (which is a Monad). |
| 18:29:49 | <[itchyjunk]> | lol haskell wiki defines it as |
| 18:29:50 | <[itchyjunk]> | "The Functor typeclass represents the mathematical functor: a mapping between categories in the context of category theory." |
| 18:30:00 | <geekosaur> | there is only one category here, so all Functors are endofunctors on that category. which is why I said don't worry about categories for now |
| 18:30:04 | <EvanR> | at the same time you lift your type using F, you lift functions with fmap |
| 18:30:05 | <monochrom> | And list comprehension is hear to stay. You are not learning an obsolete construct if you learn list comprehension. |
| 18:30:11 | <monochrom> | s/hear/here/ |
| 18:30:12 | <[itchyjunk]> | geekosaur, ah okay |
| 18:30:27 | <geekosaur> | (the category is Hask, the category of Haskell types ignoring bottoms) |
| 18:30:40 | <[itchyjunk]> | well, i am looking at random list comprehension articles and they all bring up list monad :x |
| 18:30:40 | → | econo joins (uid147250@user/econo) |
| 18:30:54 | <geekosaur> | right, but Monad is just as limited as Functor is |
| 18:31:12 | <monochrom> | So this is the difference between educational material and everything else. |
| 18:31:23 | <k``> | #HaskIsn'tACategory |
| 18:31:23 | <geekosaur> | the concept is from CT, but you can ignore that for all practical purposes. it's just a convenient pattern |
| 18:31:25 | → | lavaman joins (~lavaman@98.38.249.169) |
| 18:31:31 | <monochrom> | Educational material does not sidetrack you. |
| 18:31:53 | <monochrom> | Encyclopedic material and blogs are all about sidetracking. |
| 18:32:04 | <[itchyjunk]> | lifting reminds me of yoenda theorem or somesuch that i can't remember anymore |
| 18:32:24 | <EvanR> | really? I barely understand, mainly don't understand yoneda xD |
| 18:32:48 | <monochrom> | Clearly, the web is full of the non-educational kind. The "clearly" can be seen once you consider the incentives for why people write and post on the Internet. |
| 18:32:50 | × | little_mac quits (~little_ma@2601:410:4300:3ce0:5507:3283:c612:c744) (Remote host closed the connection) |
| 18:32:56 | <[itchyjunk]> | monochrom, oh so learning list comprehension is good. got it. the "some think its irrelevent and can be replaced" part made me question it all |
| 18:33:05 | <[itchyjunk]> | EvanR, well we had to learn that theorem in algebra |
| 18:33:21 | <EvanR> | dang... your algebra class beats mine |
| 18:33:22 | → | little_mac joins (~little_ma@2601:410:4300:3ce0:5507:3283:c612:c744) |
| 18:34:06 | × | bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 18:34:21 | <[itchyjunk]> | I think you could figure out all mappings between rings by knowing some limited information or somesuch.. man i can't remember anything |
| 18:34:44 | × | little_mac quits (~little_ma@2601:410:4300:3ce0:5507:3283:c612:c744) (Remote host closed the connection) |
| 18:34:45 | <geekosaur> | [itchyjunk], in the end I'd say list comprehensions are convenient, so there's no reason for them to go away |
| 18:34:55 | <geekosaur> | half of Haskell is such conveniences |
| 18:35:15 | <EvanR> | my score on advent of code would have been much worse without them |
| 18:35:16 | <[itchyjunk]> | true, the set builder notation is what made me think of haskell being cool at some point |
| 18:35:20 | <shapr> | has anyone used the morpheus graphql library with the github API? |
| 18:35:23 | <geekosaur> | you could write something very close to what ghc calls Core, it'd just be fairly annoying. |
| 18:35:34 | → | little_mac joins (~little_ma@2601:410:4300:3ce0:5835:5767:1aa7:b5ec) |
| 18:35:49 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 240 seconds) |
| 18:36:03 | <[itchyjunk]> | yeah i saw the syntax for core.. i should really learn to read the notation for simply typed lambda calculus. last time i tried, i failed |
| 18:36:16 | <[itchyjunk]> | https://aosabook.org/en/ghc.html#s:core |
| 18:36:28 | <[itchyjunk]> | looks like hieroglyph to me |
| 18:37:04 | <geekosaur> | it's not as bad as it seems, mostly it's all the compiler-generated symbols that make it look like Greek |
| 18:37:16 | × | mbuf quits (~Shakthi@182.77.103.82) (Quit: Leaving) |
| 18:37:16 | <monochrom> | I don't have data, but if you collected data, you would find that no production code actually uses the list monad way where list comprehension could be used. |
| 18:37:52 | <monochrom> | Perhaps I should go ahead and delete that false sentence on the haskell wiki. |
| 18:38:12 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 18:38:12 | <geekosaur> | go for it |
| 18:38:29 | <k``> | Core's prefix use of operators always gives me pause. |
| 18:38:45 | <[itchyjunk]> | well the statement says some people think that :P |
| 18:38:59 | <[itchyjunk]> | guess the "some people" is more rare than i though |
| 18:39:06 | <monochrom> | It probably was true like 20 years ago. |
| 18:39:29 | <[itchyjunk]> | Oh, the use of list comprehension grew rather than shrunk? |
| 18:39:34 | <EvanR> | back when IO was implemented as two sticks rubbing together |
| 18:39:36 | <geekosaur> | 20 years ago they thought Num was a good idea. they tought Monad not having Functor as a superclass was a good idea |
| 18:40:05 | <monochrom> | I can't say it grew. But it is the alternative that died. |
| 18:40:10 | <k``> | Firsh it shrunk, then it grew. |
| 18:40:16 | <k``> | *first |
| 18:41:21 | <k``> | Since we have MonadComprehensions again? |
| 18:41:44 | <int-e> | EvanR: [Reply] -> [Request] is rubbing two sticks together? |
| 18:41:49 | <monochrom> | I think people don't use MonadComprehension that much either. |
| 18:42:00 | <EvanR> | yeah |
| 18:42:14 | <polyphem> | syntax got even extended some years ago , not ?, by groupings and such |
| 18:42:48 | → | xff0x joins (~xff0x@2001:1a81:5310:700:f0a4:a961:9964:1b51) |
| 18:42:55 | <int-e> | I don't even use the parallel list comprehension thing, much less the weird sql-like stuff. |
| 18:43:22 | <int-e> | and I merrily mix list comprehensions and do notation when working with list |
| 18:43:37 | × | pgib quits (~textual@173.38.117.74) (Ping timeout: 240 seconds) |
| 18:43:39 | → | waleee joins (~waleee@2001:9b0:21d:fc00:398f:b003:b90d:acf4) |
| 18:43:50 | <int-e> | (do notation looks nicer when it's several lines... oh and having the end result, you know, at the end, is a benefit too) |
| 18:44:52 | → | pgib joins (~textual@173.38.117.77) |
| 18:46:28 | <polyphem> | int-e: comprehensions have a rather declarative feel as contrasted bey do's imperative feel , not ? |
| 18:46:37 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds) |
| 18:46:49 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 18:46:52 | <polyphem> | *by* |
| 18:47:07 | <int-e> | polyphem: there is that, yeah |
| 18:47:24 | <[itchyjunk]> | I was told "imperative" language is when you tell a language what to do and so haskell is "declarative". now we have a literal "do" :D |
| 18:47:49 | × | xff0x quits (~xff0x@2001:1a81:5310:700:f0a4:a961:9964:1b51) (Ping timeout: 240 seconds) |
| 18:48:03 | <EvanR> | we also have don't |
| 18:48:05 | × | motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit) |
| 18:48:20 | <EvanR> | so that's about as anti-imperative as possible |
| 18:48:26 | → | motherfsck joins (~motherfsc@user/motherfsck) |
| 18:49:00 | → | xff0x joins (~xff0x@2001:1a81:5310:700:c5b4:7757:92cc:e34) |
| 18:49:06 | <monochrom> | Haskell is somewhat declarative but not very. |
| 18:49:19 | <polyphem> | haskell is the best imprative language thanks to do notation |
| 18:49:48 | <EvanR> | haskell should decline that award |
| 18:50:02 | <polyphem> | EvanR: hehe |
| 18:50:21 | <int-e> | Ah are we making bold declarations now? |
| 18:50:31 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 18:50:56 | <monochrom> | Declarative is when you just say "in this graph find a node that stores an odd number" and you don't even say whether it's BFS or DFS. |
| 18:51:52 | × | epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
| 18:51:53 | <EvanR> | sqrt x = the (\y -> y * y == x) |
| 18:52:00 | <monochrom> | Yeah, like that. |
| 18:52:29 | <monochrom> | To be fair, Haskell is a bit closer to that than most languages. |
| 18:52:42 | <dolio> | So you need to move to abstract stone duality. |
| 18:52:49 | <[itchyjunk]> | Oh, i thought declarative was when you say this is a graph and this has a node that stores an odd number |
| 18:52:54 | <[itchyjunk]> | Like you declare things to be so |
| 18:53:11 | <ephemient> | https://hackage.haskell.org/package/acme-dont |
| 18:53:35 | <int-e> | . o O ( PLEASE DONT MENTION INTERCAL ) |
| 18:53:56 | <polyphem> | [itchyjunk]: a list comprehension declares what the list is , wheras in de list monad yout tell how to construct the list |
| 18:54:24 | <[itchyjunk]> | hmm |
| 18:56:05 | <int-e> | polyphem: but if it were properly declaritive, the order of the items (constraints) in the list comprehension wouldn't matter... |
| 18:56:09 | <ephemient> | https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/generalised_list_comprehensions.html are not trivial to translate into list monad. not sure how often that is used though |
| 18:56:37 | <polyphem> | [itchyjunk]: the <- in the do notation feels more like an := in imperative languages, the <- in list comprehension resembles ∈ from math notation |
| 18:57:04 | × | deadmarshal quits (~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds) |
| 18:57:13 | → | vicfred joins (~vicfred@user/vicfred) |
| 18:57:23 | <[itchyjunk]> | yes the ∈ is really nice for set builder |
| 18:57:25 | <int-e> | "declaritive" is a burned term anyway... hmm. "constraint programming" exists as an umbrella term, apparently? |
| 18:57:53 | <[itchyjunk]> | Tied to a chair while programming? |
| 18:58:13 | × | nhatanh02 quits (~satori@123.24.172.30) (Ping timeout: 240 seconds) |
| 18:58:13 | <int-e> | no, that would be restrained. |
| 18:58:13 | <monochrom> | you're thinking "constrained" :) |
| 18:58:20 | <[itchyjunk]> | ah |
| 18:59:03 | <int-e> | also bad for circulation |
| 18:59:10 | <monochrom> | Pleasing a static type system can also be described as "constrained". |
| 19:01:00 | <k``> | Please a dynamic type system can be described as "constrained and blindfolded". |
| 19:02:20 | <polyphem> | int-e: order matters because they are list comprehensions wich have a notion of order instead of unorderd sets |
| 19:02:56 | <polyphem> | int-e: but you are right they are not 100% declarative |
| 19:03:43 | × | xff0x quits (~xff0x@2001:1a81:5310:700:c5b4:7757:92cc:e34) (Ping timeout: 268 seconds) |
| 19:04:03 | <polyphem> | int-e: but they feel more declarative then the "do list monad" |
| 19:04:09 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:04:23 | → | xff0x joins (~xff0x@2001:1a81:5310:700:28af:ed1a:1e0a:acc) |
| 19:08:18 | → | jgeerds joins (~jgeerds@55d4bbed.access.ecotel.net) |
| 19:13:07 | <k``> | Wait, is there any point at which do notation and monad comprehension notation aren't equivalent? |
| 19:13:41 | <dolio> | Comprehensions have a built-in notation for `guard`. |
| 19:14:18 | <geekosaur> | the fancy version of comprehensions ephemient pointed out above don't translate well |
| 19:19:23 | <monochrom> | You can and need to go up to MonadPlus to match guards in list comprehension. |
| 19:21:20 | × | dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4) |
| 19:21:45 | <glguy> | It's a shame guards aren't translated to fail, instead |
| 19:22:20 | <janus> | how can comprehensions translate stuff to guard if they don't require Alternative? |
| 19:22:32 | <monochrom> | Hrm, maybe fail and MonadFail suffices. |
| 19:23:02 | <geekosaur> | should be, the [] translation is just fail |
| 19:23:25 | <glguy> | (\m -> [x | x <- m, x]) :: (Monad m, GHC.Base.Alternative m) => m Bool -> m Bool |
| 19:23:40 | <monochrom> | But MonadComprehension chose MonadPlus, yeah. |
| 19:23:49 | <glguy> | So at least on ghc 9.0.1, they switched to Alternative |
| 19:23:54 | <monochrom> | Some kind of overkill. |
| 19:24:45 | <monochrom> | I guess I am not innocent in this, I used to tell people "use MonadPlus's guard" too, perhaps that seeded this. |
| 19:24:58 | <glguy> | janus: both do-notation and monad comprehensions only require the constraints for things you actually use in the translation |
| 19:25:15 | <glguy> | do-notation doesn't even require Monad in the trivial case |
| 19:25:26 | <glguy> | :t \m -> do m |
| 19:25:27 | <janus> | right ok. and guard can only be used with MonadComprehensions surely |
| 19:25:27 | <lambdabot> | p -> p |
| 19:25:46 | <glguy> | (\m -> [x | x <- m]) :: Monad m => m b -> m b |
| 19:25:52 | <janus> | so if i don't use that (don't think i am convinced of its utility yet), guards only appear when written |
| 19:26:08 | <mjrosenb> | ahh, monad comprehension guards, not pattern guards. I was trying to figure out how pattern guards would translate to fail. |
| 19:26:09 | <monochrom> | Right. |
| 19:26:38 | <glguy> | (\m -> [x | Just x <- m]) :: MonadFail m => m (Maybe b) -> m b |
| 19:29:11 | <glguy> | we can recover the MonadFail translation with some extra mess <_< (\m -> [x | x <- m, True <- pure x]) :: MonadFail m => m Bool -> m Bool |
| 19:29:26 | × | Flonk quits (~Flonk@vps-zap441517-1.zap-srv.com) (Quit: The Lounge - https://thelounge.chat) |
| 19:29:44 | <janus> | why does the monad comprehension users guide claim that 'guard' requires MonadPlus? https://downloads.haskell.org/ghc/8.10.7/docs/html/users_guide/glasgow_exts.html#monad-comprehensions |
| 19:29:59 | <janus> | we just saw above that Alternative is sufficeint |
| 19:30:00 | <glguy> | janus: because it used ot |
| 19:30:06 | <glguy> | to* |
| 19:30:08 | <janus> | so the docs are just outdated? |
| 19:30:25 | <glguy> | Applicative and Alternative were late additions |
| 19:31:02 | <janus> | i am a late addition :O |
| 19:32:22 | → | Flonk joins (~Flonk@vps-zap441517-1.zap-srv.com) |
| 19:32:22 | <monochrom> | You are looking at the doc for 8.10.7. |
| 19:32:44 | <monochrom> | The doc for 8.10.7 is, clearly, not outdated wrt 8.10.7 itself. |
| 19:32:52 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 19:32:52 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 19:32:52 | → | wroathe joins (~wroathe@user/wroathe) |
| 19:33:26 | <janus> | Alternative existed in 8.10's base. and even in ghc master this is the wording |
| 19:33:52 | <monochrom> | Oh oops the doc is outdated wrt the actual compiler. |
| 19:34:17 | <janus> | i dunno when exactly it could type as Alternative instead of MonadPlus or if it just looks at the signature of 'guard'. either way seems like a bug |
| 19:35:08 | → | tromp joins (~textual@dhcp-077-249-230-040.chello.nl) |
| 19:35:38 | <monochrom> | The type of guard also says Alternative. |
| 19:36:10 | <monochrom> | Oh well social constructs need social maintenance. |
| 19:36:44 | <janus> | seems like Alternative was added in base 4.4 (ghc 7.2.1, released in aug 2011) |
| 19:37:16 | <EvanR> | the coffee must be weak today because I can't figure out how the function passed to 2nd extend in the definition of extend for StoreT here takes 2 arguments... https://paste.tomsmeding.com/v6ZZeIid |
| 19:37:23 | <janus> | oh no, it is also in base 4.3 (ghc 7.0 from nov 2010) |
| 19:37:41 | <EvanR> | where the heck is s' coming from |
| 19:38:02 | <EvanR> | oh... b is a function type... |
| 19:38:03 | → | xb0o2 joins (~xb0o2@user/xb0o2) |
| 19:38:17 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 19:38:35 | <EvanR> | 🦆 |
| 19:38:55 | <int-e> | quack |
| 19:40:47 | <janus> | 'guard' was only changed to use the Alternative class in base 4.8 (ghc 7.10 from apr 2015) |
| 19:43:32 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds) |
| 19:45:21 | <janus> | ok i made an issue it is ghc issue 20928 |
| 19:46:26 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 19:49:17 | × | husixu quits (~husixu@137.132.119.2) (Remote host closed the connection) |
| 19:49:46 | × | d0ku quits (~d0ku@178.43.3.56.ipv4.supernova.orange.pl) (Ping timeout: 256 seconds) |
| 20:02:04 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 20:02:04 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 20:02:04 | → | wroathe joins (~wroathe@user/wroathe) |
| 20:04:49 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 20:05:29 | × | juhp quits (~juhp@128.106.188.82) (Ping timeout: 256 seconds) |
| 20:06:50 | → | juhp joins (~juhp@128.106.188.82) |
| 20:07:23 | × | matrox quits (~bc8147f2@cerf.good1.com) (Quit: CGI:IRC (Session timeout)) |
| 20:08:29 | → | Tuplanolla joins (~Tuplanoll@91-159-69-16.elisa-laajakaista.fi) |
| 20:08:29 | × | aforemny quits (~aforemny@static.248.158.34.188.clients.your-server.de) (Quit: ZNC 1.8.2 - https://znc.in) |
| 20:10:17 | × | shapr quits (~user@2601:7c0:c202:5190:b29e:1cbf:e21f:c653) (Ping timeout: 240 seconds) |
| 20:10:29 | → | aforemny joins (~aforemny@static.248.158.34.188.clients.your-server.de) |
| 20:10:35 | × | raym quits (~raym@user/raym) (Ping timeout: 256 seconds) |
| 20:12:24 | → | deadmarshal joins (~deadmarsh@95.38.231.124) |
| 20:13:34 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 20:13:54 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 20:13:54 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 20:13:54 | → | wroathe joins (~wroathe@user/wroathe) |
| 20:14:18 | <maerwald> | I'm trying to debug a program time execution with '+RTS -p -l-au', but the callstack depth is main -> somefunc and it stops after that |
| 20:16:49 | × | deadmarshal quits (~deadmarsh@95.38.231.124) (Ping timeout: 256 seconds) |
| 20:17:32 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 256 seconds) |
| 20:18:22 | <maerwald> | I guess excessive inlining can do that? |
| 20:18:57 | → | vysn joins (~vysn@user/vysn) |
| 20:22:17 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 240 seconds) |
| 20:25:17 | <byorgey> | anyone aware of algorithms for solving sets inequalities over a free idempotent commutative monoid? i.e. imagine you have a bunch of constraints, where each constraint is of the form U1 \subseteq U2, and the U's are arbitrary finite unions of variables and constants |
| 20:26:17 | <byorgey> | so e.g. you might have x `union` C `union` D \subseteq y `union` z `union` F and so on. And you want to find some solution for the variables, ideally some kind of 'least' solution, identifying each variable with a set of constants |
| 20:26:47 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 20:26:52 | <byorgey> | I guess I can probably work it out but just thought I'd ask in case anyone has seen anything like this before. |
| 20:31:38 | <EvanR> | was that on day twenty-x of advent of code last month |
| 20:32:51 | <monochrom> | Allow me to transform and distort your problem. |
| 20:33:33 | × | Topsi quits (~Tobias@dyndsl-095-033-093-212.ewe-ip-backbone.de) (Read error: Connection reset by peer) |
| 20:33:46 | <monochrom> | We can always reduce set theory to propositional logic, (x or C or D) implies (y or z or F). |
| 20:39:18 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 20:39:18 | × | gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer) |
| 20:39:47 | <monochrom> | Then the resolution algorithm says, if you want to find a way to satisfy that, give me the negation instead, (x or C or D) and not (y or z or F). If the negation is doomed to be false, I will find a counterexample (therefore a solution to the unnegated sentence), or die trying. |
| 20:41:54 | <monochrom> | This plot may or may not work. But we'd never know if I didn't suggest it. |
| 20:42:51 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
| 20:43:23 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 20:44:43 | × | benin quits (~benin@183.82.176.241) (Quit: The Lounge - https://thelounge.chat) |
| 20:45:12 | <byorgey> | monochrom: oh, very good suggestion, thanks! The connection to propositional logic had not yet occurred to me. |
| 20:45:16 | → | gentauro joins (~gentauro@user/gentauro) |
| 20:45:46 | → | Guest72 joins (~Guest72@82-132-214-147.dab.02.net) |
| 20:45:59 | <byorgey> | EvanR: no, this is something I think I'm going to need for implementing a certain type checker. |
| 20:47:25 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 240 seconds) |
| 20:47:55 | <byorgey> | monochrom: hmm, one problem is that just gives me T/F values for the variables, but I want values corresponding to sets of constants. e.g. one solution for this example would be x -> {}, y -> {C,D}, z -> {} |
| 20:48:08 | × | `2jt quits (~jtomas@10.red-83-58-228.dynamicip.rima-tde.net) (Ping timeout: 256 seconds) |
| 20:49:09 | <monochrom> | Yeah, in truth, predicates are involved. A set S is a predicate \v -> is v in S? |
| 20:49:36 | <monochrom> | (x(v) or C(v) or D(v)) implies (y(v) or z(v) or F(v)). |
| 20:49:59 | <monochrom> | Fortunately, resolution is about that, too, finding a value for v. |
| 20:50:31 | <EvanR> | that kind of reminds me of clicking on a screen painted with monoids and wanting to know which one you clicked on |
| 20:51:20 | <byorgey> | EvanR: https://diagrams.github.io/blog/2015-04-30-GTK-coordinates.html ? =) |
| 20:52:05 | <EvanR> | that actually exists |
| 20:52:13 | <monochrom> | onoes |
| 20:53:56 | → | cemguresci joins (~cemguresc@2001:a61:11ff:a001:9a1b:dd7d:413d:f699) |
| 20:53:57 | <byorgey> | monochrom: hmm, interesting, I have not seen resolution in the context of second-order logic before. |
| 20:54:07 | cemguresci | is now known as cemg |
| 20:59:48 | → | Erutuon joins (~Erutuon@user/erutuon) |
| 21:00:47 | <Guest72> | A haskell set is a Hask of course |
| 21:02:01 | <Guest72> | You can't ask are you undecidable |
| 21:05:41 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 21:06:18 | → | Guest|58 joins (~Guest|58@host-137-205-1-17.warwick.ac.uk) |
| 21:06:46 | × | Guest|58 quits (~Guest|58@host-137-205-1-17.warwick.ac.uk) (Client Quit) |
| 21:07:45 | × | gdd quits (~gdd@129.199.146.230) (Ping timeout: 250 seconds) |
| 21:08:10 | × | _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
| 21:11:55 | → | gdd joins (~gdd@129.199.146.230) |
| 21:13:01 | × | lechner quits (~lechner@debian/lechner) (Ping timeout: 240 seconds) |
| 21:15:20 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 21:16:03 | → | acidjnk_new joins (~acidjnk@p200300d0c7271e155922c761977fca48.dip0.t-ipconnect.de) |
| 21:16:03 | → | acidjnk joins (~acidjnk@p200300d0c7271e155922c761977fca48.dip0.t-ipconnect.de) |
| 21:16:34 | <tomsmeding> | monochrom: sounds like the problem was finding x,y,z, not v in your re-written version |
| 21:18:28 | <int-e> | Guest72: This is very off season, but would you write Huskell programs for Halloween? |
| 21:20:18 | <Guest72> | Sure |
| 21:21:00 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 256 seconds) |
| 21:25:42 | × | k`` quits (~user@152.1.137.158) (Remote host closed the connection) |
| 21:29:30 | × | yauhsien quits (~yauhsien@118-167-43-90.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
| 21:31:42 | → | lechner joins (~lechner@debian/lechner) |
| 21:34:53 | × | michalz quits (~michalz@185.246.204.126) (Remote host closed the connection) |
| 21:35:15 | → | yauhsien joins (~yauhsien@61-231-29-214.dynamic-ip.hinet.net) |
| 21:40:40 | → | random-jellyfish joins (~random-je@user/random-jellyfish) |
| 21:41:09 | Hash | is now known as PCLoadLetter |
| 21:45:03 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 21:45:03 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 21:45:03 | → | wroathe joins (~wroathe@user/wroathe) |
| 21:46:13 | × | mikoto-chan quits (~mikoto-ch@esm-84-240-99-143.netplaza.fi) (Ping timeout: 240 seconds) |
| 21:53:00 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 21:53:46 | → | ymirhotfoot joins (~ymirhotfo@user/ymirhotfoot) |
| 21:55:33 | <random-jellyfish> | can I ask questions related to the euterpea music library here? |
| 21:57:26 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:03:53 | <monochrom> | Yes but probably very few of us can answer. |
| 22:07:51 | <random-jellyfish> | ##MusicTheory is invite only for some reason |
| 22:07:58 | <random-jellyfish> | would've been a better channel |
| 22:08:24 | <glguy> | no, it's not invite only |
| 22:08:53 | <glguy> | but it is *empty* so not much better |
| 22:09:20 | <random-jellyfish> | I was automatically banned from it when I joined: × ChanServ kicked you from ##MusicTheory (You are not authorized to be on this channel) |
| 22:09:25 | × | Everything quits (~Everythin@37.115.210.35) (Quit: leaving) |
| 22:10:06 | <random-jellyfish> | anyway |
| 22:10:09 | <glguy> | ah, I guess the founders decided to close it |
| 22:10:15 | × | wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds) |
| 22:10:19 | <random-jellyfish> | [11:56:59 PM] <random-jellyfish> I have the following rhythm: qn qn den den qn en qn den den en |
| 22:10:19 | <random-jellyfish> | [11:57:32 PM] <random-jellyfish> where qn=quarter note, en=eight note, den=dotted eighth note |
| 22:10:20 | <random-jellyfish> | [11:57:42 PM] <random-jellyfish> what's the time signature for it? |
| 22:10:37 | × | Inst quits (~delicacie@c-98-208-218-119.hsd1.fl.comcast.net) (Ping timeout: 240 seconds) |
| 22:11:26 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 22:11:41 | <polyphem> | is it 11/4 ? |
| 22:12:37 | <monochrom> | Damn those prime-numbered time signatures like 5/4, 7/4, 11/4, 13/8... |
| 22:13:10 | <monochrom> | Tchaikovsky and/or Mahler had some 5/4 sheninigans... |
| 22:13:51 | <polyphem> | 16/8 or 8/4 |
| 22:14:30 | <random-jellyfish> | yeah the fractions add up to 2/1 |
| 22:14:32 | × | zincy quits (~zincy@2a00:23c8:970c:4801:8d43:554e:d62c:915d) (Remote host closed the connection) |
| 22:15:06 | <random-jellyfish> | so it's probably 16/8 or 8/4 |
| 22:15:24 | × | infinity0 quits (~infinity0@occupy.ecodis.net) (Ping timeout: 256 seconds) |
| 22:16:04 | → | infinity0 joins (~infinity0@occupy.ecodis.net) |
| 22:16:32 | <polyphem> | or 4/4 with "borrowed time" |
| 22:17:01 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 22:17:09 | <polyphem> | two bars of 4/4 |
| 22:17:42 | <hpc> | i like my time signatures with a positive weyl curvature |
| 22:18:59 | → | wyrd joins (~wyrd@gateway/tor-sasl/wyrd) |
| 22:20:43 | <random-jellyfish> | "borrowed time"? is that an actual concept in music? |
| 22:21:28 | <random-jellyfish> | you can't make a "clean" 4/4 bar with those notes in that order |
| 22:21:44 | PCLoadLetter | is now known as Hash |
| 22:22:15 | <Clint> | pick-up notes are an actual concept in music |
| 22:22:39 | <polyphem> | random-jellyfish: https://www.youtube.com/watch?v=kCQfekVrSAA |
| 22:23:54 | × | wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds) |
| 22:26:25 | <random-jellyfish> | thanks! |
| 22:26:50 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 22:28:00 | × | ymirhotfoot quits (~ymirhotfo@user/ymirhotfoot) (Quit: Client closed) |
| 22:31:02 | <EvanR> | in Data.Category you have this class called Category for types of kind * -> * -> *. Say you have some type ctor f which is a Category. Exactly what "category theory category" is this referring to |
| 22:31:49 | <EvanR> | er, Control.Category |
| 22:32:16 | <EvanR> | is f literally some category, or what |
| 22:32:25 | <dolio> | It's a category whose objects are types, and whose arrows are given by the instance. |
| 22:33:03 | → | lavaman joins (~lavaman@98.38.249.169) |
| 22:33:32 | <awpr> | IIRC it's poly-kinded, so actually the instance head is `cat :: k -> k -> Type`. then, for a given instance, the objects are the "types" of kind `k`, and the morphisms from `a :: k` to `b :: k` are the values of type `cat a b` |
| 22:34:10 | <awpr> | and the `Category` instance methods provide the identity morphisms and composition |
| 22:35:47 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 22:36:00 | → | Akiva joins (~Akiva@user/Akiva) |
| 22:36:29 | <EvanR> | oh that makes sense now |
| 22:37:01 | × | vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds) |
| 22:37:30 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
| 22:37:31 | <EvanR> | while fmap lifts a function from a to b to f a to f b, (.) does combining of morphisms directly |
| 22:38:23 | <EvanR> | and the category objects are really determined by k |
| 22:39:30 | → | wyrd joins (~wyrd@gateway/tor-sasl/wyrd) |
| 22:40:06 | <EvanR> | so f is like the arrow, and we don't have a name for the category itself |
| 22:44:58 | × | ubert1 quits (~Thunderbi@p200300ecdf0994f8385203c98e392e3c.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 22:46:31 | <Raito_Bezarius> | I'm trying to do simple i18n with Hakyll, so I tried to use Shakespeare, but I'm unsure how to understand https://hackage.haskell.org/package/shakespeare-2.0.25.1/docs/Text-Shakespeare-I18N.html#mkMessage function which seems to create instances |
| 22:46:42 | <Raito_Bezarius> | can I call it at the top level of my application to generate my instances or does it need to be scoped? |
| 22:47:04 | <Raito_Bezarius> | the Q [Dec] seems to be related to QuasiQuoter stuff, do I need to enable QuasiQuoter in my file? |
| 22:48:06 | <Raito_Bezarius> | and if someone have better suggestions to get type-based translations with a gettext-style, without getting onboard Yesod or other framework, that would be awesome :) |
| 22:50:20 | → | raoul joins (~raoul@95.179.203.88) |
| 22:55:17 | <Raito_Bezarius> | ha, it seems like it is required to put under some instance Yesod App where ... |
| 22:56:36 | × | raoul quits (~raoul@95.179.203.88) (Quit: The Lounge - https://thelounge.chat) |
| 22:57:13 | → | raoul joins (~raoul@95.179.203.88) |
| 22:57:29 | <glguy> | Raito_Bezarius: I don't know much about Hakyll, but if you're looking at Q [Dec] stuff, the search term is TemplateHaskell. QuasiQuoters are related to but not this |
| 22:57:42 | <Raito_Bezarius> | Alright, thanks glguy ! |
| 22:58:12 | × | xb0o2 quits (~xb0o2@user/xb0o2) (Quit: Client closed) |
| 22:59:21 | <glguy> | Raito_Bezarius: but if mkMessage generates instances, then it would need to be at the top-level of your module |
| 22:59:49 | <glguy> | and mkMessage does appear to generate data type declarations and instance declarations, so top-level |
| 23:00:30 | <Raito_Bezarius> | but hm whenever I do that, it seems like hls is complaining: |
| 23:00:33 | <Raito_Bezarius> | [typecheck] [E] Parse error: module header, import declaration |
| 23:00:35 | <Raito_Bezarius> | or top-level declaration expected. |
| 23:00:56 | <glguy> | Did you turn on the TemplateHaskell extension in that module? |
| 23:01:31 | <Raito_Bezarius> | indeed, that did the trick… thanks a lot glguy ! |
| 23:01:58 | <Raito_Bezarius> | that's really super neaaaat |
| 23:04:38 | <hololeap> | I'm working on a long-running program that will need to have suspend/resume functionality. I've heard that ContT allows for this, but I've also heard that it has issues and should be avoided. Thoughts? |
| 23:05:26 | <glguy> | suspend/resume like all one process or across multiple processes? |
| 23:05:30 | × | wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 276 seconds) |
| 23:06:34 | <hololeap> | just one process. it's going to have an updating work queue that should be saved so that it can resume if it stops for whatever reason |
| 23:06:35 | <jkaye> | What issues have you heard about with ContT? Interested just because I haven't heard that before |
| 23:06:41 | → | wyrd joins (~wyrd@gateway/tor-sasl/wyrd) |
| 23:06:55 | × | wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Client Quit) |
| 23:07:08 | <hololeap> | jkaye: I honestly don't remember. I've never used it and what I read was probably years ago when I didn't understand much |
| 23:07:33 | <EvanR> | you want the work queue persisted to disk and reloaded after the program reboots? |
| 23:07:49 | <hololeap> | yeah |
| 23:08:20 | <glguy> | oh, that's "multiple processes" then |
| 23:08:35 | <hololeap> | oh, I see what you meant now, glguy |
| 23:08:37 | <glguy> | ContT probably isn't related to your answer |
| 23:09:01 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds) |
| 23:09:39 | <hololeap> | ok, yeah as I think of it StateT makes sense to use. but then what _is_ ContT useful for? |
| 23:09:47 | × | coot quits (~coot@89-64-85-93.dynamic.chello.pl) (Quit: coot) |
| 23:09:52 | <glguy> | StateT isn't particularly related, either |
| 23:10:13 | <glguy> | You just need your work queue to be serializable and then save/restore it to/from disk when you need to do that |
| 23:10:27 | <glguy> | so don't save functions in it, for example |
| 23:11:08 | <EvanR> | unless you want to get fancy with higher order abstract syntax or something xD |
| 23:11:20 | <hololeap> | really? I would think that `StateT WorkQueue IO a` would make sense, where you save the queue to disk each time it updates |
| 23:11:20 | <dolio> | ContT, in particular, is just notation for using higher-order functions, so it's not going to help with serializing things to disk. |
| 23:11:37 | <glguy> | hololeap: StateT isn't doing anything there, you just happen to be using it |
| 23:11:49 | <glguy> | WorkQueue being serializable or not is what matters |
| 23:12:02 | <hololeap> | sure |
| 23:12:11 | <EvanR> | implement working Read and Show and you're golden xD |
| 23:12:42 | <EvanR> | *YMMV |
| 23:13:13 | <hololeap> | haha. I don't know if I'll ever find a use for ContT. it just never seems to fit anywhere |
| 23:14:15 | × | random-jellyfish quits (~random-je@user/random-jellyfish) (Quit: Client closed) |
| 23:14:45 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 23:15:04 | <hpc> | i almost had a use for it once, but it turns out i needed to short-circuit the start of the computation instead, and switched to some goofy StateT IO thing |
| 23:15:19 | <hpc> | someday though... |
| 23:15:32 | <hololeap> | lol so it isn't just me then |
| 23:15:46 | <hpc> | knowing it is more important than actually using it though |
| 23:16:04 | <monochrom> | Firstly it depends on your answer to "resume from what?". For example, resuming from disk is very different from resuming from memory. |
| 23:16:24 | <hpc> | you can recognize the continuations in ParsecT and such, once you know the "base case" of ContT |
| 23:16:48 | <hpc> | https://hackage.haskell.org/package/parsec-3.1.15.0/docs/src/Text.Parsec.Prim.html#ParsecT - the consumed/empty ok/err stuff |
| 23:17:08 | <hpc> | that's just a really elaborate (stuff -> m b) -> m b |
| 23:17:21 | <hpc> | foralled and etc |
| 23:17:29 | → | ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) |
| 23:17:53 | × | infinity0 quits (~infinity0@occupy.ecodis.net) (Killed (zirconium.libera.chat (Nickname regained by services))) |
| 23:18:07 | → | infinity0 joins (~infinity0@occupy.ecodis.net) |
| 23:18:37 | <hololeap> | ok, sure. I've been using and slowly grokking LogicT, which someone pointed out is `forall r. ContT r (ContT r)`, if I remember correctly |
| 23:19:20 | <hpc> | oh, another funny thing to note |
| 23:19:25 | × | CiaoSen quits (~Jura@p200300c957347b002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 23:19:29 | → | wyrd joins (~wyrd@gateway/tor-sasl/wyrd) |
| 23:19:34 | <hpc> | there's no difference between s and u, in that ParsecT definition |
| 23:19:55 | <hpc> | just that every function on it has Stream s m t in the class context |
| 23:20:38 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 23:20:41 | <jackdk> | ContT is good for taming callback pyramids |
| 23:21:05 | <hpc> | yeah, i think if i had ever messed with ghcjs i would have a dozen uses for it |
| 23:21:35 | <hpc> | webapps are callback city |
| 23:23:05 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 23:23:05 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 23:23:05 | → | wroathe joins (~wroathe@user/wroathe) |
| 23:23:12 | <hololeap> | doesn't FRP do a better job of taming callbacks, by making them unneeded? |
| 23:24:17 | <monochrom> | In the case of ParsecT and LogicT, you are looking at more Codensity. "Codensity m a" = forall r. (a -> m r) -> m r |
| 23:24:37 | × | cheater quits (~Username@user/cheater) (Ping timeout: 240 seconds) |
| 23:24:37 | <monochrom> | ContT lacks that forall over r. |
| 23:25:30 | <monochrom> | If you like to think of ContT and then slaps on "forall r", that's OK, but the extra forall makes a whole lot of difference. |
| 23:26:28 | <hpc> | heh, that's true |
| 23:26:32 | <hpc> | like comparing ST to State |
| 23:27:06 | × | tromp quits (~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 23:27:21 | <hololeap> | "Abuse of the Continuation monad can produce code that is impossible to understand and maintain." -- this is probably why I avoided it, jkaye |
| 23:27:47 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 23:27:49 | <monochrom> | The benefit of the extra forall can be explained by looking at how System F manages to provide all algebraic data types. |
| 23:28:25 | <monochrom> | Suppose my ADT is "data T = C0 | C1 Int | C2 T T". |
| 23:28:33 | <hololeap> | it's the only monad that mentions abuse in the docs |
| 23:28:55 | <glguy> | don't get too comfortable, though; you can write unmaintainable code no matter what libraries you use |
| 23:29:22 | <monochrom> | In System F, it becomes "forall r. (r, Int, (r,r)) -> r", or after currying my tuples, "forall r. r -> Int -> (r -> r -> r) -> r". |
| 23:29:35 | hays | is now known as h_ |
| 23:29:35 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 23:29:36 | <hpc> | glguy: heh, as proof i submit acme-php |
| 23:29:57 | <hpc> | zero-import horribleness |
| 23:30:22 | × | puke quits (~puke@user/puke) (Quit: puke) |
| 23:30:51 | <hololeap> | "ContT is not a functor on the category of monads, and many operations cannot be lifted through it." -- this is also one of the other thorns that scared me. it reminds me of ListT's warnings |
| 23:30:58 | → | AlexNoo_ joins (~AlexNoo@178.34.151.107) |
| 23:31:13 | → | cheater joins (~Username@user/cheater) |
| 23:31:29 | <monochrom> | If you do a similar decoding to ParsecT, you can recover the original Leijen-Meijer "4 cases: {consumed, unconsumed} x {OK, error}" ADT in the original parsec. |
| 23:31:57 | <monochrom> | If you do a similar decoding to LogicT, you can recover the ADT of "ListT done right". |
| 23:32:35 | × | Midjak quits (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep) |
| 23:32:44 | <monochrom> | So LogicT and today's ParsecT are just doing a CPS or System-F encoding of very vanilla ADTs. |
| 23:33:15 | <hololeap> | isn't that called church encoding? |
| 23:33:26 | <monochrom> | Why do they do it? The answer is efficiency, or believed efficiency. |
| 23:34:13 | <monochrom> | Because which way is more efficient is pretty sensitive to which GHC version you use. Very old GHC, probably ADTs are slower. |
| 23:34:34 | <monochrom> | Today's GHC? I don't think anyone has any actual data. I bet ADTs are not slower. |
| 23:34:35 | × | AlexZenon quits (~alzenon@178.34.162.219) (Ping timeout: 256 seconds) |
| 23:34:37 | × | Alex_test quits (~al_test@178.34.162.219) (Ping timeout: 240 seconds) |
| 23:34:44 | × | AlexNoo quits (~AlexNoo@178.34.162.219) (Ping timeout: 256 seconds) |
| 23:35:13 | <dolio> | That's not a very good bet. |
| 23:35:26 | <hpc> | also would you want strict data or lazy data? |
| 23:35:42 | <hololeap> | I've wondered why there were church-encoded versions of e.g. Free and why it would affect performance |
| 23:36:43 | <monochrom> | Oleg would say that the untyped-lambda-calculus version is Church encoding, the System-F version is Böhm-Berarducci encoding. |
| 23:37:07 | <dolio> | It's kind of like betting that (co)yoneda is no longer faster in certain use cases, because GHC somehow figures out how to fuse fmap at runtime, without inlining. |
| 23:38:11 | <jackdk> | I remember seeing a talk presented by someone who worked at Seek, saying they used to use the `data Free f a = Return a | Free (f (Free f a))`, had poor performance, and switched to the "Church Encoded" version. This would've been 2015 or so, though. |
| 23:38:46 | → | Alex_test joins (~al_test@178.34.151.107) |
| 23:38:49 | × | Tuplanolla quits (~Tuplanoll@91-159-69-16.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:38:49 | → | AlexZenon joins (~alzenon@178.34.151.107) |
| 23:40:07 | <hololeap> | if anyone can point me to something that goes into more detail on this, I'd be grateful: https://stackoverflow.com/a/9806770 |
| 23:41:04 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 23:42:03 | <hololeap> | otherwise I'll just continue reading what pops up in a search |
| 23:42:15 | → | mikoto-chan joins (~mikoto-ch@185.25.79.189) |
| 23:42:37 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 240 seconds) |
| 23:43:36 | <monochrom> | Yikes haha "aka Visitor Pattern" |
| 23:45:05 | × | ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Quit: Leaving) |
| 23:45:12 | <jackdk> | that's an interesting parallel that I'd never noticed before |
| 23:45:35 | → | ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) |
| 23:46:15 | <monochrom> | Yeah, "yikes" means "I see it's true but oh god". ("haha" means "god help us") |
| 23:46:43 | × | ensyde quits (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) (Client Quit) |
| 23:46:47 | × | cemg quits (~cemguresc@2001:a61:11ff:a001:9a1b:dd7d:413d:f699) (Quit: Leaving) |
| 23:47:00 | → | ensyde joins (~ensyde@99-185-235-117.lightspeed.chrlnc.sbcglobal.net) |
| 23:47:53 | <jackdk> | hololeap: https://slides.yowconference.com/yowlambdajam2017/Humphries-ContinuationsAllTheWayDown.pdf this shows the performance angle somewhat, but may be unintelligible if you didn't see the actual presentation (a recording of which never seemed to be published) |
| 23:48:48 | <jackdk> | but there are at least benchmarks, and if you trace the reductions of DList appends or whatever, you can see the right-association pop out. I remember going home after the talk and grabbing pen and paper to convince myself that it worked |
| 23:52:51 | <dolio> | Encoding the data type isn't always better, of course. They're bad for repeatedly peeling off just the outermost layer. |
| 23:53:18 | <dolio> | Unless you get really elaborate with the encodings. |
| 23:53:50 | × | little_mac quits (~little_ma@2601:410:4300:3ce0:5835:5767:1aa7:b5ec) (Quit: Leaving) |
| 23:54:11 | <hololeap> | jackdk: the syntax trees are neat, I think I might get something out of those slides |
| 23:54:26 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 23:54:34 | <dolio> | Point being, you need to know what you're optimizing for. |
| 23:57:37 | × | Erutuon quits (~Erutuon@user/erutuon) (Ping timeout: 240 seconds) |
| 23:59:56 | → | n3rdy1 joins (~n3rdy1@2600:1700:4570:3480::41) |
All times are in UTC on 2022-01-10.