Home liberachat/#haskell: Logs Calendar

Logs on 2022-10-09 (liberachat/#haskell)

00:01:01 × chomwitt quits (~chomwitt@athedsl-351954.home.otenet.gr) (Ping timeout: 260 seconds)
00:06:24 × lagash quits (lagash@lagash.shelltalk.net) (Ping timeout: 264 seconds)
00:08:53 king_gs joins (~Thunderbi@187.201.131.180)
00:21:19 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 268 seconds)
00:25:21 lagash joins (lagash@lagash.shelltalk.net)
00:28:54 gmg joins (~user@user/gehmehgeh)
00:34:20 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
00:35:26 gmg joins (~user@user/gehmehgeh)
00:39:14 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
00:39:16 × king_gs quits (~Thunderbi@187.201.131.180) (Quit: king_gs)
00:39:31 rockystone joins (~rocky@user/rockymarine)
00:39:34 king_gs joins (~Thunderbi@187.201.131.180)
00:40:00 gmg joins (~user@user/gehmehgeh)
00:48:19 × vorpuni quits (~pvorp@2001:861:3881:c690:67f7:ad96:2b5b:1073) (Remote host closed the connection)
00:53:09 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
00:53:52 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
01:06:22 Neosake[m] joins (~neosakema@2001:470:69fc:105::2:989e)
01:07:31 × king_gs quits (~Thunderbi@187.201.131.180) (Ping timeout: 260 seconds)
01:10:27 drsooch[m] joins (~drsoochma@2001:470:69fc:105::1:c8a1)
01:12:18 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
01:14:21 × wroathe quits (~wroathe@user/wroathe) (Quit: Lost terminal)
01:16:27 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 252 seconds)
01:22:16 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
01:23:36 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
01:23:36 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
01:23:36 wroathe joins (~wroathe@user/wroathe)
01:26:34 king_gs joins (~Thunderbi@2806:103e:29:c5:4fb1:a8c9:906f:c6e0)
01:29:31 rosalind joins (rosalind@id-194105.uxbridge.irccloud.com)
01:30:35 burnsidesLlama joins (~burnsides@client-8-86.eduroam.oxuni.org.uk)
01:37:25 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.5)
01:37:30 × wroathe quits (~wroathe@user/wroathe) (Quit: Lost terminal)
01:40:41 ubert1 joins (~Thunderbi@178.165.205.208.wireless.dyn.drei.com)
01:41:58 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
01:42:31 × ubert quits (~Thunderbi@178.165.197.164.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
01:42:32 ubert1 is now known as ubert
01:42:35 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
01:42:35 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
01:42:35 wroathe joins (~wroathe@user/wroathe)
01:45:25 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
01:45:34 rosalind is now known as lovebug
01:47:29 × beteigeuze quits (~Thunderbi@2001:8a0:61b5:6101:f0c:e4e3:bfdc:91df) (Ping timeout: 250 seconds)
01:52:44 olivermead[m] joins (~olivermea@2001:470:69fc:105::2:4289)
01:52:44 jinsun is now known as Guest1502
01:52:44 jinsun__ joins (~jinsun@user/jinsun)
01:52:44 × Guest1502 quits (~jinsun@user/jinsun) (Killed (tantalum.libera.chat (Nickname regained by services)))
01:52:44 jinsun__ is now known as jinsun
01:52:45 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 252 seconds)
01:52:48 × jinsun quits (~jinsun@user/jinsun) (Read error: Connection reset by peer)
01:54:05 × kilolympus quits (~kilolympu@213.144.144.24) (Read error: Connection reset by peer)
01:57:52 jinsun joins (~jinsun@user/jinsun)
01:58:30 nate1 joins (~nate@98.45.169.16)
02:00:12 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
02:01:50 × ubert quits (~Thunderbi@178.165.205.208.wireless.dyn.drei.com) (Ping timeout: 268 seconds)
02:01:51 ubert1 joins (~Thunderbi@178.115.74.207.wireless.dyn.drei.com)
02:02:29 johnjaye joins (~pi@173.209.64.74)
02:02:59 <johnjaye> does haskell let functions take a variable number of arguments?
02:03:21 × wroathe quits (~wroathe@user/wroathe) (Quit: Lost terminal)
02:03:24 rockystone joins (~rocky@user/rockymarine)
02:04:09 ubert1 is now known as ubert
02:07:50 <EvanR> functions in haskell take exactly 1 argument, no more no less. But you can add nuance to the question to get other answers
02:08:45 <johnjaye> ok. i see the syntax for functions is simply the name followed by the arguments
02:08:46 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
02:08:46 <EvanR> for example in the definition of a function you can mention more than 1 parameter, these will be automatically curried for you
02:08:47 jinsun is now known as Guest8869
02:08:47 jinsun__ joins (~jinsun@user/jinsun)
02:08:47 × Guest8869 quits (~jinsun@user/jinsun) (Killed (copper.libera.chat (Nickname regained by services)))
02:08:48 jinsun__ is now known as jinsun
02:08:59 <johnjaye> so you can have expressions like f x + g x y z + h w u
02:09:06 <johnjaye> oh ok
02:09:21 <EvanR> in g x y z the grouping looks like ((g x) y) z
02:09:23 <johnjaye> the lack of ( and ) is very strange.
02:09:57 <EvanR> to the parser
02:10:02 <johnjaye> i assume there's *some* reason every imperative language i've ever seen uses f() and not this way
02:10:21 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 252 seconds)
02:10:47 <EvanR> while imperative languages have multi-argument functions, they don't have convenient currying
02:10:58 <johnjaye> meaning, how does the parser know how to parse it without them
02:11:08 <EvanR> for example g x y z is valid, but also g x y and g x are valid. Which can be convenient
02:11:37 <EvanR> g x y z can be parsed just like 2 + 3 + 4 + 5, because of associativity rules
02:11:38 <king_gs> geekosaur: Unless you give AI's capacity to compete with humans for scarce resources. That won't happen.
02:11:39 × jinsun quits (~jinsun@user/jinsun) (Read error: Connection reset by peer)
02:11:49 rockystone joins (~rocky@user/rockymarine)
02:12:00 <johnjaye> i guess y better not be it's own function and variable at once, or g x y z could be ambiguous
02:12:02 <EvanR> + takes 2 arguments, but 2 + 3 + 4 + 5 can still be parsed without parens
02:12:04 jinsun joins (~jinsun@user/jinsun)
02:12:13 <EvanR> y can be a function
02:12:28 <EvanR> remember it's the same as typing ((g x) y) z
02:12:38 <EvanR> y doesn't get any arguments there
02:12:48 <johnjaye> hmm.
02:13:11 <EvanR> if you wanted to call y in the process of calling g you could do
02:13:14 <johnjaye> so how do you write something complex like f(x,g(h,k)).
02:13:16 <EvanR> g x (y 9) z
02:13:19 <johnjaye> i guess that is f x g h k
02:13:33 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
02:13:35 <johnjaye> oh weird. ok
02:13:38 <EvanR> f x (g h x)
02:13:43 <EvanR> oops
02:13:44 <johnjaye> that looks vaguely lispish
02:13:50 <EvanR> yeah it does at first
02:14:03 <johnjaye> but the parens are strictly syntactic here?
02:14:07 <johnjaye> just for grouping?
02:14:09 <EvanR> but in Haskell, x, (x), ((x)), (((x))) are all the same
02:14:15 <EvanR> it's just for grouping
02:14:36 <EvanR> and we like to remove parens if they aren't necessary
02:14:46 <johnjaye> bizarrely the interpreter does in fact accept ((2+2)) as valid.
02:14:49 <johnjaye> ok then
02:15:13 <johnjaye> i get a bit suspicious when a language suddenly does something incredible like that with no explanation
02:15:25 <johnjaye> it raises the obvious reply, why aren't other language doing that
02:15:44 <EvanR> other languages have been stealing stuff from haskell, actually
02:15:58 <EvanR> but parentheses isn't really groundbreaking
02:16:10 vaibhavsagar[m] joins (~vaibhavsa@2001:470:69fc:105::ffe)
02:16:12 <johnjaye> so it's this implicit currying idea that's doing the work?
02:16:29 <EvanR> look at the type of drop
02:16:32 <EvanR> :t drop
02:16:33 <lambdabot> Int -> [a] -> [a]
02:16:35 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 252 seconds)
02:16:42 <EvanR> the currying is evident in the type here
02:16:50 <EvanR> instead of drop :: (Int, [a]) -> [a]
02:17:17 <EvanR> note the lack of parentheses in the type, this time it associates the other direction
02:17:24 <EvanR> drop :: Int -> ([a] -> [a])
02:17:31 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 260 seconds)
02:17:33 <Neosake[m]> Plus it is funny that people say "Programming" is not mathematical either. Funny enough, it is just a very thick level of abstraction between the two.
02:17:35 <EvanR> drop is a function of 1 argument which returns a function (of 1 argument)
02:17:54 <EvanR> you'll see this a lot if you look at the types, which you should
02:18:49 edrx joins (~Eduardo@2804:56c:d2d3:4800:cf7d:b421:4c3a:392e)
02:18:58 <Neosake[m]> Plus most of this haskell stuff I do not know. I am an absolute rookie. xD
02:19:31 <johnjaye> Neosake[m]: ironically math is often seen as 'not programming' either. when i was looking for books on category theory the first thing i asked is how to do computations about them
02:19:52 frost joins (~frost@user/frost)
02:19:55 <edrx> @cabal-install
02:19:55 <lambdabot> Unknown command, try @list
02:20:00 <edrx> oops
02:20:33 <johnjaye> EvanR: i do look at the types but I'm not that familiar with haskell yet.
02:20:38 rockystone joins (~rocky@user/rockymarine)
02:20:59 <johnjaye> so the idea is that drop "really" takes the one argument. but gets automatically curried to take 2
02:21:23 <EvanR> if you pass it 2, it still works
02:21:44 <EvanR> because it's like doing (drop 3) [1,2,3,4]
02:22:03 <Neosake[m]> johnjaye: Which is honestly crazy because Computer's were essentially math wizards in the day. Now it is just an extension of the mathematical conventions.
02:22:07 <EvanR> but also drop 3 is a useful function in itself
02:22:11 <johnjaye> prelude says no instance for (Show ([a0] -> [a0]))
02:22:24 <EvanR> yeah you can't show functions normally
02:22:32 <probie> That doesn't meant it's not a valid function, just that it's not a printable value
02:22:48 nate1 joins (~nate@98.45.169.16)
02:22:54 <edrx> people, what are your favorite links about cabal-install? I'm updating this page - http://angg.twu.net/eev-haskell.html ...
02:23:06 <johnjaye> ah. prelude does accept (drop 3) [1,2,3,4,5]
02:23:06 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
02:23:07 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
02:23:07 wroathe joins (~wroathe@user/wroathe)
02:23:24 <Neosake[m]> Also, any fellow NixOS users?
02:23:39 <johnjaye> Neosake[m]: i'm an aspiring nixos user. but somehow i never find the time to actually do it.
02:23:42 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
02:23:49 <johnjaye> i'm afraid it will choke if i try it on actual hardware
02:24:10 <Neosake[m]> Interesting, I've had nothing but good experiences on live hardware
02:25:28 <probie> You can also use `drop 3`, anywhere a function of type `[a] -> [a]` can go without needing to do something like `\x -> drop 3 x`
02:25:33 jakalx joins (~jakalx@base.jakalx.net)
02:25:34 <probie> > map (drop 3) [[1..5], [6..10], [10..15]]
02:25:36 <lambdabot> [[4,5],[9,10],[13,14,15]]
02:25:42 <EvanR> johnjaye, in haskell you can get a lot out of "things that don't change the meaning of this code"
02:25:58 <EvanR> which I guess you can call "laws"
02:26:31 <EvanR> redundant parentheses is a simple example
02:26:34 <Neosake[m]> I will be back in a bit. Gonna go back to reading the wikibooks
02:26:38 <johnjaye> well. i'm not advanced enough to grasp why you would need to write \x -> drop 3 x
02:26:45 <johnjaye> from lisp i can see what the intention is though
02:26:59 <EvanR> sometimes an `x' can be introduced to make something clearer
02:27:05 <EvanR> drop 3 is already pretty clear though
02:27:18 <EvanR> other times, removing the x can make it very unclear
02:27:22 <johnjaye> yes. but only after you explained it.
02:27:23 <EvanR> we have a command for that
02:27:23 <johnjaye> heh
02:27:31 <EvanR> @pl \x -> drop 3 x
02:27:31 <lambdabot> drop 3
02:28:08 <EvanR> @pl \x -> 9 + x * 2
02:28:09 <lambdabot> (9 +) . (2 *)
02:28:27 <EvanR> well, I can't come up with a really bad one
02:28:36 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds)
02:28:49 <johnjaye> haskell does feel very mathematical i'll grant that though.
02:29:06 <johnjaye> in the sense of, packing large abstractions into a single character 'x' or 'f'
02:29:29 <johnjaye> like how the entire theory of the reimann integral is encoded into what is essentially an elongated S
02:29:38 <EvanR> haskell is cool for have... lets say... actual abstractions, like they actually work
02:29:42 <EvanR> and it's not just a vague analogy
02:29:47 <EvanR> having*
02:30:12 <johnjaye> yeah. i feel like once i get to know the syntax a bit better it would be like that
02:30:38 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
02:31:15 <johnjaye> thanks for the explanation
02:31:22 <EvanR> np
02:33:01 <probie> @pl \x y -> (2*x) == (x-y)
02:33:01 <lambdabot> ap ((.) . (==) . (2 *)) (-)
02:33:49 <EvanR> that's a good example of why you'd write ap ((.) . (==) . (2 *)) (-) as \x y -> 2*x == x-y
02:34:10 × burnsidesLlama quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Ping timeout: 265 seconds)
02:35:03 <EvanR> composition chains are cool, but two of the things in that chain are notionally "binary operators" xD
02:35:08 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
02:35:10 <EvanR> making my brain hurt
02:35:37 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
02:35:37 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
02:37:15 <edrx> EvanR: I'm using these kinds of diagrams to understand the types of subexpressions - http://angg.twu.net/HASKELL/Applicative1.hs.html - and they're helping me a lot...
02:37:59 <EvanR> whoa
02:38:36 <edrx> =)
02:43:00 × terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
02:44:20 terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1)
02:44:58 lovebug is now known as rosalind
02:45:04 <johnjaye> echo -sh http://angg.twu.net/HASKELL/Applicative1.hs.html > /tmp/a
02:46:20 <edrx> what is /tmp/a?
02:46:39 <johnjaye> shortest filename i can think of. weechat is being stubborn and won't let me save the link properly
02:46:39 <edrx> btw, the non-htmlized version is here: http://angg.twu.net/HASKELL/Applicative1.hs
02:46:52 <edrx> ok
02:47:16 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 260 seconds)
02:47:26 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
02:47:47 <johnjaye> ah i had params switched. now i have it.
02:48:41 <ski> johnjaye : "but gets automatically curried to take 2" -- currying only exists in your head, not in Haskell
02:48:52 <ski> "things that don't change the meaning of this code" -- refactorings
02:49:41 <johnjaye> i see
02:50:26 <ski> currying is one way to represent/encode "multiple parameter functions", (e.g.) in a context which only has "single parameter functions" (like Haskell)
02:51:16 <ski> "tupling" is another way to do that. packing the "multiple parameters" into a single aggregate/compound. e.g. a tuple, but could be a record/`struct', or even a list, or finite map, or set or bag or ..
02:51:39 <ski> Haskell does not "have currying"
02:52:24 <EvanR> let f x y = [x,x,y] in ..., looks like a multiple parameter function, so in a way they are supported, or avoided by currying on your behalf
02:52:24 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
02:52:45 <ski> what Haskell does have, is a syntax (including precedence and fixity) which is specially designed to make it fairly syntactically easy/painless to encode functions curriedly
02:54:06 <EvanR> :t uncurry
02:54:07 <lambdabot> (a -> b -> c) -> (a, b) -> c
02:54:20 <ski> but `f x y = ...' is basically the same as `(define f (lambda (x) (lambda (y) ...)))' in Scheme (although Scheme *does* have a primitive notion of "multiple parameter (also result ..) procedures" .. but you can still use currying, as well as tupling, in Scheme too)
02:54:37 <ski> @type curry
02:54:38 <lambdabot> ((a, b) -> c) -> a -> b -> c
02:54:56 <EvanR> funny I've never used curry xD
02:55:22 <ski> it's interesting to note that `curry' can be thought of as a three-parameter function (accepting one callback function, and two additional parameters, that it tuples when calling the callback), which is expressed curriedly
02:55:54 jmorris joins (uid537181@id-537181.uxbridge.irccloud.com)
02:56:10 <ski> but it can also be thought of as a two-parameter function (accepting one callback function, and one parameter, returning the callback partially applied to that parameter)
02:56:30 <ski> in this latter form, `curry' can be thought of as `partiallyApply'
02:57:43 <johnjaye> i like how haskell just directly defines init/last in mirror of head/tail
02:58:08 <ski> however, i consider both `\y -> f (x0,y)' and `\x -> f (x,y0)' as partial applications of the tupled function `f'. just like both `g x0 = \y -> g x0 y' and `\x -> g x y0' are partial applications of the curried function `g'
02:58:47 <ski> EvanR : i occasionally use `curry' as an infix operator ..
02:59:21 <ski> map (foo `curry` x0) ys
02:59:45 rockystone joins (~rocky@user/rockymarine)
03:00:13 razetime joins (~quassel@117.193.2.178)
03:00:45 <EvanR> > foldl1 (\a x -> x) [1,2,3,4,99]
03:00:47 <lambdabot> 99
03:00:53 <ski> (similarly to how i also can use `flip' in infix position)
03:01:02 × td_ quits (~td@94.134.91.128) (Ping timeout: 268 seconds)
03:01:27 × jero98772 quits (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) (Remote host closed the connection)
03:01:51 <EvanR> johnjaye, I just tried to lookup init and last, seems they have a more optimized form than @src https://hackage.haskell.org/package/base-4.17.0.0/docs/src/GHC.List.html#init
03:02:19 td_ joins (~td@94.134.91.56)
03:02:22 <EvanR> hah, last actually uses foldl
03:02:41 <EvanR> foldl gets no respect
03:02:59 <ski> edrx : fwiw, instead of `fmap0',`fmap1',`fmap2',`fmap3', i'd probably say `liftA0',`liftA1',`liftA2',`liftA3' (or even `liftM0',`liftM1',`liftM2',`liftM3' .. this was from before `Applicative' was a thing, though)
03:04:28 <ski> edrx : but yes, multiary Lispy `map' (`mapcar') is basically this, for the case of (parallel/lockstep) lists
03:04:46 <edrx> ski: thanks! let me see... I think that I followed the terminology from Hutton's book in some places and the terminology from the Prelude in other places...
03:05:10 <ski> > getZipList (liftA2 (+) (ZipList [2,3]) (ZipList [400,500,600]))
03:05:13 <lambdabot> [402,503]
03:05:21 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 268 seconds)
03:06:46 <ski> edrx : anyway, with a little practice, you'll be making these typing diagrams in your head :)
03:07:29 <edrx> ski: =)
03:09:01 × wroathe quits (~wroathe@user/wroathe) (Quit: Lost terminal)
03:12:22 <ski> @type uncurry curry
03:12:24 <lambdabot> ((a, b) -> c, a) -> b -> c
03:13:17 <c_wraith> that function looks like a prank gone wrong
03:13:52 <ski> @type uncurry3 curry
03:13:54 <lambdabot> ((a, b) -> t4, a, b) -> t4
03:14:09 <ski> heh :)
03:14:56 nate1 joins (~nate@98.45.169.16)
03:17:29 <EvanR> (a,b) -> c,a
03:17:37 <EvanR> uncromulent
03:18:14 <EvanR> (but is actually right in agda)
03:18:23 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
03:18:23 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
03:18:23 wroathe joins (~wroathe@user/wroathe)
03:18:24 [_] joins (~itchyjunk@user/itchyjunk/x-7353470)
03:21:03 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 265 seconds)
03:21:51 ski wishes GHC would elide the spaces after the commas, there ..
03:25:24 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 265 seconds)
03:25:43 rockystone joins (~rocky@user/rockymarine)
03:26:22 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
03:31:01 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 260 seconds)
03:35:08 × zmt00 quits (~zmt00@user/zmt00) (Read error: Connection reset by peer)
03:35:14 nate1 joins (~nate@98.45.169.16)
03:37:45 zmt00 joins (~zmt00@user/zmt00)
03:39:39 dtman34 joins (~dtman34@c-75-73-141-79.hsd1.mn.comcast.net)
03:41:07 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 268 seconds)
03:44:13 × king_gs quits (~Thunderbi@2806:103e:29:c5:4fb1:a8c9:906f:c6e0) (Ping timeout: 246 seconds)
03:50:09 nate1 joins (~nate@98.45.169.16)
03:51:36 × razetime quits (~quassel@117.193.2.178) (Ping timeout: 268 seconds)
03:56:48 × Topsi quits (~Topsi@dyndsl-095-033-089-091.ewe-ip-backbone.de) (Read error: Connection reset by peer)
04:00:11 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
04:01:39 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 265 seconds)
04:02:12 rosalind is now known as lys
04:05:23 Lemniscate is now known as Sauvin
04:07:54 × Franciman quits (~Franciman@mx1.fracta.dev) (Read error: Connection reset by peer)
04:08:50 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
04:09:14 king_gs joins (~Thunderbi@187.201.131.180)
04:09:31 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 260 seconds)
04:13:36 × king_gs quits (~Thunderbi@187.201.131.180) (Ping timeout: 260 seconds)
04:14:10 <dolio> In Agda a,b is a single identifier.
04:18:08 Franciman joins (~Franciman@mx1.fracta.dev)
04:19:57 coot joins (~coot@213.134.171.3)
04:20:10 <probie> Off-topic, but I'd always assumed it'd be incromulent instead of uncromulent, since "lent" feels like the ending for a Latin derived word
04:22:46 rockystone joins (~rocky@user/rockymarine)
04:24:32 × wroathe quits (~wroathe@user/wroathe) (Quit: Lost terminal)
04:26:45 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 252 seconds)
04:30:19 <edrx> where is the module System.Process defined?
04:31:16 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
04:31:16 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
04:31:16 wroathe joins (~wroathe@user/wroathe)
04:31:39 <edrx> I guess that in some preprocessed file, but my grepping tools don't work on them yet... =(
04:32:29 <probie> Do you mean https://github.com/haskell/process/blob/master/System/Process.hs ?
04:34:35 <edrx> probie: oops, yes - thanks, I just found what I need to fix...
04:37:44 razetime joins (~quassel@117.193.2.178)
04:40:28 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
04:45:09 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 265 seconds)
04:45:27 <VarikValefor[m]> Testing...
04:46:00 king_gs joins (~Thunderbi@187.201.131.180)
04:46:55 × xff0x quits (~xff0x@ai071162.d.east.v6connect.net) (Ping timeout: 252 seconds)
04:47:18 xff0x joins (~xff0x@ai071162.d.east.v6connect.net)
04:48:00 <EvanR> pong
04:48:10 lys is now known as rosalind
04:48:43 <edrx> pung
04:49:05 × [_] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
04:50:28 × king_gs quits (~Thunderbi@187.201.131.180) (Ping timeout: 265 seconds)
04:54:48 mbuf joins (~Shakthi@49.204.141.204)
04:55:19 × incertia quits (~incertia@d47-69-133-171.try.wideopenwest.com) (Quit: ZNC 1.7.5 - https://znc.in)
05:00:19 × Luj quits (~Luj@2a01:e0a:5f9:9681:43e9:ccab:b409:cf4f) (Quit: Ping timeout (120 seconds))
05:00:24 <edrx> hey, I tried this program - https://lotz84.github.io/haskellbyexample/ex/spawning-processes - and it does compile and run, but I need to give it a ^D...
05:00:32 <edrx> how do I make it end by itself?
05:00:36 Luj joins (~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb)
05:02:19 <probie> maybe `hClose hin`?
05:02:29 <EvanR> I blocked on grep hello
05:03:05 <edrx> let me see
05:03:45 <EvanR> note hGetContents is a big weird in that it returns list generated by "lazy I/O" (scare quotes)
05:03:49 <EvanR> bit*
05:06:37 <edrx> where should I put the hClose hin? I tried this - https://0x0.st/otAd.txt - and got the same bahavior...
05:10:02 <edrx> hmm, it seems that withCreateProcess does the expected clean-ups...
05:10:50 <EvanR> which part does it hang on
05:11:25 <EvanR> if it's reading stdin, then it's waiting for end of file, i.e. control D
05:12:20 <edrx> look: https://i.ibb.co/r3QfQZ2/sshot.png
05:13:40 <EvanR> yeah I hang on grep hello
05:13:53 <EvanR> seems like your grep command just isn't right
05:14:07 <probie> after `hPutStr` (for grep)
05:14:15 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
05:14:38 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds)
05:14:46 <probie> No input is being sent to grep (it's waiting for a flush, either directly, or from a close), so there's nothing to print
05:14:59 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
05:15:29 <probie> s/No input/Only "hello grep"/
05:15:53 <edrx> probie: trying
05:16:41 <edrx> probie: perfect! thanks! =)
05:17:07 <EvanR> just grepping into the wind xD
05:19:55 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 252 seconds)
05:22:28 rockystone joins (~rocky@user/rockymarine)
05:25:41 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
05:30:16 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
05:32:01 × raym quits (~aritra@user/raym) (Ping timeout: 252 seconds)
05:33:03 raym joins (~aritra@user/raym)
05:34:05 <edrx> http://angg.twu.net/HASKELL/Tac1.hs.html
05:34:48 <edrx> that's my first non-trivial program with IO, btw =) =) =)
05:35:23 <EvanR> oh now I get it, hin is the output xD
05:35:42 <EvanR> yeah must be closed on this end to finish the process
05:36:17 <EvanR> what's in and what's out gets confusing when doing subprocess
05:48:41 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 260 seconds)
05:53:17 × arahael quits (~arahael@203.217.43.212) (Ping timeout: 252 seconds)
05:55:52 nate1 joins (~nate@98.45.169.16)
06:00:37 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 252 seconds)
06:06:39 arahael joins (~arahael@61.68.183.79)
06:12:06 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
06:17:51 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 252 seconds)
06:17:53 rosalind is now known as lys
06:20:42 <edrx> EvanR: hin is the handle or the stdin of the process
06:21:12 <edrx> or did you mean that I should close its stdout too?
06:22:19 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
06:22:25 chomwitt joins (~chomwitt@2a02:587:dc0c:c200:442:40c1:9d7f:23d1)
06:29:33 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 265 seconds)
06:30:43 nate1 joins (~nate@98.45.169.16)
06:35:22 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 246 seconds)
06:39:43 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
06:40:44 <edrx> time to crash!
06:40:47 <edrx> gnight all =)
06:40:50 edrx parts (~Eduardo@2804:56c:d2d3:4800:cf7d:b421:4c3a:392e) (Killed buffer)
06:44:05 rockystone joins (~rocky@user/rockymarine)
06:44:46 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
06:45:41 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
06:45:41 × jmorris quits (uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
06:47:25 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
06:51:41 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 260 seconds)
07:05:48 acidjnk joins (~acidjnk@p200300d6e7137a48695c1121120f860b.dip0.t-ipconnect.de)
07:09:43 takuan joins (~takuan@178-116-218-225.access.telenet.be)
07:14:59 × raym quits (~aritra@user/raym) (Ping timeout: 265 seconds)
07:16:23 Tuplanolla joins (~Tuplanoll@91-159-69-34.elisa-laajakaista.fi)
07:16:32 raym joins (~aritra@user/raym)
07:19:25 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50e1:7448:ac98:298f) (Remote host closed the connection)
07:21:16 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 268 seconds)
07:31:08 × raym quits (~aritra@user/raym) (Ping timeout: 268 seconds)
07:31:24 raym joins (~aritra@user/raym)
07:34:19 × razetime quits (~quassel@117.193.2.178) (Ping timeout: 265 seconds)
07:38:01 × ksu quits (~ksu@user/prtr) (Ping timeout: 246 seconds)
07:38:14 rockystone joins (~rocky@user/rockymarine)
07:40:03 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
07:40:37 ksu joins (~ksu@user/prtr)
07:41:30 aidy joins (~aidy@2001:470:69fc:105::c7b4)
07:43:41 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 250 seconds)
07:44:42 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
07:49:01 Lycurgus joins (~juan@user/Lycurgus)
07:59:34 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt juan@acm.org)
08:00:13 nate1 joins (~nate@98.45.169.16)
08:04:55 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 252 seconds)
08:07:00 × sudden quits (~cat@user/sudden) (Ping timeout: 264 seconds)
08:09:12 × Franciman quits (~Franciman@mx1.fracta.dev) (Read error: Connection reset by peer)
08:11:55 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
08:13:08 wootehfoot joins (~wootehfoo@user/wootehfoot)
08:16:48 bendo joins (~bendo@fire-ara4.tngtech.com)
08:18:27 Franciman joins (~Franciman@mx1.fracta.dev)
08:19:56 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50e1:7448:ac98:298f)
08:23:26 sudden joins (~cat@user/sudden)
08:24:35 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50e1:7448:ac98:298f) (Ping timeout: 248 seconds)
08:26:47 × Vajb quits (~Vajb@85-76-75-28-nat.elisa-mobile.fi) (Read error: Connection reset by peer)
08:27:28 Vajb joins (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
08:33:20 × Vajb quits (~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
08:34:51 burnsidesLlama joins (~burnsides@client-8-86.eduroam.oxuni.org.uk)
08:34:59 Vajb joins (~Vajb@2001:999:504:1841:9e47:1ec7:a52e:1d57)
08:37:55 razetime joins (~quassel@117.193.2.178)
08:44:24 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 265 seconds)
08:44:37 zxx7529 joins (~Thunderbi@user/zxx7529)
08:49:31 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:53:54 zaquest joins (~notzaques@5.130.79.72)
08:55:23 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
08:59:33 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 252 seconds)
09:03:16 × zxx7529 quits (~Thunderbi@user/zxx7529) (Quit: zxx7529)
09:17:17 × razetime quits (~quassel@117.193.2.178) (Remote host closed the connection)
09:22:13 jakalx parts (~jakalx@base.jakalx.net) ()
09:24:11 jakalx joins (~jakalx@base.jakalx.net)
09:27:17 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
09:29:59 kdaishi joins (~Thunderbi@94.191.136.219.mobile.tre.se)
09:30:26 Midjak joins (~Midjak@82.66.147.146)
09:30:50 ardell joins (~ardell@user/ardell)
09:31:49 × bendo quits (~bendo@fire-ara4.tngtech.com) (Ping timeout: 252 seconds)
09:31:56 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
09:32:43 titibandit joins (~titibandi@xdsl-89-0-65-2.nc.de)
09:41:05 vorpuni joins (~pvorp@2001:861:3881:c690:6d4:662c:a06a:ef29)
09:47:51 × mbuf quits (~Shakthi@49.204.141.204) (Quit: Leaving)
09:51:04 × kdaishi quits (~Thunderbi@94.191.136.219.mobile.tre.se) (Ping timeout: 268 seconds)
09:51:05 × ksu quits (~ksu@user/prtr) (Ping timeout: 250 seconds)
09:51:52 ksu joins (~ksu@user/prtr)
09:52:06 kenran joins (~user@user/kenran)
09:58:53 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
09:58:54 causal joins (~user@50.35.83.177)
09:59:48 × chomwitt quits (~chomwitt@2a02:587:dc0c:c200:442:40c1:9d7f:23d1) (Ping timeout: 264 seconds)
10:05:14 jakalx parts (~jakalx@base.jakalx.net) ()
10:06:06 jakalx joins (~jakalx@base.jakalx.net)
10:12:10 nate1 joins (~nate@98.45.169.16)
10:14:14 × Franciman quits (~Franciman@mx1.fracta.dev) (Read error: Connection reset by peer)
10:16:04 kdaishi joins (~Thunderbi@94.191.137.35.mobile.tre.se)
10:17:01 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds)
10:18:28 Franciman joins (~Franciman@mx1.fracta.dev)
10:19:05 __monty__ joins (~toonn@user/toonn)
10:20:35 × freeside quits (~mengwong@bb115-66-48-84.singnet.com.sg) (Ping timeout: 252 seconds)
10:21:22 freeside joins (~mengwong@103.252.202.193)
10:24:02 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
10:27:53 × kenran quits (~user@user/kenran) (Remote host closed the connection)
10:30:26 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 260 seconds)
10:31:17 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
10:39:01 chomwitt joins (~chomwitt@2a02:587:dc0c:c200:9b5d:e3:b4f7:170c)
10:40:04 × titibandit quits (~titibandi@xdsl-89-0-65-2.nc.de) (Quit: Leaving.)
10:41:33 bendo joins (~bendo@fire-ara4.tngtech.com)
10:41:51 <dminuoso> Is there some sneaky way to drop the s phantom of ST? It would be so much more convenient, and Ill promise not to leak state. :)
10:47:26 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
10:49:37 gmg joins (~user@user/gehmehgeh)
10:51:45 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 252 seconds)
10:53:32 ec joins (~ec@gateway/tor-sasl/ec)
10:58:06 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 258 seconds)
11:00:43 titibandit joins (~titibandi@xdsl-89-0-65-2.nc.de)
11:01:56 <jackdk> `unsafePerformIO`? But seriously, shouldn't it only become inconvenient if you're trying to break out?
11:03:31 SoF1 is now known as SoF
11:03:46 × burnsidesLlama quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Remote host closed the connection)
11:04:26 lys is now known as rosalind
11:08:20 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Read error: Connection reset by peer)
11:14:58 vysn joins (~vysn@user/vysn)
11:16:07 Topsi joins (~Topsi@dyndsl-095-033-089-091.ewe-ip-backbone.de)
11:25:08 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
11:34:51 lortabac joins (~lortabac@2a01:e0a:541:b8f0:b9a1:d183:7268:d81)
11:35:34 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:b9a1:d183:7268:d81) (Client Quit)
11:36:54 burnsidesLlama joins (~burnsides@client-8-86.eduroam.oxuni.org.uk)
11:40:55 odnes joins (~odnes@5-203-193-32.pat.nym.cosmote.net)
11:40:56 × eL_Bart0 quits (eL_Bart0@dietunichtguten.org) (Read error: Connection reset by peer)
11:45:24 eL_Bart0 joins (eL_Bart0@dietunichtguten.org)
11:45:33 rosalind is now known as lovebug
11:46:18 odnes_ joins (~odnes@5-203-193-32.pat.nym.cosmote.net)
11:46:20 × vysn quits (~vysn@user/vysn) (Quit: WeeChat 3.5)
11:46:30 × odnes quits (~odnes@5-203-193-32.pat.nym.cosmote.net) (Read error: Connection reset by peer)
11:48:18 × eL_Bart0 quits (eL_Bart0@dietunichtguten.org) (Client Quit)
11:51:17 eL_Bart0 joins (eL_Bart0@dietunichtguten.org)
11:55:34 <ski> @type Control.Monad.ST.Unsafe.unsafeIOToST . Control.Monad.ST.Unsafe.unsafeSTToIO
11:55:35 <lambdabot> ST s1 a -> ST s2 a
12:03:51 × titibandit quits (~titibandi@xdsl-89-0-65-2.nc.de) (Quit: Leaving.)
12:04:21 × bendo quits (~bendo@fire-ara4.tngtech.com) (Ping timeout: 268 seconds)
12:04:44 <freeside> a ... "restatement"?
12:05:04 lovebug is now known as lys
12:05:06 × Franciman quits (~Franciman@mx1.fracta.dev) (Read error: Connection reset by peer)
12:11:40 × acidjnk quits (~acidjnk@p200300d6e7137a48695c1121120f860b.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
12:12:43 × tomboy64 quits (~tomboy64@user/tomboy64) (Remote host closed the connection)
12:16:46 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
12:17:09 × odnes_ quits (~odnes@5-203-193-32.pat.nym.cosmote.net) (Quit: Leaving)
12:17:59 tomboy64 joins (~tomboy64@user/tomboy64)
12:18:14 <olivermead[m]> <freeside> "a ... "restatement"?" <- love it
12:18:24 Franciman joins (~Franciman@mx1.fracta.dev)
12:20:22 ec joins (~ec@gateway/tor-sasl/ec)
12:21:25 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 265 seconds)
12:23:31 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50e1:7448:ac98:298f)
12:24:53 Guest52 joins (~Guest52@83-85-226-100.cable.dynamic.v4.ziggo.nl)
12:27:48 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 258 seconds)
12:27:57 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50e1:7448:ac98:298f) (Ping timeout: 250 seconds)
12:28:54 cafce25 joins (~cafce25@2001:a62:153a:a201:93a3:e4fa:f7e1:f6e2)
12:31:19 ec joins (~ec@gateway/tor-sasl/ec)
12:36:09 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
12:37:46 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 258 seconds)
12:38:08 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
12:43:55 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
12:45:04 × burnsidesLlama quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Remote host closed the connection)
12:45:11 × jonathanx__ quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 260 seconds)
12:54:30 ski states the obvious
13:02:28 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
13:03:12 sagax joins (~sagax_nb@user/sagax)
13:07:13 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
13:10:16 × kdaishi quits (~Thunderbi@94.191.137.35.mobile.tre.se) (Ping timeout: 260 seconds)
13:10:43 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.6)
13:19:24 <Guest52> Hey, can someone give me some advice on this? https://paste.tomsmeding.com/4H0x5ECN. Im struggling to write an instance of Show for a polymorphic data type
13:19:40 <Guest52> What i currenty have implemented is a place holder
13:21:47 <geekosaur> that doesn't look polymorphic to me, just recursive
13:21:48 × ardell quits (~ardell@user/ardell) (Quit: Leaving)
13:22:00 bendo joins (~bendo@fire-ara4.tngtech.com)
13:22:07 burnsidesLlama joins (~burnsides@client-8-86.eduroam.oxuni.org.uk)
13:22:17 <hpc> what's the issue?
13:22:17 <Guest52> My intuition is to write out a string reprensation of my data type (e.g. "Cons 20 (Cons 11...") that keeps concatenating to the result of the recursion
13:22:57 <Guest52> My issue is that I dont know how to get the string representation of the polymorphic value
13:23:30 <hpc> you know from how it's being used in that definition, that x :: a
13:23:39 <hpc> what other things do you know about the type 'a' in that context?
13:24:44 <hpc> when it just has type 'a' with no other context, the only thing you can do with x is (id x)
13:24:59 <hpc> but maybe there's something else available that can turn a value into a string for you already?
13:26:01 <Guest52> show ?
13:26:32 <Guest52> show :: a -> String
13:27:32 <hpc> :t show
13:27:33 <lambdabot> Show a => a -> String
13:27:46 × burnsidesLlama quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Ping timeout: 260 seconds)
13:28:02 lys is now known as rosalind
13:28:16 <hpc> it needs a (Show a) instance, but you've already said in your (Stream a) instance to require it
13:28:24 <hpc> so yep, you can just (show x) there
13:28:36 <Guest52> right so assuming type a has an instance of show, then it will work? But I dont think i can reference show in its own definition?
13:29:12 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
13:29:29 <geekosaur> why not?
13:29:35 <Guest52> "but you've already said in your (Stream a) instance to require it" ahhh this makes sense.. i just copied that without really looking at it
13:29:59 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
13:30:12 × frost quits (~frost@user/frost) (Ping timeout: 252 seconds)
13:30:12 <Guest52> because wont it try to call the show function that im currently defining?
13:30:29 <hpc> it'll call the show that's defined for that 'a' type
13:30:30 <geekosaur> (a) it's on a different type (b) even on the same type, as long as you have a base case for recursion to end on, it's fine
13:30:32 <Guest52> which will fail because it expects a (Stream a)
13:30:40 <hpc> > show 5
13:30:41 <lambdabot> "5"
13:30:44 <hpc> > show (Just 5)
13:30:46 <lambdabot> "Just 5"
13:30:56 <hpc> @src Maybe
13:30:56 <lambdabot> data Maybe a = Nothing | Just a
13:31:38 <geekosaur> % :set -ddump-deriv
13:31:38 <yahb2> <interactive>:1:1: error: Not in scope: ‘Yahb2Defs.limitedPrint’
13:31:46 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
13:31:59 <geekosaur> % data MyMaybe a = MyNothing | MyJust a deriving Show
13:32:00 <yahb2> ==================== Derived instances ==================== ; Derived class instances: ; instance GHC.Show.Show a => GHC.Show.Show (Ghci1.MyMaybe a) where ; GHC.Show.showsPrec _ Ghci1.MyNothi...
13:32:01 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
13:32:06 <geekosaur> bah
13:32:14 <hpc> it's derived now anyway
13:32:16 <geekosaur> anyway try that in ghci
13:32:20 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
13:32:38 <geekosaur> and you'll see that it uses Show on 'a'
13:33:05 <geekosaur> % :q
13:33:05 <yahb2> <no output>
13:36:06 <Guest52> ok thanks everyone
13:38:07 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
13:40:50 × raoul quits (~raoul@95.179.203.88) (Quit: Ping timeout (120 seconds))
13:41:03 <ski> Guest52 : fwiw, that's parametric, not polymorphic
13:41:16 × nonzen quits (~nonzen@user/nonzen) (Quit: Gone)
13:41:30 nonzen joins (~nonzen@user/nonzen)
13:41:52 × energizer quits (~energizer@user/energizer) (Quit: ZNC 1.7.0+deb0+xenial1 - https://znc.in)
13:42:04 <ski> Guest52 : any particular reason you don't keep the initial seed `x' in the stream, in `streamFromSeed' ?
13:42:12 <ski> Guest52 : also .. please don't use `Show' like that
13:42:15 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 252 seconds)
13:43:29 raoul joins (~raoul@95.179.203.88)
13:44:24 <Guest52> ski nope thats a bug... it should be Cons x...
13:44:28 <ski> Guest52 : at the very least, you should not be defining `show', but rather `showsPrec'. making use of `showParen',`showsPrec' in the body
13:44:37 <ski> Guest52, ah :)
13:44:49 <ski> (in that case, you don't need the `where')
13:45:39 <ski> btw, an alternative design is to use `(s -> (a,s)) -> (s -> Stream a)' (or maybe `(s -> a) -> (s -> s) -> (s -> Stream a)')
13:45:46 <ski> @type unfoldr
13:45:48 <lambdabot> (b -> Maybe (a, b)) -> b -> [a]
13:46:23 <ski> (that version basically does `streamFromSeed' and `streamMap', in one)
13:46:41 <Guest52> thanks! in regards to Show... your saying if your writing an instance of show; you shoud define showsPrec instead of shows ?
13:46:59 <Guest52> because its more specific ?
13:47:18 <ski> well, in most cases, people should be defining `showsPrec' rather than `show'
13:47:21 energizer joins (~energizer@user/energizer)
13:48:05 <Guest52> gotcha ... will stick with show for the sake of this hw assignment but noted for real business use cases
13:49:00 <ski> (a) `show' is inefficient, when you're composing your `Show' instance as part of another one, since you'll be appending to the `String'; and (b) `show' doesn't handle precedences, which you want to do, for composability with other `Show' instances
13:49:38 × Kaiepi quits (~Kaiepi@142.68.249.28) (Quit: Leaving)
13:50:18 <ski> e.g. if i call `show' on `Just nats', it'll give a string starting with the characters `Just Cons 0' .. note the lack of a wrapping pair of brackets around the `Cons 0 ...' part
13:50:34 <ski> this is because you're not calling `showParen' as you're supposed to
13:51:00 <olivermead[m]> isn't general advice to always derive Show and Read rather than define since they need to be exact inverse operations? obviously correct me if I'm wrong
13:51:17 <ski> showsPrec p (Cons x xs) = showParen (p > 10) $ showString "Cons " . showsPrec 11 . showChar ' ' . showsPrec 11 xs
13:51:47 <ski> is how you'd fix the precedence stuff (while ignoring your desire to give a finite `String' in this case)
13:53:03 <ski> olivermead[m] : *usually*, yes. however, in some particular cases, it may be warranted to hand-write them. one important reason is that you're doing an Abstract Data Type, and you want to present your value in terms of your exported interface of operations, rather than in terms of internal representation format, which might change
13:53:48 <olivermead[m]> ski: awesome thank you
13:53:53 <ski> > listArray ((0,0),(2,3)) [m ^ n | (m,n) <- range ((0,0),(2,3))]
13:53:56 <lambdabot> array ((0,0),(2,3)) [((0,0),1),((0,1),0),((0,2),0),((0,3),0),((1,0),1),((1,1...
13:54:11 <ski> note that this responds in terms of `array', which is not a data constructor
13:54:23 <ski> `Data.Map' and `Data.Set' does the same kind of thing
13:55:10 <ski> olivermead[m] : another reason could be if one wanted to avoid redundant brackets, when doing infix data constructors .. unfortunately, the derived `Show' ignores fixity (while honoring precedence)
13:55:50 <hpc> > foldr (+) 0 [x, y, z] -- for example
13:55:52 <lambdabot> x + (y + (z + 0))
13:55:54 <hpc> > foldl (+) 0 [x, y, z] -- for example
13:55:56 <lambdabot> 0 + x + y + z
13:56:33 <olivermead[m]> so in the listArray case above, is `read` the inverse operation still?
13:57:04 <ski> > (read . show) (listArray ((0,0),(2,3)) [m ^ n | (m,n) <- range ((0,0),(2,3))]) :: Array (Int,Int) Int
13:57:06 <lambdabot> array ((0,0),(2,3)) [((0,0),1),((0,1),0),((0,2),0),((0,3),0),((1,0),1),((1,1...
13:57:30 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 258 seconds)
13:57:31 <olivermead[m]> interesting, thank you
13:58:26 <ski> (it wouldn't be too hard to have the derived `Show' honor fixity as well, afaiui .. it just doesn't, for whatever reason)
14:00:37 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
14:00:53 <ski> Guest52 : in your case, presumably you'd want to elide some tail of the stream (perhaps replacing it by `...'), while still keeping brackets matched (which a naïve `(++) . take 20 . ($ "")' thrown into the composition won't do, even ignoring tokens being cut in half). you could do this, if you define a separate function which keeps track of the depth in a parameter
14:03:01 <ski> Guest52 : however, because the result (cut off, possibly with `...') would be an invalid `String' representation of a Haskell value (syntax error if you paste it into the interactor, or a source file), i'd prefer to not adding this cut-off functionality into `Show' at all. you could define a separate `pp' (pretty-print) function which does what you want. or you could simply define a `takeStream :: Int ->
14:03:07 <ski> Stream a -> [a]' ..
14:03:49 <geekosaur> there might be other reasons to avoid it, though
14:03:53 × Topsi quits (~Topsi@dyndsl-095-033-089-091.ewe-ip-backbone.de) (Ping timeout: 252 seconds)
14:04:02 <geekosaur> such as preference not to force the head of a Stream
14:05:04 <ski> hm ?
14:05:23 <geekosaur> I'm thinking large or complicated expressions for `a`
14:05:41 <ski> not force the head, where ? in `showsPrec' ?
14:06:03 <geekosaur> if you intend to process them one at a time, `show`ing more than one element is probably not wise
14:06:48 <ski> well, `Show' here is probably just for debugging/testing anyway, no ?
14:07:01 <geekosaur> yes, one would hope
14:07:14 × cafce25 quits (~cafce25@2001:a62:153a:a201:93a3:e4fa:f7e1:f6e2) (Ping timeout: 252 seconds)
14:09:46 <ski> question : is `unfoldStream' in some sense a "normal form" for `Stream's ?
14:11:49 <ski> we have e.g.
14:11:59 <ski> streamMap f (unfoldStream g s) = unfoldStream (first f . g) s
14:12:05 <ski> alt.
14:12:27 <ski> streamMap f (unfoldStream' g h s) = unfoldStream' (f . g) h s
14:13:29 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
14:13:44 nate1 joins (~nate@98.45.169.16)
14:14:27 ski . o O ( `data Stream :: * -> * where UnfoldStream :: (s -> (a,s)) -> s -> Stream a' )
14:17:18 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
14:18:43 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 248 seconds)
14:19:10 bendo parts (~bendo@fire-ara4.tngtech.com) ()
14:20:11 ec joins (~ec@gateway/tor-sasl/ec)
14:26:21 a6a45081-2b83 joins (~aditya@2601:249:4300:1296:88ec:cc73:84d4:1507)
14:26:39 Kaiepi joins (~Kaiepi@142.68.249.28)
14:28:08 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
14:32:22 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Remote host closed the connection)
14:32:38 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
14:36:18 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
14:36:42 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
14:37:22 × Franciman quits (~Franciman@mx1.fracta.dev) (Read error: Connection reset by peer)
14:37:36 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
14:38:44 raehik1 joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
14:40:55 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 252 seconds)
14:44:37 dextaa joins (~dextaa@user/dextaa)
14:44:51 × jmdaemon quits (~jmdaemon@user/jmdaemon) (Ping timeout: 248 seconds)
14:45:48 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
14:50:49 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
14:51:46 FinnElija joins (~finn_elij@user/finn-elija/x-0085643)
14:54:41 Franciman joins (~Franciman@mx1.fracta.dev)
14:57:14 finsternis joins (~X@23.226.237.192)
15:02:00 nate1 joins (~nate@98.45.169.16)
15:02:51 thyriaen joins (~thyriaen@2a01:aea0:dd4:463c:6245:cbff:fe9f:48b1)
15:05:00 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
15:05:47 × phma quits (~phma@2001:5b0:211f:4578:e340:1f30:e6ab:a541) (Read error: Connection reset by peer)
15:06:28 phma joins (~phma@host-67-44-208-36.hnremote.net)
15:06:41 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.6)
15:08:41 × dextaa quits (~dextaa@user/dextaa) (Ping timeout: 260 seconds)
15:09:12 acidjnk joins (~acidjnk@p54ad5adb.dip0.t-ipconnect.de)
15:09:34 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 258 seconds)
15:12:07 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
15:12:07 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
15:12:07 wroathe joins (~wroathe@user/wroathe)
15:14:08 × rosalind quits (rosalind@id-194105.uxbridge.irccloud.com) (Quit: bbl <3)
15:16:02 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
15:16:06 × a6a45081-2b83 quits (~aditya@2601:249:4300:1296:88ec:cc73:84d4:1507) (Remote host closed the connection)
15:16:37 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50e1:7448:ac98:298f)
15:20:02 c209e6dc-4d76-47 joins (~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
15:22:14 × Guest52 quits (~Guest52@83-85-226-100.cable.dynamic.v4.ziggo.nl) (Quit: Client closed)
15:22:59 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 258 seconds)
15:23:10 × c209e6dc-4d76-47 quits (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Client Quit)
15:24:31 c209e6dc-4d76-47 joins (~aditya@c-73-103-92-95.hsd1.in.comcast.net)
15:27:39 rockystone joins (~rocky@user/rockymarine)
15:27:56 Lycurgus joins (~juan@user/Lycurgus)
15:30:36 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
15:35:32 × c209e6dc-4d76-47 quits (~aditya@c-73-103-92-95.hsd1.in.comcast.net) (Quit: Konversation terminated!)
15:36:39 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 252 seconds)
15:36:48 titibandit joins (~titibandi@xdsl-89-0-65-2.nc.de)
15:38:44 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
15:39:41 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
15:43:07 mvk joins (~mvk@2607:fea8:5ce3:8500::a80f)
15:43:27 beteigeuze joins (~Thunderbi@2001:8a0:61b5:6101:f0c:e4e3:bfdc:91df)
15:44:25 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
15:45:00 king_gs joins (~Thunderbi@2806:103e:29:c5:4fb1:a8c9:906f:c6e0)
15:45:03 × king_gs quits (~Thunderbi@2806:103e:29:c5:4fb1:a8c9:906f:c6e0) (Client Quit)
15:47:40 econo joins (uid147250@user/econo)
15:49:27 kenran joins (~user@user/kenran)
15:53:59 Alecui joins (~user@2a02:a58:8682:d600:c147:7976:693f:ec2f)
15:55:56 Alecui parts (~user@2a02:a58:8682:d600:c147:7976:693f:ec2f) (ERC 5.4.1 (IRC client for GNU Emacs 29.0.50))
15:56:01 × mvk quits (~mvk@2607:fea8:5ce3:8500::a80f) (Quit: Going elsewhere)
15:56:11 burnsidesLlama joins (~burnsides@client-8-86.eduroam.oxuni.org.uk)
15:57:56 mvk joins (~mvk@2607:fea8:5ce3:8500::a80f)
16:00:36 × burnsidesLlama quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Ping timeout: 260 seconds)
16:04:41 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 260 seconds)
16:05:18 × Lycurgus quits (~juan@user/Lycurgus) (Quit: Exeunt juan@acm.org)
16:05:31 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
16:05:53 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
16:05:55 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 248 seconds)
16:06:39 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds)
16:09:05 × titibandit quits (~titibandi@xdsl-89-0-65-2.nc.de) (Remote host closed the connection)
16:10:21 × kenran quits (~user@user/kenran) (Remote host closed the connection)
16:10:47 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
16:13:08 L29Ah joins (~L29Ah@wikipedia/L29Ah)
16:18:07 rockystone joins (~rocky@user/rockymarine)
16:24:10 c209e6dc-4d76-47 joins (~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
16:25:38 burnsidesLlama joins (~burnsides@client-8-86.eduroam.oxuni.org.uk)
16:26:06 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:28:47 × burnsidesLlama quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Remote host closed the connection)
16:30:33 burnsidesLlama joins (~burnsides@client-8-86.eduroam.oxuni.org.uk)
16:32:09 cafce25 joins (~cafce25@2001:a62:153a:a201:4317:4122:7383:8e29)
16:34:47 × cafce25 quits (~cafce25@2001:a62:153a:a201:4317:4122:7383:8e29) (Client Quit)
16:34:57 cafce25 joins (~cafce25@2001:a62:153a:a201:4317:4122:7383:8e29)
16:36:01 × burnsidesLlama quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Remote host closed the connection)
16:44:02 jbggs[m] joins (~jbggsmatr@2001:470:69fc:105::2:995f)
16:48:11 × c209e6dc-4d76-47 quits (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!)
16:50:37 kdaishi joins (~Thunderbi@94.191.152.150.mobile.tre.se)
16:55:57 zzz is now known as zZz
16:56:35 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
16:56:36 zZz is now known as zzZ
16:57:23 zzZ is now known as Zzz
16:58:07 Zzz is now known as zzz
16:59:55 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
17:00:46 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
17:02:43 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 265 seconds)
17:06:16 ph88 joins (~ph88@2a02:8109:9e00:71d0:6e37:2605:3bb:94a8)
17:08:03 loosh[m] joins (~looshchat@2001:470:69fc:105::2:5ddd)
17:08:30 cytokine_storm joins (~user@user/cytokine-storm/x-1083107)
17:17:11 × cytokine_storm quits (~user@user/cytokine-storm/x-1083107) (Read error: Connection reset by peer)
17:22:30 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
17:27:55 ddellacosta joins (~ddellacos@89.45.224.218)
17:28:46 Sgeo joins (~Sgeo@user/sgeo)
17:44:20 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
17:48:47 yvan-sraka joins (~yvan-srak@2a02:2788:224:71c:21e9:cca6:df3c:a2)
17:49:05 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
18:04:13 michalz joins (~michalz@185.246.207.215)
18:05:05 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
18:06:55 × adanwan quits (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
18:07:49 adanwan joins (~adanwan@gateway/tor-sasl/adanwan)
18:09:26 Oiyqlk joins (~rscastilh@191-214-26-24.user.veloxzone.com.br)
18:09:33 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 252 seconds)
18:18:36 × machinedgod quits (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 265 seconds)
18:24:48 × natechan quits (~nate@98.45.169.16) (Ping timeout: 268 seconds)
18:25:40 jakalx parts (~jakalx@base.jakalx.net) ()
18:26:27 justsomeguy joins (~justsomeg@user/justsomeguy)
18:28:12 jakalx joins (~jakalx@base.jakalx.net)
18:29:10 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
18:30:08 waleee joins (~waleee@h-176-10-137-138.NA.cust.bahnhof.se)
18:30:59 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
18:30:59 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
18:30:59 wroathe joins (~wroathe@user/wroathe)
18:33:41 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 250 seconds)
18:34:01 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 260 seconds)
18:34:36 dextaa joins (~dextaa@p4fdc769f.dip0.t-ipconnect.de)
18:37:41 wootehfoot joins (~wootehfoo@user/wootehfoot)
18:37:50 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50e1:7448:ac98:298f) (Remote host closed the connection)
18:39:21 CeNiEi[m] joins (~cenieimat@2001:470:69fc:105::1:894c)
18:40:14 rockystone joins (~rocky@user/rockymarine)
18:44:18 Topsi joins (~Topsi@dyndsl-095-033-089-091.ewe-ip-backbone.de)
18:47:31 × kdaishi quits (~Thunderbi@94.191.152.150.mobile.tre.se) (Ping timeout: 248 seconds)
18:48:01 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 260 seconds)
18:48:01 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 260 seconds)
18:48:34 × dextaa quits (~dextaa@p4fdc769f.dip0.t-ipconnect.de) (Changing host)
18:48:34 dextaa joins (~dextaa@user/dextaa)
18:49:29 rockystone joins (~rocky@user/rockymarine)
18:53:29 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50e1:7448:ac98:298f)
18:54:30 titibandit joins (~titibandi@xdsl-89-0-65-2.nc.de)
18:57:24 burnsidesLlama joins (~burnsides@client-8-77.eduroam.oxuni.org.uk)
19:02:06 × burnsidesLlama quits (~burnsides@client-8-77.eduroam.oxuni.org.uk) (Ping timeout: 265 seconds)
19:05:31 <janus> i never actually used the Writer/WriterT monad
19:05:50 <janus> but now i have a writer effect that is backed by IO
19:06:16 <EvanR> like, IO () monoid
19:06:26 <EvanR> (>>)
19:06:59 <janus> the write method is queueing a write operation on a uring queue
19:07:15 <janus> my issue is that the Writer monad seems to have all sorts of methods i don't really need
19:07:48 <EvanR> it's also lazy as hell
19:08:07 <janus> i thought it would just be 'tell'
19:08:35 <janus> so what do people usally do when abstracting out IO? do you just make a custom type class for this?
19:09:08 <EvanR> if you actually want to have a method that just does this queueing IO, you can pass the action in with ReaderT and execute it with IO
19:09:38 <janus> right, ok
19:09:38 burnsidesLlama joins (~burnsides@client-8-77.eduroam.oxuni.org.uk)
19:09:53 gmg joins (~user@user/gehmehgeh)
19:10:00 <EvanR> or if you have a bunch of custom actions to be backed by some monad, pass in a record of actions, the record is parameterized by m
19:10:12 <EvanR> accessed by ReaderT
19:10:31 <janus> but that sounds like a typeclass, except you dispatch the dictionary manually
19:10:37 <janus> but i guess there is nothing wrong with that
19:11:45 <EvanR> there's a fundamental difference between using record of implementation and type classes, and I probably can't formulate that difference properly xD
19:12:07 <EvanR> kmett video Typeclasses vs The World
19:13:22 × burnsidesLlama quits (~burnsides@client-8-77.eduroam.oxuni.org.uk) (Remote host closed the connection)
19:14:01 <EvanR> circling back to Writer and WriterT, you should do a deep dive on the laziness characteristics when you get a chance between it might surprise you for the context you were trying to use it in
19:14:11 <EvanR> s/between/because/
19:15:15 pavonia joins (~user@user/siracusa)
19:16:46 <janus> it shouldn't matter because the pure implementation would only be used for small tests
19:17:11 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds)
19:17:21 <EvanR> there's a non pure implementation of Writer?
19:17:49 <janus> i am not using Writer yet, because i currently only have the IO backed write operation
19:18:16 <janus> so i have no abstraction yet, i am trying to invent the abstraction that would fit :P
19:18:26 <janus> or rather, discover the prior art
19:19:23 justsomeguy joins (~justsomeg@user/justsomeguy)
19:20:48 × mvk quits (~mvk@2607:fea8:5ce3:8500::a80f) (Ping timeout: 264 seconds)
19:21:39 <EvanR> abstracting out your IO seems to be complicated by the fact that all these libraries come with existing answers to that, not always the same answer xD
19:25:01 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
19:28:01 natechan joins (~nate@98.45.169.16)
19:28:15 mvk joins (~mvk@2607:fea8:5ce3:8500::a80f)
19:29:26 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 260 seconds)
19:49:54 × coot quits (~coot@213.134.171.3) (Quit: coot)
19:50:41 c209e6dc-4d76-47 joins (~aditya@2601:249:4300:1296:195:dac6:592c:a55a)
19:51:22 × c209e6dc-4d76-47 quits (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Client Quit)
19:51:48 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 268 seconds)
19:54:07 rockystone joins (~rocky@user/rockymarine)
19:55:12 burnsidesLlama joins (~burnsides@client-8-86.eduroam.oxuni.org.uk)
19:57:46 × titibandit quits (~titibandi@xdsl-89-0-65-2.nc.de) (Remote host closed the connection)
19:59:33 × burnsidesLlama quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Ping timeout: 252 seconds)
20:01:12 nate1 joins (~nate@98.45.169.16)
20:01:38 × m1dnight quits (~christoph@78-22-0-121.access.telenet.be) (Quit: WeeChat 3.6)
20:02:02 m1dnight joins (~christoph@78-22-0-121.access.telenet.be)
20:06:23 × nate1 quits (~nate@98.45.169.16) (Ping timeout: 265 seconds)
20:06:45 <dminuoso> Control.Monad.Trans.Writer.CPS is a thing,m though.
20:07:13 <dminuoso> But I find IORef/STRef to be better tools for a lot of applications.
20:07:32 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
20:07:49 LukeHoersten joins (~LukeHoers@user/lukehoersten)
20:08:31 × stiell_ quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
20:09:14 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:50e1:7448:ac98:298f) (Remote host closed the connection)
20:09:41 × dextaa quits (~dextaa@user/dextaa) (Ping timeout: 260 seconds)
20:11:58 stiell_ joins (~stiell@gateway/tor-sasl/stiell)
20:12:11 × natechan quits (~nate@98.45.169.16) (Ping timeout: 265 seconds)
20:12:25 <EvanR> I equip my Control.Monad.Trans.Writer.CPS with an IORef/STRef so I can log during my algorithm. By cons onto a long list then reversing at the end xD
20:12:46 jakalx joins (~jakalx@base.jakalx.net)
20:12:55 <EvanR> HASK LIFE
20:13:01 <dminuoso> How do you do that?
20:13:19 <dminuoso> Oh hold on, you assume an IO inside
20:13:49 <dminuoso> Honestly I just use ReaderT, because that frees me from MonadBaseControl and gives me MonadUnliftIO.
20:14:08 <dminuoso> All that Writer can give you, you can do with that too but its less restricting.
20:14:59 burnsidesLlama joins (~burnsides@client-8-86.eduroam.oxuni.org.uk)
20:18:08 × LukeHoersten quits (~LukeHoers@user/lukehoersten) (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:23:29 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Remote host closed the connection)
20:23:51 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 268 seconds)
20:26:38 ss4 joins (~wootehfoo@user/wootehfoot)
20:28:26 king_gs joins (~Thunderbi@2806:103e:29:c5:4fb1:a8c9:906f:c6e0)
20:29:09 × king_gs quits (~Thunderbi@2806:103e:29:c5:4fb1:a8c9:906f:c6e0) (Client Quit)
20:29:35 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Ping timeout: 265 seconds)
20:33:00 Luj3 joins (~Luj@78.194.168.230)
20:34:38 gurkenglas joins (~gurkengla@p548ac72e.dip0.t-ipconnect.de)
20:36:24 × Luj quits (~Luj@2a01:e0a:5f9:9681:5880:c9ff:fe9f:3dfb) (Ping timeout: 264 seconds)
20:37:21 × ss4 quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
20:38:11 Luj34 joins (~Luj@2a01:e0a:5f9:9681:2071:e834:e16a:b87d)
20:39:54 × Luj3 quits (~Luj@78.194.168.230) (Ping timeout: 268 seconds)
20:39:54 Luj34 is now known as Luj3
20:41:36 × Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
20:44:15 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
20:44:15 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
20:44:15 wroathe joins (~wroathe@user/wroathe)
20:44:56 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.6)
20:48:23 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
20:49:54 LukeHoersten joins (~LukeHoers@user/lukehoersten)
20:50:09 × biberu quits (~biberu@user/biberu) (Read error: Connection reset by peer)
20:54:16 <raehik1> I have `data A = A Void`. Why isn't `consumeA :: A -> ()`, `consumeA a = case a of {}` exhaustive?
20:54:33 biberu joins (~biberu@user/biberu)
20:55:06 <raehik1> I swear there was a paper on an AST design pattern that did relied on this sort of pattern. Perhaps they just ignored all the falsy non-exhausitivity compiler messages
20:55:46 <EvanR> that's not all the cases
20:56:00 <EvanR> try instead data A = A !Void
20:56:08 <dminuoso> newtype?
20:56:10 <EvanR> or newtype
20:56:33 <dminuoso> But yeah, there's two ways to construct something of type A here.
20:56:39 <dminuoso> `A undefined` and `undefined`
20:56:48 × TonyStone quits (~TonyStone@cpe-74-76-51-197.nycap.res.rr.com) (Quit: Leaving)
20:56:54 <EvanR> e.g. as it stands consumeA (A undefined) could return () if you fixed the code
20:57:34 <dminuoso> My memory is a bit hazy, but making the field strict is still not the same though.,
20:57:35 <raehik1> dminuoso: ohhh, yeah. So if type A was a sum type, is this possible to make work? Could I ignore constructors that have a Void in them?
20:57:49 <dminuoso> raehik1: You can just do a nested case-of as well.
20:58:00 <dminuoso> case a of A i -> case i of {}
20:58:34 <raehik1> EvanR: oh! this works!
20:58:55 <EvanR> yes... there might still be a loophole involving A !Void
20:58:58 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
20:59:01 × yvan-sraka quits (~yvan-srak@2a02:2788:224:71c:21e9:cca6:df3c:a2) (Remote host closed the connection)
20:59:12 <dminuoso> There's a bunch of semantic differences
20:59:18 <raehik1> And my GHC 9.2 is happy with A !Void too
20:59:21 <EvanR> call the haskell librarian
20:59:38 <raehik1> *oops, I mean with the nested case too
20:59:51 <dminuoso> Bah I cannot recall whoever recommended flatparse to me, but that thing is my favourite parser library fo the year.
20:59:54 <raehik1> I was thinking of the trees that grow paper
21:00:04 <raehik1> dminuoso: that was me the other day :))
21:00:39 <dminuoso> Ive started writing a flatpack library that similarly constructs fixed bytestrings.
21:00:56 <dminuoso> mason is just too big and doesnt have a few features I want (like resetting position)
21:01:20 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
21:01:54 rockystone joins (~rocky@user/rockymarine)
21:03:54 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
21:04:00 <EvanR> Stackpak - Flatpak a Haskell Stack App into Flathub
21:06:16 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 260 seconds)
21:08:36 machinedgod joins (~machinedg@d198-53-218-113.abhsia.telus.net)
21:09:44 eggplantade joins (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
21:11:09 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 265 seconds)
21:11:51 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Quit: ChaiTRex)
21:13:43 lambdap237 joins (~lambdap@static.167.190.119.168.clients.your-server.de)
21:14:19 ChaiTRex joins (~ChaiTRex@user/chaitrex)
21:14:26 × eggplantade quits (~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
21:14:55 × lambdap237 quits (~lambdap@static.167.190.119.168.clients.your-server.de) (Client Quit)
21:15:49 lambdap237 joins (~lambdap@static.167.190.119.168.clients.your-server.de)
21:16:05 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
21:18:01 ec joins (~ec@gateway/tor-sasl/ec)
21:19:09 son0p joins (~ff@181.136.122.143)
21:22:56 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 258 seconds)
21:27:04 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
21:28:44 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
21:29:33 × michalz quits (~michalz@185.246.207.215) (Remote host closed the connection)
21:34:07 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
21:35:57 rockystone joins (~rocky@user/rockymarine)
21:36:52 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:39:17 wroathe joins (~wroathe@50.205.197.50)
21:39:17 × wroathe quits (~wroathe@50.205.197.50) (Changing host)
21:39:17 wroathe joins (~wroathe@user/wroathe)
21:40:01 × acidjnk quits (~acidjnk@p54ad5adb.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
21:40:36 coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
21:40:45 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 252 seconds)
21:42:38 × coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Client Quit)
21:45:07 <jackdk> Axman6: this flatparse lib looks very up your alley
21:49:14 ec joins (~ec@gateway/tor-sasl/ec)
21:55:05 × burnsidesLlama quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Remote host closed the connection)
22:00:28 Guest3 joins (~Guest3@dynamic-077-180-146-126.77.180.pool.telefonica.de)
22:00:56 Guest6 joins (~Guest6@2a01cb0408ee9900a77feef9a14c5040.ipv6.abo.wanadoo.fr)
22:01:43 <Guest6> Evening, I recently discovered monad transfomers and especially ReaderT and i'm trying to use it in my WAI application. But i dont understand at all how can i make a WAI application and ReaderT work together.
22:02:06 <dminuoso> Guest6: You would unwrap the transformer first.
22:02:22 <dminuoso> Do you use WAI directly, or some kind of server library?
22:03:00 <Guest6> i use WAI directly, i run it with warp tho
22:04:08 <dminuoso> Can you share some rough bits for me to get an idea how to you use this?
22:04:25 <Guest6> sure
22:05:42 <Guest6> https://gist.github.com/louislebrault/b5ecc9b5fc042a6c7e9bf6b8e2644b04
22:06:27 <Guest6> as you see i pass a "Context" parameter everywhere, that i want to pass with ReaderT instead
22:07:08 <dminuoso> Guest6: okay, so you would write some `type MyApplication = Request -> (Response -> ReaderT Env IO ResponseReceived) -> ReaderT Env ResponseReceived`
22:07:49 <Guest6> exactly
22:07:52 <dminuoso> Then, you would need a simple function mkApp :: Env -> MyApplication -> Application`
22:08:01 <dminuoso> Which does the necessary runReaderT
22:08:11 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
22:09:19 <Guest6> hmm ok
22:09:20 natechan joins (~nate@98.45.169.16)
22:09:39 <dminuoso> Note, that if you use WAI directly you can *only* ever add ReaderT (or things isomorphic to it) unless you also use MonadBaseControl.
22:09:58 <dminuoso> Or well, actually thats not true.
22:10:09 <dminuoso> Strictly speaking you only need:
22:11:17 <dminuoso> Mm ignore that bit
22:11:33 × ulvarrefr quits (~user@188.124.56.153) (Ping timeout: 252 seconds)
22:11:58 <EvanR> add TardisT to WAI to allow unsending emails
22:14:25 <dminuoso> That wont work. You would have to use IOT.
22:15:25 <dminuoso> Been fighting for that particular transformer, but nobody knows how to make it, especially since the DMC-12 is no longer being made.
22:16:17 <Guest6> i saw a  package that is supposed to do the necessary to transform an application into a ReaderT application and vice-versa : https://hackage.haskell.org/package/wai-transformers-0.1.0/docs/Network-Wai-Trans.html#t:ApplicationT
22:16:23 <Guest6> but i didnt achieve to make it work
22:16:37 rockystone joins (~rocky@user/rockymarine)
22:16:43 <dminuoso> Give me a second, let me give you a pointer
22:16:52 <Guest6> i wonder if i need more knowledge about the whole transformers things to achieve this
22:17:10 <Guest6> because im trying to wire things together without understanding what's going wrong
22:17:16 <Guest6> sure
22:17:57 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
22:18:28 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
22:19:15 <dminuoso> Guest6: https://gist.github.com/dminuoso/0b9db8bcf0c92e8861640f46a6e1b735
22:22:11 <dminuoso> You can also use `liftIO` inside there if you prefer
22:23:33 <Guest6> ok for the first time since days the code compiles
22:23:50 <dminuoso> https://gist.github.com/dminuoso/0b9db8bcf0c92e8861640f46a6e1b735
22:23:51 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 260 seconds)
22:23:59 <EvanR> if it compiles, ship it
22:24:05 × son0p quits (~ff@181.136.122.143) (Remote host closed the connection)
22:26:55 burnsidesLlama joins (~burnsides@client-8-86.eduroam.oxuni.org.uk)
22:27:00 <Guest6> it woooorks
22:27:14 <Guest6> dminuoso thank you so much
22:29:21 <Guest6> dunno how much hours i would've need to come up with an equivalent of those few lines of code u shared with me
22:30:27 <Guest6> will have to learn how those things are working tho
22:30:44 <dminuoso> Well this is just very simple follow-the-types
22:31:07 <Guest6> ahah well
22:31:23 × burnsidesLlama quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Ping timeout: 265 seconds)
22:32:05 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 268 seconds)
22:32:12 <Guest6> probably once you understood how is it working, i spent time reading type signatures of https://hackage.haskell.org/package/wai-transformers-0.1.0/docs/Network-Wai-Trans.html#t:ApplicationT but i had absolutly no clue how to make the compiler happy
22:33:00 <dminuoso> Guest6: Honestly with middlewares and arbitrary monad transformers you get into some pretty strange complications
22:33:18 <dminuoso> Which is why you see that MonadBaseControl constraint everywhere
22:34:11 <EvanR> type MiddlewareT m = ApplicationT m -> ApplicationT m -- ah, so MiddlewareT is actually a transformer transformer
22:34:15 Alecui joins (~alecu@2a02:a58:8682:d600:c147:7976:693f:ec2f)
22:34:16 <dminuoso> Well, not even just middlewares, but also something like liftApplication :: Application -> MyApplication
22:35:00 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 258 seconds)
22:35:21 <dminuoso> Guest6: That being said, as long as you stick to ReaderT (and things isomorphic to it like LoggingT) you will not experience these problems.
22:36:06 <Guest6> good to hear
22:43:51 son0p joins (~ff@181.136.122.143)
22:45:35 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
22:45:41 × natechan quits (~nate@98.45.169.16) (Ping timeout: 268 seconds)
22:45:47 rockystone joins (~rocky@user/rockymarine)
22:49:24 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 268 seconds)
22:51:51 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
22:51:57 × perrierjouet quits (~perrier-j@modemcable048.127-56-74.mc.videotron.ca) (Quit: WeeChat 3.6)
22:55:24 × Alecui quits (~alecu@2a02:a58:8682:d600:c147:7976:693f:ec2f) (Remote host closed the connection)
22:57:38 The_Guest67 joins (~The_Guest@62.231.72.77)
22:58:31 zns joins (~zns@user/zns)
23:00:25 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
23:02:58 The_Guest6785 joins (~The_Guest@62.231.72.77)
23:03:18 <The_Guest6785> Hey guys, Dumb question here: I'm following this lecture on haskell but when i compile my code it prints <<loop>>, https://paste.tomsmeding.com/0iK4uIu9 . A bit of digging and i found out that it is an infinite loop so what did i do wrong?
23:03:35 × beteigeuze quits (~Thunderbi@2001:8a0:61b5:6101:f0c:e4e3:bfdc:91df) (Remote host closed the connection)
23:04:01 beteigeuze joins (~Thunderbi@2001:8a0:61b5:6101:9233:19e9:6537:6e73)
23:04:42 <geekosaur> reused xs and then tried to reference the original one (line 4_
23:04:46 <geekosaur> s/_/)
23:05:36 <The_Guest6785> Oh, how didn't i see that! Thanks
23:06:14 × The_Guest67 quits (~The_Guest@62.231.72.77) (Ping timeout: 252 seconds)
23:07:03 × thyriaen quits (~thyriaen@2a01:aea0:dd4:463c:6245:cbff:fe9f:48b1) (Quit: Leaving)
23:08:14 dimsuz joins (~dimsuz@185.17.128.86)
23:10:01 codaraxis joins (~codaraxis@user/codaraxis)
23:10:58 × Topsi quits (~Topsi@dyndsl-095-033-089-091.ewe-ip-backbone.de) (Read error: Connection reset by peer)
23:11:30 × codaraxis__ quits (~codaraxis@user/codaraxis) (Ping timeout: 265 seconds)
23:12:50 ec joins (~ec@gateway/tor-sasl/ec)
23:13:18 codaraxis__ joins (~codaraxis@user/codaraxis)
23:16:49 jmdaemon joins (~jmdaemon@user/jmdaemon)
23:17:18 × codaraxis quits (~codaraxis@user/codaraxis) (Ping timeout: 265 seconds)
23:18:16 × vorpuni quits (~pvorp@2001:861:3881:c690:6d4:662c:a06a:ef29) (Remote host closed the connection)
23:18:20 <ski> EvanR : hm ? `MiddlewareT :: (* -> *) -> *'
23:20:06 × The_Guest6785 quits (~The_Guest@62.231.72.77) (Quit: Client closed)
23:20:47 <dminuoso> ski: I think it was just a humor remark because it had a trailing capital T.
23:20:50 × chomwitt quits (~chomwitt@2a02:587:dc0c:c200:9b5d:e3:b4f7:170c) (Ping timeout: 268 seconds)
23:21:30 × zns quits (~zns@user/zns) (Quit: zzz)
23:21:38 <ski> oh
23:21:48 <ski> ApplicationT m = Request -> Cont (m ResponseReceived) Response
23:21:56 <ski> = Request -> ContT ResponseReceived m Response
23:22:09 <ski> = ReaderT Request (ContT ResponseReceived m) Response
23:22:20 <ski> MiddlewareT m = Cont (ReaderT Request (ContT ResponseReceived m) Response) ()
23:22:31 <ski> = ContT Response (ReaderT Request (ContT ResponseReceived m)) ()
23:22:55 <ski> = StateT Request (Cont (ContT ResponseReceived m Response)) ()
23:23:06 <ski> = StateT Request (ContT Response (ContT ResponseReceived m)) ()
23:23:10 burnsidesLlama joins (~burnsides@client-8-86.eduroam.oxuni.org.uk)
23:23:31 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Remote host closed the connection)
23:23:49 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
23:23:55 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 268 seconds)
23:27:19 <ski> hm, i guess `Request' is being forwarded from outer to inner ("backwarded" ?), while `Response' is forwarded in the other direction
23:28:09 rockystone joins (~rocky@user/rockymarine)
23:28:51 × gentauro quits (~gentauro@user/gentauro) (Read error: Connection reset by peer)
23:28:54 × burnsidesLlama quits (~burnsides@client-8-86.eduroam.oxuni.org.uk) (Ping timeout: 265 seconds)
23:30:03 edrx joins (~Eduardo@2804:56c:d2d3:4800:cf7d:b421:4c3a:392e)
23:30:07 perrierjouet joins (~perrier-j@modemcable048.127-56-74.mc.videotron.ca)
23:31:57 mixphix joins (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca)
23:33:49 zns joins (~zns@user/zns)
23:33:57 azimut joins (~azimut@gateway/tor-sasl/azimut)
23:34:08 gentauro joins (~gentauro@user/gentauro)
23:34:25 × rockystone quits (~rocky@user/rockymarine) (Ping timeout: 268 seconds)
23:34:40 <EvanR> dminuoso, because the type literally says ApplicationT m -> ApplicationT m
23:35:14 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:50e1:7448:ac98:298f)
23:35:18 <dminuoso> That is not a monad transformer conforming type, though.
23:35:59 <dminuoso> The type is that of a monad homomorphism.
23:36:01 <EvanR> monads shmonads
23:36:25 <dminuoso> Monad transformers must be of type (Type -> Type) -> Type -> Type
23:37:00 × son0p quits (~ff@181.136.122.143) (Killed (NickServ (GHOST command used by son0p-)))
23:37:29 × mixphix quits (~mixphix@bras-base-otwaon237cw-grc-11-174-91-129-69.dsl.bell.ca) (Ping timeout: 268 seconds)
23:38:43 <EvanR> is ApplicationT m even a monad whats going on
23:39:47 <dminuoso> As ski has pointed out, its isomorphic to some at least.
23:40:01 × jonathanx quits (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Read error: Connection reset by peer)
23:40:12 <EvanR> ReaderT Request (ContT ResponseReceived m) Response seems to be a whole action
23:40:14 <dminuoso> It's just a convenience type alias to describe an Application with an arbitrary monad layered in there
23:40:16 <edrx> hi all! I have just finished this: https://i.ibb.co/Z8H072x/sshot.png
23:40:18 jonathanx joins (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
23:40:19 <EvanR> like where does the a goes
23:41:04 <edrx> and now I can start to play with parsers for arithmetic expressions. question:
23:42:40 natechan joins (~nate@98.45.169.16)
23:42:47 <ski> `a' is `Response' there. for the latter one, it is `()'
23:42:58 <ski> re edrx
23:44:02 <EvanR> so the T is not indicating a monad transformer in the first place
23:44:05 <ski> @src concatMap
23:44:05 <lambdabot> concatMap f = foldr ((++) . f) []
23:44:10 BusConscious joins (~martin@ip-046-223-162-236.um13.pools.vodafone-ip.de)
23:44:39 <dminuoso> EvanR: Its sort of indicating that, whatever you specify next to it, is likely a monad with transformers applied?
23:44:47 <ski> concatMap f xs = concat (map f xs) = f =<< xs = [y | x <- xs,y <- f x]
23:44:49 jinsun is now known as Guest3962
23:44:49 jinsun__ joins (~jinsun@user/jinsun)
23:44:49 × Guest3962 quits (~jinsun@user/jinsun) (Killed (cadmium.libera.chat (Nickname regained by services)))
23:44:49 jinsun__ is now known as jinsun
23:44:54 <dminuoso> Dunno. ApplicationM and MiddlewareM might have been more consistent
23:45:17 × Tuplanolla quits (~Tuplanoll@91-159-69-34.elisa-laajakaista.fi) (Quit: Leaving.)
23:45:20 <EvanR> if someone who was complaining about the transformer heavy situations in haskell, they might see that and revolt xD
23:46:03 × Oiyqlk quits (~rscastilh@191-214-26-24.user.veloxzone.com.br) ()
23:46:37 <EvanR> in so far as naming conventions can be used as a guide in unfamiliar circumstances that have familiar things
23:47:07 geekosaur wonders if *M is a good naming convention given ST vs. STM
23:47:50 <geekosaur> edrx, you had a question?
23:48:03 <ski> edrx : redundant brackets, `.. ++ (show s) ++ ..' (`luatree0'), `(..):st' (`exec1')
23:48:13 rockystone joins (~rocky@user/rockymarine)
23:48:23 <edrx> ...question: in one of the next steps I will have to split a string like "( 2 + u- 3 ) * ( 4 + x )" at whitespace, and then transform each word into commands for a stack machine, like OpenParen, Prefix "-" 40, Infix "+" 20 21
23:48:59 <dminuoso> Wow. GHC supports unboxed sum types!
23:49:05 <dminuoso> How did I miss that memo
23:49:12 <EvanR> cool
23:49:15 gmg joins (~user@user/gehmehgeh)
23:49:27 × natechan quits (~nate@98.45.169.16) (Ping timeout: 252 seconds)
23:49:29 <dminuoso> That means I can now handroll my own version of IO :>
23:49:33 <geekosaur> hm. parens aren't normally used at that level, instead they would be used to structure an AST and the stack machine programmed from that
23:49:50 <ski> edrx : `execn' is a `foldl'. i'd probably check for singleton in `exec'
23:49:55 <EvanR> omg edrx what is the actual question
23:50:34 <edrx> the question is: in Lua using associative tables to translate strings into other objects is trivial, and I used the built-in associative tables to conevrt for example "+" to Infix "+" 20 21. What do you recommend for that in Haskell?
23:50:43 <edrx> EvanR: sorry =/
23:50:56 <geekosaur> this is parsing
23:51:01 <dminuoso> type Res# e a = (# (# State#, a, Addr# #) | (# State# #) | #( State#, e #) #)
23:51:21 <ski> `ST' predates the `FooT', iirc
23:51:22 <dminuoso> type Res# e a = (# (# State# RealWorld, a, Addr# #) | (# State# RealWorld #) | #( State# RealWorld, e #) #)
23:51:24 <dminuoso> That.
23:51:29 <EvanR> translating symbols to other symbols one to one with a table is one thing, you could use a Map
23:51:38 <EvanR> but you seem to want to do actual parsing in this process
23:51:51 <EvanR> dunno how lua manages that with just their table type xD
23:52:09 <geekosaur> same way lots of people "parse" with regexes
23:52:17 <ski> dminuoso : not what i would call "unboxed sum types", though :/
23:52:26 <edrx> ski: thanks! I knew that execn looked like one of the folds, but that is just a very first prototype...
23:52:30 wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com)
23:52:30 × wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
23:52:30 wroathe joins (~wroathe@user/wroathe)
23:53:29 <edrx> EvanR: yes, I'm try to learn how to do parsing properly.
23:54:18 <EvanR> you got your LL parsing and you got your LR parsing and... I don't understand any of it because I use monads
23:55:38 <ski> edrx : either `ReadS' (or `ReadP' or `ReadPrec') .. or use a proper "serious" parser combinator library (Parsec,MegaParsec,attoparsec,trifecta,..) .. or use the (`yacc'-like, with `lex'-like) Happy, with Alex .. or possibly something on top of that, like BNFC
23:55:43 spaced joins (uid572193@id-572193.ilkley.irccloud.com)
23:55:53 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 258 seconds)
23:56:08 <EvanR> yeah we have nice libraries to take out the task of parsing lua expressions easily
23:56:25 <ski> dminuoso : what're you modelling ?
23:56:56 <ski> i mean, that's the middle alternative for ?
23:57:14 <EvanR> in megaparsec you could even give it a table of operators, precedences, associativities, and it just does it for you
23:57:24 ski idly recalls Hugs did `IO' via CPS
23:57:31 <EvanR> you don't have to know anything lol
23:57:36 <dminuoso> ski: It's ByteString encoder monad that has separate failure/error modes.
23:57:46 <dminuoso> The middle alternative models failure
23:57:54 × gurkenglas quits (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
23:58:03 <ski> hm. what does failure entail ?
23:58:20 <dminuoso> Exceeding available buffer length, setting position out of bounds
23:58:39 <ski> as opposed to what kind of errors ?
23:58:53 <ski> how does the handling (plumbing) differ ?
23:59:47 <dminuoso> ski: On a failure you could still <|> to switch to a different mechanism.
23:59:48 × dimsuz quits (~dimsuz@185.17.128.86) (Quit: Client closed)
23:59:52 <ski> @where BNFC
23:59:52 <lambdabot> BNF Converter, http://bnfc.digitalgrammars.com/

All times are in UTC on 2022-10-09.