Home freenode/#haskell: Logs Calendar

Logs on 2021-01-19 (freenode/#haskell)

00:02:35 conal joins (~conal@64.71.133.70)
00:03:35 p8m_ joins (p8m@gateway/vpn/protonvpn/p8m)
00:04:07 × cantstanya quits (~chatting@gateway/tor-sasl/cantstanya) (Remote host closed the connection)
00:05:28 frankdmartinez joins (~frankdmar@208.91.107.132)
00:05:48 × elfets quits (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving)
00:06:23 cantstanya joins (~chatting@gateway/tor-sasl/cantstanya)
00:06:28 × Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Ping timeout: 246 seconds)
00:06:34 inkbottle is now known as zebrag
00:08:57 × ph88^ quits (~ph88@2a02:8109:9e00:7e5c:c85b:41a3:84e7:765d) (Ping timeout: 272 seconds)
00:12:06 × epicte7us quits (~epictetus@ip184-187-162-163.sb.sd.cox.net) (Read error: Connection reset by peer)
00:12:08 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
00:13:49 directhex1 joins (~directhex@141.98.102.227)
00:15:33 × jb55 quits (~jb55@gateway/tor-sasl/jb55) (Remote host closed the connection)
00:15:55 jb55 joins (~jb55@gateway/tor-sasl/jb55)
00:20:37 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds)
00:20:37 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 264 seconds)
00:24:39 × star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Ping timeout: 256 seconds)
00:28:32 × Guest39046 quits (~reda@4.ip-137-74-112.eu) (Changing host)
00:28:32 Guest39046 joins (~reda@unaffiliated/reda)
00:28:39 Guest39046 is now known as reda
00:30:10 carldd1 joins (~carldd@90-224-49-113-no56.tbcn.telia.com)
00:30:40 × carldd quits (~carldd@90-224-49-113-no56.tbcn.telia.com) (Read error: Connection reset by peer)
00:30:43 × centril quits (~centril@213-66-146-92-no250.tbcn.telia.com) (Ping timeout: 260 seconds)
00:31:09 centril joins (~centril@213-66-146-92-no250.tbcn.telia.com)
00:32:56 × lambda-11235 quits (~lambda-11@2600:1700:7c70:4600:50e3:db3a:2e94:2ef6) (Ping timeout: 240 seconds)
00:33:05 conal joins (~conal@64.71.133.70)
00:33:27 × frankdmartinez quits (~frankdmar@208.91.107.132) (Quit: frankdmartinez)
00:34:11 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
00:34:14 × usr25_tm quits (~usr25@unaffiliated/usr25) (Quit: Leaving)
00:37:17 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
00:37:42 london joins (~london@pool-108-28-184-193.washdc.fios.verizon.net)
00:37:57 × LKoen quits (~LKoen@119.169.9.109.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
00:38:36 × directhex1 quits (~directhex@141.98.102.227) (Ping timeout: 240 seconds)
00:45:13 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
00:47:22 × tsrt^ quits (~hph@ip98-184-89-2.mc.at.cox.net) ()
00:47:49 Stanley00 joins (~stanley00@unaffiliated/stanley00)
00:48:53 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
00:49:32 frankdmartinez joins (~frankdmar@208.91.107.132)
00:49:32 × frankdmartinez quits (~frankdmar@208.91.107.132) (Client Quit)
00:52:05 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
00:52:55 Tario joins (~Tario@201.192.165.173)
00:55:14 × Deide1 quits (~Deide@217.155.19.23) (Quit: Seeee yaaaa)
00:56:36 × Stanley00 quits (~stanley00@unaffiliated/stanley00) (Ping timeout: 256 seconds)
00:59:01 former_ocamler joins (3263cbdb@50.99.203.219)
00:59:23 vs^ joins (vs@ip98-184-89-2.mc.at.cox.net)
00:59:28 <former_ocamler> hi friends, i'm not 100% sure what the compilation error is here, any help would be appreciated:
00:59:28 <former_ocamler> tmp :: String -> [Int]
00:59:29 <former_ocamler> tmp = tail . lines <$> words <$> read <$> (foldr xor 0)
00:59:39 <former_ocamler> requires import Data.Bits
00:59:59 Alleria joins (~textual@2603-7000-3040-0000-6de2-9de3-adc0-7711.res6.spectrum.com)
01:00:23 Alleria is now known as Guest77901
01:01:16 <koz_> former_ocamler: What's this supposed to do?
01:02:07 <former_ocamler> read input that looks like a line of integers
01:02:08 <former_ocamler> # throw away this line
01:02:08 <former_ocamler> 1 2 1 1 2 8 8
01:02:09 <former_ocamler> 1 1 0 0 5 5
01:02:09 <former_ocamler> 2
01:02:24 <former_ocamler> and return the xor of all the lines in a list -> [1, 0, 2]
01:02:51 <former_ocamler> well the input reading is done elsewhere
01:03:18 <koz_> Have you tried writing it not-pointfree?
01:03:23 <koz_> It might make the error more apparent.
01:03:43 <former_ocamler> oh good point, ill try that
01:03:55 <siraben> former_ocamler: also you'll want to use foldl' instead of foldr
01:04:04 <siraben> xor is associative, so this change is safe.
01:04:05 <koz_> siraben: That's a low priority.
01:04:12 <koz_> Let's get code that compiles first.
01:04:18 rajivr joins (uid269651@gateway/web/irccloud.com/x-sozgnodbahkqqgom)
01:04:19 <siraben> right
01:04:47 × Guest77901 quits (~textual@2603-7000-3040-0000-6de2-9de3-adc0-7711.res6.spectrum.com) (Ping timeout: 260 seconds)
01:05:23 <siraben> The parsing seems to be incorrect as well
01:05:38 <koz_> siraben: Hence why I think a good first step is 'don't write this pointless'.
01:05:44 <koz_> Since that'd make it apparent rather quickly.
01:05:50 <siraben> mm
01:08:37 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
01:09:08 <former_ocamler> found one error, replaced read with (fmap read)
01:10:45 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
01:11:15 adeene joins (~adeene@181.131.0.191)
01:11:19 <adeene> ola
01:11:27 <adeene> este es un canal de programadores?
01:11:58 <koz_> adeene: este es un canal where we speak English.
01:13:53 JJ15_ joins (~JJ@2a00:23a8:4382:a900:fcf7:2eda:8a08:e4bf)
01:16:09 <former_ocamler> oh I think I might be using the fmap operator backwards?
01:18:17 × JJ15 quits (~JJ@2a00:23a8:4382:a900:824:234b:c258:aff8) (Ping timeout: 260 seconds)
01:18:18 × columbarius1 quits (~columbari@mue-88-130-54-186.dsl.tropolys.de) (Ping timeout: 260 seconds)
01:18:49 × xff0x_ quits (~xff0x@port-92-195-7-153.dynamic.as20676.net) (Ping timeout: 264 seconds)
01:20:18 columbarius1 joins (~columbari@mue-88-130-54-057.dsl.tropolys.de)
01:21:08 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
01:21:26 × hexo quits (~hexo@gateway/tor-sasl/hexo) (Ping timeout: 268 seconds)
01:22:40 × srk quits (~sorki@gateway/tor-sasl/sorki) (Ping timeout: 268 seconds)
01:23:42 srk joins (~sorki@gateway/tor-sasl/sorki)
01:23:42 hexo joins (~hexo@gateway/tor-sasl/hexo)
01:23:49 <former_ocamler> okay I've managed to get it to compile:
01:23:49 <former_ocamler> tmp4 :: String -> [Int]
01:23:50 <former_ocamler> tmp4 s = foldr xor 0 <$> (fmap read) <$> words <$> (tail . lines $ s)
01:24:08 <former_ocamler> anyone know if its possible to avoid naming the argument here?
01:25:26 <koz_> @pl \s -> fold xor 0 <$> (fmap read) <$> words <$> (tail . lines $ s)
01:25:27 <lambdabot> ((fold xor 0 <$> fmap read <$> words) <$>) . tail . lines
01:25:30 <koz_> Here.
01:25:37 <koz_> Although I would argue that this is not more readable.
01:25:48 <koz_> Heck, I'd argue that the named arg version is not readable!
01:25:54 <former_ocamler> yeah same
01:25:59 <koz_> The chained <$> is _especially_ egregious.
01:26:40 <former_ocamler> oh I thought chaining <$> was considered to be the correct way of composing fmaps
01:26:59 <koz_> .... no?
01:27:12 <koz_> As in, this is literally not a thing I have ever heard anyone claim or say literally in any place.
01:27:20 <koz_> <$> is just an infix fmap.
01:27:49 <former_ocamler> oh lol, okay here is another version ive made
01:27:50 <former_ocamler> tmp5 :: String -> [Int]
01:27:50 <former_ocamler> tmp5 s = ((foldr xor 0) . (fmap read) . words) <$> (tail . lines $ s)
01:27:58 <koz_> That is significantly less terrible.
01:28:09 <former_ocamler> hahahaha thank you!
01:28:27 <koz_> <$> is just fmap that happens to be infix.
01:28:33 <koz_> :t fmap
01:28:35 <lambdabot> Functor f => (a -> b) -> f a -> f b
01:28:37 <koz_> :t (<$>)
01:28:39 <lambdabot> Functor f => (a -> b) -> f a -> f b
01:29:25 <glguy> :t fmap (foldr xor 0 . fmap read . words) . tail . lines
01:29:26 <lambdabot> (Bits b, Num b, Read b) => String -> [b]
01:32:25 benb joins (52456307@82-69-99-7.dsl.in-addr.zen.co.uk)
01:33:04 bogdanp joins (~bogdanp@188.24.80.165)
01:35:34 <monochrom> I think that a problem with chaining <$>s is that no one remembers whether <$> associates to the left or to the right. Without that information, chaining <$>s is an encryption.
01:36:21 <former_ocamler> hahaha yeah I ran into that for sure today, tbh "." sort of messes me up sometimes as well, cause i confuse it with $
01:36:56 <former_ocamler> do you pro haskeller's spend a lot of time converting to point-free code, or is it just natural to you?
01:37:13 <monochrom> . is different. "f . g . h" is just like unix pipelining "h | g | f". And no one has trouble with unix pipelining.
01:37:28 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 246 seconds)
01:37:45 <monochrom> And . is associative both ways.
01:37:50 <monochrom> (So is | )
01:39:15 × andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection)
01:39:25 <monochrom> I write what makes sense for each scenerio. I don't know what "natural" means. Does it have a meaning?
01:39:54 andreas303 joins (~andreas@gateway/tor-sasl/andreas303)
01:40:00 × former_ocamler quits (3263cbdb@50.99.203.219) (Quit: Connection closed)
01:41:41 xff0x_ joins (~xff0x@2001:1a81:53a7:7f00:cf3d:9916:d616:6e16)
01:43:23 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
01:43:38 × hexo quits (~hexo@gateway/tor-sasl/hexo) (Ping timeout: 268 seconds)
01:43:38 × srk quits (~sorki@gateway/tor-sasl/sorki) (Ping timeout: 268 seconds)
01:44:03 srk joins (~sorki@gateway/tor-sasl/sorki)
01:44:04 hexo joins (~hexo@gateway/tor-sasl/hexo)
01:50:03 × m0rphism quits (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de) (Ping timeout: 260 seconds)
01:52:42 f-a joins (~f-a@151.34.52.239)
01:55:58 × Kaeipi quits (~Kaiepi@47.54.252.148) (Remote host closed the connection)
01:55:59 × JJ15_ quits (~JJ@2a00:23a8:4382:a900:fcf7:2eda:8a08:e4bf) (Quit: Leaving)
01:57:22 Kaeipi joins (~Kaiepi@47.54.252.148)
01:57:39 <xsperry> :t map (foldr xor 0 . map read . words) . tail . lines
01:57:40 <lambdabot> (Bits b, Num b, Read b) => String -> [b]
01:57:58 × Kaeipi quits (~Kaiepi@47.54.252.148) (Remote host closed the connection)
01:58:38 × jespada_ quits (~jespada@90.254.245.49) (Ping timeout: 272 seconds)
02:01:28 Kaeipi joins (~Kaiepi@47.54.252.148)
02:02:26 f-a parts (~f-a@151.34.52.239) ()
02:04:41 jespada joins (~jespada@90.254.241.81)
02:09:00 conal joins (~conal@64.71.133.70)
02:09:58 × Kaeipi quits (~Kaiepi@47.54.252.148) (Remote host closed the connection)
02:10:43 Kaeipi joins (~Kaiepi@47.54.252.148)
02:11:03 × Rudd0 quits (~Rudd0@185.189.115.103) (Ping timeout: 260 seconds)
02:11:03 lambda-11235 joins (~lambda-11@2600:1700:7c70:4600:c862:8756:823c:2b6b)
02:11:28 × Kaeipi quits (~Kaiepi@47.54.252.148) (Remote host closed the connection)
02:11:37 × hyperisco quits (~hyperisco@104-195-141-253.cpe.teksavvy.com) (Ping timeout: 264 seconds)
02:12:21 Kaeipi joins (~Kaiepi@47.54.252.148)
02:12:49 × nineonine quits (~nineonine@50.216.62.2) (Ping timeout: 264 seconds)
02:13:06 <justsomeguy> I think of Data.Function.((&)) as being like a unix pipeline, and (.) as a pipeline in reverse.
02:14:50 <justsomeguy> ...which I just now noticed that you illustrated in your example.
02:14:55 × minne quits (~minne_@51.194.80.91) (Ping timeout: 246 seconds)
02:15:10 <ephemient> :i <$>
02:15:15 × xff0x_ quits (~xff0x@2001:1a81:53a7:7f00:cf3d:9916:d616:6e16) (Ping timeout: 260 seconds)
02:15:26 <ephemient> % :i <$>
02:15:26 <yahb> ephemient: (<$>) :: Functor f => (a -> b) -> f a -> f b -- Defined in `Data.Functor'; infixl 4 <$>
02:15:27 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
02:15:45 <ephemient> (not sure how to get lambdabot to spit out the same)
02:16:02 jpds joins (~jpds@gateway/tor-sasl/jpds)
02:16:13 <ephemient> all the <$, <$>, $>, <*, <*>, *> functions are left associative
02:16:54 xff0x_ joins (~xff0x@2001:1a81:53c4:c00:1d1:2793:e84f:a616)
02:20:22 <nshepperd2> spooky
02:20:51 <siraben> dang former_ocamler left
02:20:56 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
02:21:03 <siraben> i was gonna say, using the map functor law and foldr/map fusion law we have
02:21:05 <siraben> tmp5 s = foldr (xor . read) 0 . words <$> (tail . lines $ s)
02:21:11 <nshepperd2> 'f <$> g <$> x' works because the first <$> uses the Functor instance for functions
02:21:55 <ephemient> I don't know if this is the justification, but >>= only makes sense as left associative, so might as well have everything else be left associative too?
02:22:08 <siraben> Better: tmp5 s = foldl' (flip (xor . read)) 0 . words <$> (tail . lines $ s)
02:27:55 × lambda-11235 quits (~lambda-11@2600:1700:7c70:4600:c862:8756:823c:2b6b) (Max SendQ exceeded)
02:28:27 drbean joins (~drbean@TC210-63-209-49.static.apol.com.tw)
02:28:29 lambda-11235 joins (~lambda-11@2600:1700:7c70:4600:c862:8756:823c:2b6b)
02:28:43 <ephemient> hmm...
02:29:03 <ephemient> > f <*> a `ap` b
02:29:05 <lambdabot> error:
02:29:05 <lambdabot> • Couldn't match expected type ‘f (a0 -> a1)’
02:29:05 <lambdabot> with actual type ‘Expr’
02:29:18 <ephemient> :t \f a b -> f <*> a `ap` b
02:29:20 <lambdabot> Monad f => f (a1 -> b) -> f (a2 -> a1) -> f a2 -> f b
02:29:29 <ephemient> :t \f a b -> f `ap` a <*> b
02:29:30 <lambdabot> Monad f => f (a1 -> a2 -> b) -> f a1 -> f a2 -> f b
02:29:42 <ephemient> that feels unfortunate
02:30:02 × pja quits (~phil@2a02:8010:6098:0:f2de:f1ff:fe2c:3d9) (Ping timeout: 264 seconds)
02:30:58 <ephemient> is it too late to declare a fixity for `ap`?
02:31:20 <siraben> I thought you can't declare fixity for ad-hoc infix?
02:31:38 <ephemient> sure you can
02:31:47 × viluon quits (uid453725@gateway/web/irccloud.com/x-driokqiqmgrrqcka) (Quit: Connection closed for inactivity)
02:32:29 <ephemient> % :i mod
02:32:30 <yahb> ephemient: type Integral :: * -> Constraint; class (Real a, Enum a) => Integral a where; ...; mod :: a -> a -> a; ...; -- Defined in `GHC.Real'; infixl 7 `mod`
02:34:24 pja joins (~phil@2a02:8010:6098:0:f2de:f1ff:fe2c:3d9)
02:34:59 × london quits (~london@pool-108-28-184-193.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
02:36:53 <monochrom> You can declare fixity in the same file you define the name. No difference between "alphabetical" name and "symbolic" name.
02:38:40 bogdanp joins (~bogdanp@188.24.80.165)
02:40:54 frankdmartinez joins (~frankdmar@208.91.107.132)
02:40:54 × frankdmartinez quits (~frankdmar@208.91.107.132) (Client Quit)
02:40:57 × xff0x_ quits (~xff0x@2001:1a81:53c4:c00:1d1:2793:e84f:a616) (Ping timeout: 272 seconds)
02:41:45 × Aquazi quits (uid312403@gateway/web/irccloud.com/x-oaoeybeprgtveedp) (Quit: Connection closed for inactivity)
02:42:41 × benb quits (52456307@82-69-99-7.dsl.in-addr.zen.co.uk) (Quit: Ping timeout (120 seconds))
02:42:42 ADG1089_ joins (~adg1089@122.163.219.236)
02:43:25 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 264 seconds)
02:43:25 × ADG1089_ quits (~adg1089@122.163.219.236) (Read error: Connection reset by peer)
02:43:37 × Kaeipi quits (~Kaiepi@47.54.252.148) (Remote host closed the connection)
02:43:59 Kaeipi joins (~Kaiepi@47.54.252.148)
02:44:56 bogdanp joins (~bogdanp@188.24.80.165)
02:45:17 niekvandepas joins (~niekvande@dhcp-077-249-088-250.chello.nl)
02:46:22 plutoniix joins (~q@184.82.204.73)
02:46:49 ADG1089_ joins (~adg1089@122.163.219.236)
02:46:49 × ADG1089_ quits (~adg1089@122.163.219.236) (Read error: Connection reset by peer)
02:47:17 × pja quits (~phil@2a02:8010:6098:0:f2de:f1ff:fe2c:3d9) (Ping timeout: 272 seconds)
02:47:46 pja joins (~phil@2a02:8010:6098:0:f2de:f1ff:fe2c:3d9)
02:49:43 × niekvandepas quits (~niekvande@dhcp-077-249-088-250.chello.nl) (Ping timeout: 256 seconds)
02:49:43 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 256 seconds)
02:54:24 magnuscake joins (~magnuscak@87-121-92-61.dyn.launtel.net.au)
02:55:24 Stanley00 joins (~stanley00@unaffiliated/stanley00)
02:55:27 ADG1089_ joins (~adg1089@122.163.219.236)
02:55:27 sayola joins (~vekto@dslb-002-201-085-014.002.201.pools.vodafone-ip.de)
02:56:00 <magnuscake> Hello fellow Haskellers! I recently came across some code and would really appreciate if you could help me wrap my mind around it. So I have the following code
02:56:00 × ADG1089_ quits (~adg1089@122.163.219.236) (Read error: Connection reset by peer)
02:56:29 <magnuscake> applyTimes :: (Eq a, Num a) => a -> (b -> b) -> b
02:56:36 <magnuscake> applyTimes 0 f b = b
02:56:43 frankdmartinez joins (~frankdmar@208.91.107.132)
02:56:58 ADG1089_ joins (~adg1089@122.163.219.236)
02:57:02 <magnuscake> applyTimes n f b = f . applyTimes (n - 1) f $ b
02:57:13 <magnuscake> This of course is a recursive function
02:57:27 <magnuscake> Now I shall apply the function as follows:
02:57:41 <magnuscake> applyTimes 3 (+1) 7
02:57:57 <magnuscake> The result comes to 10
02:58:47 × heatsink quits (~heatsink@2600:1700:bef1:5e10:6c35:c27b:9d47:22a1) (Remote host closed the connection)
02:58:54 <glguy> correct
02:58:54 <magnuscake> Which is correct however I don't understand why the application only increments it once. We are using composition;
02:58:59 <magnuscake> f . applyTimes
02:59:05 <magnuscake> but then there is also
02:59:10 <magnuscake> f $ b
02:59:26 <glguy> get rid of the . and $ noise
02:59:33 × urodna quits (~urodna@unaffiliated/urodna) (Quit: urodna)
02:59:40 <glguy> f . applyTimes (n - 1) f $ b --becomes-- f (applyTimes (n - 1) f b)
02:59:43 <magnuscake> so technically won't `f $ b` produce a result and then get applied to f again?
02:59:59 <magnuscake> ok
03:00:28 sgibber2018 joins (d055ed90@208.85.237.144)
03:00:49 <glguy> a b $ c --means-- (a b) c
03:00:55 <glguy> not: a (b c)
03:01:27 nineonine joins (~nineonine@50.216.62.2)
03:01:39 <magnuscake> So remove the $
03:01:41 <magnuscake> and we get
03:02:07 <magnuscake> (f . applyTimes (n - 1)) f b
03:02:12 <glguy> f . applyTimes (n - 1) f $ b --remove$-- (f . applyTimes (n - 1) f) b
03:02:13 <magnuscake> Correct?
03:02:45 <ephemient> no
03:03:42 <glguy> f . a b c $ x --is-- (f . ((a b) c)) $ x
03:03:46 <ephemient> it means f . (applyTimes (n - 1) f) $ b
03:04:00 <ephemient> function application is left associative and binds tighter than anything else
03:04:45 <magnuscake> Ok so if we were to apply the function like above
03:04:47 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
03:05:10 <magnuscake> applyTimes 3 (+1) 7
03:05:14 <magnuscake> becomes
03:05:56 <magnuscake> ((+1) . applyTimes (3 - 1) (+1)) 7
03:05:59 <magnuscake> Correct?
03:06:19 <ephemient> good so far
03:06:32 <magnuscake> Ok
03:07:02 <magnuscake> Im not going to recurse through this so we evaluate it as given
03:07:25 <ephemient> you need the definition of (.) to evaluate this
03:08:10 <ephemient> ((+1) . applyTimes 2 (+1)) 7 == (.) (+1) (applyTimes 2 (+1)) 7
03:08:19 <magnuscake> Yes so first applyTimes is evaluated to produce the result correct?
03:08:53 <magnuscake> Because then that result is passed to (+1) on the left side, right?
03:09:10 <magnuscake> (.) :: (b -> c) -> (a -> b) -> c
03:09:24 <ephemient> (.) f g a = f (g a), so yes, this becomes (+1) (applyTimes 2 (+1) 7)
03:10:59 <magnuscake> Ok since we are applying (+1) to 7 and ignoring 2 for the sake of ease, we would get 8 correct?
03:11:29 <magnuscake> something like but not accurate to;
03:11:57 <magnuscake> (.) (+1) (applyTimes 8)
03:12:20 bogdanp joins (~bogdanp@188.24.80.165)
03:12:27 <magnuscake> I know this is not right but I am trying the understand how the (+1) ties into all of this
03:12:39 <ephemient> no
03:12:45 <magnuscake> *(+1) on the left
03:12:57 <magnuscake> Oh
03:13:31 <ephemient> applyTimes 2 (+1) 7 == ((applyTimes 2) (+1)) 7
03:13:36 <ephemient> not sure where you get the 8 from
03:14:57 <Feuermagier> what does "Char :->: String" mean?
03:15:17 <glguy> Feuermagier, it means someone made up the operator :->: and used it with Char and String
03:15:28 <Feuermagier> ah, wonderful
03:15:31 × hexo quits (~hexo@gateway/tor-sasl/hexo) (Ping timeout: 268 seconds)
03:15:31 × srk quits (~sorki@gateway/tor-sasl/sorki) (Ping timeout: 268 seconds)
03:15:52 srk joins (~sorki@gateway/tor-sasl/sorki)
03:15:52 hexo joins (~hexo@gateway/tor-sasl/hexo)
03:15:55 <Feuermagier> didn't even know that one can do that in haskell
03:16:01 <magnuscake> I was using the original function def as given above to apply (+1) to 7
03:16:07 × acidjnk_new quits (~acidjnk@p200300d0c704e739989dd075055fe92d.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
03:16:18 <magnuscake> Guess I was wrong there
03:16:36 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 240 seconds)
03:17:18 <magnuscake> SO just to be clear
03:17:54 <magnuscake> applyTimes n f b = f . applyTimes (n - 1) f $ b
03:17:55 × nilof quits (~olofs@90-227-86-119-no542.tbcn.telia.com) (Ping timeout: 246 seconds)
03:18:12 <magnuscake> How come f is only being applied once here?
03:18:27 <glguy> f isn't being applied any times there
03:18:46 <glguy> it's just an argument to (.) and an argument to (applyTimes (n-1))
03:19:29 <glguy> f . applyTimes (n - 1) f $ b --is_a_more_confusing-- f (applyTimes (n - 1) f b)
03:20:12 <glguy> applyTimes 3 f b == f (applyTimes 2 f b) == f (f (applyTimes 1 f b)) == f (f (f (applyTimes 0 f b))) == f (f (f b))
03:21:57 <magnuscake> Oh yes that makes complete sense now!!
03:22:35 <magnuscake> Thank you very much glguy and ephemient. Really appreciate your help
03:23:12 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Quit: leaving)
03:23:15 <ephemient> Feuermagier: as :->: starts with a :, it must be a type, data constructor, or type operator
03:23:38 <Feuermagier> I have a "data Rule = Char :->: String "
03:23:48 <ephemient> yep, that's a data constructor there
03:24:15 <ephemient> it's the same as writing data Rule = RuleConstructor Char String, except RuleConstructor is named (:->:)
03:24:25 <Feuermagier> ah
03:24:42 jedws joins (~jedws@121.209.139.157)
03:24:51 heatsink joins (~heatsink@2600:1700:bef1:5e10:6c35:c27b:9d47:22a1)
03:24:51 <Feuermagier> so like ` but for constructors?
03:25:12 <ephemient> hmm, not quite. more like upper case
03:26:12 <ephemient> alphabetical names starting with upper case are modules, types, or data constructors; alphabetical names starting with lower case are type variables or variables
03:26:57 <ephemient> similarly, symbolic names starting with : are types, data constructors, or type operators; symbolic names not starting with : are variables
03:27:50 Saukk joins (~Saukk@83-148-239-3.dynamic.lounea.fi)
03:28:16 <ephemient> > let a --> b = [a..b] in 1 --> 3
03:28:18 <lambdabot> [1,2,3]
03:28:44 <ephemient> same idea, but for a constructor instead of a binding
03:34:38 × nineonine quits (~nineonine@50.216.62.2) (Remote host closed the connection)
03:35:18 nineonine joins (~nineonine@50.216.62.2)
03:37:05 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) (Ping timeout: 240 seconds)
03:37:26 × ahf quits (ahf@irssi/staff/ahf) (Remote host closed the connection)
03:37:33 ahf joins (ahf@irssi/staff/ahf)
03:37:39 ahf_ joins (ahf@irssi/staff/ahf)
03:38:05 × theDon quits (~td@muedsl-82-207-238-201.citykom.de) (Ping timeout: 240 seconds)
03:38:40 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds)
03:38:57 × srk quits (~sorki@gateway/tor-sasl/sorki) (Ping timeout: 268 seconds)
03:39:34 × hexo quits (~hexo@gateway/tor-sasl/hexo) (Ping timeout: 268 seconds)
03:40:01 theDon joins (~td@94.134.91.134)
03:41:13 × ADG1089_ quits (~adg1089@122.163.219.236) (Ping timeout: 272 seconds)
03:41:32 srk joins (~sorki@gateway/tor-sasl/sorki)
03:41:32 hexo joins (~hexo@gateway/tor-sasl/hexo)
03:44:55 × mirrorbird quits (~psutcliff@2a00:801:42b:aff3:74af:2f22:932d:eac0) (Ping timeout: 272 seconds)
03:45:01 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection)
03:45:32 × adeene quits (~adeene@181.131.0.191) (Read error: Connection reset by peer)
03:45:55 jamm joins (~jamm@unaffiliated/jamm)
03:46:26 adeene joins (~adeene@181.131.0.191)
03:47:01 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
03:48:06 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
03:50:11 × adeene quits (~adeene@181.131.0.191) (Read error: Connection reset by peer)
03:50:27 × jamm quits (~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds)
03:51:25 xirhtogal joins (~lagothrix@unaffiliated/lagothrix)
03:51:26 × lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Killed (verne.freenode.net (Nickname regained by services)))
03:51:26 xirhtogal is now known as lagothrix
03:51:34 adeene joins (~adeene@181.131.0.191)
03:52:17 × ahf_ quits (ahf@irssi/staff/ahf) (Quit: Lost terminal)
03:54:01 bogdanp joins (~bogdanp@188.24.80.165)
03:55:47 × lambda-11235 quits (~lambda-11@2600:1700:7c70:4600:c862:8756:823c:2b6b) (Quit: Bye)
04:01:32 × SupaYoshi quits (~supayoshi@213-10-140-13.fixed.kpn.net) (Quit: Goodbye!)
04:01:34 Rudd0 joins (~Rudd0@185.189.115.103)
04:02:05 ADG1089_ joins (~adg1089@27.63.60.143)
04:02:34 SupaYoshi joins (~supayoshi@213-10-140-13.fixed.kpn.net)
04:02:55 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
04:03:02 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 256 seconds)
04:03:17 jpds joins (~jpds@gateway/tor-sasl/jpds)
04:03:47 <Feuermagier> how do I deconstruct the datatype returned by a function?
04:04:06 <glguy> Can you show an example of what that means?
04:04:25 × elliott_ quits (~elliott_@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 240 seconds)
04:04:57 × ahf quits (ahf@irssi/staff/ahf) (Read error: error:1408F119:SSL routines:ssl3_get_record:decryption failed or bad record mac)
04:05:06 ahf joins (ahf@irssi/staff/ahf)
04:05:13 elliott_ joins (~elliott_@pool-108-51-101-42.washdc.fios.verizon.net)
04:05:17 <Feuermagier> data Stuff = Stuff { important :: String, garbage :: [Integers]}
04:05:26 ahf_ joins (ahf@irssi/staff/ahf)
04:05:26 xff0x_ joins (~xff0x@2001:1a81:521c:ad00:21de:ec80:9043:6773)
04:05:47 <glguy> % data Stuff = Stuff { important :: String, garbage :: [Integers]}
04:05:47 <yahb> glguy: ; <interactive>:23:59: error:; Not in scope: type constructor or class `Integers'; Perhaps you meant `Integer' (imported from Prelude)
04:05:51 <glguy> % data Stuff = Stuff { important :: String, garbage :: [Integer]}
04:05:51 <yahb> glguy:
04:06:20 <glguy> % case Stuff { important = "hi", garbage = [42] } of Stuff x y -> (x, y, y)
04:06:20 <yahb> glguy: ("hi",[42],[42])
04:06:23 <glguy> or
04:06:32 Tario joins (~Tario@201.192.165.173)
04:06:40 <glguy> % let stuff = Stuff { important = "hi", garbage = [42] } in garbage stuff
04:06:40 <yahb> glguy: [42]
04:07:07 <Feuermagier> ah, thx!
04:09:02 <Feuermagier> glguy, can I do this on the fly if I have a function "generateStuff" that returns a Stuff?
04:09:30 bogdanp joins (~bogdanp@188.24.80.165)
04:10:03 <glguy> Feuermagier, sure
04:10:27 Codaraxis_ joins (Codaraxis@gateway/vpn/mullvad/codaraxis)
04:10:46 × Codaraxis quits (Codaraxis@gateway/vpn/mullvad/codaraxis) (Ping timeout: 246 seconds)
04:11:16 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection)
04:13:34 hiroaki joins (~hiroaki@ip4d167562.dynamic.kabel-deutschland.de)
04:13:42 <Feuermagier> glguy, I'm not entirely sure with the syntax yet. Let's say we have "stuffDeconstructor :: Integer -> String"; stuffDeconstructor seed = (generateStuff seed)
04:13:59 <Feuermagier> now generateStuff returns a Stuff
04:14:09 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 272 seconds)
04:14:12 <Feuermagier> but I want its String only
04:16:40 <glguy> Feuermagier, important (stuffDeconstructor seed)
04:16:58 <Feuermagier> oh, thx!
04:17:13 <glguy> --or-- stuffDeconstructor seed = important (generateStuff seed)
04:18:18 Andrologic_ joins (~Andrologi@90.221.74.173)
04:19:33 × ahf_ quits (ahf@irssi/staff/ahf) (Quit: Lost terminal)
04:19:55 <Feuermagier> glguy, What if the types aren't named, would this still work?
04:21:10 rayyyy joins (~nanoz@gateway/tor-sasl/nanoz)
04:25:11 × ahf quits (ahf@irssi/staff/ahf) (Remote host closed the connection)
04:25:17 ahf joins (ahf@irssi/staff/ahf)
04:25:19 ahf_ joins (ahf@irssi/staff/ahf)
04:25:32 × ahf_ quits (ahf@irssi/staff/ahf) (Client Quit)
04:27:31 projectako joins (~projectak@cpe-107-185-181-88.socal.res.rr.com)
04:27:34 <projectako> http://ebay.us/3JHc3H?cmpnId=5338273189
04:27:34 projectako parts (~projectak@cpe-107-185-181-88.socal.res.rr.com) ()
04:31:17 mirrorbird joins (~psutcliff@2a00:801:42b:aff3:74af:2f22:932d:eac0)
04:33:58 × mctpyt quits (~mctpyt@unaffiliated/mctpyt) (Quit: WeeChat 3.0)
04:36:13 × Saukk quits (~Saukk@83-148-239-3.dynamic.lounea.fi) (Remote host closed the connection)
04:37:08 nly parts (~user@unaffiliated/nly) ("ERC (IRC client for Emacs 27.1)")
04:38:12 × ahf quits (ahf@irssi/staff/ahf) (Remote host closed the connection)
04:38:46 × srk quits (~sorki@gateway/tor-sasl/sorki) (Ping timeout: 268 seconds)
04:40:37 × hexo quits (~hexo@gateway/tor-sasl/hexo) (Ping timeout: 268 seconds)
04:40:45 srk joins (~sorki@gateway/tor-sasl/sorki)
04:40:49 hacxman joins (~hexo@gateway/tor-sasl/hexo)
04:41:13 hacxman is now known as hexo
04:42:25 × jespada quits (~jespada@90.254.241.81) (Ping timeout: 240 seconds)
04:44:41 jespada joins (~jespada@90.254.241.81)
04:46:12 ahf joins (ahf@irssi/staff/ahf)
04:52:32 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
04:56:02 × hexo quits (~hexo@gateway/tor-sasl/hexo) (Ping timeout: 268 seconds)
04:56:02 × srk quits (~sorki@gateway/tor-sasl/sorki) (Ping timeout: 268 seconds)
04:57:16 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Ping timeout: 256 seconds)
04:58:25 user1 joins (~user1@88.231.92.184)
04:58:39 <user1> whats up everybody?
04:58:49 × user1 quits (~user1@88.231.92.184) (Client Quit)
04:59:06 hexo joins (~hexo@gateway/tor-sasl/hexo)
04:59:06 srk joins (~sorki@gateway/tor-sasl/sorki)
05:04:27 bogdanp joins (~bogdanp@188.24.80.165)
05:04:43 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
05:04:56 Tario joins (~Tario@201.192.165.173)
05:05:32 × prlCIql6ruclcri quits (~f9jawUfat@2800:810:514:e7:183e:966b:276f:cde5) (Quit: Leaving)
05:06:31 × rayyyy quits (~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 268 seconds)
05:06:31 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 268 seconds)
05:07:10 prlCIql6ruclcri joins (~f9jawUfat@2800:810:514:e7:590b:5921:26d2:cc71)
05:08:46 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 256 seconds)
05:11:23 × drbean quits (~drbean@TC210-63-209-49.static.apol.com.tw) (Ping timeout: 256 seconds)
05:18:48 rayyyy joins (~nanoz@gateway/tor-sasl/nanoz)
05:19:21 p7lpa1ugixavugu joins (~yaaic@2800:810:514:e7:7d4a:ba43:c831:bee6)
05:20:15 <Feuermagier> how do I match against entire strings in IO input?
05:21:14 <Feuermagier> https://en.wikibooks.org/wiki/Haskell/Libraries/IO here the match is only against a single char. I'd like to match against a commandword, like "performActionA"
05:24:37 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
05:24:57 Tario joins (~Tario@201.192.165.173)
05:25:45 × vs^ quits (vs@ip98-184-89-2.mc.at.cox.net) ()
05:25:50 ixaxaar joins (~ixaxaar@49.207.210.215)
05:26:09 <dsal> if you can match strings at all, youc an do it in IO with fmap.
05:26:12 vonfry joins (~user@113.74.134.170)
05:30:24 × p7lpa1ugixavugu quits (~yaaic@2800:810:514:e7:7d4a:ba43:c831:bee6) (Remote host closed the connection)
05:30:44 p7lpa1ugixavugu joins (~yaaic@2800:810:514:e7:7d4a:ba43:c831:bee6)
05:33:36 × p7lpa1ugixavugu quits (~yaaic@2800:810:514:e7:7d4a:ba43:c831:bee6) (Client Quit)
05:34:19 × jedws quits (~jedws@121.209.139.157) (Quit: My MacBook has gone to sleep. ZZZzzz…)
05:34:24 nrh^ joins (nrh@ip98-184-89-2.mc.at.cox.net)
05:35:16 p7lpa1ugixavugu joins (~atomic@2800:810:514:e7:7d4a:ba43:c831:bee6)
05:35:24 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
05:35:55 × jrqc quits (~rofl@96.78.87.197) (Read error: Connection reset by peer)
05:35:55 bogdanp joins (~bogdanp@188.24.80.165)
05:36:07 drbean joins (~drbean@TC210-63-209-36.static.apol.com.tw)
05:36:30 × prlCIql6ruclcri quits (~f9jawUfat@2800:810:514:e7:590b:5921:26d2:cc71) (Quit: Leaving)
05:36:31 × ADG1089_ quits (~adg1089@27.63.60.143) (Read error: Connection reset by peer)
05:36:43 × Tario quits (~Tario@201.192.165.173) (Ping timeout: 260 seconds)
05:36:57 ADG1089_ joins (~adg1089@223.226.159.22)
05:40:21 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 246 seconds)
05:41:58 × haveo quits (~haveo@sl35.iuwt.fr) (Ping timeout: 260 seconds)
05:42:04 × polux200137 quits (~polux@51.15.169.172) (Ping timeout: 240 seconds)
05:42:33 × anoe quits (~anoe@delanoe.org) (Ping timeout: 260 seconds)
05:42:56 polux200137 joins (~polux@51.15.169.172)
05:43:04 haveo joins (~haveo@sl35.iuwt.fr)
05:43:17 anoe joins (~anoe@delanoe.org)
05:46:24 × electricityZZZZ quits (~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
05:46:37 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
05:46:38 hackage tasty-sugar 1.0.1.1 - Tests defined by Search Using Golden Answer References https://hackage.haskell.org/package/tasty-sugar-1.0.1.1 (KevinQuick)
05:46:50 electricityZZZZ joins (~electrici@108-216-157-17.lightspeed.sntcca.sbcglobal.net)
05:51:16 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Ping timeout: 256 seconds)
05:51:52 nineonin_ joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
05:53:49 × zebrag quits (~inkbottle@aaubervilliers-654-1-120-135.w86-198.abo.wanadoo.fr) (Quit: Konversation terminated!)
05:54:42 × nineonine quits (~nineonine@50.216.62.2) (Ping timeout: 246 seconds)
05:56:09 × mirrorbird quits (~psutcliff@2a00:801:42b:aff3:74af:2f22:932d:eac0) (Quit: Leaving)
05:57:39 ADG1089__ joins (~aditya@223.226.159.22)
06:01:51 Jd007 joins (~Jd007@162.156.11.151)
06:02:08 × Jd007 quits (~Jd007@162.156.11.151) (Client Quit)
06:02:48 Jd007 joins (~Jd007@162.156.11.151)
06:04:05 × frankdmartinez quits (~frankdmar@208.91.107.132) (Ping timeout: 256 seconds)
06:07:26 johnw joins (~johnw@haskell/developer/johnw)
06:07:52 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
06:08:17 jedws joins (~jedws@121.209.139.157)
06:08:24 × ADG1089_ quits (~adg1089@223.226.159.22) (Read error: Connection reset by peer)
06:08:25 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
06:10:04 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds)
06:13:41 vonfry parts (~user@113.74.134.170) ("ERC (IRC client for Emacs 27.1.90)")
06:14:04 × machinedgod quits (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 240 seconds)
06:16:49 × nineonin_ quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
06:17:32 nineonine joins (~nineonine@50.216.62.2)
06:23:34 sord937 joins (~sord937@gateway/tor-sasl/sord937)
06:28:04 zx joins (637ce278@99-124-226-120.lightspeed.rcsntx.sbcglobal.net)
06:33:58 × Sheilong quits (uid293653@gateway/web/irccloud.com/x-zayuevwgpsadults) ()
06:35:42 × ukari quits (~ukari@unaffiliated/ukari) (Remote host closed the connection)
06:39:01 bogdanp joins (~bogdanp@188.24.80.165)
06:40:09 nakaji_dayo joins (3c93f368@softbank060147243104.bbtec.net)
06:40:47 × nakaji_dayo quits (3c93f368@softbank060147243104.bbtec.net) (Quit: Connection closed)
06:43:24 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 256 seconds)
06:44:02 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:45:05 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds)
06:48:55 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Remote host closed the connection)
06:49:25 × jedws quits (~jedws@121.209.139.157) (Quit: My MacBook has gone to sleep. ZZZzzz…)
06:51:03 jedws joins (~jedws@121.209.139.157)
06:51:41 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
06:55:28 × ADG1089__ quits (~aditya@223.226.159.22) (Remote host closed the connection)
06:55:45 danvet joins (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa)
06:56:53 × Volt_ quits (~Volt_@c-73-145-164-70.hsd1.mi.comcast.net) (Quit: )
06:59:46 knupfer joins (~Thunderbi@200116b82c70da00e4b196fffe5d6193.dip.versatel-1u1.de)
07:00:06 × Rudd0 quits (~Rudd0@185.189.115.103) (Ping timeout: 272 seconds)
07:02:11 × knupfer quits (~Thunderbi@200116b82c70da00e4b196fffe5d6193.dip.versatel-1u1.de) (Remote host closed the connection)
07:02:19 knupfer joins (~Thunderbi@200116b82c70da0034d2ffe034e16ff0.dip.versatel-1u1.de)
07:05:00 × adeene quits (~adeene@181.131.0.191) (Quit: Leaving)
07:05:23 adeene joins (~adeene@181.131.0.191)
07:06:34 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
07:11:25 × zx quits (637ce278@99-124-226-120.lightspeed.rcsntx.sbcglobal.net) (Quit: Ping timeout (120 seconds))
07:12:13 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
07:16:40 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
07:16:51 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
07:18:40 × nullifidian quits (~nullifidi@unaffiliated/nullifidian) (Quit: Leaving)
07:20:07 zx joins (637ce278@99-124-226-120.lightspeed.rcsntx.sbcglobal.net)
07:25:46 × zx quits (637ce278@99-124-226-120.lightspeed.rcsntx.sbcglobal.net) (Quit: Connection closed)
07:27:27 asheshambasta joins (~user@ptr-e1lysawdkgbchi3df06.18120a2.ip6.access.telenet.be)
07:30:00 × Sgeo quits (~Sgeo@ool-18b98aa4.dyn.optonline.net) (Read error: Connection reset by peer)
07:30:47 SupaYoshii joins (~supayoshi@213-10-140-13.fixed.kpn.net)
07:31:13 × nineonine quits (~nineonine@50.216.62.2) (Ping timeout: 256 seconds)
07:31:13 × Jd007 quits (~Jd007@162.156.11.151) (Ping timeout: 256 seconds)
07:31:13 × SupaYoshi quits (~supayoshi@213-10-140-13.fixed.kpn.net) (Ping timeout: 256 seconds)
07:31:13 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 256 seconds)
07:31:13 × Deewiant quits (~deewiant@de1.ut.deewiant.iki.fi) (Ping timeout: 256 seconds)
07:31:17 takuan_dozo joins (~takuan@178-116-218-225.access.telenet.be)
07:31:20 Deewiant joins (~deewiant@de1.ut.deewiant.iki.fi)
07:31:35 × plutoniix quits (~q@184.82.204.73) (Ping timeout: 256 seconds)
07:31:35 × columbarius1 quits (~columbari@mue-88-130-54-057.dsl.tropolys.de) (Ping timeout: 256 seconds)
07:31:59 plutoniix joins (~q@184.82.204.73)
07:32:09 × nrh^ quits (nrh@ip98-184-89-2.mc.at.cox.net) (Ping timeout: 256 seconds)
07:32:09 columbarius1 joins (~columbari@mue-88-130-54-057.dsl.tropolys.de)
07:32:22 nrh^ joins (nrh@ip98-184-89-2.mc.at.cox.net)
07:32:42 <Axman6> Is there an easy way to compare the results of two criterion runs? Wanting to see if there's any improvement between form a (hopeful
07:32:49 <Axman6> ) optimisation
07:32:57 bogdanp joins (~bogdanp@188.24.80.165)
07:35:03 ADG1089__ joins (~aditya@223.226.159.22)
07:37:34 × p7lpa1ugixavugu quits (~atomic@2800:810:514:e7:7d4a:ba43:c831:bee6) (Quit: AtomicIRC: The nuclear option.)
07:38:00 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 264 seconds)
07:40:20 × polyphem quits (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (Ping timeout: 246 seconds)
07:44:55 bogdanp joins (~bogdanp@188.24.80.165)
07:46:21 jamm joins (~jamm@unaffiliated/jamm)
07:50:26 × jamm quits (~jamm@unaffiliated/jamm) (Ping timeout: 240 seconds)
07:54:06 × jedws quits (~jedws@121.209.139.157) (Quit: My MacBook has gone to sleep. ZZZzzz…)
07:54:58 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 260 seconds)
07:56:27 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
08:00:08 nakaji_dayo joins (3c93f368@softbank060147243104.bbtec.net)
08:00:20 × nakaji_dayo quits (3c93f368@softbank060147243104.bbtec.net) (Client Quit)
08:04:04 jedws joins (~jedws@121.209.139.157)
08:06:03 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
08:06:15 bogdanp joins (~bogdanp@188.24.80.165)
08:06:48 × DataComputist quits (~lumeng@50.43.26.251) (Ping timeout: 264 seconds)
08:08:55 × adeene quits (~adeene@181.131.0.191) (Read error: Connection reset by peer)
08:09:48 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Ping timeout: 264 seconds)
08:10:28 DataComputist joins (~lumeng@50.43.26.251)
08:11:22 <dminuoso> Not bad, I again managed to end up with a stale dist-newstyle cache.. it just wouldn't recognize modifications to a source file..
08:11:29 <dminuoso> Something is really fishy here
08:11:46 <maerwald> which cabal
08:12:13 <dminuoso> 3.2.0.0
08:12:27 <maerwald> try 3.4 rc3
08:12:27 × rawles quits (~r@unaffiliated/rawles) (Ping timeout: 260 seconds)
08:12:42 <dminuoso> Where there particular fixes towards this?
08:13:09 nineonine joins (~nineonine@50.216.62.2)
08:13:31 <maerwald> Don't know, but always report bugs against the latest version and 3.4 rc3 has been out for a while and some use it in production
08:14:14 rawles joins (~r@unaffiliated/rawles)
08:14:21 <maerwald> I haven't experienced something like this in a while
08:15:04 <dminuoso> Mmm yeah. Im dead convinced there's a bug lurking around, every few weeks I have one of those `nuke dist-newstyle` and it suddenly compiles again moments..
08:15:18 <dminuoso> But only since 3.2.0.0. The annoying part is, I cant reproduce it
08:17:08 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
08:17:59 <maerwald> wouldn't be a but otherwise if you could reproduce it, right?
08:18:07 <maerwald> *bug
08:18:33 × nineonine quits (~nineonine@50.216.62.2) (Ping timeout: 246 seconds)
08:20:13 <dminuoso> I have a theory. phadej placed a heisenbug inside cabal-install to force people motivated enough to find this help and contribute to cabal-install
08:20:15 <dminuoso> What a sinister plan.
08:20:25 × jedws quits (~jedws@121.209.139.157) (Quit: My MacBook has gone to sleep. ZZZzzz…)
08:22:02 <maerwald> I have another theory: cabal-install had too many drive-by contributors and too few maintainers.
08:22:48 kritzefitz joins (~kritzefit@fw-front.credativ.com)
08:22:59 × xff0x_ quits (~xff0x@2001:1a81:521c:ad00:21de:ec80:9043:6773) (Ping timeout: 260 seconds)
08:23:40 xff0x_ joins (~xff0x@2001:1a81:521c:ad00:8d06:ced3:e6bf:47a2)
08:26:19 <maerwald> Oh, and that most operations aren't atomic. Killing cabal or GHC can have all sorts of funny effects
08:26:44 cfricke joins (~cfricke@unaffiliated/cfricke)
08:27:20 <dminuoso> Mmm, that could actually be it. I have a tendency to send SIGINT to GHC when I realize it wouldn't compile anyway
08:30:43 ubert joins (~Thunderbi@p200300ecdf1ee06ce6b318fffe838f33.dip0.t-ipconnect.de)
08:32:33 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
08:33:00 pera joins (pera@gateway/vpn/mullvad/pera)
08:33:41 × drbean quits (~drbean@TC210-63-209-36.static.apol.com.tw) (Ping timeout: 256 seconds)
08:35:18 × danso quits (~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009) (Quit: WeeChat 3.0)
08:36:03 × xff0x_ quits (~xff0x@2001:1a81:521c:ad00:8d06:ced3:e6bf:47a2) (Ping timeout: 260 seconds)
08:38:04 xff0x_ joins (~xff0x@2001:1a81:522c:a800:1b8f:4cc2:9bdd:ac52)
08:42:06 chele joins (~chele@ip5b40237d.dynamic.kabel-deutschland.de)
08:48:30 Neuromancer joins (~Neuromanc@unaffiliated/neuromancer)
08:54:25 coot joins (~coot@37.30.55.132.nat.umts.dynamic.t-mobile.pl)
08:56:40 × berberman_ quits (~berberman@unaffiliated/berberman) (Quit: ZNC 1.8.2 - https://znc.in)
08:57:32 berberman joins (~berberman@unaffiliated/berberman)
08:58:43 × magnuscake quits (~magnuscak@87-121-92-61.dyn.launtel.net.au) (Quit: Leaving)
08:59:36 × jchia__ quits (~jchia@58.32.32.155) (Ping timeout: 240 seconds)
09:01:04 Franciman joins (~francesco@host-79-51-37-36.retail.telecomitalia.it)
09:02:02 rdivyanshu joins (uid322626@gateway/web/irccloud.com/x-qvgxasklpnabqoft)
09:04:27 jchia__ joins (~jchia@58.32.32.155)
09:07:34 ph88^ joins (~ph88@2a02:8109:9e00:7e5c:795a:5528:8c2c:51fe)
09:08:56 × berberman quits (~berberman@unaffiliated/berberman) (Ping timeout: 240 seconds)
09:10:21 berberman joins (~berberman@unaffiliated/berberman)
09:16:11 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
09:16:14 × jchia__ quits (~jchia@58.32.32.155) (Ping timeout: 256 seconds)
09:16:37 × xff0x_ quits (~xff0x@2001:1a81:522c:a800:1b8f:4cc2:9bdd:ac52) (Ping timeout: 260 seconds)
09:17:18 xff0x_ joins (~xff0x@2001:1a81:522c:a800:ae0c:654f:160c:79b4)
09:18:02 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds)
09:20:50 × zaquest quits (~notzaques@5.128.210.178) (Quit: Leaving)
09:27:38 hackage text 1.2.4.1 - An efficient packed Unicode text type. https://hackage.haskell.org/package/text-1.2.4.1 (HerbertValerioRiedel)
09:28:23 zaquest joins (~notzaques@5.128.210.178)
09:29:51 × heatsink quits (~heatsink@2600:1700:bef1:5e10:6c35:c27b:9d47:22a1) (Remote host closed the connection)
09:29:53 kuribas joins (~user@ptr-25vy0i9v74bayflbmuo.18120a2.ip6.access.telenet.be)
09:33:08 niekvandepas joins (~niekvande@dhcp-077-249-088-250.chello.nl)
09:34:03 raichoo joins (~raichoo@213.240.178.58)
09:37:16 × hnOsmium0001 quits (uid453710@gateway/web/irccloud.com/x-rmkzpmhvyfmtsudj) (Quit: Connection closed for inactivity)
09:44:39 × seveg quits (~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk) (Ping timeout: 272 seconds)
09:45:55 × niekvandepas quits (~niekvande@dhcp-077-249-088-250.chello.nl) (Remote host closed the connection)
09:47:16 Varis joins (~Tadas@unaffiliated/varis)
09:52:43 × ubert quits (~Thunderbi@p200300ecdf1ee06ce6b318fffe838f33.dip0.t-ipconnect.de) (Remote host closed the connection)
09:53:05 × Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection)
09:53:47 <kuribas> Do you often feel the need to debug production?
09:54:16 <kuribas> I have this conjecture, that lisps are great for "debugging production", because it's unavoidable to have bugs in production.
09:55:02 jonathanx joins (~jonathan@h-176-109.A357.priv.bahnhof.se)
09:55:39 mbomba joins (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca)
09:56:01 <kuribas> I mean bugs that are hard to solve, like validation errors that pop up as stack traces.
09:56:12 <jonathanx> Lib request: Map implementation with type-level natural specifying the number of key/value pairs it contains. Does this exist?
09:56:16 Varis joins (~Tadas@unaffiliated/varis)
09:56:26 jrqc joins (~rofl@96.78.87.197)
09:56:56 __monty__ joins (~toonn@unaffiliated/toonn)
09:57:11 jamm joins (~jamm@unaffiliated/jamm)
09:57:37 <kuribas> Where in haskell you are more careful with handling side conditions, providing good error messages...
09:59:49 <[exa]> the whole aim of lisps as interpretable languages with easy reflection is to hack things together easily, you can't blame the language for programmers not using this to create robustness :]
10:00:07 Alleria joins (~textual@2603-7000-3040-0000-6de2-9de3-adc0-7711.res6.spectrum.com)
10:00:15 hekkaidekapus] joins (~tchouri@gateway/tor-sasl/hekkaidekapus)
10:00:28 Rudd0 joins (~Rudd0@185.189.115.108)
10:00:31 Alleria is now known as Guest95878
10:00:36 <kuribas> yeah, it's a different way of working...
10:01:31 LKoen joins (~LKoen@16.175.9.109.rev.sfr.net)
10:02:31 × rayyyy quits (~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 268 seconds)
10:02:44 merijn joins (~merijn@83-160-49-249.ip.xs4all.nl)
10:03:08 × hekkaidekapus[ quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 268 seconds)
10:03:17 <merijn> dminuoso: Are you using Template Haskell?
10:03:21 niekvandepas joins (~niekvande@dhcp-077-249-088-250.chello.nl)
10:04:14 × mbomba quits (~mbomba@bras-base-toroon2719w-grc-53-142-114-5-26.dsl.bell.ca) (Quit: WeeChat 3.0)
10:04:43 × Guest95878 quits (~textual@2603-7000-3040-0000-6de2-9de3-adc0-7711.res6.spectrum.com) (Ping timeout: 260 seconds)
10:05:00 jchia__ joins (~jchia@jungle.jchia.net)
10:05:07 gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh)
10:05:54 <dminuoso> merijn: Yes.
10:07:11 <kuribas> [exa]: can I blame the programmers then? :-P
10:07:25 × niekvandepas quits (~niekvande@dhcp-077-249-088-250.chello.nl) (Ping timeout: 240 seconds)
10:08:15 <merijn> dminuoso: Cabal doesn't/can't properly track TH registered dependencies, so that might also play a role
10:08:31 <maerwald> kuribas: if you think in haskell ppl handle side conditions more carefully, then you could start by fixing signal handling in cabal-install and shake :D
10:09:00 <merijn> maerwald: eh
10:09:07 <kuribas> maerwald: good point :)
10:09:10 <merijn> maerwald: You miswrote "fix signal handling in GHC's RTS"
10:09:25 × jchia__ quits (~jchia@jungle.jchia.net) (Remote host closed the connection)
10:09:28 <merijn> It is, in my opinion, currently fundamentally impossible to properly handle signals in GHC's RTS
10:09:31 <maerwald> too hard
10:09:45 <merijn> And fixing that clusterfuck is on top of my "I'll get too it when my thesis is done" list
10:09:51 <merijn> maerwald: Naah, it's not
10:10:31 jchia__ joins (~jchia@58.32.32.155)
10:10:46 <merijn> maerwald: I've done proper signal handling in multi-threaded RTS before. It's not even that hard to do properly, but it will require some pretty fundamental changes to how signal handling is done currently
10:11:48 <merijn> maerwald: There's really only one sensible way in any multi-threaded program. That is: Mask *everything* in every thread and have a dedicated RTS thread that uses sigwait to wait for signals
10:11:54 × jamm quits (~jamm@unaffiliated/jamm) (Remote host closed the connection)
10:12:35 <merijn> maerwald: Needs a bit of diving into the details to ensure stuff like SIGSEGV plays nicely, but I don't think that's too hard to figure out
10:13:15 <maerwald> what do you think of safe-exceptions? it's pretty controversial, because now you're trading aborted handlers with deadlocks
10:13:28 <arahael> merijn: I'd be a bit more boneheaded than that, and say the only correct way to handle signals is to catch them all, and have them do nothing but set a signal-specific flag.
10:13:35 <arahael> merijn: Which is then queried by the main application.
10:13:48 <merijn> maerwald: Considering I'm pretty sure that *I* am responsible for the implementation that safe-exceptions uses, I'm in favour :p
10:13:59 <merijn> arahael: No, that's terrible
10:14:31 <arahael> merijn: It's boneheaded, I agree. I wouldn't say it's *terrible*.
10:14:38 <merijn> arahael: Because it would break several things that GHC supports now
10:14:54 <merijn> arahael: You'd lose interruptibleFFI, which can be supported just fine
10:14:55 <arahael> merijn: Ah, well, that could be fixed.
10:15:03 <merijn> arahael: Not while using that design
10:15:30 <merijn> arahael: Because using a signal handler means signals get delivered to random threads within the process
10:15:46 <merijn> arahael: So they can interrupt random system calls
10:16:12 <arahael> merijn: The advantage, however, is that there's a hard limit to how broken things get.
10:16:57 <merijn> arahael: I don't think so, tbh
10:17:26 × jchia__ quits (~jchia@58.32.32.155) (Ping timeout: 256 seconds)
10:17:28 <merijn> arahael: Experience teaches me that there is *no* hard limit on how clusterfucky signals can get, let alone signals + multi-threading
10:17:49 <arahael> merijn: It's probably overkill in a sane language, anyway. If I recall, the "interrupt handlers should only set a flag and that's it" idea is mostly in C, and hard realtime OS's.
10:17:54 <merijn> That's why I don't expect/trust anyone else to fix it :p
10:18:10 <arahael> Heh. That might be another motivation to "just set a flag and get out of the clusterfucky signal system". ;)
10:18:12 <merijn> arahael: Well, that is because you can't sanely do anything in signal handlers
10:18:22 <arahael> Right...
10:18:33 <merijn> arahael: Which is why you should just mask them all and have a dedicated thread waiting on them
10:18:41 <merijn> arahael: Then you *can* do sensible thing
10:18:43 <merijn> +s
10:19:05 <merijn> arahael: Because you are not running in a random context, you're running in a tightly controlled thread that's doing nothing else
10:19:15 <arahael> Yeah, that's fair.
10:19:22 <arahael> Honestly I haven't done much signal handling.
10:19:34 <merijn> arahael: Which, if you want to interact with the RTS (which you probably do) is crucial
10:19:53 <merijn> Because then you can signal Haskell threads/capabilities in a controlled way, interact with the scheduler, etc.
10:21:24 <merijn> That would also fix the current GHC API of letting you install IO actions as signal handler in a way that makes it sane
10:21:38 <arahael> Hmm? Actually could you elaborate on that bit?
10:21:52 geowiesnot joins (~user@87-89-181-157.abo.bbox.fr)
10:22:39 <arahael> You mean, so you could say, register a 'onSigTerm :: IO ()' as the signal handler? Wouldn't that be usual?
10:22:46 <merijn> arahael: https://hackage.haskell.org/package/base-4.14.1.0/docs/GHC-Conc-Signal.html#v:setHandler
10:22:57 jchia__ joins (~jchia@jungle.jchia.net)
10:23:01 <merijn> arahael: There is essentially 0 chance that the current implementation of that is *remotely* sane
10:23:40 <merijn> arahael: The odds of users writing a non-problematic "IO ()" to run in a signal handler are pretty damn small
10:24:03 <arahael> merijn: So, trustworthy - but not sane? ;) The funny thing is that I've never heard of a signal handling API that works well, predictably, in a good fashion.
10:24:26 × jchia__ quits (~jchia@jungle.jchia.net) (Remote host closed the connection)
10:24:49 <merijn> arahael: That's because no one reads APUE and as a result does stupid shit
10:24:53 jchia__ joins (~jchia@jungle.jchia.net)
10:25:09 <maerwald> we have to ship our code :D
10:25:18 <arahael> Hmpf. I've never read APUE either.
10:25:31 × hyiltiz-M quits (hyiltizkde@gateway/shell/kde/matrix/x-geyejkuncnhxmpdr) (Quit: killed)
10:25:33 <__monty__> Isn't this complicated by also having tobe compatible with windows? Or are its signals POSIX?
10:25:40 <arahael> I do know enough to be paranoid whenever I hear about signal handling.
10:26:32 <maerwald> yeah, cross-platform signal handling probably makes it worse
10:27:04 <merijn> __monty__: Signals don't exist on windows
10:27:05 × Codaraxis_ quits (Codaraxis@gateway/vpn/mullvad/codaraxis) (Read error: Connection reset by peer)
10:27:27 <merijn> maerwald: That, again, is why people should read APUE ;)
10:27:33 hyiltiz-M joins (hyiltizkde@gateway/shell/kde/matrix/x-jljmxicmadzpzslm)
10:27:50 <maerwald> BSD, Darwin,. ..
10:27:56 <merijn> maerwald: Which discusses how each major UNIX deviates from POSIX
10:28:06 <merijn> maerwald: And their definition of major includes HP/UX >.>
10:28:08 <maerwald> great... more clusterfuck
10:28:16 <merijn> maerwald: It Depends
10:28:17 niekvandepas joins (~niekvande@ip-145-116-131-65.wlan-int.ru.nl)
10:28:33 Codaraxis joins (~Codaraxis@91.193.4.38)
10:28:39 <merijn> Signal handling doesn't actually seem to deviate that much
10:28:52 <merijn> Mostly the existence/absence of certain signals
10:29:05 <merijn> Which isn't really relevant for handling them
10:29:47 <arahael> I thought windows has signals?
10:30:14 heatsink joins (~heatsink@2600:1700:bef1:5e10:6c35:c27b:9d47:22a1)
10:30:20 <arahael> Eg, https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/signal?view=msvc-160 Though, that _could_ be a compatibility layer.
10:30:49 <merijn> Well signal is horrifically broken and literally cannot be used correctly >.>
10:31:34 <arahael> Hmm. :) Which again lends further credence to the "set a flag and get the heck out". :)
10:31:41 <merijn> arahael: No
10:31:49 <merijn> arahael: You can't even do *that* correctly using signal
10:32:00 <merijn> arahael: You literally can't do *anything* correctly using signal
10:32:06 <merijn> That's why sigaction() was created
10:32:26 <merijn> Which doesn't seem to be on that windows page, so, uh, fun...
10:32:29 <merijn> Anyway, lunch
10:32:48 <arahael> Enjoy the lunch. :)
10:34:52 × heatsink quits (~heatsink@2600:1700:bef1:5e10:6c35:c27b:9d47:22a1) (Ping timeout: 244 seconds)
10:35:37 thc202 joins (~thc202@unaffiliated/thc202)
10:39:26 × jchia__ quits (~jchia@jungle.jchia.net) (Remote host closed the connection)
10:43:37 hackage zip 1.7.0 - Operations on zip archives https://hackage.haskell.org/package/zip-1.7.0 (mrkkrp)
10:44:09 acidjnk_new joins (~acidjnk@p200300d0c704e732989dd075055fe92d.dip0.t-ipconnect.de)
10:45:27 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
10:47:38 × quinn quits (~quinn@c-73-223-224-163.hsd1.ca.comcast.net) (Quit: ZNC 1.8.1 - https://znc.in)
10:47:52 Alleria__ joins (~textual@zrcout.mskcc.org)
10:48:22 dandart joins (~Thunderbi@home.dandart.co.uk)
10:50:03 imjacobclark joins (~imjacobcl@host86-129-42-107.range86-129.btcentralplus.com)
10:51:29 <imjacobclark> Hi there. I am trying to write a function that takes a "newtype Point a b = Point (a, b)" however when I use it "singleTerm :: [Point Int Int] Int -> Int " I get the error "Expected kind ‘* -> *’, but ‘[Point Int Int]’ has kind ‘*’"
10:51:31 ubert joins (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233)
10:52:23 <dminuoso> imjacobclark: Stare at `[Point Int Int] Int `
10:52:35 <imjacobclark> daamitttttt
10:52:35 <imjacobclark> ->
10:52:36 <imjacobclark> ha
10:52:37 <imjacobclark> thankyou
10:53:03 <dminuoso> It's curious, how good and exact GHCs errors often are.
10:54:11 fendor joins (~fendor@178.115.128.149.wireless.dyn.drei.com)
10:54:31 ulidtko|k joins (~ulidtko@193.111.48.79)
10:54:33 <dminuoso> imjacobclark: If you read the error carefully, you will notice that GHC has some reason to believe that `[Point Int Int]` is of kind `* -> *`. The reason GHC usually does that, is because of infererence.
10:54:53 <dminuoso> In this case, it's inferred to have `* -> *` because you're applying it to another type
10:56:20 × ChaiTRex quits (~ChaiTRex@gateway/tor-sasl/chaitrex) (Remote host closed the connection)
10:56:53 ChaiTRex joins (~ChaiTRex@gateway/tor-sasl/chaitrex)
10:57:02 nullifidian joins (~nullifidi@unaffiliated/nullifidian)
10:59:12 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 246 seconds)
10:59:14 × vicfred quits (vicfred@gateway/vpn/mullvad/vicfred) (Quit: Leaving)
10:59:56 nomeata joins (~jojo@dslb-084-056-082-238.084.056.pools.vodafone-ip.de)
11:01:35 Tops2 joins (~Tobias@dyndsl-095-033-095-048.ewe-ip-backbone.de)
11:03:58 Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas)
11:04:41 × nomeata quits (~jojo@dslb-084-056-082-238.084.056.pools.vodafone-ip.de) (Client Quit)
11:10:09 frankdmartinez joins (~frankdmar@208.91.107.132)
11:13:58 jamm joins (~jamm@unaffiliated/jamm)
11:14:14 × sgibber2018 quits (d055ed90@208.85.237.144) (Quit: Connection closed)
11:18:25 × jdt quits (~jdt@208.85.233.130) (Ping timeout: 240 seconds)
11:18:38 jdt joins (~jdt@208.85.233.130)
11:23:09 BosonCollider joins (~olofs@90-227-86-119-no542.tbcn.telia.com)
11:26:18 × jamm quits (~jamm@unaffiliated/jamm) (Remote host closed the connection)
11:26:25 × dandart quits (~Thunderbi@home.dandart.co.uk) (Quit: dandart)
11:27:42 × BosonCollider quits (~olofs@90-227-86-119-no542.tbcn.telia.com) (Ping timeout: 256 seconds)
11:29:39 × geowiesnot quits (~user@87-89-181-157.abo.bbox.fr) (Ping timeout: 246 seconds)
11:30:03 jchia__ joins (~jchia@58.32.32.155)
11:31:37 × nullifidian quits (~nullifidi@unaffiliated/nullifidian) (Quit: Leaving)
11:31:43 × rdivyanshu quits (uid322626@gateway/web/irccloud.com/x-qvgxasklpnabqoft) (Quit: Connection closed for inactivity)
11:33:42 × ericsagnes quits (~ericsagne@2405:6580:0:5100:8e8a:9396:9535:8e0a) (Ping timeout: 260 seconds)
11:33:57 jedws joins (~jedws@121.209.139.157)
11:34:24 × denisse quits (~spaceCat@gateway/tor-sasl/alephzer0) (Ping timeout: 268 seconds)
11:35:35 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 256 seconds)
11:35:36 × Moyst quits (~moyst@212-149-213-144.bb.dnainternet.fi) (Ping timeout: 272 seconds)
11:36:01 Moyst joins (~moyst@85-76-109-176-nat.elisa-mobile.fi)
11:36:03 gxt joins (~gxt@gateway/tor-sasl/gxt)
11:36:28 Tops21 joins (~Tobias@dyndsl-095-033-095-048.ewe-ip-backbone.de)
11:36:32 × Stanley00 quits (~stanley00@unaffiliated/stanley00) ()
11:37:17 × jchia__ quits (~jchia@58.32.32.155) (Ping timeout: 256 seconds)
11:39:47 × Tops2 quits (~Tobias@dyndsl-095-033-095-048.ewe-ip-backbone.de) (Ping timeout: 256 seconds)
11:40:15 seveg joins (~gabriel@2a02-ab04-0249-8d00-dea6-32ff-fe17-0993.dynamic.v6.chello.sk)
11:40:41 denisse joins (~spaceCat@gateway/tor-sasl/alephzer0)
11:40:42 × jedws quits (~jedws@121.209.139.157) (Quit: My MacBook has gone to sleep. ZZZzzz…)
11:41:04 ulidtko|kk joins (~ulidtko@194.54.80.38)
11:42:15 mirrorbird joins (~psutcliff@2a00:801:42b:aff3:74af:2f22:932d:eac0)
11:43:45 × ulidtko|k quits (~ulidtko@193.111.48.79) (Ping timeout: 256 seconds)
11:45:58 ericsagnes joins (~ericsagne@2405:6580:0:5100:5b64:e916:ea7b:a5fd)
11:48:17 × Neuromancer quits (~Neuromanc@unaffiliated/neuromancer) (Ping timeout: 256 seconds)
11:54:35 jamm joins (~jamm@unaffiliated/jamm)
11:55:58 p-core joins (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56)
11:57:26 neiluj joins (~jco@91-167-203-101.subs.proxad.net)
11:57:46 × neiluj quits (~jco@91-167-203-101.subs.proxad.net) (*.net *.split)
11:57:46 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (*.net *.split)
11:57:46 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (*.net *.split)
11:57:46 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (*.net *.split)
11:57:46 × Katarushisu quits (~Katarushi@cpc152083-finc20-2-0-cust170.4-2.cable.virginm.net) (*.net *.split)
11:57:46 × hololeap quits (~hololeap@unaffiliated/hololeap) (*.net *.split)
11:57:46 × sakirious quits (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net) (*.net *.split)
11:57:46 × wz1000 quits (~wz1000@static.11.113.47.78.clients.your-server.de) (*.net *.split)
11:57:46 × thecoffemaker quits (~thecoffem@unaffiliated/thecoffemaker) (*.net *.split)
11:57:46 × b3z quits (~b3z@vmd41962.contaboserver.net) (*.net *.split)
11:57:46 × ViCi quits (daniel@10PLM.ro) (*.net *.split)
11:57:46 × hvr_ quits (~hvr@haskell/developer/hvr) (*.net *.split)
11:57:46 × petersen quits (~petersen@redhat/juhp) (*.net *.split)
11:57:46 × b4er quits (~b4er@193.27.14.109) (*.net *.split)
11:57:46 × AWizzArd quits (~code@unaffiliated/awizzard) (*.net *.split)
11:57:46 × Khisanth quits (~Khisanth@24.sub-174-244-147.myvzw.com) (*.net *.split)
11:57:46 × waskell quits (~quassel@d172-218-41-115.bchsia.telus.net) (*.net *.split)
11:57:46 × statusfailed quits (~statusfai@statusfailed.com) (*.net *.split)
11:57:46 × puffnfresh quits (~puffnfres@119-17-138-164.77118a.mel.static.aussiebb.net) (*.net *.split)
11:57:46 × sujeet quits (sujeet@unaffiliated/freeboson) (*.net *.split)
11:57:46 × devalot quits (~ident@mail.pmade.com) (*.net *.split)
11:57:46 × puffnfresh_ quits (~puffnfres@45.76.124.5) (*.net *.split)
11:57:46 × SlashLife quits (~slashlife@stienen.name) (*.net *.split)
11:57:46 × cpape quits (~user@static.180.18.203.116.clients.your-server.de) (*.net *.split)
11:57:46 × piele quits (~piele@tbonesteak.creativeserver.net) (*.net *.split)
11:57:46 × Anthaas quits (~Anthaas@unaffiliated/anthaas) (*.net *.split)
11:57:46 × pieguy128 quits (~pieguy128@bras-base-mtrlpq5031w-grc-39-70-27-244-102.dsl.bell.ca) (*.net *.split)
11:57:46 × edwtjo quits (~edwtjo@fsf/member/edwtjo) (*.net *.split)
11:57:46 × zmagii quits (~zmagii@unaffiliated/zmagii) (*.net *.split)
11:57:46 × otulp quits (~otulp@ti0187q162-6038.bb.online.no) (*.net *.split)
11:57:46 × mmaruseacph2 quits (~mihai@198.199.100.72) (*.net *.split)
11:57:47 × johnyginthehouse quits (~johnygint@159.203.30.32) (*.net *.split)
11:57:47 × vancz quits (~vancz@unaffiliated/vancz) (*.net *.split)
11:57:47 × dminuoso quits (~dminuoso@unaffiliated/dminuoso) (*.net *.split)
11:57:47 × ralu quits (~ralu@static.211.245.203.116.clients.your-server.de) (*.net *.split)
11:57:47 × vk3wtf quits (~doc@203.221.224.44) (*.net *.split)
11:57:47 × quicksilver quits (~jules@roobarb.crazydogs.org) (*.net *.split)
11:57:47 × whatisRT quits (~whatisRT@ip5b416a33.dynamic.kabel-deutschland.de) (*.net *.split)
11:57:47 × tv- quits (~tv@unaffiliated/tv-) (*.net *.split)
11:57:47 × hc quits (~hc@fsfe/hc) (*.net *.split)
11:57:47 × Cathy quits (~Cathy@unaffiliated/cathy) (*.net *.split)
11:57:47 × mr_yogurt quits (~mr_yogurt@5.61.211.35.bc.googleusercontent.com) (*.net *.split)
11:57:47 × emergence quits (~emergence@vm0.max-p.me) (*.net *.split)
11:57:47 × gareth__ quits (~gareth__@104.236.161.134) (*.net *.split)
11:57:47 × jol quits (~jol@jol.dev) (*.net *.split)
11:57:47 × WzC quits (~Frank@77-162-168-71.fixed.kpn.net) (*.net *.split)
11:57:47 × arkeet` quits (~arkeet@moriya.ca) (*.net *.split)
11:57:47 × drewr quits (~drew@elastic/staff/drewr) (*.net *.split)
11:57:47 × voidcontext quits (~pgee@178.62.100.221) (*.net *.split)
11:57:47 × exarkun quits (~exarkun@14.79.69.34.bc.googleusercontent.com) (*.net *.split)
11:57:47 × andjjj23 quits (~irc@107.170.228.47) (*.net *.split)
11:57:47 × rprosper- quits (~adam@186.75.232.35.bc.googleusercontent.com) (*.net *.split)
11:57:54 hc joins (~hc@fsfe/hc)
11:57:54 b4er joins (~b4er@193.27.14.109)
11:57:55 ViCi joins (daniel@10PLM.ro)
11:57:55 imjacobc_ joins (~imjacobcl@host86-129-42-107.range86-129.btcentralplus.com)
11:57:58 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
11:58:00 waskell joins (~quassel@d172-218-41-115.bchsia.telus.net)
11:58:03 Gurkenglas_ joins (~Gurkengla@unaffiliated/gurkenglas)
11:58:03 exarkun joins (~exarkun@14.79.69.34.bc.googleusercontent.com)
11:58:03 whatisRT joins (~whatisRT@ip5b416a33.dynamic.kabel-deutschland.de)
11:58:05 wz1000 joins (~wz1000@static.11.113.47.78.clients.your-server.de)
11:58:08 zmagii joins (~zmagii@unaffiliated/zmagii)
11:58:11 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
11:58:16 tv- joins (~tv@unaffiliated/tv-)
11:58:19 edwtjo joins (~edwtjo@h-7-145.A213.priv.bahnhof.se)
11:58:19 × edwtjo quits (~edwtjo@h-7-145.A213.priv.bahnhof.se) (Changing host)
11:58:19 edwtjo joins (~edwtjo@fsf/member/edwtjo)
11:58:20 quicksilver joins (~jules@roobarb.crazydogs.org)
11:58:21 vancz joins (~vancz@unaffiliated/vancz)
11:58:22 mmaruseacph2 joins (~mihai@198.199.100.72)
11:58:22 voidcontext joins (~pgee@178.62.100.221)
11:58:23 sakirious joins (~sakirious@c-71-197-191-137.hsd1.wa.comcast.net)
11:58:24 vk3wtf joins (~doc@203.221.224.44)
11:58:31 gareth__ joins (~gareth__@104.236.161.134)
11:58:31 b3z joins (~b3z@vmd41962.contaboserver.net)
11:58:31 emergence joins (~emergence@vm0.max-p.me)
11:58:31 AWizzArd joins (~code@gehrels.uberspace.de)
11:58:31 Khisanth joins (~Khisanth@24.sub-174-244-147.myvzw.com)
11:58:31 puffnfresh joins (~puffnfres@119-17-138-164.77118a.mel.static.aussiebb.net)
11:58:31 cpape joins (~user@static.180.18.203.116.clients.your-server.de)
11:58:31 piele joins (~piele@tbonesteak.creativeserver.net)
11:58:31 johnyginthehouse joins (~johnygint@159.203.30.32)
11:58:31 mr_yogurt joins (~mr_yogurt@5.61.211.35.bc.googleusercontent.com)
11:58:31 WzC joins (~Frank@77-162-168-71.fixed.kpn.net)
11:58:31 andjjj23 joins (~irc@107.170.228.47)
11:58:32 ulidtko|k joins (~ulidtko@194.54.80.38)
11:58:33 dminuoso joins (~dminuoso@unaffiliated/dminuoso)
11:58:35 pieguy128 joins (~pieguy128@bras-base-mtrlpq5031w-grc-39-70-27-244-102.dsl.bell.ca)
11:58:37 SlashLife joins (~slashlife@stienen.name)
11:58:41 ralu joins (~ralu@static.211.245.203.116.clients.your-server.de)
11:58:41 × ulidtko|kk quits (~ulidtko@194.54.80.38) (Read error: Connection reset by peer)
11:58:41 × jonathanx quits (~jonathan@h-176-109.A357.priv.bahnhof.se) (Read error: Connection reset by peer)
11:58:42 neiluj joins (~jco@91-167-203-101.subs.proxad.net)
11:58:42 × neiluj quits (~jco@91-167-203-101.subs.proxad.net) (Changing host)
11:58:42 neiluj joins (~jco@unaffiliated/neiluj)
11:58:45 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
11:58:49 hololeap joins (~hololeap@unaffiliated/hololeap)
11:58:56 Anthaas joins (~Anthaas@unaffiliated/anthaas)
11:59:03 statusfailed joins (~statusfai@statusfailed.com)
11:59:03 jespada_ joins (~jespada@90.254.241.81)
11:59:05 sujeet joins (sujeet@unaffiliated/freeboson)
11:59:07 puffnfresh_ joins (~puffnfres@45.76.124.5)
11:59:08 otulp joins (~otulp@ti0187q162-6038.bb.online.no)
11:59:15 Katarushisu joins (~Katarushi@cpc152083-finc20-2-0-cust170.4-2.cable.virginm.net)
11:59:18 drewr joins (~drew@elastic/staff/drewr)
11:59:22 × jamm quits (~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds)
11:59:31 petersen joins (~petersen@redhat/juhp)
11:59:35 thecoffemaker joins (~thecoffem@unaffiliated/thecoffemaker)
11:59:45 Alleria joins (~textual@mskresolve-a.mskcc.org)
12:00:06 rprospero joins (~adam@186.75.232.35.bc.googleusercontent.com)
12:00:08 Alleria is now known as Guest33543
12:00:09 jol joins (~jol@jol.dev)
12:00:11 × Alleria__ quits (~textual@zrcout.mskcc.org) (Ping timeout: 256 seconds)
12:00:11 × jespada quits (~jespada@90.254.241.81) (Ping timeout: 256 seconds)
12:00:11 arkeet joins (arkeet@moriya.ca)
12:00:11 × arkeet quits (arkeet@moriya.ca) (Changing host)
12:00:11 arkeet joins (arkeet@unaffiliated/arkeet)
12:00:12 × adamCS quits (~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com) (Ping timeout: 264 seconds)
12:00:38 × acidjnk_new quits (~acidjnk@p200300d0c704e732989dd075055fe92d.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
12:00:45 × imjacobclark quits (~imjacobcl@host86-129-42-107.range86-129.btcentralplus.com) (Ping timeout: 256 seconds)
12:01:13 Cathy joins (~Cathy@unaffiliated/cathy)
12:01:19 × Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 256 seconds)
12:02:56 bogdanp joins (~bogdanp@188.24.80.165)
12:03:08 adamCS joins (~adamCS@ec2-34-207-160-255.compute-1.amazonaws.com)
12:04:05 × cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Ping timeout: 240 seconds)
12:04:12 devalot joins (~ident@mail.pmade.com)
12:13:22 jchia1 joins (~jchia@45.32.62.73)
12:14:23 × jchia1 quits (~jchia@45.32.62.73) (Remote host closed the connection)
12:14:33 benb joins (52456307@82-69-99-7.dsl.in-addr.zen.co.uk)
12:15:15 × jchia quits (~jchia@58.32.37.71) (Ping timeout: 256 seconds)
12:15:29 jchia joins (~jchia@58.32.70.251)
12:19:45 × plutoniix quits (~q@184.82.204.73) (Quit: Leaving)
12:20:15 philopsos joins (~caecilius@gateway/tor-sasl/caecilius)
12:25:50 × coeus quits (~coeus@p200300d0274147008292896d606877b0.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
12:29:24 mattycoch joins (3aa56852@58.165.104.82)
12:30:16 × mputz quits (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de) (Quit: mputz)
12:30:56 jchia__ joins (~jchia@58.32.38.49)
12:31:58 heatsink joins (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135)
12:32:18 viluon joins (uid453725@gateway/web/irccloud.com/x-buwkhmdreivhxbgq)
12:34:53 mattycoch is now known as nphard
12:37:14 × heatsink quits (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135) (Ping timeout: 264 seconds)
12:39:20 plutoniix joins (~q@184.82.204.73)
12:42:09 coeus joins (~coeus@p200300d0271a71003f6e8216a2f68215.dip0.t-ipconnect.de)
12:44:14 Wuzzy joins (~Wuzzy@p5b0df22a.dip0.t-ipconnect.de)
12:44:17 × nphard quits (3aa56852@58.165.104.82) (Ping timeout: 248 seconds)
12:45:11 × knupfer quits (~Thunderbi@200116b82c70da0034d2ffe034e16ff0.dip.versatel-1u1.de) (Quit: knupfer)
12:45:20 knupfer joins (~Thunderbi@200116b82c70da0049acd258c4c452c2.dip.versatel-1u1.de)
12:45:52 aveltras joins (uid364989@gateway/web/irccloud.com/x-pgszkpeaurxqzlip)
12:48:23 × olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 260 seconds)
12:49:20 <aveltras> i'd like to build a function which would only require the field accessor (eg mainCss or mainJs) to build a link with the following code, what would be the type of this function ? the goal is to only have to pass around that function on my app and not the Assets data type + the link builder
12:49:27 <aveltras> https://www.irccloud.com/pastebin/swuxws9O/
12:49:58 <aveltras> intended use with something like lucid would be
12:50:01 <aveltras> script_ [src_ $ buildAssetLink mainCss] (mempty:: Text)
12:50:13 Deide joins (~Deide@217.155.19.23)
12:50:27 <aveltras> the Assets data is gathered in the main function by parsing a manifest.json file
12:50:39 <merijn> aveltras: You can't really avoid passing the Assets data type around?
12:51:40 <merijn> aveltras: I mean, even if you *could* pass the field accessor (I'm not even sure what that'd mean?) how would you actually get the data without the Assets datatype?
12:52:04 <aveltras> because the buildLink is already partially applied with the Assets data in my main function
12:52:49 <merijn> aveltras: Right, but then you can just change buildLink to accept something like "(Asset -> Text) -> ... -> Link"
12:53:15 <merijn> Since field accessors function simply as functions "mainCss :: Asset -> Text"?
12:53:35 <aveltras> what i tried until now is
12:53:39 <aveltras> https://www.irccloud.com/pastebin/oeHOLU6u/
12:53:55 <aveltras> but then ghc complains that mainCss is not of type Assets obviously
12:54:00 × p8m_ quits (p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 246 seconds)
12:54:04 <merijn> aveltras: that seems wrong
12:54:11 × knupfer quits (~Thunderbi@200116b82c70da0049acd258c4c452c2.dip.versatel-1u1.de) (Quit: knupfer)
12:54:14 knupfer1 joins (~Thunderbi@mue-88-130-61-193.dsl.tropolys.de)
12:54:17 <aveltras> i think that s because that not guaranteed taht all fields would lead to a Text data
12:54:33 <merijn> aveltras: "buildAssetLink :: Assets -> Link", but you apply it to "mainCss :: Asset -> Link"
12:54:41 <merijn> eh
12:54:47 <merijn> "mainCss :: Asset -> Text"
12:55:10 <aveltras> there's no Link type here, only Text
12:55:13 × niekvandepas quits (~niekvande@ip-145-116-131-65.wlan-int.ru.nl) (Remote host closed the connection)
12:55:23 <merijn> Eh, my brain is fried
12:55:25 <merijn> Anyway
12:55:30 <aveltras> that s just bad naming on my part
12:55:33 p8m joins (p8m@gateway/vpn/protonvpn/p8m)
12:55:38 <merijn> Pressumably "Assets" /= "Asset -> Text"
12:55:39 niekvandepas joins (~niekvande@ip-145-116-131-65.wlan-int.ru.nl)
12:56:03 <aveltras> oh no
12:56:06 <aveltras> damn
12:56:08 <merijn> aveltras: So obviously it's a type error to apply "buildAssetLink :: Assets -> Text" to "mainCss :: Asset -> Text"
12:56:08 <aveltras> so much time lost
12:56:24 <aveltras> passed a wrong function type i my template function indeed
12:56:36 × cheater quits (~user@unaffiliated/cheater) (Ping timeout: 264 seconds)
12:56:36 knupfer1 is now known as knupfer
12:56:37 × plutoniix quits (~q@184.82.204.73) (Quit: Leaving)
12:56:39 <aveltras> ((Assets -> Text) -> Text) is much better indeed
12:56:46 <merijn> Presumably you meant something like "(Asset -> Text) -> Assets -> Text)" or whatever
12:57:11 <merijn> And then passing mainCss should just work
12:57:11 <dminuoso> Manually constructing SQL queries with variable amounts of fields, tractable where-clauses... all with postgresql-simple
12:57:16 <dminuoso> Is quite fun and easy.
12:57:22 <aveltras> ye it works now
12:57:37 <aveltras> thanks for your assistance here, should have double checked before asking
12:57:40 <dminuoso> More and more do I not understand how people can deal with orm nonsense, say like in django..
12:57:45 <aveltras> already had the right type in another function
12:57:54 <merijn> dminuoso: :p
12:58:50 <aveltras> while you're speaking of sql, has anyone tried using squeal ?
12:59:44 <merijn> aveltras: At first glance looks just as painful and awful as beam >.>
12:59:44 × niekvandepas quits (~niekvande@ip-145-116-131-65.wlan-int.ru.nl) (Ping timeout: 240 seconds)
13:00:22 <dminuoso> Instead of trying to connect SQL into the Haskell type system, I'd rather explore tacking a type system onto SQL itself..
13:00:29 <merijn> Typeclass with n billion parameters, everything lifted to the type level, etc.
13:00:40 <merijn> 5000 modules...
13:00:57 <merijn> dminuoso: tbh, I think it's kinda a dumb issue anyway
13:01:25 <merijn> Writing tests to check hand-written SQL vs your schema is trivial and probably much less work than maintaining an entire postgres eDSL >.>
13:01:33 <merijn> Probably compiles a billion times faster too :p
13:01:46 × tv- quits (~tv@unaffiliated/tv-) (Quit: WeeChat 2.8)
13:01:51 <dminuoso> Heh, most of my compile time is generics for aeson instances.
13:02:03 tv- joins (~tv@unaffiliated/tv-)
13:02:03 <aveltras> i like that it had migration support but had trouble constructing basic queries with it
13:02:10 <dminuoso> Which, if you tightly control the aeson generic options, are actually not so bad
13:02:18 <dminuoso> aveltras: "migration support"
13:02:24 <dminuoso> Do you wanna see how complicated migrations are?
13:02:41 <aveltras> you mean with squeal ?
13:02:59 <dminuoso> `data Migration = Migration { migTitle :: Text, migVersion :: Natural, migAction :: Connection -> IO ()`
13:03:08 <dminuoso> one does not need library support for "migrations"
13:03:57 <aveltras> i mean, the type checking that the migration you're building is indeed getting you from schemaA to schemaB
13:04:09 <idnar> dminuoso: have you used Opaleye?
13:04:19 <dminuoso> idnar: No, but it has caught my eyes a few times.
13:04:45 adeene joins (~adeene@181.131.0.191)
13:07:08 hackage universum 1.7.2 - Custom prelude used in Serokell https://hackage.haskell.org/package/universum-1.7.2 (gromak)
13:08:15 Tario joins (~Tario@201.192.165.173)
13:10:28 × pjb quits (~t@2a01cb04063ec50089de8c855996f2de.ipv6.abo.wanadoo.fr) (Read error: Connection reset by peer)
13:11:34 cheater joins (~user@unaffiliated/cheater)
13:11:35 jackk_Doe joins (~jackk@205.178.111.134)
13:12:41 × mirrorbird quits (~psutcliff@2a00:801:42b:aff3:74af:2f22:932d:eac0) (Remote host closed the connection)
13:13:06 mirrorbird joins (~psutcliff@2a00:801:42b:aff3:74af:2f22:932d:eac0)
13:13:32 jonathanx joins (~jonathan@h-176-109.A357.priv.bahnhof.se)
13:14:11 pjb joins (~t@2a01cb04063ec5001d96a6f28d2d22b9.ipv6.abo.wanadoo.fr)
13:17:36 × jonathanx quits (~jonathan@h-176-109.A357.priv.bahnhof.se) (Read error: Connection reset by peer)
13:17:57 geekosaur joins (82650c7c@130.101.12.124)
13:17:57 jonathanx joins (~jonathan@h-176-109.A357.priv.bahnhof.se)
13:19:29 × Kaeipi quits (~Kaiepi@47.54.252.148) (Read error: No route to host)
13:19:53 niekvandepas joins (~niekvande@dhcp-077-249-088-250.chello.nl)
13:20:00 Kaeipi joins (~Kaiepi@47.54.252.148)
13:22:03 jonathanx_ joins (~jonathan@h-176-109.A357.priv.bahnhof.se)
13:23:27 × jonathanx quits (~jonathan@h-176-109.A357.priv.bahnhof.se) (Read error: Connection reset by peer)
13:23:36 × Kaeipi quits (~Kaiepi@47.54.252.148) (Remote host closed the connection)
13:24:37 × niekvandepas quits (~niekvande@dhcp-077-249-088-250.chello.nl) (Ping timeout: 256 seconds)
13:24:57 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 256 seconds)
13:26:32 Kaeipi joins (~Kaiepi@47.54.252.148)
13:27:41 × Kaeipi quits (~Kaiepi@47.54.252.148) (Read error: Connection reset by peer)
13:28:06 Kaeipi joins (~Kaiepi@47.54.252.148)
13:30:14 brisbin joins (~patrick@pool-173-49-158-4.phlapa.fios.verizon.net)
13:31:09 bogdanp joins (~bogdanp@188.24.80.165)
13:33:09 heatsink joins (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135)
13:33:25 Neuromancer joins (~Neuromanc@unaffiliated/neuromancer)
13:34:03 × LKoen quits (~LKoen@16.175.9.109.rev.sfr.net) (Remote host closed the connection)
13:35:57 LKoen joins (~LKoen@16.175.9.109.rev.sfr.net)
13:36:39 cgfuh joins (~cgfuh@181.167.191.58)
13:36:58 larsan1 joins (~larsan@84.39.117.57)
13:37:50 × heatsink quits (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135) (Ping timeout: 264 seconds)
13:41:20 × hexfive quits (~hexfive@50.35.83.177) (Quit: i must go. my people need me.)
13:42:37 m0rphism joins (~m0rphism@HSI-KBW-085-216-104-059.hsi.kabelbw.de)
13:45:07 × nrh^ quits (nrh@ip98-184-89-2.mc.at.cox.net) ()
13:48:47 encod3 joins (~encod3@45-154-157-94.ftth.glasoperator.nl)
13:48:53 niekvandepas joins (~niekvande@dhcp-077-249-088-250.chello.nl)
13:54:22 urodna joins (~urodna@unaffiliated/urodna)
13:54:23 × encod3 quits (~encod3@45-154-157-94.ftth.glasoperator.nl) ()
13:55:13 hyperisco joins (~hyperisco@104-195-141-253.cpe.teksavvy.com)
13:56:11 × frankdmartinez quits (~frankdmar@208.91.107.132) (Ping timeout: 272 seconds)
13:57:02 × LKoen quits (~LKoen@16.175.9.109.rev.sfr.net) (Read error: Connection reset by peer)
13:57:41 dandart joins (~Thunderbi@home.dandart.co.uk)
13:58:42 LKoen joins (~LKoen@16.175.9.109.rev.sfr.net)
13:58:59 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds)
13:59:04 elfets joins (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
13:59:42 acidjnk_new joins (~acidjnk@p200300d0c704e732989dd075055fe92d.dip0.t-ipconnect.de)
13:59:59 × elliott__ quits (~elliott@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 272 seconds)
14:02:09 × ADG1089__ quits (~aditya@223.226.159.22) (Remote host closed the connection)
14:04:28 st8less joins (~st8less@2603:a060:11fd:0:de2c:8831:13db:5b34)
14:04:37 × cheater quits (~user@unaffiliated/cheater) (Ping timeout: 256 seconds)
14:08:47 p7lpa1ugixavugu joins (~atomic@2800:810:514:e7:7d4a:ba43:c831:bee6)
14:08:52 geowiesnot joins (~user@87-89-181-157.abo.bbox.fr)
14:12:09 ADG1089__ joins (~aditya@223.226.159.22)
14:14:15 × jackk_Doe quits (~jackk@205.178.111.134) (Quit: Going offline, see ya! (www.adiirc.com))
14:16:31 jackk_Doe joins (~jackk@205.178.111.134)
14:21:31 columbarius1 is now known as columbarius
14:22:01 <kuribas> iskander wilds
14:22:27 <kuribas> sorry bout that...
14:22:42 <kuribas> keyboard is acting weird
14:22:57 Saukk joins (~Saukk@83-148-239-3.dynamic.lounea.fi)
14:22:57 ystael joins (~ystael@209.6.50.55)
14:23:19 × mirrorbird quits (~psutcliff@2a00:801:42b:aff3:74af:2f22:932d:eac0) (Ping timeout: 272 seconds)
14:23:50 × evanjs- quits (~evanjs@075-129-098-007.res.spectrum.com) (Read error: Connection reset by peer)
14:24:36 × Saukk quits (~Saukk@83-148-239-3.dynamic.lounea.fi) (Remote host closed the connection)
14:25:45 evanjs joins (~evanjs@075-129-098-007.res.spectrum.com)
14:27:49 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
14:28:24 × elfets quits (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Ping timeout: 264 seconds)
14:28:28 jpds joins (~jpds@gateway/tor-sasl/jpds)
14:30:00 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
14:33:40 heatsink joins (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135)
14:38:13 × heatsink quits (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135) (Ping timeout: 244 seconds)
14:42:54 Tario joins (~Tario@201.192.165.173)
14:43:56 cheater joins (~user@unaffiliated/cheater)
14:46:03 mollberg joins (~mollberg@h-62-63-197-58.NA.cust.bahnhof.se)
14:46:05 × geekosaur quits (82650c7c@130.101.12.124) (Quit: Connection closed)
14:46:53 × mollberg quits (~mollberg@h-62-63-197-58.NA.cust.bahnhof.se) (Client Quit)
14:48:12 mollberg joins (~mollberg@h-62-63-197-58.NA.cust.bahnhof.se)
14:49:47 × mollberg quits (~mollberg@h-62-63-197-58.NA.cust.bahnhof.se) (Client Quit)
14:52:04 mollberg joins (~mollberg@h-62-63-197-58.NA.cust.bahnhof.se)
14:52:27 mmmattyx joins (uid17782@gateway/web/irccloud.com/x-ohocdjlobxmifhzq)
14:56:46 <mollberg> Any gurus around to help a Haskell beginner in distress? I could use some pointers in understanding recursive data structures...
14:57:12 <mollberg> Recursive type classes, I should say.
14:57:28 <kuribas> hmm, recursive type classes...
14:57:31 × st8less quits (~st8less@2603:a060:11fd:0:de2c:8831:13db:5b34) (Ping timeout: 272 seconds)
14:58:33 <ski> recursive, in which sense ?
14:59:00 <mollberg> Every tutorial presents me with the binary tree traversal example, but I don't think I can "think recursively" enough to wrap my head around it.
14:59:12 st8less joins (~st8less@inet-167-224-197-181.isp.ozarksgo.net)
14:59:36 zebrag joins (~inkbottle@aaubervilliers-654-1-120-135.w86-198.abo.wanadoo.fr)
14:59:44 <merijn> mollberg: typeclasses and data structures are pretty much entirely unrelated
15:00:26 <kuribas> mollberg: do you know fractals?
15:00:38 <merijn> Especially something like binary tree traversal sounds rather unrelated to type classes
15:00:38 <kuribas> mollberg: the idea is that you have some part which looks like the whole.
15:00:55 <mollberg> Sorry, still getting used to the terminology -- I mean a recursive algebraic data type.
15:01:17 × benb quits (52456307@82-69-99-7.dsl.in-addr.zen.co.uk) (Quit: Ping timeout (120 seconds))
15:01:33 frankdmartinez joins (~frankdmar@208.91.107.132)
15:02:19 <ski> do you have some experience with recursion on non-recursive data structures .. like numbers, arrays ?
15:02:37 <ski> how about recursion with lists ?
15:02:49 Sgeo joins (~Sgeo@ool-18b98aa4.dyn.optonline.net)
15:03:47 <mollberg> Yes, since a few days ago I know my way around Haskell well enough to write basic list operations recursively without folding.
15:05:36 <ski> could you write insertion sort or selection sort ? how about "quick sort" or "merge sort" ?
15:05:45 <merijn> Fold and recursion are essentially the same thing, except you skip the step of manually writing out the recursion with fold :p
15:07:22 <dminuoso> mollberg: Start with the list type, that one is a recursive data type too.
15:07:29 <mollberg> I can write both a merge sort and a quick sort, yes.
15:07:37 <dminuoso> Or, perhaps, hand-rolled peano naturals are even simpler..
15:07:39 mouseghost joins (~draco@87-206-9-185.dynamic.chello.pl)
15:07:39 × mouseghost quits (~draco@87-206-9-185.dynamic.chello.pl) (Changing host)
15:07:39 mouseghost joins (~draco@wikipedia/desperek)
15:07:50 <dminuoso> % data Nat = Succ Nat | Zero
15:07:51 <yahb> dminuoso:
15:08:05 <ski> so it seems you're ok with non-linear-recursion, then
15:08:19 × knupfer quits (~Thunderbi@mue-88-130-61-193.dsl.tropolys.de) (Ping timeout: 256 seconds)
15:09:07 <ski> you are drawing pictures of trees, yes ?
15:09:39 son0p joins (~son0p@181.136.122.143)
15:10:01 <mollberg> I know folding and recursion are essentially the same, was just clarifying that I understand recursion well enough to be able to write folds by myself.
15:10:12 <mollberg> Haven't drawn pictures of trees yet, very good idea.
15:11:19 <ski> is there some particular recursion you're having trouble with atm, that we could perhaps assist with ?
15:12:07 × ADG1089__ quits (~aditya@223.226.159.22) (Remote host closed the connection)
15:19:16 × cfricke quits (~cfricke@unaffiliated/cfricke) (Quit: WeeChat 3.0)
15:19:52 × niekvandepas quits (~niekvande@dhcp-077-249-088-250.chello.nl) (Remote host closed the connection)
15:20:36 × pera quits (pera@gateway/vpn/mullvad/pera) (Ping timeout: 264 seconds)
15:20:56 niekvandepas joins (~niekvande@dhcp-077-249-088-250.chello.nl)
15:22:23 bitmagie joins (~Thunderbi@200116b80659d800054946a6cc2a64f2.dip.versatel-1u1.de)
15:23:16 <mollberg> I'm trying to wrap my head around the Tree/Node example in Learn you a Haskell under "Recursive Data Structures". I don't really understand how the treeInsert function works, what 'left' and 'right' signify, etc.
15:25:24 × niekvandepas quits (~niekvande@dhcp-077-249-088-250.chello.nl) (Ping timeout: 264 seconds)
15:25:42 pera joins (pera@gateway/vpn/mullvad/pera)
15:25:44 <__monty__> mollberg: `(Node a left right)` is a pattern match. It binds the three fields of a "Node" value to the names "a," left and right.
15:25:45 <ski> a tree is either empty, or it's a node, that's branching off into two (sub-)trees (and also contains an element at the node)
15:26:10 <ski> `left' and `right' are names that are commonly given to these two sub-trees. the left and the right sub-tree
15:26:37 <ski> (any names could be used, but these are conventional)
15:29:31 <ski> could you draw e.g. the tree `Node 1 (Node 2 (Node 4 EmptyTree) EmptyTree) (Node 3 EmptyTree (Node 7 (Node 14 EmptyTree EmptyTree) EmptyTree))' in a picture ?
15:29:46 <__monty__> mollberg: And to insert a value in a BST you compare with the value of the current node, if the new value is smaller it needs to go into the left subtree, etc.
15:32:05 machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca)
15:32:38 × bitmagie quits (~Thunderbi@200116b80659d800054946a6cc2a64f2.dip.versatel-1u1.de) (Quit: bitmagie)
15:33:24 fangyrn joins (uid481529@gateway/web/irccloud.com/x-uookpebloxxoqjgr)
15:34:24 heatsink joins (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135)
15:39:02 × heatsink quits (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135) (Ping timeout: 264 seconds)
15:41:15 × adeene quits (~adeene@181.131.0.191) (Read error: Connection reset by peer)
15:42:08 <mollberg> Going to try to draw a picture picture ans see if that clarifies it! Thanks for the help! (Unfortunately, I might be back, haha)
15:43:02 × p-core quits (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Quit: p-core)
15:43:23 p-core joins (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56)
15:48:24 ski . o O ( <https://www.bellman.net/texter/text.php?epistel=45> )
15:49:48 × Andrologic_ quits (~Andrologi@90.221.74.173) (Ping timeout: 260 seconds)
15:51:54 adeene joins (~adeene@181.131.0.191)
15:52:06 × viluon quits (uid453725@gateway/web/irccloud.com/x-buwkhmdreivhxbgq) (Quit: Connection closed for inactivity)
15:57:03 niekvandepas joins (~niekvande@89.205.140.135)
15:57:04 × p-core quits (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56) (Quit: p-core)
15:57:24 p-core joins (~Thunderbi@2001:718:1e03:5128:3697:eeda:19aa:8e56)
15:58:11 × blissful quits (~blissful@unaffiliated/azuline) (Quit: owo)
15:58:21 <Taneb> Template haskell question: I have a Type and I Want to see if it represents the same type as a known type (in this case NoContent from servant). How can I do this?
15:58:27 ADG1089__ joins (~aditya@223.226.159.22)
15:58:48 blissful joins (~blissful@unaffiliated/azuline)
16:00:15 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
16:01:16 cr3 joins (~cr3@192-222-143-195.qc.cable.ebox.net)
16:01:47 hnOsmium0001 joins (uid453710@gateway/web/irccloud.com/x-szygrdcvutmfpknh)
16:01:48 andrologic joins (~Andrologi@90.221.74.173)
16:02:15 justanotheruser joins (~justanoth@unaffiliated/justanotheruser)
16:07:52 × p7lpa1ugixavugu quits (~atomic@2800:810:514:e7:7d4a:ba43:c831:bee6) (Ping timeout: 260 seconds)
16:08:29 avdb joins (~avdb@gateway/tor-sasl/avdb)
16:09:49 djbeau joins (~dbeaureg@148.87.23.5)
16:10:59 × ericsagnes quits (~ericsagne@2405:6580:0:5100:5b64:e916:ea7b:a5fd) (Ping timeout: 272 seconds)
16:11:03 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
16:13:31 ransom joins (~c4264035@8.48.134.30)
16:15:28 jneira[m] joins (~jneira@4.red-176-87-17.dynamicip.rima-tde.net)
16:15:32 rayyyy joins (~nanoz@gateway/tor-sasl/nanoz)
16:15:58 ransom_ joins (~c4264035@undergraduate-jvossen-9690.mines.edu)
16:17:18 nineonine joins (~nineonine@50.216.62.2)
16:17:43 <glguy> Taneb, you could use http://hackage.haskell.org/package/th-abstraction-0.4.2.0/docs/Language-Haskell-TH-Datatype.html#v:unifyTypes
16:18:01 <glguy> Not great for detecting failure though
16:18:10 <glguy> I forget if you can catch that in Q
16:18:35 × ransom quits (~c4264035@8.48.134.30) (Ping timeout: 256 seconds)
16:18:55 <glguy> If you just want to compare for equality to a simple constructor that should be easy enough
16:19:14 × frankdmartinez quits (~frankdmar@208.91.107.132) (Ping timeout: 264 seconds)
16:22:50 × LKoen quits (~LKoen@16.175.9.109.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
16:22:51 ericsagnes joins (~ericsagne@2405:6580:0:5100:3a7c:5d06:5699:8d8b)
16:22:56 × cross_ quits (~cross@spitfire.i.gajendra.net) (Ping timeout: 240 seconds)
16:23:03 × nineonine quits (~nineonine@50.216.62.2) (Ping timeout: 260 seconds)
16:23:10 × adeene quits (~adeene@181.131.0.191) (Quit: Leaving)
16:23:24 × acidjnk_new quits (~acidjnk@p200300d0c704e732989dd075055fe92d.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
16:24:24 p7lpa1ugixavugu joins (~atomic@2800:810:514:e7:cd02:ce51:d5ac:d9bf)
16:25:27 × avdb quits (~avdb@gateway/tor-sasl/avdb) (Quit: avdb)
16:27:13 jamm joins (~jamm@unaffiliated/jamm)
16:28:57 sMuNiX joins (~sMuNiX@vlnsm8-montreal02-142-122-8-233.internet.virginmobile.ca)
16:29:12 cross joins (~cross@spitfire.i.gajendra.net)
16:31:47 × jamm quits (~jamm@unaffiliated/jamm) (Ping timeout: 260 seconds)
16:39:47 × kritzefitz quits (~kritzefit@fw-front.credativ.com) (Remote host closed the connection)
16:41:29 × hc quits (~hc@fsfe/hc) (Quit: leaving)
16:41:38 hc joins (~hc@fsfe/hc)
16:42:23 × son0p quits (~son0p@181.136.122.143) (Quit: Lost terminal)
16:42:43 × jneira[m] quits (~jneira@4.red-176-87-17.dynamicip.rima-tde.net) (Remote host closed the connection)
16:42:51 heatsink joins (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135)
16:44:10 × jackk_Doe quits (~jackk@205.178.111.134) (Quit: Going offline, see ya! (www.adiirc.com))
16:46:17 Alleria joins (~textual@zrcout.mskcc.org)
16:46:40 Alleria is now known as Guest74635
16:46:53 niekvand_ joins (~niekvande@89.205.140.135)
16:47:02 × mouseghost quits (~draco@wikipedia/desperek) (Quit: mew wew)
16:47:05 Katarushisu9 joins (~Katarushi@cpc152083-finc20-2-0-cust170.4-2.cable.virginm.net)
16:47:06 russruss40 joins (~russruss@my.russellmcc.com)
16:47:51 petersen_ joins (~petersen@redhat/juhp)
16:48:30 × p8m quits (p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 256 seconds)
16:48:31 × Guest33543 quits (~textual@mskresolve-a.mskcc.org) (Ping timeout: 256 seconds)
16:48:31 Deide1 joins (~Deide@217.155.19.23)
16:48:37 × zebrag quits (~inkbottle@aaubervilliers-654-1-120-135.w86-198.abo.wanadoo.fr) (Remote host closed the connection)
16:48:37 × niekvandepas quits (~niekvande@89.205.140.135) (Ping timeout: 256 seconds)
16:48:37 × Neuromancer quits (~Neuromanc@unaffiliated/neuromancer) (Ping timeout: 256 seconds)
16:48:37 × anoe quits (~anoe@delanoe.org) (Ping timeout: 256 seconds)
16:48:37 × NieDzejkob quits (~quassel@188.123.215.55) (Ping timeout: 256 seconds)
16:48:38 p8m joins (p8m@gateway/vpn/protonvpn/p8m)
16:48:47 NieDzejkob joins (~quassel@188.123.215.55)
16:48:52 anoe joins (~anoe@delanoe.org)
16:49:00 zebrag joins (~inkbottle@aaubervilliers-654-1-120-135.w86-198.abo.wanadoo.fr)
16:49:11 × andrologic quits (~Andrologi@90.221.74.173) (Ping timeout: 256 seconds)
16:49:11 × Deide quits (~Deide@217.155.19.23) (Ping timeout: 256 seconds)
16:49:11 × Katarushisu quits (~Katarushi@cpc152083-finc20-2-0-cust170.4-2.cable.virginm.net) (Ping timeout: 256 seconds)
16:49:11 × petersen quits (~petersen@redhat/juhp) (Ping timeout: 256 seconds)
16:49:11 × Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Ping timeout: 256 seconds)
16:49:11 × russruss4 quits (~russruss@my.russellmcc.com) (Ping timeout: 256 seconds)
16:49:12 russruss40 is now known as russruss4
16:49:12 Katarushisu9 is now known as Katarushisu
16:49:27 petersen_ is now known as petersen
16:49:32 andrologic joins (~Andrologi@90.221.74.173)
16:49:47 Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi)
16:51:20 × niekvand_ quits (~niekvande@89.205.140.135) (Remote host closed the connection)
16:52:41 Lord_of_Life_ joins (~Lord@unaffiliated/lord-of-life/x-0885362)
16:55:25 × Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 272 seconds)
16:55:34 Lord_of_Life_ is now known as Lord_of_Life
16:56:02 niekvandepas joins (~niekvande@89.205.140.135)
16:57:12 × pavonia quits (~user@unaffiliated/siracusa) (Quit: Bye!)
16:57:15 Neuromancer joins (~Neuromanc@unaffiliated/neuromancer)
16:59:36 kritzefitz joins (~kritzefit@212.86.56.80)
16:59:37 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
16:59:58 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
17:00:13 Tario joins (~Tario@201.192.165.173)
17:00:49 × Franciman quits (~francesco@host-79-51-37-36.retail.telecomitalia.it) (Quit: Leaving)
17:00:52 × ubert quits (~Thunderbi@2a02:8109:9880:303c:ca5b:76ff:fe29:f233) (Remote host closed the connection)
17:03:22 ep1ctetus joins (~epictetus@ip184-187-162-163.sb.sd.cox.net)
17:03:44 rwdrich joins (560395a9@cpc159427-cmbg20-2-0-cust424.5-4.cable.virginm.net)
17:03:59 × rwdrich quits (560395a9@cpc159427-cmbg20-2-0-cust424.5-4.cable.virginm.net) (Client Quit)
17:04:18 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
17:04:57 polyphem joins (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889)
17:08:00 knupfer joins (~Thunderbi@dynamic-046-114-149-239.46.114.pool.telefonica.de)
17:08:29 worc3131 joins (~quassel@2a02:c7f:dcc4:6500:cf0e:3346:8766:ab20)
17:08:37 hackage call-stack 0.3.0 - Use GHC call-stacks in a backward compatible way https://hackage.haskell.org/package/call-stack-0.3.0 (SimonHengel)
17:13:22 geekosaur joins (82650c7c@130.101.12.124)
17:14:25 × imjacobc_ quits (~imjacobcl@host86-129-42-107.range86-129.btcentralplus.com) (Remote host closed the connection)
17:14:29 × niekvandepas quits (~niekvande@89.205.140.135) (Remote host closed the connection)
17:15:02 niekvandepas joins (~niekvande@89.205.140.135)
17:15:10 imjacobclark joins (~imjacobcl@host86-129-42-107.range86-129.btcentralplus.com)
17:16:51 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
17:17:34 × niekvandepas quits (~niekvande@89.205.140.135) (Read error: No route to host)
17:19:53 nineonine joins (~nineonine@S01061cabc0b095f3.vf.shawcable.net)
17:22:47 × nineonine quits (~nineonine@S01061cabc0b095f3.vf.shawcable.net) (Remote host closed the connection)
17:23:22 LKoen joins (~LKoen@16.175.9.109.rev.sfr.net)
17:23:24 nineonine joins (~nineonine@50.216.62.2)
17:24:46 × heatsink quits (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135) (Remote host closed the connection)
17:26:01 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
17:26:20 conal joins (~conal@64.71.133.70)
17:30:09 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
17:30:31 jpds joins (~jpds@gateway/tor-sasl/jpds)
17:33:53 Tario joins (~Tario@201.192.165.173)
17:35:12 × ADG1089__ quits (~aditya@223.226.159.22) (Remote host closed the connection)
17:36:54 × imjacobclark quits (~imjacobcl@host86-129-42-107.range86-129.btcentralplus.com) (Remote host closed the connection)
17:37:16 × pera quits (pera@gateway/vpn/mullvad/pera) (Quit: leaving)
17:37:29 imjacobclark joins (~imjacobcl@host86-129-42-107.range86-129.btcentralplus.com)
17:41:45 × imjacobclark quits (~imjacobcl@host86-129-42-107.range86-129.btcentralplus.com) (Ping timeout: 240 seconds)
17:43:10 heatsink joins (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135)
17:43:33 × Moyst quits (~moyst@85-76-109-176-nat.elisa-mobile.fi) (Ping timeout: 260 seconds)
17:44:26 juuandyy joins (~juuandyy@90.166.144.65)
17:45:31 Moyst joins (~moyst@212-149-213-144.bb.dnainternet.fi)
17:48:21 avdb joins (~avdb@gateway/tor-sasl/avdb)
17:50:40 × orion quits (~orion@unaffiliated/orion) (Remote host closed the connection)
17:53:06 niekvandepas joins (~niekvande@2001:985:bebc:1:9458:ea67:4de:2943)
17:53:39 × rajivr quits (uid269651@gateway/web/irccloud.com/x-sozgnodbahkqqgom) (Quit: Connection closed for inactivity)
17:57:32 × niekvandepas quits (~niekvande@2001:985:bebc:1:9458:ea67:4de:2943) (Ping timeout: 260 seconds)
17:59:02 <dminuoso> Say I have a `T -> Maybe (T, T)` type of generator function. Is there a standard corecursion trick similar to unfoldr that would let me build a tree rather than a list from that?
18:00:08 ransom joins (~c4264035@8.48.134.30)
18:00:11 wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
18:00:58 brodie joins (~brodie@2607:f598:b992:f800:c059:1155:fde1:7ba2)
18:01:26 <monochrom> The source code of Data.Tree.unfoldTree may inspire you.
18:03:23 × ransom_ quits (~c4264035@undergraduate-jvossen-9690.mines.edu) (Ping timeout: 260 seconds)
18:04:08 <lyxia> dminuoso: How about ana from recursion schemes
18:08:22 <dminuoso> lyxia: Mmm, I feared that recursion schemes was going to be an answer. Perhaps this is the time I finally take a look at it.
18:09:06 danso joins (~dan@2001:1970:52e7:d000:96b8:6dff:feb3:c009)
18:09:25 <monochrom> You just need to understand catamorphisms and anamorphisms. Don't worry about the rest, they are not enlightening enough to worth one's time.
18:09:39 <dminuoso> Well, ana looks very straight forward.
18:10:07 <dminuoso> Presumably the "base functor" from recursion scheme can be turned into the recursive data structure via Fix?
18:10:16 <monochrom> Yes.
18:11:00 × mollberg quits (~mollberg@h-62-63-197-58.NA.cust.bahnhof.se) (Ping timeout: 264 seconds)
18:11:00 <monochrom> "data IntList = Nil | Cons Int (IntList)" is "data F r = Nil | Cons Int r" then "Fix F"
18:11:20 <dminuoso> Makes sense
18:11:35 × worc3131 quits (~quassel@2a02:c7f:dcc4:6500:cf0e:3346:8766:ab20) (Remote host closed the connection)
18:11:43 ransom_ joins (~c4264035@undergraduate-jvossen-9690.mines.edu)
18:12:39 <dminuoso> Okay, so both `embed` and `ana` seem exactly like what I was looking for. Thanks lyxia.
18:13:03 × ransom quits (~c4264035@8.48.134.30) (Ping timeout: 256 seconds)
18:13:25 × jespada_ quits (~jespada@90.254.241.81) (Ping timeout: 240 seconds)
18:14:46 × knupfer quits (~Thunderbi@dynamic-046-114-149-239.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
18:15:38 jespada joins (~jespada@90.254.241.81)
18:18:47 × dandart quits (~Thunderbi@home.dandart.co.uk) (Quit: dandart)
18:21:29 × raichoo quits (~raichoo@213.240.178.58) (Quit: Lost terminal)
18:25:08 hackage distribution-nixpkgs 1.4.0 - Types and functions to manipulate the Nixpkgs distribution https://hackage.haskell.org/package/distribution-nixpkgs-1.4.0 (PeterSimons)
18:26:53 × ransom_ quits (~c4264035@undergraduate-jvossen-9690.mines.edu) (Quit: My MacBook has gone to sleep. ZZZzzz…)
18:28:38 hackage HUnit 1.6.2.0 - A unit testing framework for Haskell https://hackage.haskell.org/package/HUnit-1.6.2.0 (SimonHengel)
18:29:33 ransom joins (~c4264035@undergraduate-jvossen-9690.mines.edu)
18:29:36 <kuribas> is there an easy tool for creating web interfaces, without having to code javascript?
18:29:45 <kuribas> or at least minimal javascript?
18:29:45 <merijn> HTML? *duck*
18:30:13 <kuribas> merijn: actually, that's a good point
18:30:31 <kuribas> I could just do old-style multi-page html forms...
18:30:36 <aldum> html+css, check out what sr.ht can do without js
18:30:44 <monochrom> May I bring back fond memories from old times: CGI
18:31:07 <aldum> strictly perl, I'm sure
18:31:17 <kuribas> aldum: sr.ht?
18:31:24 <kuribas> that's a website?
18:32:08 hackage cabal2nix 2.16.0 - Convert Cabal files into Nix build instructions. https://hackage.haskell.org/package/cabal2nix-2.16.0 (PeterSimons)
18:32:25 Sheilong joins (uid293653@gateway/web/irccloud.com/x-rjsiiowahomjgmcc)
18:32:46 <aldum> a website too, but mainly an open source forge
18:32:50 <exarkun> kuribas: Just compile your Haskell to JavaScript. That's what you're looking for right?
18:32:57 × hongminhee quits (~dahlia@207.148.91.209) (Ping timeout: 272 seconds)
18:33:00 <exarkun> Or skip the intermediate step and compile it to webassembly.
18:33:15 hongminhee joins (~dahlia@207.148.91.209)
18:33:30 <merijn> Just use Ur/Web ;)
18:33:39 <dminuoso> exarkun: If only this would play nice with GC...
18:33:57 <dminuoso> But since webassembly sits ontop of GC and does not offer manual memory management...
18:34:01 × ransom quits (~c4264035@undergraduate-jvossen-9690.mines.edu) (Ping timeout: 256 seconds)
18:34:41 <exarkun> dminuoso: This would differentiate it from most other websites how, exactly? :)
18:34:59 <kuribas> exarkun: I'd like to avoid ghcjs
18:35:13 <kuribas> exarkun: if I go that route, I'd use purescript
18:35:28 <exarkun> We can't always have what we'd like
18:35:31 <exarkun> especially on the web
18:35:58 frankdmartinez joins (~frankdmar@208.91.107.132)
18:35:58 × frankdmartinez quits (~frankdmar@208.91.107.132) (Client Quit)
18:36:20 frankdmartinez joins (~frankdmar@208.91.107.132)
18:36:21 × frankdmartinez quits (~frankdmar@208.91.107.132) (Client Quit)
18:36:29 <dminuoso> exarkun: Well, they are usually not programmed on a language that sits ontop. With ghcjs that means you have two garbage collectors running
18:36:45 <dminuoso> (The GHCJS RTS GC and the JS GC)
18:36:55 fresheyeball joins (~isaac@c-71-237-105-37.hsd1.co.comcast.net)
18:37:06 <exarkun> dminuoso: You might be taking me too seriously
18:37:14 <dminuoso> Oh.
18:37:21 <exarkun> But at the same time, I have about 80 chromium processes running, many of them claiming 16+GB of RAM
18:37:22 <dminuoso> I didn't notice any sarcasm there, sorry.
18:37:36 <exarkun> So the serious take might be ... who would actually notice two layers of GC?
18:37:38 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection)
18:37:45 <dminuoso> exarkun: Well this isn't about memory consumption, but rather program latency. GHCjs has quite terrible GC performance..
18:37:54 <dminuoso> Note
18:37:55 <exarkun> Hey look there's a 98GB WebKitProcess
18:38:00 <dminuoso> Im not quite sure whether we're back at sarcasm or not.
18:38:14 <exarkun> Yes, the web is so screwed up it's hard to tell
18:38:27 <exarkun> Maybe it is already irretrievably broken and nothing you can do will make it worse?
18:38:33 <exarkun> Or maybe I am joking around
18:38:48 <exarkun> It's the Turing test of bankrupt ideas! Can you tell the difference??
18:39:09 <geekosaur> you lost that one as soon as the web came up
18:39:14 <monochrom> I think it's cynicism and/or nihilism rather than sarcasm.
18:39:28 <dminuoso> The sad thing is, HTML was good conceptually. It would have been the right way to serve content.
18:40:14 frankdmartinez joins (~frankdmar@208.91.107.132)
18:40:16 × frankdmartinez quits (~frankdmar@208.91.107.132) (Client Quit)
18:41:09 <dminuoso> It was just held back by very poor implementation, and broken websites that implementations catered for.. and then there was JavaScript..
18:44:02 × kritzefitz quits (~kritzefit@212.86.56.80) (Ping timeout: 256 seconds)
18:44:58 <cnmne[m]> anyone use haskell snippets with org-babel in emacs? I'm having trouble resolving an issue
18:46:21 <kuribas> dminuoso: html and css is good for what it was meant for. Which isn't a stateful application server.
18:46:57 <dminuoso> kuribas: That's not true!
18:47:32 <dminuoso> kuribas: HTML was designed for HTTP, which specifically has verbs and semantics *for* stateful servers.
18:49:08 × sMuNiX quits (~sMuNiX@vlnsm8-montreal02-142-122-8-233.internet.virginmobile.ca) (Quit: WeeChat 3.0)
18:49:20 tsrt^ joins (tsrt@ip98-184-89-2.mc.at.cox.net)
18:49:22 <hpc> if you really want to get pedantic, MIME is the layer in between HTML and HTTP
18:49:37 <hpc> and that for stateful web stuff, there's a different mime type for form data
18:49:57 × hnOsmium0001 quits (uid453710@gateway/web/irccloud.com/x-szygrdcvutmfpknh) (Quit: Connection closed for inactivity)
18:50:05 <kuribas> dminuoso: state of the backend, not state of the application
18:50:09 <hpc> (and a multipart mime type for form data with file uploads, which is the same mime type that emails use for messages with attachments or html/plaintext alternatives)
18:50:27 <dminuoso> kuribas: There is no notion of "backend" in http.
18:50:37 <dminuoso> You have resources represented by URIs, and you can interact with them via HTTP.
18:51:04 <dminuoso> hpc: Thanks, your pedantry is quite good and right here.
18:51:31 <kuribas> dminuoso: precisely
18:52:01 <kuribas> dminuoso: it's made for acessing resources, not creating application UIs.
18:52:05 <dminuoso> I think in the original statement you meant to write `Which [is] a stateful application server`
18:52:12 <hpc> MIME is a great place to look for weird computer history in general, btw
18:52:45 <dminuoso> kuribas: That's your opinion, and I doubt you will find good evidence to support that.
18:52:45 <hpc> it's got unicode encodings that ensure the high bit of each byte is 0, and all sorts of other weird stuff
18:53:22 <dminuoso> kuribas: Arguably, you'll find a lot of bits in HTTP relating to representation and UI.
18:53:28 × avdb quits (~avdb@gateway/tor-sasl/avdb) (Ping timeout: 268 seconds)
18:53:36 vicfred joins (~vicfred@unaffiliated/vicfred)
18:53:54 <monochrom> The line was crossed as soon as people started putting counters on their otherwise static web pages.
18:53:55 <dminuoso> Notably, HTTP was designed specifically to contain MIME
18:54:01 <dminuoso> So HTTP can carry whatever MIME can
18:54:07 <monochrom> "this page has been visited 49384 times"
18:54:24 <dminuoso> monochrom: Right! Something like `GET` is supposed to be idempotent.
18:54:35 <kuribas> dminuoso: MIME was for transferring data and documents, not UI widgets.
18:54:35 <monochrom> remember those? and in little numeric look-like-real-life-counters gifs?
18:54:37 <dminuoso> (Though, that idempotency is questionable in the presence of DELETE)
18:54:40 avdb joins (~avdb@gateway/tor-sasl/avdb)
18:54:54 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
18:55:24 <monochrom> As per Turing, you can't philosophically draw a line between data and program.
18:55:37 <dminuoso> monochrom: And yet, it wasnt his work that spawned lisp!
18:55:39 <dminuoso> Curious, isnt it.
18:55:58 <dminuoso> Though perhaps he just stole the quote from Church.
18:56:16 ransom joins (~c4264035@undergraduate-jvossen-9690.mines.edu)
18:57:01 × kuribas quits (~user@ptr-25vy0i9v74bayflbmuo.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
18:58:05 elfets joins (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de)
18:59:34 × coot quits (~coot@37.30.55.132.nat.umts.dynamic.t-mobile.pl) (Quit: coot)
19:01:20 × ystael quits (~ystael@209.6.50.55) (Read error: Connection reset by peer)
19:01:21 <dminuoso> merijn: Do you know of any work to generically derive optparse-applicative parsers from aeson?
19:01:31 <merijn> No?
19:01:47 × unlink_ quits (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de) (Remote host closed the connection)
19:01:49 <dminuoso> Was just wondering, it seemed like you'd know. :p
19:01:55 <dminuoso> Since you're the biggest fan of it
19:01:55 unlink_ joins (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de)
19:01:59 × juuandyy quits (~juuandyy@90.166.144.65) (Quit: Konversation terminated!)
19:02:00 × unlink2 quits (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de) (Remote host closed the connection)
19:02:04 <dminuoso> Errr. Sorry!
19:02:08 <dminuoso> Not *aeson*. I meant to write *servant*
19:02:16 unlink2 joins (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de)
19:02:22 dbmikus joins (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
19:02:25 <merijn> I don't use servant either, and I don't do web ;)
19:02:37 × asheshambasta quits (~user@ptr-e1lysawdkgbchi3df06.18120a2.ip6.access.telenet.be) (Ping timeout: 272 seconds)
19:02:42 ystael joins (~ystael@209.6.50.55)
19:03:38 × berberman quits (~berberman@unaffiliated/berberman) (Ping timeout: 264 seconds)
19:03:39 berberman_ joins (~berberman@unaffiliated/berberman)
19:03:53 × brodie quits (~brodie@2607:f598:b992:f800:c059:1155:fde1:7ba2) (Quit: brodie)
19:03:56 × Kaeipi quits (~Kaiepi@47.54.252.148) (Remote host closed the connection)
19:04:06 lekc joins (~Neuromanc@unaffiliated/neuromancer)
19:04:36 × Mzg quits (Mzg@s1.ct8.pl) (Ping timeout: 240 seconds)
19:04:49 × ransom quits (~c4264035@undergraduate-jvossen-9690.mines.edu) (Read error: Connection reset by peer)
19:05:19 Mzg joins (Mzg@s1.ct8.pl)
19:05:20 Kaeipi joins (~Kaiepi@47.54.252.148)
19:05:26 × LKoen quits (~LKoen@16.175.9.109.rev.sfr.net) (Remote host closed the connection)
19:05:48 × hekkaidekapus] quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 268 seconds)
19:05:53 ransom joins (~c4264035@undergraduate-jvossen-9690.mines.edu)
19:06:11 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection)
19:06:23 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
19:06:25 × xelxebar quits (~xelxebar@gateway/tor-sasl/xelxebar) (Ping timeout: 268 seconds)
19:07:45 hekkaidekapus] joins (~tchouri@gateway/tor-sasl/hekkaidekapus)
19:07:50 × Neuromancer quits (~Neuromanc@unaffiliated/neuromancer) (Ping timeout: 256 seconds)
19:07:51 lekc is now known as Neuromancer
19:08:07 <monochrom> Perhaps https://hackage.haskell.org/package/optparse-generic is good enough
19:08:35 <monochrom> It just doesn't involve aeson.
19:08:52 <dminuoso> monochrom: Sorry, I should have really written `servant` there originally.
19:09:56 xelxebar joins (~xelxebar@gateway/tor-sasl/xelxebar)
19:11:28 × unlink2 quits (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de) (Remote host closed the connection)
19:11:28 × unlink_ quits (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de) (Remote host closed the connection)
19:12:01 × geekosaur quits (82650c7c@130.101.12.124) (Ping timeout: 248 seconds)
19:12:57 unlink2 joins (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de)
19:15:04 LKoen joins (~LKoen@16.175.9.109.rev.sfr.net)
19:15:28 × Mzg quits (Mzg@s1.ct8.pl) (Ping timeout: 265 seconds)
19:15:39 niekvandepas joins (~niekvande@2001:985:bebc:1:9458:ea67:4de:2943)
19:16:44 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
19:19:30 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
19:20:36 Mzg joins (Mzg@s1.ct8.pl)
19:22:04 × mmmattyx quits (uid17782@gateway/web/irccloud.com/x-ohocdjlobxmifhzq) (Quit: Connection closed for inactivity)
19:24:31 <maerwald> how would that work?
19:25:21 <dminuoso> Im thinking of translating endpoints into subcommands.
19:26:01 Ayo joins (~quassel@82.177.83.189)
19:26:43 × ransom quits (~c4264035@undergraduate-jvossen-9690.mines.edu) (Quit: My MacBook has gone to sleep. ZZZzzz…)
19:26:57 <dminuoso> maerwald: Unrelatedly, this did the job https://gist.github.com/dminuoso/20d019778518958faa7649161433b632
19:27:32 <dminuoso> But there's still some related sum-types for business logic that differs between IPv4 and IPv6.
19:27:38 frdg joins (~user@pool-96-252-123-136.bstnma.fios.verizon.net)
19:28:46 ransom joins (~c4264035@undergraduate-jvossen-9690.mines.edu)
19:30:51 <frdg> Can I refer to functions defined in the current module with a qualification?
19:31:01 geekosaur joins (82650c7c@130.101.12.124)
19:31:35 <dminuoso> frdg: Yes.
19:31:48 <dminuoso> You can use the module name itself as a qualifier
19:32:03 <frdg> ok thanks
19:32:05 <dminuoso> i.e. `module Foo.Bar where f = 1; g = Foo.Bar.f`
19:32:49 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection)
19:33:52 <niekvandepas> Hi everyone, I'm trying to follow this tutorial: https://caiorss.github.io/Functional-Programming/haskell/DatabaseHDBC.html
19:34:26 <niekvandepas> But for some reason I can't import the package `HDBC-sqlite3`
19:34:44 Franciman joins (~francesco@host-79-51-37-36.retail.telecomitalia.it)
19:34:49 <merijn> jDoes anyone actually still use HDBC?
19:35:20 <Franciman> what do ytou use merijn ?
19:35:22 <niekvandepas> What alternatives do you recommend? I've tried to use Selda but ran into similar issues there
19:35:43 <niekvandepas> Maybe there's something wonky with my setup, but I'm pretty sure I've installed everything 'appropriately'
19:35:44 <merijn> Franciman: What I *use* is persistent, what I *recommend* is sqlite-simple or postgres-simple :p
19:35:46 <geekosaur> ad if you didn't name it, its name is Main
19:35:47 × geekosaur quits (82650c7c@130.101.12.124) (Client Quit)
19:36:02 <Franciman> merijn, neat
19:36:24 <merijn> In fact, I would highly recommend "not persistent, just write SQL queries" >.>
19:36:46 kritzefitz joins (~kritzefit@212.86.56.80)
19:37:04 <dminuoso> I'm currently working on a larger project, and we're handrolling all SQL queries with postgresql-simple. It's just simple programming tasks.. :)
19:37:05 geekosaur joins (82650c7c@130.101.12.124)
19:37:25 × ixaxaar quits (~ixaxaar@49.207.210.215) (Ping timeout: 240 seconds)
19:37:52 <dminuoso> geekosaur: Cheers, that's useful to know.
19:38:14 <merijn> Franciman: Turns out that, if you like purely functional programming SQL is actually a pretty great purely functional language :p
19:38:27 <merijn> Well, the "SELECT" side of it, anyway :p
19:38:46 <Franciman> topkek it's true
19:38:58 <Franciman> what I don't like is writing strings instead of typed and compile time checked code
19:39:24 <merijn> niekvandepas: You're using stack?
19:39:32 <merijn> Franciman: Yeah, but all the alternatives are worse
19:39:51 <Franciman> for my work now I'm trying persistent, hope it's easy enough to stay in the zone
19:39:55 <Franciman> so I can avoid a lot of tests
19:40:05 <niekvandepas> merijn: yup
19:40:22 <dminuoso> Franciman: The price for "typed/compile time checked code" is having to learn very crazy and complicated eDSLs that do not look anything like SQL.
19:40:33 <dminuoso> And deal with unreadable type errors when it *does* blow up
19:40:51 <merijn> Franciman: beam/squeal try to create embedded DSLs for the SQL, but, eh, those eDSLs look like
19:41:06 <merijn> "join_ :: (Database be db, Table table, BeamSqlBackend be) => DatabaseEntity be db (TableEntity table) -> (table (QExpr be s) -> QExpr be s Bool) -> Q be db s (table (QExpr be s))"
19:41:14 <dminuoso> Too often do you end up trying to figure out how to write something in the eDSL, so you sit down, think of what SQL you want to produce, and then spend an awful lot of time with the eDSL to make it generate the exact SQL you have in mind..
19:41:16 <Franciman> lulz
19:41:24 <merijn> Which I'm pretty sure is the documentation equivalent of telling a programmer to go fuck themselves?
19:41:27 <Franciman> I think racket would be better at thiz
19:41:32 <merijn> Franciman: https://hackage.haskell.org/package/beam-core-0.9.0.0/docs/Database-Beam-Query.html#g:7
19:41:40 <merijn> squeal is just as bad
19:41:51 <dminuoso> relatedBy_' :: forall be db rel s. (Database be db, Table rel, BeamSqlBackend be) => DatabaseEntity be db (TableEntity rel) -> (rel (QExpr be s) -> QExpr be s SqlBool) -> Q be db s (rel (QExpr be s))
19:41:53 <dminuoso> Neat!
19:42:01 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
19:42:18 × heatsink quits (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135) (Remote host closed the connection)
19:42:18 <dminuoso> outerJoin_' :: forall s a b be db. (BeamSqlBackend be, BeamSqlBackendSupportsOuterJoin be, Projectible be a, Projectible be b, ThreadRewritable (QNested s) a, ThreadRewritable (QNested s) b, Retaggable (QExpr be s) (WithRewrittenThread (QNested s) s a), Retaggable (QExpr be s) (WithRewrittenThread (QNested s) s b)) => Q be db (QNested s) a -> Q be db (QNested s) b -> ((WithRewrittenThread (QNested
19:42:20 <dminuoso> s) s a, WithRewrittenThread (QNested s) s b) -> QExpr be s SqlBool) -> Q be db s (Retag Nullable (WithRewrittenThread (QNested s) s a), Retag Nullable (WithRewrittenThread (QNested s) s b))
19:42:22 <dminuoso> Oh yes.
19:42:27 <Franciman> damn cool, sensei
19:42:31 conal joins (~conal@64.71.133.70)
19:42:42 × conal quits (~conal@64.71.133.70) (Client Quit)
19:42:50 <Franciman> at the end of the day, one has to write their own dsl
19:42:50 <merijn> Franciman: persistent is pretty nice...until, you know, a version bump's migration corrupts all your foreign keys! https://github.com/yesodweb/persistent/issues/1184
19:42:55 <dminuoso> Franciman: Not really.
19:42:59 <Franciman> for their own logic
19:43:07 <Franciman> I mean internally you write SQL code
19:43:12 <dminuoso> You write an abstraction that hides the tedious details, and lets you think in precise semantics.
19:43:13 <Franciman> but do you really externally expose bare sql code?
19:43:17 <Franciman> yes
19:43:21 <Franciman> exactly
19:43:38 <dminuoso> But SQL is not what needs the abstractions, its your queries.
19:43:43 <dminuoso> (Which can be written in SQL)
19:43:53 <Franciman> merijn, that damn problem!
19:44:12 <Franciman> also fpcomplete is at it again
19:44:25 <Franciman> they try to squeeze everything out of the haskell ecosystem while giving back only what they want
19:44:33 × Ayo quits (~quassel@82.177.83.189) (Ping timeout: 246 seconds)
19:44:40 <Franciman> not that others are better
19:44:41 <Franciman> eh
19:44:46 <Franciman> just companies doing companies
19:45:15 <Franciman> dminuoso, +1
19:45:55 conal joins (~conal@64.71.133.70)
19:46:30 <dminuoso> At best, I might consider a raw relational algebra library (but one that doesn't try and tie this into the haskell type system) instead of SQL if you need compositionality
19:46:39 <dminuoso> Haven't quite found one I like on hackage though
19:47:19 <Franciman> anything that tries to be everything, is doomed to fail
19:47:51 × puffnfresh quits (~puffnfres@119-17-138-164.77118a.mel.static.aussiebb.net) (Ping timeout: 265 seconds)
19:48:21 <dolio> I'm skeptical that a relational algebra library would actually get you the results you want long term.
19:48:55 <dminuoso> dolio: Im not sure, Im thinking that with QQs you could have a nice hybrid of both.
19:48:56 × Kaeipi quits (~Kaiepi@47.54.252.148) (Remote host closed the connection)
19:49:22 <dolio> Because you'd probably run into walls where relational algebra can't say something that is integral to a SQL query actually being fast enough.
19:49:50 <dminuoso> So the QQ would translate your SQL into a relational algebra representation, allowing you to write raw SQL - but still get the benefits of working on an relational algebra tree
19:50:01 Kaeipi joins (~Kaiepi@47.54.252.148)
19:50:02 <dminuoso> (Perhaps with some support for splicing trees back into SQL)
19:50:12 <idnar> I quite like Opaleye
19:50:44 justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311)
19:50:56 × Kaeipi quits (~Kaiepi@47.54.252.148) (Remote host closed the connection)
19:51:31 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
19:51:32 Kaeipi joins (~Kaiepi@47.54.252.148)
19:51:55 conal joins (~conal@64.71.133.70)
19:52:04 <dolio> Or, if you can say something that emits the right SQL, it's sensitive to the exact way you say it in relational algebra.
19:52:13 × conal quits (~conal@64.71.133.70) (Client Quit)
19:52:31 <dolio> In other words, SQL query optimization is too finnicky to treat relational algebra as a good abstraction.
19:52:59 <dminuoso> dolio: Well you dont have to care too much about optimizations if we assume PG as a target, since that will retransform/optimize your query (through relational algebra) anyway.
19:53:20 <dolio> Ah. They must be better than what I have experience with.
19:54:13 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
19:54:55 <dminuoso> From experience, the relational algebra approach works quite reasonably well. Ruby on Rails uses `arel` for its entire query generation, and with our data warehousing systems, I've been satisfied with the generated queries mostly.
19:55:25 <monochrom> I wouldn't be surprised if this depended on how much money you pay. E.g., DB/2 and Oracle may have much smarter optimizations than Postgres.
19:55:56 <dolio> Well, my experience is with MS SQL Server, which is more expensive than free, I think.
19:56:40 <dminuoso> dolio: Ah yeah. PostgreSQL is quite good at optimizations. There's of course always the odd query where you need some handholding (similar to say writing Haskell with GHC).
19:57:08 × Kaeipi quits (~Kaiepi@47.54.252.148) (Ping timeout: 260 seconds)
19:57:09 <dminuoso> For low (by default sub-16) it actually does an exhaustive search through query plans, and picks the most efficient one.
19:57:14 <dminuoso> (sub-16 joins that is)
19:57:19 × jespada quits (~jespada@90.254.241.81) (Ping timeout: 256 seconds)
19:57:36 <dminuoso> And for larger, it uses genetic algorithms
19:57:40 <idnar> "sub-16"?
19:57:50 <dminuoso> Less than 16 join tables.
19:57:59 <dminuoso> (Im not quite sure about the number these days, might be less)
19:58:28 <__monty__> GA in practical use? o.O
19:58:35 <dminuoso> __monty__: Yes!
19:58:42 <dminuoso> It's called the geqo (genetic query optimizer)
19:58:56 <dminuoso> https://www.postgresql.org/docs/13/geqo-pg-intro.html
19:59:43 Kaiepi joins (~Kaiepi@47.54.252.148)
20:00:13 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
20:00:15 jespada joins (~jespada@90.254.241.81)
20:00:15 <idnar> the main problems I run into with pg are: 1) the cost estimate of something is way off, and 2) it fails to turn some subselect into a join
20:00:33 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
20:01:01 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
20:01:09 <dminuoso> idnar: What kind of datasets do you work with?
20:01:18 × rayyyy quits (~nanoz@gateway/tor-sasl/nanoz) (Ping timeout: 268 seconds)
20:01:19 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
20:01:50 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
20:02:05 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
20:02:28 <idnar> dminuoso: hmm, not sure how to characterize beyond "random medium-size web apps"
20:02:38 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
20:02:57 shatriff joins (~vitaliish@176-52-216-242.irishtelecom.com)
20:03:18 <idnar> most of the time it Just Works :)
20:03:26 × shatriff quits (~vitaliish@176-52-216-242.irishtelecom.com) (Remote host closed the connection)
20:03:32 × Xnuk quits (~xnuk@vultr.xnu.kr) (Ping timeout: 260 seconds)
20:03:35 <dminuoso> Fair enough, just curious. Are any of these databases of non-trivial size?
20:04:02 <dminuoso> (By non-trivial I mean something along the lines of over a billion tuples, anything that just doesnt fit into RAM anymore)
20:05:37 × aveltras quits (uid364989@gateway/web/irccloud.com/x-pgszkpeaurxqzlip) (Quit: Connection closed for inactivity)
20:05:49 conal joins (~conal@64.71.133.70)
20:06:33 <idnar> don't think so
20:07:02 <idnar> I'm usually not all in RAM; but due to the size of the host, not the db
20:08:47 × Alleria_ quits (~AllahuAkb@2603-7000-3040-0000-6117-a0fe-38af-8149.res6.spectrum.com) (Ping timeout: 260 seconds)
20:09:38 × dbmikus quits (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com) (Read error: Connection reset by peer)
20:09:41 <idnar> certainly not Big Data™
20:09:53 mouseghost joins (~draco@87-206-9-185.dynamic.chello.pl)
20:09:53 × mouseghost quits (~draco@87-206-9-185.dynamic.chello.pl) (Changing host)
20:09:53 mouseghost joins (~draco@wikipedia/desperek)
20:09:56 × tromp quits (~tromp@dhcp-077-249-230-040.chello.nl) (Remote host closed the connection)
20:10:06 dbmikus joins (~dbmikus@cpe-76-167-86-219.natsow.res.rr.com)
20:12:24 × avdb quits (~avdb@gateway/tor-sasl/avdb) (Ping timeout: 268 seconds)
20:12:30 × WzC quits (~Frank@77-162-168-71.fixed.kpn.net) (Ping timeout: 265 seconds)
20:12:43 WarzoneCommand joins (~Frank@77-162-168-71.fixed.kpn.net)
20:12:46 justan0theruser joins (~justanoth@unaffiliated/justanotheruser)
20:12:59 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Ping timeout: 265 seconds)
20:13:01 acidjnk_new joins (~acidjnk@p200300d0c704e732989dd075055fe92d.dip0.t-ipconnect.de)
20:13:04 <merijn> Nobody has Big Data >.>
20:13:15 Xnuk joins (~xnuk@vultr.xnu.kr)
20:13:19 <merijn> I mean, Facebook, Google, and the NSA, maybe.
20:13:28 <merijn> Everyone else is just pretending to look cool
20:13:37 hackage blaze-builder 0.4.2.1 - Efficient buffered output. https://hackage.haskell.org/package/blaze-builder-0.4.2.1 (JasperVanDerJeugt)
20:13:37 × gentauro quits (~gentauro@unaffiliated/gentauro) (Read error: Connection reset by peer)
20:13:40 _ht joins (~quassel@82-169-194-8.biz.kpn.net)
20:13:47 <monochrom> Also, along that line...
20:14:03 gentauro joins (~gentauro@unaffiliated/gentauro)
20:14:26 <monochrom> If you are coding up high frequency trading, then you talk about performance.
20:15:12 <merijn> Naah, performance is relevant in more things, but yeah, most people talking about performance are also LARPing their performance needs :p
20:15:17 Ayo joins (~quassel@82.177.83.189)
20:15:38 <monochrom> If you have one single computer that has to serve a million requests per second, and serving fewer than 990 thousand requests per second already gets you bankrupt, then you talk about performance.
20:16:14 × justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 264 seconds)
20:16:16 <davean> I've done 1Mqps on normal HW
20:16:23 <davean> (HTTP)
20:16:28 <dminuoso> monochrom: Percentage wise, we're on the same level. If our service has 5% loss, we might as well file for bankruptcy..
20:16:31 <davean> In Haskell
20:16:33 <dminuoso> (Well, permanent loss)
20:16:33 <monochrom> If you have a general relativity galaxy simulation that you expect to finish in 2 months, and taking 2.3 months is already too long because someone else will publish earlier than you, then you talk about performance.
20:16:42 <merijn> davean: Most of the web can run on one beefy machine easily :p
20:16:51 <dminuoso> Well to be fair, what davean did was not *easily*
20:17:15 <monochrom> But, if you have a program that is so "unoptimized" that it takes 1 second rather than 0.5 seconds, *pfffft*
20:17:17 <davean> I wouldn't call it hard either.
20:17:24 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.0)
20:18:00 <merijn> davean: Well, it's hard. But not in the technical sense :p
20:18:01 <davean> Honestly the "hard" problems with HTTP I've encountered aren't rate, they're latency.
20:18:03 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:18:58 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
20:19:03 × frdg quits (~user@pool-96-252-123-136.bstnma.fios.verizon.net) (Remote host closed the connection)
20:19:30 <davean> merijn: eh, I already had the traffic :-p
20:19:54 frdg joins (~user@pool-96-252-123-136.bstnma.fios.verizon.net)
20:20:40 <merijn> davean: Naah, I meant that, being fast isn't hard, but convincing people to make the investments/sacrifices to make things fast is hard :p
20:21:16 <davean> ah, mmm, being fast is easier than being slow - the slower you are the more you have to deal with the cordination problem
20:21:30 <davean> I ended up running 1+Mqps on a single machine because I was too lazy not to.
20:21:43 <davean> but maybe thats because I actually did distributed systems :-p
20:21:49 <davean> I knew what the option was
20:22:00 <davean> or I could have just done it wrong
20:24:34 Alleria_ joins (~AllahuAkb@2603-7000-3040-0000-0132-7991-54fc-9d8c.res6.spectrum.com)
20:26:36 × tsrt^ quits (tsrt@ip98-184-89-2.mc.at.cox.net) (Ping timeout: 264 seconds)
20:26:39 cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net)
20:27:56 × Kaiepi quits (~Kaiepi@47.54.252.148) (Remote host closed the connection)
20:28:05 <__monty__> Advent of Code shows me every year how easy it is to write something that takes hours instead of seconds. So I'm not so surprised fledgling programmers talk about performance.
20:28:18 <idnar> merijn: you probably want 3 machines for when 1 goes down :P
20:28:49 <monochrom> Project Euler shows that everyday
20:28:55 raehik1 joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:29:01 <dminuoso> __monty__: Let me rephrase that: The faster computers get, the worse programmers become.
20:29:04 <monochrom> And we all know the true cause of those.
20:29:46 Gurkenglas_ is now known as Gurkenglas
20:29:47 <monochrom> A beginner who codes up the moral equivalent of "f n = g (f (n-1)) (f (n-1))" has no right to talk about performance, as I explained a couple of days ago.
20:30:24 <dminuoso> Hey but GHC can do CSE...
20:30:42 <monochrom> That's why I said "moral equivalent".
20:30:55 <dminuoso> Oh
20:31:13 Kaiepi joins (~Kaiepi@47.54.252.148)
20:31:26 × Kaiepi quits (~Kaiepi@47.54.252.148) (Remote host closed the connection)
20:31:34 <monochrom> The actual beginners I have in mind code up list/tree traversal algorithms that look like "merely 2-pass"
20:31:54 <__monty__> monochrom: Hmm, AoC tends to exhibit these performance issues on choice of data structure more than anything. Which, imo, is forgivable for beginners.
20:32:36 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 264 seconds)
20:32:51 <monochrom> But since it becomes "<work on size n> = g <work on size n-1> <work on the same size n-1 again but slightly different>" it is patently exponential to n, and patently unamenable to known optimizations.
20:33:44 howdoi joins (uid224@gateway/web/irccloud.com/x-axbmoogzhixorxhj)
20:34:01 <monochrom> __monty__, that depends on whether beginner in CS at all or beginner in just Haskell.
20:34:19 <merijn> __monty__: tbh, AoC problems are small enough that even stupid choices don't really matter
20:34:25 <monochrom> I have a lot of 3rd-year CS students making the mistake I described.
20:34:45 <davean> idnar: Oh I had failover :)
20:35:05 tromp joins (~tromp@dhcp-077-249-230-040.chello.nl)
20:35:33 <monochrom> I wouldn't even use the word "forgive" if it's a beginner in CS. Not fair to require them to figure this out on their own.
20:35:56 ph88_ joins (~ph88@ip5f5af71a.dynamic.kabel-deutschland.de)
20:36:04 <dminuoso> davean: You wouldn't appreciate how we deal with high performance as an ISP..
20:36:22 <monochrom> But a beginner in CS also has no right to talk about "performance".
20:36:25 <dminuoso> We just scale up the entire network to levels, that we dont need to do internal traffic engineering..
20:36:27 ulidtko joins (~ulidtko@193.111.48.79)
20:36:30 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:36:35 <justsomeguy> Where do you even start with that stuff? I don't even have a clue as to how measure if my recursive function(s) would have better or worse performance by just reading them.
20:36:38 <davean> dminuoso: Hum.
20:37:07 <justsomeguy> ...and the most convient data structure to use is usually a list, which is ill suited for a lot of things involving random access.
20:37:31 <justsomeguy> But it's also pretty much the only one I'm familiar with as a beginner.
20:37:33 <davean> justsomeguy: then you're using the wrong list? ;)
20:38:02 <merijn> justsomeguy: tbh, it's not that different from reasoning about performance than other languages :p
20:38:11 × Ayo quits (~quassel@82.177.83.189) (Read error: Connection reset by peer)
20:38:17 <merijn> justsomeguy: Like, if you need random access a linked list like [] is...pretty bad :p
20:38:27 × ulidtko|k quits (~ulidtko@194.54.80.38) (Ping timeout: 256 seconds)
20:38:35 <merijn> justsomeguy: For random access you want
20:38:37 <merijn> @hackage vector
20:38:37 <lambdabot> https://hackage.haskell.org/package/vector
20:39:02 <monochrom> The Array that comes with base can be good enough.
20:39:03 <merijn> justsomeguy: And assuming you know other languages, you should feel right at home with the stuff in
20:39:08 <merijn> @hackage containers
20:39:08 <lambdabot> https://hackage.haskell.org/package/containers
20:39:36 <justsomeguy> Yeah, I haven't had to reason about performance in any language until now. Mostly my approach has been to use the built-in type that seems most suitable, and I haven't had to care much after that. I'm going to have to look at Data.Vector.
20:39:43 × raehik1 quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
20:39:50 × elliott_ quits (~elliott_@pool-108-51-101-42.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
20:39:51 × ph88^ quits (~ph88@2a02:8109:9e00:7e5c:795a:5528:8c2c:51fe) (Ping timeout: 260 seconds)
20:40:04 justsomeguy has also heard that the sequence type is pretty cool.
20:40:11 Ayo joins (~quassel@82.177.83.189)
20:40:13 <merijn> justsomeguy: Vector is basically like C++'s std::vector/C's arrays
20:40:14 <davean> merijn: the Array that comes with base is missing a TON of functions
20:40:21 <davean> merijn: and instances.
20:40:28 <monochrom> I think you mean me.
20:40:33 <davean> er yes
20:40:36 <davean> sorry
20:40:52 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
20:40:54 <monochrom> But vector is missing a ton of Ix instances, too.
20:41:14 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
20:41:19 <exarkun> So I stumbled around with AES128 CTR some more and I found a surprising result, I think. Passing less than one block of data to `ctr` increments the counter. If the new IV (really the counter) is used subsequently, this means the output is wrong.
20:41:32 <merijn> justsomeguy: It has mutable versions so you don't just have random access, but also just mutable arrays
20:41:50 <exarkun> It seems like this is a misuse of the API but it also seems like the failure behavior could be improved?
20:41:59 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
20:42:35 <geekosaur> exarkun, I'd expect it pads the block out given what you said about it yesterday
20:42:40 × p8m quits (p8m@gateway/vpn/protonvpn/p8m) (Ping timeout: 256 seconds)
20:42:45 heatsink joins (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135)
20:42:53 <exarkun> geekosaur: Yea, it doesn't seem to? length of the output equals length of the input.
20:43:09 frdg` joins (~user@pool-96-252-123-136.bstnma.fios.verizon.net)
20:43:19 <geekosaur> and the counter is blocks, not bytes, so it can't track a partial block across calls
20:43:25 exarkun nods
20:43:30 usr25 joins (~usr25@unaffiliated/usr25)
20:43:40 <exarkun> Oh, you mean it pads it for internal book-keeping purposes?
20:43:46 <geekosaur> yeh
20:43:54 × Franciman quits (~francesco@host-79-51-37-36.retail.telecomitalia.it) (Quit: Leaving)
20:44:05 <exarkun> I guess I could believe that ... but I'm not sure I'm convinced that's good behavior
20:44:07 <geekosaur> it has to encrypt a full block, but it could strip the ret off if it knows the output should be the same size as the input
20:44:09 <davean> monochrom: oh yah, and Ix its self isn't so great.
20:44:14 <geekosaur> *rest off
20:44:29 <exarkun> Hm.. It *has* to encrypt a full block ...
20:44:32 × raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Quit: WeeChat 3.0)
20:44:32 <davean> its missing a bunch of things derivable from its interface that can't be implimented efficiently externally.
20:44:44 <frdg`> question from learning about concurrent haskell. I do not know why this code compiles. To me there should be a type error. http://dpaste.com/BMBL5PRJE
20:44:55 <davean> Ix guarrentees a bunch of existing things that you can't impliment in better than O(N) genericlyu
20:45:02 puffnfresh joins (~puffnfres@119-17-138-164.77118a.mel.static.aussiebb.net)
20:45:05 <exarkun> This makes me realize I must not understand what the OpenSSL implementation is doing. Because OpenSSL also accepts less than a full block. But for the next byte of input, it produces the same result as if you'd included that byte in the first call.
20:45:14 raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
20:45:42 <geekosaur> openssl implements a stream abstraction since it is used to encrypt streams
20:45:43 knupfer joins (~Thunderbi@200116b82c70da002457d3fffeafe7d8.dip.versatel-1u1.de)
20:45:44 × knupfer quits (~Thunderbi@200116b82c70da002457d3fffeafe7d8.dip.versatel-1u1.de) (Client Quit)
20:45:45 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 240 seconds)
20:45:51 <davean> frdg`: why do you think its MVar () not MVar a?
20:46:00 knupfer joins (~Thunderbi@mue-88-130-61-193.dsl.tropolys.de)
20:46:12 <exarkun> But how can it emit one byte of output before it has the other 15 bytes of input?
20:46:23 × ransom quits (~c4264035@undergraduate-jvossen-9690.mines.edu) (Quit: My MacBook has gone to sleep. ZZZzzz…)
20:46:39 <frdg`> davean: I would expect an empty MVar to be an MVar holding `()`
20:46:41 <monochrom> s/equal/::/
20:46:43 <geekosaur> it can't; it quietly buffers the output (resp. input) until it has full blocks
20:46:50 <davean> frdg`: but why
20:47:01 <davean> why would you think that?
20:47:09 <merijn> frdg`: "holding ()" doesn't sound empty to me
20:47:09 <geekosaur> this puts some restrictions on how you make use of openssl's encrypted streams
20:47:12 × frdg quits (~user@pool-96-252-123-136.bstnma.fios.verizon.net) (Ping timeout: 246 seconds)
20:47:12 <davean> what makes () special to you
20:47:14 <monochrom> But "Logger m" forces "m :: MVar LogCommand".
20:47:18 <exarkun> I seem to be observing that it isn't buffering, it is producing results immediately
20:47:20 <exarkun> Let me d ouble check
20:47:26 <davean> yah what merijn said, () isn't empty
20:47:26 × heatsink quits (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135) (Ping timeout: 264 seconds)
20:47:28 <davean> () is something.
20:47:56 conal joins (~conal@64.71.133.70)
20:48:14 <monochrom> () is as "special" as "data X = Ctor"
20:48:51 <monochrom> At the meta level I am not confident that you know the line between terms and types.
20:49:07 <geekosaur> exarkun, you are not working with openssl's stream abstraction last I checked, you were working with a ctr function that encrypts blocks
20:49:16 <monochrom> You write like "myTerm equals myType" left right and centre, I begin to suspect that you actually believe it.
20:49:19 son0p joins (~son0p@181.136.122.143)
20:49:25 jneira joins (501ca940@gateway/web/cgi-irc/kiwiirc.com/ip.80.28.169.64)
20:49:51 <exarkun> geekosaur: Uh ok. I guess I misunderstood. I thought you just told me I was.
20:50:22 <geekosaur> no, you asked me why openssl could do things differently, so I told you what openssl is doing with its stream abstraction
20:50:29 <geekosaur> it's a different beast
20:50:51 <exarkun> I'm sorry, I'm lost now.
20:51:15 <geekosaur> and it has specific requirements for it to work crrectly. similarly, the function you are using has its own different requirements
20:51:18 × frdg` quits (~user@pool-96-252-123-136.bstnma.fios.verizon.net) (Remote host closed the connection)
20:51:23 <exarkun> Here is some Python code that uses OpenSSL and shows some kind of behavior related to non-block-multiple inputs - https://gist.github.com/exarkun/10d4a416a3e9e5fdbae07ae60957b90a
20:51:44 frdg joins (~user@pool-96-252-123-136.bstnma.fios.verizon.net)
20:51:52 <frdg> yes I am mixing up terms and types. Is this correct because `m :: MVar a` and because that a can be anything it can stand for a LogCommand
20:51:57 <exarkun> I totally believe that I'm using it wrong. In fact, that was my assumption from the start. I don't know what I'm doing.
20:52:16 <exarkun> But I'm not convinced that quietly giving the wrong output for violating undocumented requirements is ideal behavior for the library.
20:52:41 <geekosaur> sadly, I don't either; I'm talking generically, I don't know what you're working with
20:53:11 <monochrom> I wouldn't impose that on every bloody library function.
20:53:38 <exarkun> Heh ok
20:54:01 <monochrom> some library functions are meant to be higher level. they should live up to a higher standard, yes
20:54:04 <geekosaur> there's also the consideration that crypto functions tend to be in the hot path and get to make such assumptions for performance reasons
20:54:12 <monochrom> higher safety standard, that is.
20:54:52 <monochrom> lower level functions live up to a lower safety standard because they live up to a higher efficiency standard and also more usable in unforseen circumstances
20:55:01 <geekosaur> this is a fairly low level interface and it's expected that you use a higher level interface if you want such guarantees. as was suggested to you yesterday
20:55:05 <exarkun> monochrom: How about the "undocumented" part though
20:55:28 <exarkun> monochrom: Maybe the docs could say "If you don't pass a full block this will produce garbage output"
20:55:42 <exarkun> That doesn't have a runtime cost
20:56:15 <monochrom> That probably comes back to my explanation of how if a person is great at documenting, they stand to make more money as a lawyer than a programmer. So what does economics imply about what kind of people you get for programmers?
20:56:19 <exarkun> As far as I can tell, `ctr`'s documentation is: "Counter (encryption)"
20:57:01 ransom joins (~c4264035@undergraduate-jvossen-9690.mines.edu)
20:57:16 <exarkun> Ah, I am not super interested in a philosophical debate about the ethos of programming vs lawyering right now, I suppose.
20:57:32 <monochrom> No, this is merely economics.
20:57:32 <exarkun> I think I am trying to gauge whether it is worth filing a bug report or not
20:58:02 <monochrom> Would it make you happier?
20:58:13 <exarkun> Thank you for your help monochrom
20:58:21 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
20:58:24 × revprez_anzio quits (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net) (Ping timeout: 246 seconds)
20:58:41 <geekosaur> you can file it but I suspect the response will be "this is a low level block crypto interface, you are expected to provide full blocks"
20:59:04 <monochrom> I would call it a documentation bug.
20:59:19 revprez_anzio joins (~revprez_a@pool-108-49-213-40.bstnma.fios.verizon.net)
20:59:51 frdg parts (~user@pool-96-252-123-136.bstnma.fios.verizon.net) ("ERC (IRC client for Emacs 27.1)")
21:00:05 <monochrom> Actually I would tone it as making a suggestion.
21:01:26 × _ht quits (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection)
21:01:40 <monochrom> I am pretty much inspired by the movie Apollo 13. To be fair, I do not know whether the problem solving approaches in the movie are the real ones for the real Apollo 13.
21:02:16 <monochrom> But basically, since accident has happened and they're in an exceptional circumstance, ...
21:03:04 <monochrom> it is all very well to keep saying "we don't know what this component will do under this untested circumstance, it's outside the spec, it's undocumented"
21:04:51 <monochrom> the whole point is that accident has happened and therefore they must stress out the components way outside their specs because that's the only chance of saving lives.
21:05:12 <exarkun> fwiw #python-cryptography provided this helpful explanation of AES CTR
21:05:19 <exarkun> "CTR mode encrypts a counter with AES, and then xors that block with the plaintext. So it's streaming."
21:05:27 mdunnio joins (~mdunnio@172.97.43.112)
21:05:32 <monochrom> more importantly, if a component had a built-in "safety check" that forbade you from using it outside its spec, that would stand in the way
21:05:33 <exarkun> no doubt someone here tried to explain this to me but I found this alternate formulation more approachable
21:06:17 × fangyrn quits (uid481529@gateway/web/irccloud.com/x-uookpebloxxoqjgr) (Quit: Connection closed for inactivity)
21:06:23 <exarkun> And I guess the solution for me is just to always handle whole blocks
21:10:30 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 265 seconds)
21:12:15 mmmattyx joins (uid17782@gateway/web/irccloud.com/x-bvruurhqwoxqskjs)
21:14:03 bogdanp joins (~bogdanp@188.24.80.165)
21:15:23 × fnurglewitz quits (uid263868@gateway/web/irccloud.com/x-nhzoizuedcpgsddc) (Quit: Connection closed for inactivity)
21:17:14 desperek_ joins (~draco@87-206-9-185.dynamic.chello.pl)
21:17:35 usr25_tm joins (~usr25@unaffiliated/usr25)
21:17:51 ransom_ joins (~c4264035@8.48.134.30)
21:19:21 × desperek_ quits (~draco@87-206-9-185.dynamic.chello.pl) (Client Quit)
21:19:24 × ransom quits (~c4264035@undergraduate-jvossen-9690.mines.edu) (Ping timeout: 246 seconds)
21:19:39 × Varis quits (~Tadas@unaffiliated/varis) (Remote host closed the connection)
21:20:38 × usr25 quits (~usr25@unaffiliated/usr25) (Ping timeout: 256 seconds)
21:20:38 × mouseghost quits (~draco@wikipedia/desperek) (Ping timeout: 256 seconds)
21:21:12 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 264 seconds)
21:21:16 heatsink joins (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135)
21:22:29 bogdanp joins (~bogdanp@188.24.80.165)
21:23:19 × Rudd0 quits (~Rudd0@185.189.115.108) (Ping timeout: 272 seconds)
21:24:02 × larsan1 quits (~larsan@84.39.117.57) (Ping timeout: 264 seconds)
21:25:38 p8m joins (p8m@gateway/vpn/protonvpn/p8m)
21:28:52 × fresheyeball quits (~isaac@c-71-237-105-37.hsd1.co.comcast.net) (Quit: WeeChat 2.9)
21:31:54 tito_04 joins (~taurux@net-188-216-43-78.cust.vodafonedsl.it)
21:32:59 × taurux quits (~taurux@net-188-216-43-78.cust.vodafonedsl.it) (Ping timeout: 246 seconds)
21:33:31 × kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection)
21:34:02 × justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) (Quit: WeeChat 2.9)
21:34:23 × miklcct quits (quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7) (Quit: No Ping reply in 180 seconds.)
21:35:32 miklcct joins (quasselcor@2001:19f0:7001:5ad:5400:2ff:feb6:50d7)
21:36:41 Rudd0 joins (~Rudd0@185.189.115.108)
21:40:20 × acidjnk_new quits (~acidjnk@p200300d0c704e732989dd075055fe92d.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
21:41:06 × knupfer quits (~Thunderbi@mue-88-130-61-193.dsl.tropolys.de) (Ping timeout: 246 seconds)
21:41:54 × geekosaur quits (82650c7c@130.101.12.124) (Quit: Connection closed)
21:42:40 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
21:44:18 Tario joins (~Tario@200.119.185.25)
21:44:30 olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber)
21:47:09 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
21:48:08 mputz joins (~Thunderbi@dslb-088-064-063-125.088.064.pools.vodafone-ip.de)
21:48:47 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
21:49:13 × bradparker quits (sid262931@gateway/web/irccloud.com/x-ccluxzrskgjvclod) (Read error: Connection reset by peer)
21:49:49 × d0liver quits (sid363046@gateway/web/irccloud.com/x-vbakmemyhoumgknq) (Ping timeout: 272 seconds)
21:49:53 × chele quits (~chele@ip5b40237d.dynamic.kabel-deutschland.de) (Remote host closed the connection)
21:50:23 × davetapley quits (sid666@gateway/web/irccloud.com/x-grrqllwpjuypfeja) (Read error: Connection reset by peer)
21:50:27 × gOOgler quits (uid125351@gateway/web/irccloud.com/x-kfwutrekvoilnxmc) (Ping timeout: 272 seconds)
21:50:32 × SrPx quits (sid108780@gateway/web/irccloud.com/x-qhnqktdxfgqqzrqb) (Read error: Connection reset by peer)
21:50:50 × ebutleriv quits (sid217783@gateway/web/irccloud.com/x-fnjwxppdlbxyqkzv) (Ping timeout: 246 seconds)
21:51:02 × joshmeredith quits (sid387798@gateway/web/irccloud.com/x-ywduelldbxnktgum) (Ping timeout: 264 seconds)
21:51:02 d0liver joins (sid363046@gateway/web/irccloud.com/x-shzgavllbwpukuzz)
21:51:18 davetapley joins (sid666@gateway/web/irccloud.com/x-ivbkhipkkxhxgwwr)
21:51:45 gOOgler joins (uid125351@gateway/web/irccloud.com/x-tobpiglzofpntwns)
21:51:57 bradparker joins (sid262931@gateway/web/irccloud.com/x-auwfxjzsfyjewjox)
21:52:02 SrPx joins (sid108780@gateway/web/irccloud.com/x-xlyxuehzwnzezwmo)
21:52:06 ebutleriv joins (sid217783@gateway/web/irccloud.com/x-maylluzrkecggfca)
21:53:05 elliott_ joins (~elliott_@pool-108-51-101-42.washdc.fios.verizon.net)
21:53:14 joshmeredith joins (sid387798@gateway/web/irccloud.com/x-cfzcqoupsfdhhgcd)
21:53:33 conal joins (~conal@64.71.133.70)
21:56:07 × matryoshka quits (~matryoshk@2606:6080:1002:8:3285:30e:de43:8809) (Quit: ZNC 1.8.2 - https://znc.in)
22:00:26 <__monty__> Do you control the counter?
22:00:48 epicte7us joins (~epictetus@ip184-187-162-163.sb.sd.cox.net)
22:01:31 × unlink2 quits (~unlink2@p200300ebcf259600e4593ff5d42812d3.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
22:02:27 × ransom_ quits (~c4264035@8.48.134.30) (Quit: My MacBook has gone to sleep. ZZZzzz…)
22:02:43 unlink2 joins (~unlink2@p5dc0af9a.dip0.t-ipconnect.de)
22:03:11 × ep1ctetus quits (~epictetus@ip184-187-162-163.sb.sd.cox.net) (Ping timeout: 265 seconds)
22:04:24 ADG1089_ joins (~adg1089@171.76.179.61)
22:04:54 Franciman joins (~francesco@host-79-51-37-36.retail.telecomitalia.it)
22:04:54 × ADG1089_ quits (~adg1089@171.76.179.61) (Read error: Connection reset by peer)
22:05:04 ADG1089_ joins (~adg1089@223.226.159.22)
22:06:50 × Tops21 quits (~Tobias@dyndsl-095-033-095-048.ewe-ip-backbone.de) (Read error: Connection reset by peer)
22:07:06 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 268 seconds)
22:08:56 jpds joins (~jpds@gateway/tor-sasl/jpds)
22:19:46 ADG1089__ joins (~aditya@223.226.159.22)
22:21:05 ransom joins (~c4264035@2a09:bac0:98::830:861e)
22:23:36 × Wuzzy quits (~Wuzzy@p5b0df22a.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
22:24:12 × Franciman quits (~francesco@host-79-51-37-36.retail.telecomitalia.it) (Quit: Leaving)
22:27:00 tsrt^ joins (tsrt@ip98-184-89-2.mc.at.cox.net)
22:27:49 jamm joins (~jamm@unaffiliated/jamm)
22:30:05 × cheater quits (~user@unaffiliated/cheater) (Ping timeout: 256 seconds)
22:30:34 mirrorbird joins (~psutcliff@2a00:801:42b:aff3:74af:2f22:932d:eac0)
22:32:26 × jamm quits (~jamm@unaffiliated/jamm) (Ping timeout: 264 seconds)
22:32:28 × star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Remote host closed the connection)
22:32:42 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
22:33:30 × son0p quits (~son0p@181.136.122.143) (Quit: Lost terminal)
22:40:15 × takuan_dozo quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 246 seconds)
22:42:32 × star_cloud quits (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com) (Excess Flood)
22:43:48 star_cloud joins (~star_clou@ec2-34-220-44-120.us-west-2.compute.amazonaws.com)
22:44:01 <monochrom> __monty__: The whole thing was caused by a misunderstanding on how often the counter increments. The user has control, but the user can misunderstand how to control it.
22:46:38 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Quit: Connection closed)
22:47:02 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
22:48:48 × ADG1089_ quits (~adg1089@223.226.159.22) (Ping timeout: 264 seconds)
22:51:43 × ADG1089__ quits (~aditya@223.226.159.22) (Remote host closed the connection)
22:52:00 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 265 seconds)
22:52:47 × MorrowM quits (~Moshe@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 246 seconds)
22:53:20 ADG1089_ joins (~adg1089@223.226.159.22)
22:59:47 × jlamothe quits (~jlamothe@198.251.55.207) (Ping timeout: 246 seconds)
22:59:50 × elfets quits (~elfets@ip-37-201-23-96.hsi13.unitymediagroup.de) (Quit: Leaving)
23:00:48 jlamothe joins (~jlamothe@198.251.55.207)
23:01:09 acidjnk_new joins (~acidjnk@p200300d0c704e732989dd075055fe92d.dip0.t-ipconnect.de)
23:02:39 × hyperisco quits (~hyperisco@104-195-141-253.cpe.teksavvy.com) (Ping timeout: 246 seconds)
23:04:05 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 256 seconds)
23:07:33 × Tario quits (~Tario@200.119.185.25) (Read error: Connection reset by peer)
23:07:57 <__monty__> monochrom: Yeah but that's why their conclusion seems weird. If they control the counter they can encrypt bit by bit as long as they keep track of how many bits have been encrypted so far.
23:08:39 Tario joins (~Tario@201.192.165.173)
23:12:33 frdg joins (~user@pool-96-252-123-136.bstnma.fios.verizon.net)
23:13:35 × LKoen quits (~LKoen@16.175.9.109.rev.sfr.net) (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”)
23:14:19 × philopsos quits (~caecilius@gateway/tor-sasl/caecilius) (Ping timeout: 268 seconds)
23:14:20 × Tario quits (~Tario@201.192.165.173) (Read error: Connection reset by peer)
23:14:28 Tario joins (~Tario@200.119.185.25)
23:14:53 polyrain joins (~polyrain@124.177.21.171)
23:14:53 × Tario quits (~Tario@200.119.185.25) (Read error: Connection reset by peer)
23:14:54 × Guest74635 quits (~textual@zrcout.mskcc.org) (Ping timeout: 246 seconds)
23:15:04 frdg parts (~user@pool-96-252-123-136.bstnma.fios.verizon.net) ()
23:15:08 Tario joins (~Tario@201.192.165.173)
23:15:30 <monochrom> I think it's a dead horse.
23:18:29 × mirrorbird quits (~psutcliff@2a00:801:42b:aff3:74af:2f22:932d:eac0) (Ping timeout: 272 seconds)
23:19:00 danvet_ joins (~danvet@212-51-149-96.fiber7.init7.net)
23:19:45 × icebreaker quits (michalc@unaffiliated/icebreaker) (Ping timeout: 240 seconds)
23:19:52 icebreaker joins (michalc@freeshell.de)
23:19:52 × icebreaker quits (michalc@freeshell.de) (Changing host)
23:19:52 icebreaker joins (michalc@unaffiliated/icebreaker)
23:19:54 × __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving)
23:19:59 × mdunnio quits (~mdunnio@172.97.43.112) (Remote host closed the connection)
23:24:34 royal_screwup21 joins (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9)
23:24:41 × neiluj quits (~jco@unaffiliated/neiluj) (Quit: leaving)
23:24:47 bogdanp joins (~bogdanp@188.24.80.165)
23:24:55 × wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 272 seconds)
23:25:41 harisamin joins (~harisamin@cpe-67-245-61-239.nyc.res.rr.com)
23:25:50 <harisamin> Hi there
23:26:33 × dcoutts_ quits (~duncan@33.14.75.194.dyn.plus.net) (Ping timeout: 260 seconds)
23:26:37 <harisamin> Is there a sql builder library akin to sqlalchemy's query builder (non-ORM one) in haskell?
23:27:19 <harisamin> currently using postgresql-simple but need something to be able to build dynamic queries a bit better
23:27:32 <harisamin> currently i'm concating sql strings and its getting a bit unwieldy
23:28:27 <dminuoso> harisamin: there's simple tricks you can pull off to construct queries with postgresql-simple
23:28:41 <dminuoso> harisamin: Can you perhaps share a particularly bad code example?
23:29:07 × fendor quits (~fendor@178.115.128.149.wireless.dyn.drei.com) (Remote host closed the connection)
23:29:14 <harisamin> hm well
23:29:15 × royal_screwup21 quits (52254809@gateway/web/cgi-irc/kiwiirc.com/ip.82.37.72.9) (Ping timeout: 246 seconds)
23:29:34 <harisamin> for one, i realize i might need to use table aliases for some complicated queries that have subqueries
23:29:36 × bogdanp quits (~bogdanp@188.24.80.165) (Ping timeout: 264 seconds)
23:29:46 <dminuoso> Use CTEs for those.
23:30:04 <dminuoso> And views if they are shared across multiple queries
23:32:26 × danvet quits (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) (Ping timeout: 264 seconds)
23:32:40 × danvet_ quits (~danvet@212-51-149-96.fiber7.init7.net) (Ping timeout: 256 seconds)
23:33:09 × Deide1 quits (~Deide@217.155.19.23) (Quit: Seeee yaaaa)
23:33:38 × polyrain quits (~polyrain@124.177.21.171) (Quit: Textual IRC Client: www.textualapp.com)
23:36:13 × usr25_tm quits (~usr25@unaffiliated/usr25) (Quit: Leaving)
23:37:04 × conal quits (~conal@64.71.133.70) (Quit: Computer has gone to sleep.)
23:37:55 quinn joins (~quinn@c-73-223-224-163.hsd1.ca.comcast.net)
23:39:16 conal joins (~conal@64.71.133.70)
23:39:18 × p7lpa1ugixavugu quits (~atomic@2800:810:514:e7:cd02:ce51:d5ac:d9bf) (Quit: AtomicIRC: The nuclear option.)
23:40:01 p7lpa1ugixavugu joins (~atomic@2800:810:514:e7:cd02:ce51:d5ac:d9bf)
23:43:53 × heatsink quits (~heatsink@2600:1700:bef1:5e10:a004:c2e:5fd9:3135) (Remote host closed the connection)
23:46:19 × ransom quits (~c4264035@2a09:bac0:98::830:861e) (Quit: My MacBook has gone to sleep. ZZZzzz…)
23:48:04 × cr3 quits (~cr3@192-222-143-195.qc.cable.ebox.net) (Ping timeout: 265 seconds)
23:53:04 × ADG1089_ quits (~adg1089@223.226.159.22) (Ping timeout: 256 seconds)
23:54:25 × merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds)
23:58:39 × ulidtko quits (~ulidtko@193.111.48.79) (Ping timeout: 246 seconds)

All times are in UTC on 2021-01-19.