Home liberachat/#haskell: Logs Calendar

Logs on 2023-12-07 (liberachat/#haskell)

00:01:43 L29Ah joins (~L29Ah@wikipedia/L29Ah)
00:02:18 × xff0x quits (~xff0x@178.255.149.135) (Ping timeout: 252 seconds)
00:04:05 jmdaemon joins (~jmdaemon@user/jmdaemon)
00:04:07 xff0x joins (~xff0x@2405:6580:b080:900:8e8f:f259:634:292d)
00:06:29 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
00:06:29 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
00:06:29 wroathe joins (~wroathe@user/wroathe)
00:07:24 × tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in)
00:10:06 × Tuplanolla quits (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.)
00:17:20 hsdafdlashfdlsh joins (~hsdafdlas@104.223.91.28)
00:19:06 <hsdafdlashfdlsh>  I'm looking for a pure Haskell integer programming library; does anyone have a recommendation?
00:20:07 carif^ joins (~cd@c-98-242-74-66.hsd1.ga.comcast.net)
00:22:10 pavonia joins (~user@user/siracusa)
00:22:26 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 245 seconds)
00:28:56 <Lycurgus> https://hackage.haskell.org/package/limp
00:32:35 <Lycurgus> everything in that areas looks like bindings
00:32:50 <Lycurgus> don't see any actually doin stuff
00:33:36 <Lycurgus> bindings and representation
00:33:57 <Lycurgus> teed up for doin stuff igess
00:35:02 <Lycurgus> prolly something in the OR / math programming societies which doesn make its way to hackage
00:35:05 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
00:35:33 <Lycurgus> i vaguely recall maybe having seen such
00:36:36 <hsdafdlashfdlsh> Lycurgus: Yeah, I found that too, but doesn't seem like it has much of a solver at all.
00:36:55 <Lycurgus> solver = doin stuff
00:38:01 <hsdafdlashfdlsh> Oh right.
00:38:11 <Lycurgus> hopefully i didn give the impression i thought bindings isn the way to go
00:38:30 <Lycurgus> but didn see any good bindings either
00:39:33 <Lycurgus> ppls are big on representation and le'elegance hereabouts, which becomes a kind of hectic doin in its own right
00:39:52 <hsdafdlashfdlsh> Yeah. I think I'll just have to roll my own. :)
00:40:52 <hsdafdlashfdlsh> Probably won't be so le'elegant, though.
00:41:15 Lycurgus having made the point about bindings moves on
00:45:29 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
00:54:29 × xff0x quits (~xff0x@2405:6580:b080:900:8e8f:f259:634:292d) (Ping timeout: 256 seconds)
00:55:41 × bratwurst quits (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) (Quit: Leaving)
00:56:24 xff0x joins (~xff0x@ai096045.d.east.v6connect.net)
01:00:10 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
01:02:02 × sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 260 seconds)
01:07:35 × carif^ quits (~cd@c-98-242-74-66.hsd1.ga.comcast.net) (Remote host closed the connection)
01:12:08 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
01:19:24 × hsdafdlashfdlsh quits (~hsdafdlas@104.223.91.28) (Quit: Client closed)
01:22:38 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
01:22:38 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
01:22:38 wroathe joins (~wroathe@user/wroathe)
01:22:58 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
01:24:07 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 240 seconds)
01:26:24 ChaiTRex joins (~ChaiTRex@user/chaitrex)
01:48:27 × Incredia_ quits (~Incredia@176.254.244.83) (Ping timeout: 256 seconds)
01:52:02 Incredia joins (~Incredia@176.254.244.83)
02:03:25 bilegeek joins (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696)
02:04:09 × bilegeek quits (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696) (Max SendQ exceeded)
02:04:59 bilegeek joins (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696)
02:05:59 × bilegeek quits (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696) (Max SendQ exceeded)
02:07:07 bilegeek joins (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696)
02:07:20 × idgaen quits (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.1.1)
02:08:07 × bilegeek quits (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696) (Max SendQ exceeded)
02:09:19 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
02:09:27 bilegeek joins (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696)
02:10:28 × bilegeek quits (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696) (Max SendQ exceeded)
02:10:51 × whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
02:11:27 bilegeek joins (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696)
02:11:54 × bilegeek quits (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696) (Remote host closed the connection)
02:17:53 jargon joins (~jargon@174-22-221-51.phnx.qwest.net)
02:26:09 × pastly quits (~pastly@gateway/tor-sasl/pastly) (Remote host closed the connection)
02:27:15 pastly joins (~pastly@gateway/tor-sasl/pastly)
02:28:07 ezzieygu1wuf is now known as ezzieyguywuf
02:29:46 × xff0x quits (~xff0x@ai096045.d.east.v6connect.net) (Ping timeout: 255 seconds)
02:30:35 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 264 seconds)
02:34:20 myxos joins (~myxos@065-028-251-121.inf.spectrum.com)
02:34:22 bilegeek joins (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696)
02:35:52 whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com)
02:36:28 <Lycurgus> ftr, limp does have the two main classic solution techniques as solvers
02:40:25 <Lycurgus> or stubs of ones anyway
02:40:34 <Lycurgus> so don't say no damn solvers
02:40:36 bratwurst joins (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8)
02:40:53 × bratwurst quits (~blaadsfa@2604:3d09:207f:f650:216:3eff:fe5a:a1f8) (Client Quit)
02:41:25 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
02:41:26 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
02:41:26 wroathe joins (~wroathe@user/wroathe)
02:44:53 × ystael quits (~ystael@user/ystael) (Ping timeout: 268 seconds)
02:49:17 × Square2 quits (~Square4@user/square) (Ping timeout: 240 seconds)
02:56:11 notzmv joins (~zmv@user/notzmv)
02:57:29 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
02:59:57 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
03:08:30 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:9ce:2c57:5542:dde4) (Remote host closed the connection)
03:08:45 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba)
03:11:27 xff0x joins (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
03:16:34 nate4 joins (~nate@c-98-45-158-125.hsd1.ca.comcast.net)
03:19:28 × jargon quits (~jargon@174-22-221-51.phnx.qwest.net) (Remote host closed the connection)
03:33:35 × shOkEy quits (~shOkEy@178-164-188-90.pool.digikabel.hu) (Ping timeout: 264 seconds)
03:35:03 shOkEy joins (~shOkEy@92-249-185-141.pool.digikabel.hu)
03:37:59 × edr quits (~edr@user/edr) (Quit: Leaving)
03:46:11 × td_ quits (~td@i53870917.versanet.de) (Ping timeout: 264 seconds)
03:47:45 td_ joins (~td@i53870937.versanet.de)
03:50:01 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
03:53:48 × FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
03:53:48 finn_elija joins (~finn_elij@user/finn-elija/x-0085643)
03:53:48 finn_elija is now known as FinnElija
03:59:07 trev joins (~trev@user/trev)
03:59:21 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds)
04:00:56 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
04:01:36 ChaiTRex joins (~ChaiTRex@user/chaitrex)
04:03:34 wgl joins (~wgl@2601:8c0:d01:43a0::6d47)
04:07:53 × wgl quits (~wgl@2601:8c0:d01:43a0::6d47) (Client Quit)
04:08:31 <iqubic> Is there something better I can do than (liftA2 zip fx fy)? I'm looking for something of type Applicative f => f [a] -> f [b] -> f [(a, b)]
04:08:59 <Axman6> zip <$> fx <*> fy? =)
04:09:12 <Axman6> But no, not really
04:09:31 <iqubic> That's just a restating of the initial problem.
04:09:41 <Axman6> yes, hence the =)
04:09:50 <iqubic> Do need Applicative here?
04:10:17 <Axman6> Well, if we had an Apply type class, you could get away with that, but we don't
04:11:23 <iqubic> I can't use fmap only here?
04:14:10 × sabino quits (~sabino@user/sabino) (Quit: Lambda _ -> x)
04:14:17 <monochrom> No, this is the point of liftA2.
04:17:26 <jackdk> Axman6: https://hackage.haskell.org/package/semigroupoids-6.0.0.1/docs/Data-Functor-Apply.html#t:Apply
04:19:06 × nate4 quits (~nate@c-98-45-158-125.hsd1.ca.comcast.net) (Ping timeout: 256 seconds)
04:21:07 × thegeekinside quits (~thegeekin@189.141.65.247) (Remote host closed the connection)
04:23:56 ddellacosta joins (~ddellacos@ool-44c73d16.dyn.optonline.net)
04:25:12 <Axman6> Sure, it exists, but it's not worth a package import for
04:25:17 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
04:31:43 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
04:39:46 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
04:44:41 aforemny_ joins (~aforemny@i59F516C0.versanet.de)
04:45:41 × aforemny quits (~aforemny@i59F516FF.versanet.de) (Ping timeout: 240 seconds)
04:47:28 <iqubic> What makes this situation require Applicative?
04:51:00 <ski> that you're not operating over one "collection"/"computation"/"action"/"effect", but two in this case, combining them
04:51:24 <ski> (`fx' and `fy')
04:51:27 danza joins (~francesco@rm-19-11-235.service.infuturo.it)
04:53:06 <iqubic> Oh... I see. That's kinda what I thought TBH.
04:53:52 <ski> (just one would be `Functor'. zero or more is `Applicative' (idiom). that one is still "static" in the sense that the "computation structure" doesn't depend on intermediate values in the computation. `Monad' is "dynamic" in that "what (effects) to do later" may depend upon intermediate values, unlike `Applicative')
04:55:16 <iqubic> How do you do zero? Is that the `pure' case?
04:56:41 <ski> yes
04:57:19 <ski> define `sequenceA :: Applicative i => [i a] -> i [a]' for yourself
04:59:13 <iqubic> > traverse id
04:59:15 <lambdabot> error:
04:59:15 <lambdabot> • No instance for (Typeable f0)
04:59:15 <lambdabot> arising from a use of ‘show_M65950731038089380657’
04:59:30 <iqubic> that's not really doing what you asked.
05:01:44 <danza> > :t traverse id
05:01:45 <lambdabot> <hint>:1:1: error: parse error on input ‘:’
05:01:51 <ski> yea, i meant define it, without using `Traversable' operations :)
05:01:55 <danza> % :t traverse id
05:01:55 <yahb2> traverse id :: (Traversable t, Applicative f) => t (f b) -> f (t b)
05:02:31 <danza> using traversable seems more fun though :)
05:02:34 <ski> ("from scratch", if you will)
05:02:34 <danza> good morning all
05:03:15 <ski> but yea, if you prefer, you can define `traverse' (for lists, say) instead. they're equivalent
05:03:32 <monochrom> I.e., write your own recursion over the input list. Use Applicative methods.
05:03:49 <ski> using `foldr' e.g. would also be okay
05:04:12 <iqubic> I'm gonna work on Advent of Code now. I'll work on this later.
05:04:13 <monochrom> Yeah actually it's a beautiful foldr too.
05:04:17 <ski> (but it might be easier, and perhaps more enlightening, to do direct recursion)
05:06:20 <danza> interesting. Usually things that are discovered allow expressing more complex from simpler, but here traversable is more simple and also based on the former to build with it
05:06:50 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
05:09:30 <ski> "things that are discovered" ?
05:10:16 <danza> abstractions that are discovered. I am referring to a distinction between invention and discovery, but probably the concept is not as popular as i thought
05:10:18 <ski> "but here traversable is more simple" -- than what ? "and also based on the former to build with it" -- the former being ? `sequenceA' ?
05:10:42 <danza> then it feels more primitive. Applicative
05:10:47 <ski> the line can get a bit blurry
05:11:07 <danza> definitely. A matter of reworking them over centuries, i guess
05:11:21 <monochrom> Well, to me, the sentence simply didn't parse. :)
05:11:45 <monochrom> And too many pronouns.
05:11:46 <danza> yeah i just wake up and dived straight in something not that plain ^^;
05:12:25 <danza> i assume haskellers have outstanding parsing skillss XD
05:12:52 <ski> i think i relatively often have to ask for referents for pronouns .. not sure how much of that is a me problem, and how much is a problem of others not always articulating too clearly what they intend / have in mind
05:13:15 <danza> definitely a writer's problem, i would say
05:13:49 <iqubic> I'm a woman. I use she/her, if that matters.
05:13:50 <danza> but could also be lack of practice with impure expressions XD
05:14:51 <danza> oh nice to see the number of woman haskellers increasing. About pronouns, i try to use "them" until it gets clear, if that matters
05:15:14 <iqubic> I'm trans, but I'm still a woman.
05:15:15 <ski> hm, well, i guess i was more thinking of pronouns like "it", "this", that", and the like
05:15:31 <ski> (sorry if that wasn't clear)
05:15:55 <danza> those refer to locally defined variables that are outside an expression :D
05:16:19 <danza> immutable, sure, but natural language is often mutable
05:16:28 <monochrom> Right, I was referring to, for example, "it is a constant therefore it is zero". (Can you guess that it (pun!) means "f is a constant therefore the derivative of f is zero"?)
05:16:52 <monochrom> So now you are speaking like "I add more 'it's until it's clear" XD
05:17:00 <danza> oh applicative and traversable were in scope
05:17:07 <ski> yea .. but they're kinda picked out of the wind, like a type class instance. only there can be several ones matching, in scope, and can be ambiguous which one was intended (or perhaps not at all clear which ones would waulify)
05:17:55 <danza> in fact it does not matter because i was trying to talk about a circular dependency about "primitives"
05:18:16 <ski> (then there's also stuff like "donkey sentences")
05:18:30 <ski> circular, how ?
05:18:59 <danza> the simplest definition of a (defining) applicative function depending on traversable
05:19:27 <ski> defining ?
05:20:01 <danza> well yeah, to define an applicative you need a sequenceA, although... probably there is another grade of definition, the abstract one
05:21:29 <monochrom> No, you just need a desire for "like fmap but for a 2-ary operator and two operands"
05:22:03 <danza> (i don't think anyone here doubts a trans woman is a woman if that matters iqubic)
05:22:47 × Unode quits (~Unode@fg-ext-220.embl.de) (Ping timeout: 260 seconds)
05:22:56 <danza> i see ... i am not good at those. Bifunctors?
05:25:42 × monochrom quits (trebla@216.138.220.146) (Quit: ZNC 1.8.2+deb3.1 - https://znc.in)
05:26:20 <ski> hmm .. i guess `sequenceA' (for lists) may be enough to derive `pure' and `(<*>)' .. not sure if you can get `fmap' from `sequenceA' or `traverse', though
05:28:23 <jle`> :t \f -> runIdentity . traverse (Identity . f)
05:28:24 <lambdabot> Traversable t => (a -> b) -> t a -> t b
05:28:44 <jle`> :t fmapDefault
05:28:45 <lambdabot> Traversable t => (a -> b) -> t a -> t b
05:29:30 Unode joins (~Unode@fg-ext-220.embl.de)
05:32:03 <ski> yea, sorry, still talking about `Traversable []', and wanting to get `fmap' for the `Applicative' in question, not for the `Traversable' (`[]')
05:33:38 <danza> well i did not mean one could also define the functor part with sequenceA
05:34:25 <ski> yea, i was still wondering :p
05:34:36 <ski> (and no, bifunctors is for something else)
05:38:59 monochrom joins (trebla@216.138.220.146)
05:39:15 <ski> re
05:39:35 <danza> "re"?
05:40:28 <int-e> short for "rehi", "Hi again", or something like that
05:40:34 <ski> monochrom being back
05:41:44 <danza> rehi monochrom :D
05:50:28 <glguy> (aoc spoiler day 7) I was excited to get to use two different extensions (productively) in this one list comprehension https://github.com/glguy/advent/blob/main/solutions/src/2023/07.hs#L44-L45
05:51:36 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba) (Remote host closed the connection)
05:52:06 × Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 252 seconds)
05:52:39 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
05:53:52 Maxdamantus joins (~Maxdamant@user/maxdamantus)
05:55:43 × chexum_ quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
05:59:29 misterfish joins (~misterfis@84-53-85-146.bbserv.nl)
06:02:30 chexum joins (~quassel@gateway/tor-sasl/chexum)
06:03:45 <EvanR> I lost too much time on part 1 messing with Ord stuff
06:03:56 <EvanR> got to resume later
06:09:35 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:14:52 × glguy quits (g@libera/staff/glguy) (Quit: Quit)
06:18:23 × g quits (g@libera/staff/glguy) (Remote host closed the connection)
06:18:49 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 255 seconds)
06:19:09 euleritian joins (~euleritia@dynamic-046-114-206-154.46.114.pool.telefonica.de)
06:21:14 glguy joins (glguy@libera/staff/glguy)
06:23:10 g joins (glguy@libera/staff/glguy)
06:23:15 <haskellbridge> 12<C​elestial> when we have a function whose input will only ever be ``n `rem` <constant>`` , is there a way to tell the compiler that it's "fine" to just have the cases from 0 to n - 1?
06:23:54 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba)
06:24:06 <ski> hm, as in exhaustiveness checking ?
06:24:11 <haskellbridge> 12<C​elestial> I know I could just ignore the warning about non exhaustive pattern matches or add `foo _ = undefined` but I don't like those particularly well
06:24:56 <haskellbridge> 12<C​elestial> ski: yes, I was just wondering if maybe there was a better way to do this in general or if this is just something I have to live with
06:25:50 <haskellbridge> 12<C​elestial> (the cases I need to have are 0 to <constant> - 1, my bad)
06:25:57 <ski> i'm not aware of a way to convince GHC it's impossible
06:26:05 <ski> (yea, that much was evident)
06:27:15 <ski> (i imagine making a wrapper that explicitly calls `mod', before calling a locally defined function with the cases .. would still issue the same warning, despite being local, and only reachable through filtering that input through the `mod')
06:27:39 <ski> maybe LiquidHaskell has some exhaustiveness checking, that would be applicable here .. dunno
06:27:40 <int-e> > (-3) `rem` 2
06:27:41 <lambdabot> -1
06:27:44 <ski> yes
06:27:49 <haskellbridge> 12<C​elestial> https://hackage.haskell.org/package/mod-0.2.0.1/
06:27:49 <haskellbridge> 12<C​elestial> this seems interesting but also overkill
06:27:58 <int-e> > (-3) `mod` 2
06:28:00 <lambdabot> 1
06:28:15 ski figured Celestial actually meant `mod'
06:29:04 <haskellbridge> 12<C​elestial> right, I
06:29:18 <haskellbridge> 12<C​elestial> wasn't sure which was correct but now I get it haha
06:29:21 <jackdk> Celestial: Use https://hackage.haskell.org/package/fin-0.3/docs/Data-Fin.html ?
06:29:40 <int-e> But in either case, GHC doesn't track value ranges for expressions.
06:30:05 <haskellbridge> 12<C​elestial> that makes sense
06:30:09 <haskellbridge> 12<C​elestial> thank you
06:31:33 <danza> curious whether that stems out of an advent of code problem, since that is The Thing now
06:31:56 <haskellbridge> 12<C​elestial> it is not
06:32:22 <ski> glguy : `ParallelListComp' and `TransformListComp', nice :)
06:32:32 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection)
06:32:55 <haskellbridge> 12<C​elestial> I'm writing a visualizer for sorting algorithms in a TUI and part of that is scaling down the bars and using the eighth-sized unicode characters
06:33:41 <danza> oh interesting
06:34:05 <danza> TUI for visualisation is kind of hardcore
06:34:16 <haskellbridge> 12<C​elestial> it works surprisingly well
06:34:53 <haskellbridge> 12<C​elestial> does IRC/Heisenridge support media/images/video?
06:34:59 <ski> horizontal or vertical bars ?
06:35:25 <haskellbridge> 12<C​elestial> vertical but I'm using brick which makes that significantly less painful
06:35:52 <ski> no inline images, sound, clips, page previews
06:35:55 <ski> (thankfully)
06:35:56 <danza> yeah well, but those vis could hardly ever become interactive i guess
06:36:24 <haskellbridge> 12<C​elestial> I mean you can have keyboard shortcuts and there is (limited) mouse support
06:36:31 <ski> there is mouse support for XTerm, &c.
06:36:46 <danza> better than i thought
06:36:46 <ski> Celestial : you could also look into Sixel support, i suppose
06:37:09 chomwitt joins (~chomwitt@2a02:587:7a09:c300:1ac0:4dff:fedb:a3f1)
06:37:15 <ski> (and 24-bit colors. or at least 256-color)
06:37:23 <haskellbridge> 12<C​elestial> I think too few terminals actually support that
06:37:35 <ski> which ?
06:37:54 <haskellbridge> 12<C​elestial> the sixel/bitmap thing
06:37:58 <ski> mm
06:38:51 <haskellbridge> 12<C​elestial> But honestly, if you don't need a circular representation; this bar thing works well, especially with the eights unicode characters it looks very smooth
06:39:28 <haskellbridge> 12<C​elestial> s/eights/eighths (is that how you spell it?)
06:41:41 kenran joins (~user@user/kenran)
06:43:11 alp_ joins (~alp@2001:861:e3d6:8f80:6d8:4f2f:863e:ca1)
06:54:53 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
06:56:35 igemnace joins (~ian@user/igemnace)
06:58:19 × qqq quits (~qqq@92.43.167.61) (Remote host closed the connection)
07:00:28 acidjnk_new joins (~acidjnk@p200300d6e72b9388205ae88ccd349b12.dip0.t-ipconnect.de)
07:01:22 × analoq quits (~yashi@user/dies) (Ping timeout: 260 seconds)
07:02:54 analoq joins (~yashi@user/dies)
07:03:46 × misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 276 seconds)
07:05:19 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
07:06:20 qqq joins (~qqq@92.43.167.61)
07:06:55 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
07:07:16 × danza quits (~francesco@rm-19-11-235.service.infuturo.it) (Read error: Connection reset by peer)
07:07:59 <ski> (i believe so)
07:08:11 × benjaminl quits (~benjaminl@user/benjaminl) (Remote host closed the connection)
07:09:51 benjaminl joins (~benjaminl@user/benjaminl)
07:13:31 <jle`> ski: ah whoops totally missed the "for lists" part. although you can sort of cheat kinda
07:13:53 <jle`> :t \f -> head . traverse ((:[]) . f)
07:13:54 <lambdabot> Traversable t => (a -> b) -> t a -> t b
07:14:01 <jle`> huh what happened
07:14:46 <jle`> i'm probably wrong
07:14:51 misterfish joins (~misterfis@84-53-85-146.bbserv.nl)
07:18:23 <ski> well, you can do `pure' and `(<*>)', right ?
07:20:23 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds)
07:22:22 danza joins (~francesco@rm-19-35-115.service.infuturo.it)
07:25:14 × rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer)
07:25:32 rvalue joins (~rvalue@user/rvalue)
07:34:00 coot joins (~coot@89-69-206-216.dynamic.chello.pl)
07:39:30 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
07:39:55 × misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 255 seconds)
07:51:58 × shriekingnoise quits (~shrieking@186.137.175.87) (Ping timeout: 255 seconds)
07:52:37 bryanv_ joins (~quassel@2603:c028:4503:7500:45b7:933:ab17:bc10)
07:54:09 × bryanv quits (~quassel@2603:c028:4503:7500:45b7:933:ab17:bc10) (Ping timeout: 268 seconds)
07:59:59 sord937 joins (~sord937@gateway/tor-sasl/sord937)
08:01:13 misterfish joins (~misterfis@84-53-85-146.bbserv.nl)
08:01:56 × euleritian quits (~euleritia@dynamic-046-114-206-154.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
08:02:15 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
08:04:07 × danza quits (~francesco@rm-19-35-115.service.infuturo.it) (Ping timeout: 255 seconds)
08:14:47 × stefan-_ quits (~cri@42dots.de) (Ping timeout: 256 seconds)
08:14:49 stefan-_- joins (~cri@42dots.de)
08:15:52 × misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 246 seconds)
08:16:10 nate4 joins (~nate@c-98-45-158-125.hsd1.ca.comcast.net)
08:17:50 dhil joins (~dhil@2001:8e0:2014:3100:371a:4a41:b512:1e94)
08:20:52 × nate4 quits (~nate@c-98-45-158-125.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
08:22:02 <iqubic> ski:
08:22:04 <iqubic> sequenceA :: (Applicative f) => [f a] -> f [a]
08:22:14 <iqubic> sequenceA [] = pure []
08:22:23 <iqubic> sequenceA (x:xs) = (:) <$> x <*> sequenceA xs
08:22:38 <ski> yes, nice :)
08:23:09 <iqubic> I took a break to do Advent of Code, and get food too.
08:23:23 <iqubic> That just popped into my head while I was out.
08:23:36 <ski> if you feel like it, you could try to (re)formulate that as a `foldr'
08:24:00 <iqubic> I want to do that, I'm just not sure how.
08:24:31 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:25:05 <ski> but yea, the important part, that i was thinking of, was to notice that for the empty list (zero computations to combine), you use `pure'; and for the non-empty list (head and tail, two computations (after recursively combining all items in the tail)), you use `(<*>)'
08:25:09 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Client Quit)
08:25:34 <ski> well, i could give you a hint, that might help a little
08:26:07 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
08:26:54 vpan joins (~vpan@mail.elitnet.lt)
08:27:16 <iqubic> sequenceA = foldr (\x acc -> (:) <$> x <*> acc) (pure [])
08:27:37 × ft quits (~ft@p3e9bc784.dip0.t-ipconnect.de) (Quit: leaving)
08:27:38 <iqubic> sequenceA = foldr (\x acc -> liftA2 (:) x acc) (pure [])
08:27:58 <iqubic> sequenceA = foldr (liftA2 (:)) (pure [])
08:28:19 <ski> yep :)
08:28:21 <iqubic> That's really interesting....
08:28:52 <ski> you replace the `(:)'s and the `[]' in the list, with "effectful" versions of them
08:29:02 <ski> @type pure []
08:29:04 <lambdabot> Applicative f => f [a]
08:29:08 <ski> @type liftA2 (:)
08:29:09 <lambdabot> Applicative f => f a -> f [a] -> f [a]
08:29:11 <iqubic> Yeah. I just say that.
08:30:39 <iqubic> I love that comparison.
08:36:13 <[exa]> Re applicatives, I love doing stuff like: MyStruct <$> getField1 <*> getField2 <*> ..., typically in parsers
08:36:41 <[exa]> if I also want a smart constructor (for e.g. checking the values of stuff being in range), is there any good pattern to have it nicely in this scheme?
08:36:59 <ski> (btw, in case it's not clear, you could say `pure' is `liftA0', so to speak. and `fmap'/`(<$>)' is `liftA1', so to speak)
08:37:35 <[exa]> in particular, if my smart constructor can fail, it cannot fail the same applicative wrap easily using just <$> and <*>, so I have to do something like `join $ mkMyStructChecked <$> getField1 <*> getField2 ...`
08:38:15 <[exa]> I hoped there'd be an operator for that but no luck so far :D
08:40:57 <ski> @let infixl 4 <*>>; (<*>>) :: Monad m => m (a -> m b) -> m a -> m b; mamb <*>> ma = join (mamb <*> ma)
08:40:58 <lambdabot> Defined.
08:41:31 <ski> [exa] : use `foo <*> bar <*> baz <*>> quux'
08:42:41 <ski> (i've noticed this pattern before)
08:45:07 <[exa]> oh nice
08:46:20 <[exa]> I assume there's no sane way to have that special operator to be the "first" one, right? (not a problem, we always need the "full" effect anyway, but it would be cool)
08:46:40 <ski> i don't think so
08:47:12 <ski> you can think of it as the inner effect in `foo' only happening once we reach (and pass) `quux'
08:47:18 <[exa]> would probably need varargs-like shenanigans
08:48:24 <[exa]> not a problem tho, I was more like reaching for uniformity or so
08:49:03 <[exa]> (perhaps if we had prolog-ish operators we could do a suffix "period" on the end :D )
08:49:44 <ski> (of course, if `foo' doesn't do any initial effects, just a final pass, you'd use `<$>' for the first part, instead of `<*>'9
08:49:47 <ski> )
08:50:12 <ski> yea, postfix (and prefix) operators
08:52:19 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
08:52:41 euleritian joins (~euleritia@dynamic-046-114-206-154.46.114.pool.telefonica.de)
09:01:16 telser_ joins (~quassel@user/telser)
09:01:29 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba) (Remote host closed the connection)
09:03:31 × telser quits (~quassel@user/telser) (Ping timeout: 268 seconds)
09:04:01 × Incredia quits (~Incredia@176.254.244.83) (Ping timeout: 276 seconds)
09:05:27 idgaen joins (~idgaen@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
09:06:08 × Nixkernal quits (~Nixkernal@115.16.194.178.dynamic.wline.res.cust.swisscom.ch) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
09:08:28 × tzh quits (~tzh@c-71-193-181-0.hsd1.or.comcast.net) (Quit: zzz)
09:09:10 pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
09:09:37 <cheater> geekosaur: that new info paste is cool :)
09:18:38 <jle`> is there a "_head" *lens* ? Lens' [a] (Maybe a)
09:18:44 <cheater> anyone ever feel like you change one type somewhere and then you have to contend with "draw the rest of the owl"
09:21:29 <jle`> ah i guess a head lens probably wouldn't make sense because you can set to Nothing but then a get won't be Nothing necessarily
09:21:32 <jle`> darn
09:21:41 enviosity joins (~enviosity@176.254.244.83)
09:24:00 gehmehgeh joins (~user@user/gehmehgeh)
09:24:30 <ski> @type _head
09:24:31 <lambdabot> (Cons s s a a, Applicative f) => (a -> f a) -> s -> f s
09:24:53 <jle`> yeah i was hoping for a lens
09:25:06 <jle`> like `at 0` hypothetically
09:27:25 <Taneb> How do you `set _head Nothing`?
09:27:28 <jle`> i guess the optic class i really wanted was (Maybe a -> f b) -> s -> f t
09:27:54 <jle`> where you can get Nothing from head but you can't set it to Nothing
09:28:22 <jle`> * forall f. Functor f
09:28:53 danse-nr3 joins (~danse@rm-19-33-5.service.infuturo.it)
09:31:32 Tuplanolla joins (~Tuplanoll@91-159-68-236.elisa-laajakaista.fi)
09:32:06 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba)
09:36:10 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
09:46:22 AlexNoo_ joins (~AlexNoo@5.139.232.120)
09:46:25 × AlexNoo quits (~AlexNoo@5.139.232.120) (Read error: Connection reset by peer)
09:48:21 CiaoSen joins (~Jura@2a05:5800:285:ca00:ca4b:d6ff:fec1:99da)
09:56:23 × bilegeek quits (~bilegeek@2600:1008:b019:ebe6:e541:b9c8:7cbf:696) (Quit: Leaving)
09:58:00 fendor joins (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c)
09:59:32 cfricke joins (~cfricke@user/cfricke)
10:04:53 hgolden_ joins (~hgolden@2603-8000-9d00-3ed1-dd4f-298a-9c49-a0ed.res6.spectrum.com)
10:05:42 × xff0x quits (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 260 seconds)
10:06:11 × hgolden quits (~hgolden@2603-8000-9d00-3ed1-dd4f-298a-9c49-a0ed.res6.spectrum.com) (Ping timeout: 245 seconds)
10:16:15 × danse-nr3 quits (~danse@rm-19-33-5.service.infuturo.it) (Remote host closed the connection)
10:17:04 danse-nr3 joins (~danse@rm-19-33-5.service.infuturo.it)
10:17:19 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 255 seconds)
10:18:47 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
10:20:50 × cimento quits (CO2@gateway/vpn/protonvpn/cimento) (Quit: WeeChat 4.1.2)
10:21:46 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 256 seconds)
10:22:02 × dhil quits (~dhil@2001:8e0:2014:3100:371a:4a41:b512:1e94) (Ping timeout: 260 seconds)
10:22:57 kalj joins (~kalj@h-158-174-207-174.NA.cust.bahnhof.se)
10:25:58 × drdo quits (~drdo@bl14-14-49.dsl.telepac.pt) (Remote host closed the connection)
10:30:09 drdo joins (~drdo@bl14-14-49.dsl.telepac.pt)
10:30:37 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
10:37:56 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
10:38:57 wib_jonas joins (~wib_jonas@business-37-191-60-209.business.broadband.hu)
10:39:20 Nixkernal joins (~Nixkernal@115.16.194.178.dynamic.wline.res.cust.swisscom.ch)
10:44:14 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
10:45:05 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 256 seconds)
10:45:30 misterfish joins (~misterfis@84-53-85-146.bbserv.nl)
10:52:22 × kalj quits (~kalj@h-158-174-207-174.NA.cust.bahnhof.se) (Quit: Client closed)
10:52:37 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
11:03:37 × CiaoSen quits (~Jura@2a05:5800:285:ca00:ca4b:d6ff:fec1:99da) (Ping timeout: 276 seconds)
11:04:25 × rvalue quits (~rvalue@user/rvalue) (Quit: ZNC - https://znc.in)
11:04:49 × euleritian quits (~euleritia@dynamic-046-114-206-154.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
11:05:07 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
11:06:13 xff0x joins (~xff0x@2405:6580:b080:900:c829:a839:8c15:e663)
11:06:41 rvalue joins (~rvalue@user/rvalue)
11:07:52 × danse-nr3 quits (~danse@rm-19-33-5.service.infuturo.it) (Read error: Connection reset by peer)
11:08:34 danse-nr3 joins (~danse@rm-19-18-174.service.infuturo.it)
11:10:21 cimento joins (CO2@gateway/vpn/protonvpn/cimento)
11:18:55 chele joins (~chele@user/chele)
11:21:26 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
11:22:06 × actioninja quits (~actioninj@user/actioninja) (Quit: see ya mane)
11:22:49 <idgaen> Hi all
11:24:07 <idgaen> I want to build a 2 dimensional array from a string which comes from a file.
11:26:11 <idgaen> each lines in the file have the same length (140). I removed the newlines from the string, with (concat . lines).
11:26:35 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 268 seconds)
11:27:09 <idgaen> I want to use the array function to build an: UArray (Int, Int) Char
11:28:59 <idgaen> so, I build a list of indices with: inds = [(x, y) | y <- [1..140], x <- [1..140]] -- There are 140 lines of length of 140 characters.
11:30:31 <idgaen> but when I want to build the list of associative (index, char) that seems to loop forever.
11:31:51 __monty__ joins (~toonn@user/toonn)
11:32:25 <idgaen> the associative list is built with [(i, c) | i <- inds, c <- s ] where s are all lines of file without newlines
11:33:32 <idgaen> the length of s is 140*140, and the length of inds is the same
11:34:41 <idgaen> I don't understand why that loop forever
11:35:17 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
11:36:24 <idgaen> of course, I can build the array with listArray, but the indexes are reversed and the coordinate are represent by (y,x) what I don't want
11:43:16 tremon joins (~tremon@83.80.159.219)
11:44:37 × cimento quits (CO2@gateway/vpn/protonvpn/cimento) (Ping timeout: 255 seconds)
11:44:49 <cheater> when i see a *value* that's like Proxy @(Foo), what is the @? Proxy is a constructor from Data.Proxy.
11:44:59 Square2 joins (~Square4@user/square)
11:45:07 <cheater> as in, foo = Proxy @(Foo)
11:46:44 <cheater> oh it's TypeApplications
11:48:35 tomith joins (tomith@user/tomith)
11:50:58 <[Leary]> > [ (i, c) | i <- [ (x, y) | y <- [1..3], x <- [1..3] ], c <- (concat . lines) "abc\ndef\nghi" ]
11:50:59 <lambdabot> [((1,1),'a'),((1,1),'b'),((1,1),'c'),((1,1),'d'),((1,1),'e'),((1,1),'f'),((1...
11:51:05 <[Leary]> > [ (i, c) | i <- [ (x, y) | y <- [1..3], x <- [1..3] ] | c <- (concat . lines) "abc\ndef\nghi" ]
11:51:07 <lambdabot> [((1,1),'a'),((2,1),'b'),((3,1),'c'),((1,2),'d'),((2,2),'e'),((3,2),'f'),((1...
11:51:35 <[Leary]> idgaen: One of these is a product, the other is a zip. I imagine you want the latter.
11:52:26 × alp_ quits (~alp@2001:861:e3d6:8f80:6d8:4f2f:863e:ca1) (Ping timeout: 256 seconds)
11:52:40 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
11:52:51 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
11:52:57 alp_ joins (~alp@2001:861:e3d6:8f80:3d4b:b65f:a55a:e6ee)
11:55:21 × dcoutts quits (~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Remote host closed the connection)
11:58:39 <idgaen> [Leary]: yes, I want a zip, what I noticed after I wrote my messages.
11:58:47 × mikess quits (~sam@user/mikess) (Ping timeout: 264 seconds)
11:59:25 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
12:01:07 <idgaen> now, I don't understand what I did wrong, because now, it works.
12:13:58 × danse-nr3 quits (~danse@rm-19-18-174.service.infuturo.it) (Ping timeout: 256 seconds)
12:17:41 nate4 joins (~nate@c-98-45-158-125.hsd1.ca.comcast.net)
12:20:46 × xff0x quits (~xff0x@2405:6580:b080:900:c829:a839:8c15:e663) (Ping timeout: 256 seconds)
12:22:31 × nate4 quits (~nate@c-98-45-158-125.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
12:22:32 xff0x joins (~xff0x@ai096045.d.east.v6connect.net)
12:24:13 × remedan quits (~remedan@ip-94-112-0-18.bb.vodafone.cz) (Ping timeout: 276 seconds)
12:24:38 mmhat joins (~mmh@p200300f1c72693d7ee086bfffe095315.dip0.t-ipconnect.de)
12:25:58 remedan joins (~remedan@ip-94-112-0-18.bb.vodafone.cz)
12:26:43 × misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 268 seconds)
12:26:58 aztex joins (~aztex@195-176-96-198.net4.ethz.ch)
12:27:39 <aztex> Hello I am try to turn on profiling for a Haskell executable I have but my build depends on a package that hasn't been compiled with profiling on
12:28:02 <aztex> specifically the package is network-simple
12:28:17 <aztex> so when I try to build with profiling on I get:
12:28:18 <aztex> ```
12:28:18 <aztex> Could not find module ‘Network.Simple.TCP’
12:28:19 <aztex>     Perhaps you haven't installed the profiling libraries for package ‘network-simple-0.4.5’?
12:28:19 <aztex> ```
12:28:50 <aztex> Does it mean I have to locally recompile this pacakge with profiling on to get debug profiling?
12:29:02 <[exa]> aztex: did you do `cabal configure --enable-profiling` ?
12:29:11 <aztex> no
12:29:24 <[exa]> I'd say it's usually required
12:29:39 <[exa]> btw recompile of network-simple shouldn't be harsh
12:30:24 <aztex> in which step should this be done?
12:30:37 aztex2 joins (~aztex@195-176-96-198.net4.ethz.ch)
12:31:52 <[exa]> you probably have some package that you run using `cabal run` right? so in that same project you just do the configure with --enable-profiling and then it should work
12:32:39 <[exa]> afaik it should pull all profiling-enabled modules etc
12:32:49 <[exa]> if not, there's another problem and we'll need more info :]
12:34:53 <aztex2> thanks giving that a shot!
12:34:58 × aztex quits (~aztex@195-176-96-198.net4.ethz.ch) (Ping timeout: 250 seconds)
12:38:47 <[exa]> well let's see if it works
12:40:49 <aztex2> not sure what happened but I got this as a result
12:40:50 <aztex2> ghc: panic! (the 'impossible' happened)
12:40:50 <aztex2>   (GHC version 9.2.8:
12:40:51 <aztex2>     lookupGlobal
12:40:51 <aztex2>   Failed to load interface for ‘GHC.Num.BigNat’
12:40:52 <aztex2>   Perhaps you haven't installed the "p_dyn" libraries for package ‘ghc-bignum’?
12:40:52 <aztex2>   Use -v (or `:set -v` in ghci) to see a list of the files searched for.
12:40:53 <aztex2>   Call stack:
12:40:53 <aztex2>       CallStack (from HasCallStack):
12:40:54 <aztex2>         callStackDoc, called at compiler/GHC/Utils/Panic.hs:181:37 in ghc:GHC.Utils.Panic
12:40:54 <aztex2>         pprPanic, called at compiler/GHC/Tc/Utils/Env.hs:153:32 in ghc:GHC.Tc.Utils.Env
12:42:11 <[exa]> aztex2: oh wow interesting
12:42:40 <[exa]> (btw please use pastebin for the longer pastes, not a problem now but if we'd have 10 conversations pasting over each other here... D: )
12:43:01 <[exa]> aztex2: this came out of the configure?
12:51:42 <aztex2> nah configure went fine
12:51:47 <aztex2> this was the outcome of cabal build
12:57:32 misterfish joins (~misterfis@87.215.131.102)
13:06:38 <[exa]> maybe `cabal clean` before, just to be sure
13:12:41 cimento joins (CO2@gateway/vpn/protonvpn/cimento)
13:19:29 <carbolymer> is there an extension which could allow me catch this issue at compile-time instead https://bpa.st/YQMA ? Or just using field selectors in sum types is not safe?
13:21:51 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
13:25:21 noscript parts (~james@user/earldouglas) ()
13:26:46 × mechap quits (~mechap@user/mechap) (Quit: WeeChat 4.1.2)
13:27:19 ChaiTRex joins (~ChaiTRex@user/chaitrex)
13:28:06 mechap joins (~mechap@user/mechap)
13:31:33 sawilagar joins (~sawilagar@user/sawilagar)
13:36:50 <lortabac> carbolymer: I don't think there is an easy way to catch it at compile-time, but maybe there is a warning against partial field selectors
13:37:38 <carbolymer> yes there is, but what I gather from this warning is to not use those in sum types
13:37:47 <carbolymer> I was wondering If I can use them in a safe way
13:37:59 <carbolymer> it seems there's none
13:38:00 <lortabac> https://downloads.haskell.org/ghc/latest/docs/users_guide/using-warnings.html?highlight=partial%20field%20selectors#ghc-flag--Wpartial-fields
13:38:17 danse-nr3 joins (~danse@rm-19-18-174.service.infuturo.it)
13:39:02 <lortabac> carbolymer: if you are looking for an extension that "magically" does this check when you enable it, then no
13:39:42 <lortabac> there are various ways to solve this problem, each with its own trade-offs
13:40:08 <carbolymer> yeah
13:40:14 <carbolymer> no free lunch apparently
13:41:03 <[exa]> carbolymer: if you really have single-case-specific behaviro, it might be better to have 2 separate types for both cases united by a typeclass interface or so
13:41:11 <exarkun> Newish ghc has a warning about partial functions at their point of use, I think? Could ghc mark partial field selectors so that they trigger this same warning?
13:41:22 <[exa]> anyway +1 for partiality warnings on
13:41:27 <[Leary]> carbolymer: Not sure if it suits your purpose, but you can do things like this: https://play-haskell.tomsmeding.com/saved/HYOgh3RS
13:41:43 <[Leary]> And hide the param with Some when inconvenient.
13:42:17 <[exa]> wow cool
13:44:03 CiaoSen joins (~Jura@2a05:5800:285:ca00:ca4b:d6ff:fec1:99da)
13:44:30 <carbolymer> [Leary]: haha totally overkill, but works, thanks
13:51:17 <carbolymer> but still the condition is to have constructors with distinct types, otherwise one would run into the original problem
13:52:37 × cimento quits (CO2@gateway/vpn/protonvpn/cimento) (Quit: WeeChat 4.1.2)
13:56:55 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:58:19 × danse-nr3 quits (~danse@rm-19-18-174.service.infuturo.it) (Remote host closed the connection)
13:58:59 danse-nr3 joins (~danse@rm-19-18-174.service.infuturo.it)
14:02:57 lg188 joins (~lg188@82.18.98.230)
14:03:42 <lortabac> probably the best alternative is to have each constructor take a single argument, which is a record
14:03:58 <exarkun> Anyone have opinions on mono-traversable, esp. SemiSequence and perhaps isSet/isMap?
14:05:03 <exarkun> I have a type with a [Entry] field and I wouldn't mind making [] parameter so so, eg, linear scan could be avoided by supplying the right type
14:05:13 <lortabac> and then you can use optics if you want to avoid pattern-matching
14:08:58 <exarkun> IsSet/IsMap I mean
14:13:03 × dtman34 quits (~dtman34@c-76-156-89-180.hsd1.mn.comcast.net) (Ping timeout: 256 seconds)
14:14:58 × alp_ quits (~alp@2001:861:e3d6:8f80:3d4b:b65f:a55a:e6ee) (Ping timeout: 246 seconds)
14:15:14 <carbolymer> lortabac: yes, that too, thanks
14:16:07 ddb joins (ddb@tilde.club)
14:16:21 alp_ joins (~alp@2001:861:e3d6:8f80:d720:d644:7314:8753)
14:18:01 × mobivme quits (~mobivme@112.201.111.217) (Read error: Connection reset by peer)
14:18:52 shriekingnoise joins (~shrieking@186.137.175.87)
14:19:38 × aztex2 quits (~aztex@195-176-96-198.net4.ethz.ch) (Quit: Client closed)
14:22:13 × gooba quits (~gooba@90-231-13-185-no3430.tbcn.telia.com) (Remote host closed the connection)
14:22:31 gooba joins (~gooba@90-231-13-185-no3430.tbcn.telia.com)
14:24:51 ystael joins (~ystael@user/ystael)
14:25:52 × igemnace quits (~ian@user/igemnace) (Read error: Connection reset by peer)
14:28:55 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
14:32:07 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds)
14:33:19 stiell joins (~stiell@gateway/tor-sasl/stiell)
14:37:39 <cheater> is there a common type that's like data Maybe3 e a = Error e | Just a | Nothing ?
14:38:39 edr joins (~edr@user/edr)
14:40:26 <kuribas> These?
14:40:37 <[exa]> cheater: isomorphic to `EitherT e Maybe a` ?
14:40:39 <kuribas> https://hackage.haskell.org/package/these
14:41:16 <cheater> [exa]: yes
14:41:17 <cheater> kuribas: no
14:41:20 <dminuoso_> I tend to just handroll them, because usually when there is three constructors, there is some semantic meaning to them
14:41:23 <kuribas> or Either (Maybe e) a?
14:41:34 <cheater> kuribas: no
14:41:44 <dminuoso_> And in case of `This` and `That`, its really not clear how they differ.
14:41:59 <cheater> well, This is this.
14:42:03 <cheater> and That, well, that's that.
14:42:18 × danse-nr3 quits (~danse@rm-19-18-174.service.infuturo.it) (Ping timeout: 252 seconds)
14:42:28 <ncf> Either (Maybe e) a ≃ Either e (Maybe a)
14:42:37 igemnace joins (~ian@user/igemnace)
14:42:51 <cheater> i hate that that's true
14:42:53 <kuribas> cheater: Error e => Left $ Just e Just a => Right a Nothing -> Left $ Nothing
14:43:05 <[exa]> cheater: kinda interesting which method of failure should be triggered by `empty` there
14:43:15 danse-nr3 joins (~danse@rm-19-18-174.service.infuturo.it)
14:43:18 <cheater> idk
14:43:19 <cheater> idc
14:43:25 <cheater> time to go get some fast food
14:43:25 <cheater> bbl
14:44:08 <[exa]> glhf
14:46:16 <lortabac> I use 'Either e (Maybe a)' sometimes if the meaning is clear enough
14:46:26 <lortabac> otherwise a custom data type
14:47:05 wroathe joins (~wroathe@user/wroathe)
14:47:22 <[exa]> at least this way kinda clarifies if it is the error or the value that is missing
14:49:07 × danse-nr3 quits (~danse@rm-19-18-174.service.infuturo.it) (Ping timeout: 255 seconds)
14:52:24 <kuribas> dminuoso_: you can see from the order of the type variables That b = success, This a = error.
14:55:37 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
14:57:32 <bwe> how can I let textComment''' make throwError once there is no "span" of class "author"? https://github.com/benjaminweb/scalpel-exceptt/blob/main/src/Lib.hs#L136-L141
14:58:16 <bwe> ski: I've gone back and devised the problem statement from the ground up and worked my way until here.
14:58:53 <bwe> What I want to understand right now is how can I inspect `author` and depend a control flow on it.
15:00:40 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
15:01:38 <bwe> The next micro step would be to figure what `author` really is and then how can I case over its content.
15:04:58 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds)
15:06:04 dtman34 joins (~dtman34@c-76-156-89-180.hsd1.mn.comcast.net)
15:10:16 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 246 seconds)
15:11:02 euleritian joins (~euleritia@dynamic-046-114-202-224.46.114.pool.telefonica.de)
15:14:27 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 268 seconds)
15:20:27 danse-nr3 joins (~danse@151.47.48.103)
15:20:46 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
15:21:19 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 4.0.5)
15:22:27 × enviosity quits (~enviosity@176.254.244.83) (Ping timeout: 260 seconds)
15:26:28 zer0bitz_ joins (~zer0bitz@user/zer0bitz)
15:30:29 × zer0bitz quits (~zer0bitz@user/zer0bitz) (Ping timeout: 240 seconds)
15:30:58 × waleee quits (~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Ping timeout: 260 seconds)
15:36:55 × azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
15:39:43 × pastly quits (~pastly@gateway/tor-sasl/pastly) (Remote host closed the connection)
15:40:11 pastly joins (~pastly@gateway/tor-sasl/pastly)
15:46:36 enviosity joins (~enviosity@176.254.244.83)
15:48:15 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba) (Remote host closed the connection)
15:48:30 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba)
15:52:22 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
15:54:49 × misterfish quits (~misterfis@87.215.131.102) (Ping timeout: 255 seconds)
16:00:29 × CiaoSen quits (~Jura@2a05:5800:285:ca00:ca4b:d6ff:fec1:99da) (Ping timeout: 240 seconds)
16:01:20 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba) (Remote host closed the connection)
16:02:46 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba)
16:06:58 × euleritian quits (~euleritia@dynamic-046-114-202-224.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
16:07:18 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
16:11:19 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.1.1)
16:12:58 × vpan quits (~vpan@mail.elitnet.lt) (Quit: Leaving.)
16:13:07 <shapr> @quote
16:13:07 <lambdabot> gFunk says: [the main advantage of functional programs are that they're] incorrect the first 1000 times you try to compile it!
16:15:37 × alp_ quits (~alp@2001:861:e3d6:8f80:d720:d644:7314:8753) (Ping timeout: 276 seconds)
16:15:37 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
16:15:47 euleritian joins (~euleritia@dynamic-046-114-202-224.46.114.pool.telefonica.de)
16:16:08 × euleritian quits (~euleritia@dynamic-046-114-202-224.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
16:16:25 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
16:18:00 cimento joins (CO2@gateway/vpn/protonvpn/cimento)
16:19:13 nate4 joins (~nate@c-98-45-158-125.hsd1.ca.comcast.net)
16:19:13 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
16:19:20 euleritian joins (~euleritia@dynamic-046-114-202-224.46.114.pool.telefonica.de)
16:19:39 × cimento quits (CO2@gateway/vpn/protonvpn/cimento) (Client Quit)
16:19:44 × euleritian quits (~euleritia@dynamic-046-114-202-224.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
16:20:03 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
16:22:42 cimento joins (CO2@gateway/vpn/protonvpn/cimento)
16:23:27 × cimento quits (CO2@gateway/vpn/protonvpn/cimento) (Client Quit)
16:24:04 × nate4 quits (~nate@c-98-45-158-125.hsd1.ca.comcast.net) (Ping timeout: 255 seconds)
16:36:11 × kenran quits (~user@user/kenran) (Remote host closed the connection)
16:38:07 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 240 seconds)
16:40:57 ChaiTRex joins (~ChaiTRex@user/chaitrex)
16:41:57 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
16:47:56 Guest|41 joins (~Guest|41@46.146.126.15)
16:49:33 × Guest|41 quits (~Guest|41@46.146.126.15) (Client Quit)
16:50:02 × chele quits (~chele@user/chele) (Remote host closed the connection)
16:54:07 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
16:57:47 todi1 joins (~todi@p4fd1aa52.dip0.t-ipconnect.de)
16:57:53 cimento joins (CO2@gateway/vpn/protonvpn/cimento)
16:58:16 × todi quits (~todi@pd9571076.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
17:02:58 todi1 is now known as todi
17:04:04 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba) (Remote host closed the connection)
17:05:43 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 240 seconds)
17:05:48 × wib_jonas quits (~wib_jonas@business-37-191-60-209.business.broadband.hu) (Ping timeout: 250 seconds)
17:07:07 AlexNoo__ joins (~AlexNoo@178.34.162.199)
17:08:30 ChaiTRex joins (~ChaiTRex@user/chaitrex)
17:09:51 × hamster quits (~ham@user/ham) (Ping timeout: 256 seconds)
17:09:54 × fendor quits (~fendor@2a02:8388:1605:d100:267b:1353:13d7:4f0c) (Remote host closed the connection)
17:10:52 × AlexNoo_ quits (~AlexNoo@5.139.232.120) (Ping timeout: 276 seconds)
17:10:52 × AlexZenon quits (~alzenon@5.139.232.120) (Ping timeout: 276 seconds)
17:12:26 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba)
17:14:23 notzmv joins (~zmv@user/notzmv)
17:15:06 AlexNoo__ is now known as AlexNoo
17:16:30 AlexZenon joins (~alzenon@178.34.162.199)
17:17:47 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 268 seconds)
17:17:53 euleritian joins (~euleritia@dynamic-046-114-202-224.46.114.pool.telefonica.de)
17:22:10 × euleritian quits (~euleritia@dynamic-046-114-202-224.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
17:22:28 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
17:22:54 × cimento quits (CO2@gateway/vpn/protonvpn/cimento) (Quit: WeeChat 4.1.2)
17:30:22 × danse-nr3 quits (~danse@151.47.48.103) (Ping timeout: 276 seconds)
17:31:10 L29Ah joins (~L29Ah@wikipedia/L29Ah)
17:34:38 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
17:35:00 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
17:36:14 mixfix41 joins (~plaguedog@user/mixfix41)
17:45:26 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Ping timeout: 256 seconds)
17:46:39 × mechap quits (~mechap@user/mechap) (Quit: WeeChat 4.1.2)
17:48:03 billchenchina joins (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe)
17:48:09 mc47 joins (~mc47@xmonad/TheMC47)
17:50:14 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:54:35 alexherbo2 joins (~alexherbo@2a02-8440-3341-7ea2-2192-55be-5512-22f8.rev.sfr.net)
17:55:28 ft joins (~ft@p3e9bc784.dip0.t-ipconnect.de)
17:55:39 not_reserved joins (~not_reser@45.88.222.253)
18:00:51 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
18:01:34 × zero quits (~z@user/zero) (Ping timeout: 276 seconds)
18:03:08 zero joins (~z@user/zero)
18:03:59 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
18:04:07 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba) (Remote host closed the connection)
18:04:26 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
18:07:14 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
18:11:03 tzh joins (~tzh@c-71-193-181-0.hsd1.or.comcast.net)
18:23:08 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
18:32:59 × ddellacosta quits (~ddellacos@ool-44c73d16.dyn.optonline.net) (Ping timeout: 264 seconds)
18:37:52 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba)
18:38:35 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:39:33 danza joins (~francesco@151.47.18.116)
18:48:15 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
18:48:16 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
18:48:16 wroathe joins (~wroathe@user/wroathe)
18:52:08 × matijja quits (~matijja@193.77.181.201) (Quit: ZNC 1.8.2 - https://znc.in)
18:53:08 × alexherbo2 quits (~alexherbo@2a02-8440-3341-7ea2-2192-55be-5512-22f8.rev.sfr.net) (Remote host closed the connection)
18:53:29 matijja joins (~matijja@193.77.181.201)
18:53:57 alexherbo2 joins (~alexherbo@2a02-8440-3341-7ea2-2192-55be-5512-22f8.rev.sfr.net)
18:55:38 mechap joins (~mechap@user/mechap)
19:01:40 waleee joins (~waleee@h-176-10-144-38.NA.cust.bahnhof.se)
19:02:07 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 255 seconds)
19:02:35 dhil joins (~dhil@2001:8e0:2014:3100:8b74:2f78:e0a3:7def)
19:03:58 × Feuermagier quits (~Feuermagi@user/feuermagier) (Ping timeout: 276 seconds)
19:08:56 × matijja quits (~matijja@193.77.181.201) (Quit: ZNC 1.8.2 - https://znc.in)
19:09:14 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba) (Remote host closed the connection)
19:12:26 × igemnace quits (~ian@user/igemnace) (Remote host closed the connection)
19:12:44 matijja joins (~matijja@193.77.181.201)
19:15:41 sabino joins (~sabino@user/sabino)
19:16:08 misterfish joins (~misterfis@84-53-85-146.bbserv.nl)
19:18:16 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba)
19:24:10 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
19:24:20 × billchenchina quits (~billchenc@2a0d:2580:ff0c:1:e3c9:c52b:a429:5bfe) (Quit: Leaving)
19:25:00 lottaquestions joins (~nick@2607:fa49:503d:b200:7cfa:fcd1:a658:6a49)
19:26:33 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
19:29:21 × matijja quits (~matijja@193.77.181.201) (Quit: ZNC 1.8.2 - https://znc.in)
19:29:44 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
19:34:11 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 264 seconds)
19:35:59 × ystael quits (~ystael@user/ystael) (Ping timeout: 264 seconds)
19:42:23 ystael joins (~ystael@user/ystael)
19:47:00 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
19:54:10 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
19:57:05 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:57:18 × trev quits (~trev@user/trev) (Quit: trev)
19:57:27 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 256 seconds)
19:59:11 thegeekinside joins (~thegeekin@189.217.90.224)
19:59:45 alp_ joins (~alp@2001:861:e3d6:8f80:3dcc:e84c:21ec:43f6)
19:59:47 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
20:09:51 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba) (Remote host closed the connection)
20:12:37 Sgeo joins (~Sgeo@user/sgeo)
20:12:50 × danza quits (~francesco@151.47.18.116) (Ping timeout: 260 seconds)
20:13:39 azimut joins (~azimut@gateway/tor-sasl/azimut)
20:19:42 <EvanR> for today's part 2, I can't empirically see any errors, the code seems right, works on the example, but gives the wrong answer. I have 8 top level definitions and 1 of them is the example data. All I have to do is verify each one is correct in isolation right xD
20:19:53 wroathe joins (~wroathe@207-153-38-140.fttp.usinternet.com)
20:19:53 × wroathe quits (~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
20:19:53 wroathe joins (~wroathe@user/wroathe)
20:20:45 nate4 joins (~nate@c-98-45-158-125.hsd1.ca.comcast.net)
20:21:05 × not_reserved quits (~not_reser@45.88.222.253) (Quit: Client closed)
20:21:43 <EvanR> might have to bust out unit tests or property tests or something
20:26:23 × nate4 quits (~nate@c-98-45-158-125.hsd1.ca.comcast.net) (Ping timeout: 264 seconds)
20:27:07 mobivme joins (~mobivme@112.201.111.217)
20:27:42 harveypwca joins (~harveypwc@2601:246:c280:7940:585a:99af:3e4c:209b)
20:28:09 L29Ah joins (~L29Ah@wikipedia/L29Ah)
20:30:38 hc joins (~hc@mail.hce.li)
20:45:54 × mobivme quits (~mobivme@112.201.111.217) (Remote host closed the connection)
20:46:40 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba)
20:47:35 Square joins (~Square@user/square)
20:48:46 × Square2 quits (~Square4@user/square) (Ping timeout: 260 seconds)
20:49:38 <EvanR> oof bug in my poker
20:49:53 <EvanR> three of a kind is better than two pair
20:50:01 Guest56 joins (~Guest29@86-82-248-239.fixed.kpn.net)
20:50:34 <c_wraith> my bug was that I didn't read the directions and sorted them like poker hands
20:50:48 <Guest56> Hello, could someone help me with my homework? Im trying to make a CASloop but it doesnt work :(
20:50:49 <EvanR> yeah I did that too
20:50:49 × eggplantade quits (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba) (Ping timeout: 246 seconds)
20:51:37 <Guest56> casloop :: IORef Int -> Int -> IO ()
20:51:37 <Guest56> casloop counter increment = do
20:51:38 <Guest56>   loop
20:51:38 <Guest56>   where
20:51:39 <Guest56>     loop = do
20:51:39 <Guest56>       ticket <- readForCAS counter
20:51:40 <Guest56>       (actualValue, _) <- peekTicket ticket
20:51:40 <Guest56>       let newValue = actualValue + increment
20:51:41 <Guest56>       success <- casIORef counter ticket newValue
20:51:41 <Guest56>       if success
20:51:42 <Guest56>         then return ()
20:51:42 <Guest56>         else loop
20:51:58 <EvanR> @where paste
20:51:58 <lambdabot> Help us help you: please paste full code, input and/or output at e.g. https://paste.tomsmeding.com
20:51:59 <Guest56> This does not work as ticket does not match IO as it is a int
20:52:42 <Rembane> Guest56: You can go: peekTicket (readForCAS counter)
20:54:04 <EvanR> the naming of these variables and operations might help distinguish IO actions from numbers
20:54:10 <Guest56> Rembane This does not work, but here is the complete code. https://paste.tomsmeding.com/xXWlqNBj
20:54:28 × Buggys quits (Buggys@shelltalk.net) (Ping timeout: 276 seconds)
20:55:28 <Rembane> Guest56: What's the type of readForCAS?
20:55:48 <EvanR> use <- to execute IO actions and bind the result, use let x = to just assign a name to a number (or IO action if you weren't trying to execute it)
20:56:29 <Guest56> it says any
20:57:01 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds)
20:57:01 <Guest56> data.economics.Internal.ticket
20:57:18 <Guest56> (IO(INT, bo))
20:57:33 <Guest56> the ticket is type int
20:57:57 <Guest56> EvanR for some reason this does not work
21:00:05 <EvanR> what is the actual error
21:00:56 <Guest56> Couldn't match expected type: Data.Atomics.Internal.Ticket
21:00:56 <Guest56>                                   (IO (Int, b0))
21:00:57 <Guest56>               with actual type: IO (Data.Atomics.Internal.Ticket a0)
21:01:15 × mmhat quits (~mmh@p200300f1c72693d7ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
21:01:22 <Guest56> Thats with readForCAS
21:01:27 <Guest56> and this is without: Couldn't match type ‘Int’ with ‘IO (Int, b0)’
21:01:28 <Guest56>   Expected: Data.Atomics.Internal.Ticket (IO (Int, b0))
21:01:28 <Guest56>     Actual: Data.Atomics.Internal.Ticket Int
21:01:34 mikess joins (~sam@user/mikess)
21:02:32 <EvanR> what's the type of readForCAS
21:03:42 _ht joins (~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
21:04:00 × juri_ quits (~juri@faikvm.com) (Ping timeout: 252 seconds)
21:04:33 <Guest56> Data.Atomics.Internal.Ticket
21:04:34 <Guest56>                                   (IO (Int, b0))
21:04:59 <EvanR> really, then it's not a function and you can't apply it to anything muchless ticket
21:05:11 <EvanR> er, or counter
21:05:55 <Guest56> Originally
21:06:03 <Guest56> it did not have readForCAS
21:06:18 <Guest56> But it still did not work
21:06:25 <Guest56>     (actualValue, _) <- peekTicket ticket
21:06:31 <Guest56> This was originally there
21:06:36 <Guest56> with ticket has type int
21:06:42 <EvanR> what's the type of peekTicket
21:06:58 <Guest56> IO (Int, Any)
21:07:13 <Guest56> peekTicket :: forall a. Ticket a -> a
21:07:13 <Guest56> Defined in ‘Data.Atomics’ (atomic-primops-0.8.4)
21:07:13 <EvanR> really, then it's not a function and you can't apply it to anything muchless ticket
21:07:14 <Guest56> _ :: Ticket (IO (Int, Any)) -> IO (Int, Any)
21:07:22 <EvanR> what
21:07:47 <EvanR> so what's the type of peekTicket
21:08:22 <Guest56> its a function
21:08:24 <Guest56> peekticket
21:08:30 <EvanR> taking what
21:08:59 <Guest56> It should take a ticket
21:09:02 <Guest56> and output a ticket
21:09:14 <EvanR> are you sure
21:09:32 <Guest56> It says so in the documentation i thin
21:09:32 <EvanR> one of your type signatures says it takes and returns not the same type
21:09:33 <Guest56> peekTicket :: Ticket a -> aSource#
21:09:33 <Guest56> A ticket contains or can get the usable Haskell value. This function does just that.
21:09:40 <Guest56> a -> a
21:09:44 mobivme joins (~mobivme@112.201.111.217)
21:09:54 <Guest56> means it takes a ticket a and gives a ticket back?
21:10:03 <EvanR> that's the 4th type signature for peekTicket you've posted
21:10:14 <Guest56> oh wait
21:10:26 <EvanR> 4th unique type signature
21:10:32 <haskellbridge> 12<C​elestial> what's the best way to represent the steps of an "animation" within an application state? Right now I basically have something isomorphic to `(FrameInfo, [FrameInfo])` but that's not great for a few reasons. In other languages I would probably have `(Int, Array FrameInfo)` but im not sure if that's idiomatic here
21:10:55 <EvanR> what's wrong with [FrameInfo] ?
21:11:22 <probie> EvanR: It's `Ticket a -> a`, the `aSource#` is just because they've grabbed to much when they've gone to copy and paste
21:11:24 <Guest56> I dont understand, what is a 4th type signature
21:11:24 <EvanR> or (Int,[FrameInfo])
21:11:44 × dhil quits (~dhil@2001:8e0:2014:3100:8b74:2f78:e0a3:7def) (Ping timeout: 256 seconds)
21:12:00 <Guest56> probie Yes this is correct
21:12:13 <EvanR> peekTicket :: Ticket a -> a, alright that's progress
21:13:04 <haskellbridge> 12<C​elestial> The problem is that it needs special handling for an empty list to start with because then you can't represent the state or need to handle it seperately
21:13:26 <EvanR> if you use an array or vector to hold the frameinfos, it can still be empty
21:13:30 <haskellbridge> 12<C​elestial> `(Int, [FrameInfo])` is better in that sense but it's also pretty inefficient
21:13:31 <EvanR> technically
21:13:58 <EvanR> kneejerk reaction is, don't have empty animations?
21:14:22 <EvanR> [FrameInfo] is fine for small number of items
21:15:09 <haskellbridge> 12<C​elestial> right, but then you have the compiler complain about totality because the rest of the codebase deals with lists of data - I could make those `NonEmpty` I suppose
21:15:11 mmhat joins (~mmh@p200300f1c7269374ee086bfffe095315.dip0.t-ipconnect.de)
21:15:25 <EvanR> NonEmpty FrameInfo would solve that yes
21:15:32 <haskellbridge> 12<C​elestial> but thanks for the input :)
21:15:35 <EvanR> if it's an actual problem
21:15:37 <probie> Guest56: I think what you want is just `actualValue <- peekTicket ticket`
21:16:49 × sabino quits (~sabino@user/sabino) (Quit: Lambda _ -> x)
21:16:59 machinedgod joins (~machinedg@93-138-62-133.adsl.net.t-com.hr)
21:17:06 <probie> or more likely `let actualValue = peekTicket ticket` if `ticket` is a `Ticket Int` and not a `Ticker (IO Int)`
21:17:39 <probie> s/Ticker/Ticket/
21:18:34 <Guest56> probie That did solve the error, the ticket was ticket int
21:19:49 <Guest56> I have one more problem, which is the last loop 'if success
21:19:50 <Guest56>         then return ()
21:19:50 <Guest56>         else loop'
21:19:57 <EvanR> if peekTicket ticket is an Int, then you can't execute it like an IO action
21:20:06 <EvanR> x <- 3 won't work
21:20:25 bilegeek joins (~bilegeek@2600:1008:b042:9b48:fb5c:1866:504a:bda4)
21:20:28 <EvanR> let x = 3 works
21:21:04 <Guest56> succes is of type (Bool, Data.Atomics.Internal.Ticket Int), while I need the loop to go on if this is true
21:21:07 <Guest56> how can i archieve that
21:21:33 <EvanR> :t fst
21:21:34 <lambdabot> (a, b) -> a
21:21:45 <EvanR> or use pattern matching to unpack the pair and get the Bool
21:22:57 <Guest56> let (bol, int) = success
21:22:58 <Guest56>       if bol
21:22:58 <Guest56>         then return ()
21:22:59 <Guest56>         else loop
21:23:09 <Guest56> how do you guys put the code brackets inhere
21:23:44 <EvanR> you don't need any more brackets
21:23:52 <EvanR> but indentation could use some work
21:25:40 × _ht quits (~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Remote host closed the connection)
21:28:22 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
21:32:02 <Guest56> Thank guys
21:32:05 <Guest56> I think it works now
21:34:41 pavonia joins (~user@user/siracusa)
21:35:41 carcif^ joins (~carcif@c-98-242-74-66.hsd1.ga.comcast.net)
21:44:12 eggplantade joins (~Eggplanta@2600:1700:38c5:d800:a11c:b194:25be:95ba)
21:49:05 × alp_ quits (~alp@2001:861:e3d6:8f80:3dcc:e84c:21ec:43f6) (Ping timeout: 256 seconds)
22:01:18 × Guest56 quits (~Guest29@86-82-248-239.fixed.kpn.net) (Quit: Client closed)
22:07:24 alp_ joins (~alp@2001:861:e3d6:8f80:27cf:eb18:e4f:ec96)
22:10:42 × coot quits (~coot@89-69-206-216.dynamic.chello.pl) (Quit: coot)
22:12:14 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
22:14:37 × oo_miguel quits (~Thunderbi@78-11-179-96.static.ip.netia.com.pl) (Ping timeout: 255 seconds)
22:19:37 × Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 276 seconds)
22:19:55 × harveypwca quits (~harveypwc@2601:246:c280:7940:585a:99af:3e4c:209b) (Quit: Leaving)
22:20:00 Maxdamantus joins (~Maxdamant@user/maxdamantus)
22:40:08 × Vajb quits (~Vajb@2001:999:704:f9f4:5471:a9dd:fd2a:5408) (Ping timeout: 256 seconds)
22:41:33 wroathe joins (~wroathe@50.205.197.50)
22:41:33 × wroathe quits (~wroathe@50.205.197.50) (Changing host)
22:41:33 wroathe joins (~wroathe@user/wroathe)
22:43:13 ddellacosta joins (~ddellacos@ool-44c73d16.dyn.optonline.net)
22:43:25 × ddellacosta quits (~ddellacos@ool-44c73d16.dyn.optonline.net) (Client Quit)
22:52:07 × acidjnk_new quits (~acidjnk@p200300d6e72b9388205ae88ccd349b12.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
22:57:35 × remedan quits (~remedan@ip-94-112-0-18.bb.vodafone.cz) (Ping timeout: 264 seconds)
22:59:39 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
23:01:11 × misterfish quits (~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 245 seconds)
23:01:34 × lottaquestions quits (~nick@2607:fa49:503d:b200:7cfa:fcd1:a658:6a49) (Ping timeout: 268 seconds)
23:01:51 × mechap quits (~mechap@user/mechap) (Quit: WeeChat 4.1.2)
23:02:35 remedan joins (~remedan@ip-94-112-0-18.bb.vodafone.cz)
23:06:26 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
23:11:10 × chomwitt quits (~chomwitt@2a02:587:7a09:c300:1ac0:4dff:fedb:a3f1) (Ping timeout: 246 seconds)
23:16:07 <DerDummNemetzkii> how does one solve cyclic graph dependencies in haskell?
23:17:24 <geekosaur> symbolic references is one waty. "tying the knot" is another
23:17:36 <geekosaur> https://wiki.haskell.org/Tying_the_Knot
23:18:38 <DerDummNemetzkii> thanks
23:24:20 × alp_ quits (~alp@2001:861:e3d6:8f80:27cf:eb18:e4f:ec96) (Ping timeout: 256 seconds)
23:26:52 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:34:30 peterbecich joins (~Thunderbi@047-229-123-186.res.spectrum.com)
23:36:07 <EvanR> do you mean module dependencies
23:43:07 <DerDummNemetzkii> EvanR, aye
23:43:33 <DerDummNemetzkii> ModuleB imports ModuleA which imports ModuleB
23:43:54 <geekosaur> oh dear
23:43:56 <EvanR> an hs-boot file will tell ghc about the loops and allow the compilation to go through
23:43:59 <EvanR> however
23:44:07 <EvanR> probably best to just not do that
23:44:28 <DerDummNemetzkii> kinda hard to when I need modules to have a parent.
23:44:53 <EvanR> there is usually a way to refactor it so you don't have an import loop
23:45:37 <DerDummNemetzkii> But this is mandatory. I have, say, Car module which imports Engine and Engine needs a reference back to the parent called "car_owner"
23:45:38 mechap joins (~mechap@user/mechap)
23:45:59 × mmhat quits (~mmh@p200300f1c7269374ee086bfffe095315.dip0.t-ipconnect.de) (Quit: WeeChat 4.1.2)
23:46:11 × wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds)
23:46:37 × alexherbo2 quits (~alexherbo@2a02-8440-3341-7ea2-2192-55be-5512-22f8.rev.sfr.net) (Remote host closed the connection)
23:46:54 <DerDummNemetzkii> So that the engine knows what car it belongs to.
23:47:39 × peterbecich quits (~Thunderbi@047-229-123-186.res.spectrum.com) (Ping timeout: 256 seconds)
23:53:45 × tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in)
23:56:21 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
23:57:21 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5)
23:58:41 jargon joins (~jargon@174-22-221-51.phnx.qwest.net)

All times are in UTC on 2023-12-07.