Logs on 2020-09-20 (freenode/#haskell)
| 00:00:01 | × | MasterGruntR75 quits (~MasterGru@185.163.110.116) () |
| 00:04:28 | hackage | string-interpolate 0.3.0.1 - Haskell string/text/bytestring interpolation that just works https://hackage.haskell.org/package/string-interpolate-0.3.0.1 (williamyaoh) |
| 00:06:27 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 00:07:02 | × | alx741 quits (~alx741@186.178.110.2) (Ping timeout: 272 seconds) |
| 00:10:57 | × | AlterEgo- quits (~ladew@124-198-158-163.dynamic.caiway.nl) (Read error: Connection reset by peer) |
| 00:14:36 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 00:14:46 | ← | Plazma parts (~Plazma@freenode/staff-emeritus/plazma) () |
| 00:20:38 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 00:22:52 | × | __Joker_ quits (~Joker@180.151.105.65) (Ping timeout: 272 seconds) |
| 00:23:45 | → | machinedgod joins (~machinedg@24.51.251.11) |
| 00:25:52 | → | __Joker joins (~Joker@180.151.105.65) |
| 00:26:02 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
| 00:26:43 | × | cantstanya quits (~chatting@gateway/tor-sasl/cantstanya) (Ping timeout: 240 seconds) |
| 00:26:57 | → | wavemode joins (~wavemode@097-070-075-143.res.spectrum.com) |
| 00:28:12 | × | mpereira quits (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) (Ping timeout: 260 seconds) |
| 00:30:05 | × | __Joker quits (~Joker@180.151.105.65) (Ping timeout: 240 seconds) |
| 00:30:58 | → | cantstanya joins (~chatting@gateway/tor-sasl/cantstanya) |
| 00:35:34 | → | gmt joins (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) |
| 00:38:01 | × | machinedgod quits (~machinedg@24.51.251.11) (Ping timeout: 260 seconds) |
| 00:44:28 | → | maroloccio joins (~marolocci@2a02:8084:601d:7f80:164f:8aff:fed8:411d) |
| 00:47:25 | × | aenesidemus quits (~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net) (Quit: Leaving) |
| 00:48:26 | × | cantstanya quits (~chatting@gateway/tor-sasl/cantstanya) (Remote host closed the connection) |
| 00:50:43 | → | cantstanya joins (~chatting@gateway/tor-sasl/cantstanya) |
| 00:51:22 | × | solonarv quits (~solonarv@astrasbourg-653-1-186-165.w90-13.abo.wanadoo.fr) (Ping timeout: 272 seconds) |
| 00:51:23 | → | alx741 joins (~alx741@186.178.110.2) |
| 00:54:35 | → | toony1 joins (~toony@s91904426.blix.com) |
| 00:54:51 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 00:58:34 | × | MorrowM quits (~max@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 265 seconds) |
| 00:58:43 | → | polyrain joins (~polyrain@2001:8003:e501:6901:a8a8:546d:e1e3:2f7b) |
| 00:59:13 | → | MrZe joins (~root@140.213.56.183) |
| 00:59:27 | <MrZe> | hi |
| 00:59:54 | × | shatriff quits (~vitaliish@176.52.219.10) (Remote host closed the connection) |
| 01:00:40 | <MrZe> | anybody online ? |
| 01:00:48 | <MrZe> | 2 |
| 01:01:08 | <yushyin> | maybe |
| 01:01:56 | → | __Joker joins (~Joker@180.151.105.65) |
| 01:02:04 | → | OmegaDoug joins (6ca87592@dhcp-108-168-117-146.cable.user.start.ca) |
| 01:02:29 | <yushyin> | over 1000 users are online |
| 01:03:25 | × | ryansmccoy quits (~ryansmcco@156.96.151.132) (Ping timeout: 240 seconds) |
| 01:03:37 | → | ryansmccoy joins (~ryansmcco@68.235.48.108) |
| 01:04:22 | → | pera joins (~pera@unaffiliated/pera) |
| 01:04:24 | → | root_ joins (~root@140.213.56.183) |
| 01:04:28 | <sim590> | I have this function http://sprunge.us/3by4Qf which maps a function on some field of a type LBSNode in order to increment it. I'm getting "Pattern match(es) are non-exhaustive" error with "Patterns not matched: (LBSInternalNode _ _)". Why am I getting this error even though I did write `incIndex _` on the next line to cover every other cases? |
| 01:04:59 | × | Rudd0 quits (~Rudd0@185.189.115.108) (Ping timeout: 240 seconds) |
| 01:05:18 | × | MrZe quits (~root@140.213.56.183) (Ping timeout: 256 seconds) |
| 01:05:25 | <root_> | exit |
| 01:05:31 | <root_> | exit |
| 01:06:24 | <sim590> | Seems like this https://gitlab.haskell.org/ghc/ghc/-/issues/5728 is related? |
| 01:06:26 | × | __Joker quits (~Joker@180.151.105.65) (Ping timeout: 256 seconds) |
| 01:06:31 | <MarcelineVQ> | sim590: is mapML perhaps not exhaustive? |
| 01:06:42 | × | xff0x_ quits (~fox@2001:1a81:5373:6a00:4ccb:e51f:bb16:7d67) (Ping timeout: 260 seconds) |
| 01:06:58 | → | nbloomf joins (~nbloomf@104-183-67-6.lightspeed.fyvlar.sbcglobal.net) |
| 01:07:17 | <lechner> | Hi, what's a good way to print a string without double quotes, please? Thanks! |
| 01:07:43 | <MarcelineVQ> | putStr or putStrLn |
| 01:08:35 | → | xff0x_ joins (~fox@2001:1a81:53ac:b300:4ccb:e51f:bb16:7d67) |
| 01:08:39 | <sim590> | MarcelineVQ: I don't think so: http://sprunge.us/TKoZBk. And here's mapL: http://sprunge.us/9NIrK4. If you need to go deeper, here's http://sprunge.us/jUAklr. |
| 01:08:45 | <lechner> | Sorry, it's actually a Data.ByteString.Char8.ByteString |
| 01:08:59 | <jumper149> | lechner: `print` is the same as `putStrLn . show` https://hackage.haskell.org/package/base-4.14.0.0/docs/src/System.IO.html#print |
| 01:09:16 | <lechner> | jumper149: yes, but that adds the quotes |
| 01:09:37 | <lechner> | i currently use putStrLn show |
| 01:09:43 | <jumper149> | Was just making sure you understand what each part does! |
| 01:10:02 | <lechner> | i think the show is not pretty |
| 01:10:22 | × | root_ quits (~root@140.213.56.183) (Ping timeout: 272 seconds) |
| 01:10:23 | <sim590> | MarcelineVQ: also this: `type LBSTree a = BSTree (LBSNode a)` should clarify things. There's LBSTree, but also BSTree which is the base for the former. But the message is just warning also. It's not an error, but I don't like that. |
| 01:10:52 | → | rprije joins (~rprije@27.143.220.203.dial.dynamic.acc01-myal-dub.comindico.com.au) |
| 01:10:56 | <jumper149> | How about BS.putStr https://hackage.haskell.org/package/bytestring-0.10.12.0/docs/Data-ByteString-Char8.html#v:putStr |
| 01:11:01 | × | Gurkenglas quits (~Gurkengla@unaffiliated/gurkenglas) (Ping timeout: 264 seconds) |
| 01:11:27 | <lechner> | i am concatenating with ++ so i have to convert first |
| 01:12:05 | <jumper149> | Also if you use functions on String like Prelude.print and ++ you will lose some of the benefits from ByteString. |
| 01:12:23 | <jumper149> | I guess you just want it to work and only use bytestring because a library gives it to you? |
| 01:12:41 | <MarcelineVQ> | sim590: What's the full warning? |
| 01:13:26 | <yushyin> | lechner: with String use prelude's putStr with Bytestring use Bytestring's putStr |
| 01:13:55 | <lechner> | I would like to concatenate. last line here: https://dpaste.com/7RQPNTE63 |
| 01:14:21 | <sim590> | MarcelineVQ: http://sprunge.us/NW5U6N. I'm getting it on two different calls. The first that I pasted and another one lower. |
| 01:15:16 | <sim590> | MarcelineVQ: here's the whole file if that helps: http://sprunge.us/PxW93j |
| 01:16:14 | <sim590> | MarcelineVQ: I just tried RecordWildCards but it didn't help me fix it. |
| 01:16:57 | <MarcelineVQ> | sim590: that's not about the left side pattern that error is pointing at the right side, ghc isn't super smart here so it's being conservative: it's telling you that "return $ l {index = i+amount}" could be dangerous because l might be LBSInternalNode instead of LBSLeaf which doesn't have an 'index' field |
| 01:17:02 | <jumper149> | lechner: For conversion functions there is pack and unpack in the ByteString library |
| 01:17:09 | <jumper149> | They will convert from and to String |
| 01:17:20 | <jumper149> | so for you it would be C.unpack |
| 01:17:26 | <divVerent> | 135 one seems a false positive as you asserted on the ViewPattern before |
| 01:17:26 | <MarcelineVQ> | Now, we know better, but it doesn't it looks like |
| 01:18:13 | <MarcelineVQ> | fyi using record syntax on sum types like this is avoided for that reason, if you forget to make sure what constructor you have your field accesor could crash your program since it might try to get 'index' from LBSNode which doesn't have one |
| 01:18:33 | <divVerent> | same in the second one |
| 01:18:43 | × | ntwhaaci^ quits (ntwoaaci@ip98-184-89-2.mc.at.cox.net) () |
| 01:19:00 | <divVerent> | yes, but here technically the compiler should already know which record case is taken |
| 01:19:33 | <OmegaDoug> | Is there a way in to tell stack where to write the executable when running "stack build"? I'd like to put in the root of the "stack-work" folder. |
| 01:19:44 | <sim590> | MarcelineVQ: OK, but on line 120, I'm using the "same technique" but it doesn't complain. Am I not? |
| 01:20:03 | <sim590> | Oh I'm sorry. You said the right side, so it's not the same thing |
| 01:20:09 | × | xpika quits (~alan@2001:8003:5d32:1f00:65e7:740e:363f:f90f) (Ping timeout: 244 seconds) |
| 01:20:15 | <lechner> | jumper149: thanks! |
| 01:20:27 | <sim590> | But isn't the type of the right side determined by the left side since l is just the name of the pattern matched? |
| 01:21:07 | <lechner> | what is the difference between the <- and the =<< operator, please? |
| 01:21:49 | <MarcelineVQ> | sim590: afaict the issue is that you're updating `l` and `l` might not always have `index` as a field, appearantly pattern matching it didn't inform ghc that `l` is LBSLeaf and thus safe. I think this is weird but is the only explanation I can think of |
| 01:21:51 | <ski> | lechner : `=<<' is an ordinary operator, defined in a library. `<-' is special syntax, like `=' or `::' |
| 01:21:55 | <jumper149> | lechner: First of all <- is a keyword and part of the do-nation and =<< is a function |
| 01:22:16 | <ski> | @type (=<<) |
| 01:22:17 | <lambdabot> | Monad m => (a -> m b) -> m a -> m b |
| 01:23:25 | <ski> | f =<< act = do x <- act |
| 01:23:28 | <ski> | f x |
| 01:23:39 | <ski> | is how it could be defined |
| 01:23:56 | <ski> | (the actual definition is probably something like |
| 01:23:59 | <ski> | @src =<< |
| 01:23:59 | <lambdabot> | f =<< x = x >>= f |
| 01:24:00 | <lechner> | ski: thanks, that's what I thought! |
| 01:24:14 | <MarcelineVQ> | sim590: I'm could be wrong though, something about that warning is bugging me |
| 01:24:24 | <ski> | where the `do'-notation syntactic sugar expands to calls to `>>=' (and `>>')) |
| 01:25:09 | <ski> | `<-' is part of `do'-notation (the same symbol `<-' is also used in list comprehensions) |
| 01:25:22 | × | thc202 quits (~thc202@unaffiliated/thc202) (Ping timeout: 260 seconds) |
| 01:25:33 | <sim590> | MarcelineVQ: Yeah... I find that weird also. It really seems to be related to https://gitlab.haskell.org/ghc/ghc/-/issues/5728, but this issue is quite old and since they flagged it as a duplicate of some issue that they claim having fixed, I'm a bit confused. |
| 01:26:25 | <MarcelineVQ> | the answer is likely in the haskell report or ghc manual since it's related to record update syntax |
| 01:27:00 | × | nbloomf quits (~nbloomf@104-183-67-6.lightspeed.fyvlar.sbcglobal.net) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 01:29:02 | <MarcelineVQ> | sim590: really though the answer you're gonna get mostly is do not use record syntax for sum types like Trees :> |
| 01:30:00 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
| 01:30:26 | <sim590> | MarcelineVQ: but I'm really just updating a Node inside a Tree, not the Tree itself! |
| 01:30:44 | <sim590> | I mean that I have a complex type that is a the Node here. It's LBSNode. |
| 01:30:47 | × | acidjnk_new2 quits (~acidjnk@p200300d0c7365818803e8c849f4b43fc.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 01:31:20 | → | justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311) |
| 01:31:27 | <ski> | > Node {rootLabel = (),subForest = []} |
| 01:31:30 | <lambdabot> | Node {rootLabel = (), subForest = []} |
| 01:31:31 | <ski> | > (Node) {rootLabel = (),subForest = []} |
| 01:31:33 | <lambdabot> | error: |
| 01:31:33 | <lambdabot> | • Couldn't match expected type ‘Tree a1’ |
| 01:31:33 | <lambdabot> | with actual type ‘a0 -> Forest a0 -> Tree a0’ |
| 01:33:18 | <MarcelineVQ> | But you are updating a tree, `index` takes a tree not a leaf, it just only works if the tree was a leaf right? |
| 01:33:37 | <MarcelineVQ> | this is the most relevant report section I can find https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-490003.15 |
| 01:34:20 | <MarcelineVQ> | starting with "data T = T1 { y :: Int } | T2 { y :: Bool } -- BAD" :> |
| 01:35:33 | <sim590> | MarcelineVQ: no. Look at the full file: http://sprunge.us/PxW93j. The type of `index` is `LBSNode a -> Int`. A LBSNode has a LBSLeaf as constructor. |
| 01:35:38 | → | nbloomf joins (~nbloomf@2600:1700:83e0:1f40:b852:f831:8cd4:429) |
| 01:36:13 | × | maroloccio quits (~marolocci@2a02:8084:601d:7f80:164f:8aff:fed8:411d) (Ping timeout: 272 seconds) |
| 01:36:46 | <MarcelineVQ> | alright then, a sum datatype still |
| 01:37:06 | <MarcelineVQ> | All that aside what I'd try, if I wanted to keep the labels, is probably incIndex LBSLeaf{index = i, leafContent = c} = return $ LBSLeaf {index = i+amount, leafContent = c} |
| 01:37:36 | <MarcelineVQ> | so that we're not updating `l` but making a LBSLeaf |
| 01:37:46 | <MarcelineVQ> | and you can probably use RecordWildcards or punning to shorten that if you want |
| 01:38:32 | <MarcelineVQ> | idk if that's the exact right syntax for record construction since I've never really needed to do it, hopefully the idea comes across |
| 01:39:00 | <ski> | it is |
| 01:39:22 | <sim590> | Hmmm. Yeah. I guess I can do that in order to avoid the warning. But definitely, GHC should not display a warning in principle. May be I can file a bug. |
| 01:39:23 | <ski> | (also that `$' is redundant) |
| 01:39:38 | <MarcelineVQ> | Really ghc should be satisfied that you matched on LBSLeaf but it's being a bit of a penis |
| 01:40:08 | × | oxide quits (~lambda@unaffiliated/mclaren) (Ping timeout: 272 seconds) |
| 01:40:18 | <MarcelineVQ> | satisfied as in: should understand that `l` has to be LBSLeaf |
| 01:40:58 | → | eric joins (~eric@2804:431:c7d4:402a:4dc9:97ef:220b:73aa) |
| 01:41:34 | × | jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Quit: WeeChat 2.9) |
| 01:42:14 | → | jumper149 joins (~jumper149@ip185225.wh.uni-hannover.de) |
| 01:43:11 | × | jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Client Quit) |
| 01:43:47 | → | jumper149 joins (~jumper149@ip185225.wh.uni-hannover.de) |
| 01:44:04 | <sim590> | Yeah. So, this is a bug. May be it's already reported.. Ahhh. 4,060 bugs to look through. Mehhhh. ;). |
| 01:45:23 | <sim590> | Is there a performance difference between both ways of writing it? What I mean is Between record-update and Construction of the same type with the same values. Will GHC be able use some properties of persistent data structure in order to avoid copying things? Does update-record even do that? |
| 01:45:43 | × | eric quits (~eric@2804:431:c7d4:402a:4dc9:97ef:220b:73aa) (Ping timeout: 272 seconds) |
| 01:45:56 | × | gestone quits (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) (Ping timeout: 256 seconds) |
| 01:47:27 | hackage | regex-pcre-builtin 0.95.1.1.8.44 - PCRE Backend for "Text.Regex" (regex-base) https://hackage.haskell.org/package/regex-pcre-builtin-0.95.1.1.8.44 (AudreyTang) |
| 01:47:42 | × | jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Client Quit) |
| 01:48:27 | hackage | source-constraints 0.0.2 - Source constraints GHC plugin https://hackage.haskell.org/package/source-constraints-0.0.2 (mbj) |
| 01:48:31 | <MarcelineVQ> | Pretty much the same steps are taken regardless. |
| 01:48:54 | <MarcelineVQ> | check out the translation table in section 3.15.3 |
| 01:49:23 | → | kleisli_ joins (~kleisli@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) |
| 01:49:45 | <MarcelineVQ> | Either you case and build a record or update syntax is gonna case and build a record |
| 01:50:18 | <MarcelineVQ> | Which is surely also our source for the unmatched pattern warning |
| 01:51:38 | <ski> | (hm, in Mercury, if it can prove the old reference is unique, it will do an update-in-place, iirc) |
| 01:52:20 | → | Jeanne-Kamikaze joins (~Jeanne-Ka@static-198-54-131-172.cust.tzulo.com) |
| 01:52:34 | → | jumper149 joins (~jumper149@ip185225.wh.uni-hannover.de) |
| 01:52:34 | <MarcelineVQ> | ski: ghc is probably smarter than the report here, but just based on this it's not something to be too concerned about |
| 01:53:03 | → | gestone joins (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) |
| 01:53:15 | <MarcelineVQ> | sim590: it you're worried about it it could be an interesting benchmark to do |
| 01:54:28 | × | jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Client Quit) |
| 01:54:40 | × | kyagrd__ quits (sid102627@gateway/web/irccloud.com/x-mzcjmohivbettnaw) (Read error: Connection reset by peer) |
| 01:54:42 | × | mcfilib quits (sid302703@gateway/web/irccloud.com/x-jpgleryxlbiywuvp) (Read error: Connection reset by peer) |
| 01:54:56 | → | kyagrd__ joins (sid102627@gateway/web/irccloud.com/x-umexjnjqxisrtwcp) |
| 01:55:39 | → | jumper149 joins (~jumper149@ip185225.wh.uni-hannover.de) |
| 01:56:15 | × | jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Client Quit) |
| 01:56:28 | → | mcfilib joins (sid302703@gateway/web/irccloud.com/x-mcvztaukmltliuld) |
| 01:57:49 | <sim590> | Well. It's not very worrying. I was mainly wondering in order to know for other use cases. |
| 01:58:40 | <sim590> | But then since I have to use the constructor, I can go back to the following syntax `incIndex (LBSLeaf i c) = return $ LBSLeaf (i+amount) c` which is the default I normally use. |
| 01:58:46 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 01:58:59 | → | jumper149 joins (~jumper149@ip185225.wh.uni-hannover.de) |
| 01:58:59 | × | pera quits (~pera@unaffiliated/pera) (Ping timeout: 240 seconds) |
| 01:59:18 | <sim590> | The main point of using the record syntax is to update things, but since I cannot do that here without creating a warning, then it's not worth writing the fields in the record syntax. |
| 01:59:47 | × | Amras quits (~Amras@unaffiliated/amras0000) (Remote host closed the connection) |
| 02:00:01 | × | jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Client Quit) |
| 02:00:35 | → | jumper149 joins (~jumper149@ip185225.wh.uni-hannover.de) |
| 02:00:36 | × | jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Client Quit) |
| 02:00:48 | → | mpereira joins (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) |
| 02:00:55 | → | booppoob joins (uid425746@gateway/web/irccloud.com/x-zlvvmspyhmlayeab) |
| 02:01:23 | ← | booppoob parts (uid425746@gateway/web/irccloud.com/x-zlvvmspyhmlayeab) () |
| 02:01:37 | → | jumper149 joins (~jumper149@ip185225.wh.uni-hannover.de) |
| 02:02:04 | × | nbloomf quits (~nbloomf@2600:1700:83e0:1f40:b852:f831:8cd4:429) (Quit: Textual IRC Client: www.textualapp.com) |
| 02:02:42 | × | jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Client Quit) |
| 02:04:06 | → | nbloomf joins (~nbloomf@2600:1700:83e0:1f40:7d39:b02b:8868:9bea) |
| 02:04:12 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
| 02:06:27 | hackage | stm-queue 0.1.0.0 - An implementation of a real-time concurrent queue https://hackage.haskell.org/package/stm-queue-0.1.0.0 (sgschlesinger) |
| 02:08:24 | <dolio> | sim590: You could turn off -Wincomplete-record-updates if it's not smart enough to figure it out. |
| 02:08:27 | × | OmegaDoug quits (6ca87592@dhcp-108-168-117-146.cable.user.start.ca) (Remote host closed the connection) |
| 02:08:35 | × | gestone quits (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) (Ping timeout: 240 seconds) |
| 02:08:57 | → | jumper149 joins (~jumper149@ip185225.wh.uni-hannover.de) |
| 02:09:09 | × | mpereira quits (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) (Ping timeout: 272 seconds) |
| 02:09:57 | × | wwwww quits (~wwwww@unaffiliated/wwwww) (Ping timeout: 260 seconds) |
| 02:10:09 | <sim590> | dolio: Yes, but what if I make some other mistakes that it could find for me and I have disabled it? |
| 02:10:47 | × | justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 244 seconds) |
| 02:10:47 | × | jumper149 quits (~jumper149@ip185225.wh.uni-hannover.de) (Client Quit) |
| 02:11:03 | × | denisse quits (~spaceCat@gateway/tor-sasl/alephzer0) (Ping timeout: 240 seconds) |
| 02:11:24 | → | denisse joins (~spaceCat@gateway/tor-sasl/alephzer0) |
| 02:12:13 | → | wwwww joins (~wwwww@unaffiliated/wwwww) |
| 02:15:38 | × | gnumonik quits (~gnumonik@c-73-170-91-210.hsd1.ca.comcast.net) (Remote host closed the connection) |
| 02:16:48 | × | bloodsta1ker quits (~bloodstal@46.166.187.178) (Remote host closed the connection) |
| 02:17:19 | → | toorevitimirp joins (~tooreviti@117.182.182.33) |
| 02:27:20 | → | machinedgod joins (~machinedg@24.51.251.11) |
| 02:28:07 | → | justanotheruser joins (~justanoth@unaffiliated/justanotheruser) |
| 02:33:03 | × | lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Killed (verne.freenode.net (Nickname regained by services))) |
| 02:33:10 | → | lagothrix joins (~lagothrix@unaffiliated/lagothrix) |
| 02:34:39 | × | toorevitimirp quits (~tooreviti@117.182.182.33) (Remote host closed the connection) |
| 02:37:14 | → | toorevitimirp joins (~tooreviti@117.182.182.33) |
| 02:37:54 | → | elliott_ joins (~elliott@2607:fb90:18d6:fc61:a84:10d2:ef86:f415) |
| 02:38:02 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 02:39:02 | <lechner> | Hi, in a new standard stack setup, are the files stack.yaml.lock and *.cabal generated? I would like to add them to .gitignore. Thanks! |
| 02:43:03 | <glguy> | The .cabal is generated if you have a package.yaml, but these days it's better to stick with deleting the package.yaml and maintaining the .cabal file |
| 02:46:40 | <lechner> | glguy: thanks! |
| 02:48:25 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
| 02:52:38 | × | manjaroi3 quits (~manjaro-i@2600:1700:9f00:b3df:a02:eef:be70:88de) (Remote host closed the connection) |
| 02:52:53 | × | machinedgod quits (~machinedg@24.51.251.11) (Ping timeout: 260 seconds) |
| 02:56:52 | → | gestone joins (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) |
| 02:57:24 | × | ryansmccoy quits (~ryansmcco@68.235.48.108) (Ping timeout: 272 seconds) |
| 02:58:06 | × | a3f quits (~a3f@chimeria.ext.pengutronix.de) (Ping timeout: 246 seconds) |
| 02:58:18 | → | ryansmccoy joins (~ryansmcco@193.37.254.27) |
| 02:59:53 | → | a3f joins (~a3f@chimeria.ext.pengutronix.de) |
| 02:59:54 | → | __Joker joins (~Joker@180.151.105.65) |
| 03:00:02 | × | toony1 quits (~toony@s91904426.blix.com) () |
| 03:01:17 | × | theDon quits (~td@muedsl-82-207-238-084.citykom.de) (Ping timeout: 260 seconds) |
| 03:02:49 | → | zacts joins (~zacts@dragora/developer/zacts) |
| 03:03:03 | → | theDon joins (~td@muedsl-82-207-238-073.citykom.de) |
| 03:05:26 | × | toorevitimirp quits (~tooreviti@117.182.182.33) (Remote host closed the connection) |
| 03:05:45 | × | __Joker quits (~Joker@180.151.105.65) (Ping timeout: 240 seconds) |
| 03:06:41 | → | toorevitimirp joins (~tooreviti@117.182.182.33) |
| 03:11:38 | × | polyrain quits (~polyrain@2001:8003:e501:6901:a8a8:546d:e1e3:2f7b) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 03:11:59 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 03:13:25 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds) |
| 03:13:59 | → | tylerjl joins (~leothrix@elastic/staff/leothrix) |
| 03:14:04 | × | toorevitimirp quits (~tooreviti@117.182.182.33) (Remote host closed the connection) |
| 03:14:24 | → | pera joins (~pera@unaffiliated/pera) |
| 03:14:41 | → | wei2912 joins (~wei2912@unaffiliated/wei2912) |
| 03:15:59 | → | bitmagie joins (~Thunderbi@200116b806ecb800483bd36953a84bd2.dip.versatel-1u1.de) |
| 03:16:01 | → | polyrain joins (~polyrain@2001:8003:e501:6901:a8a8:546d:e1e3:2f7b) |
| 03:16:18 | → | toorevitimirp joins (~tooreviti@117.182.182.33) |
| 03:17:40 | × | leothrix quits (~leothrix@elastic/staff/leothrix) (Ping timeout: 272 seconds) |
| 03:17:41 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 03:18:31 | × | z0_ quits (~z0@bl15-35-201.dsl.telepac.pt) (Quit: Lost terminal) |
| 03:18:55 | × | p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Remote host closed the connection) |
| 03:19:12 | × | justsomeguy quits (~justsomeg@unaffiliated/--/x-3805311) () |
| 03:19:12 | → | p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
| 03:21:32 | × | polyrain quits (~polyrain@2001:8003:e501:6901:a8a8:546d:e1e3:2f7b) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 03:24:44 | × | toorevitimirp quits (~tooreviti@117.182.182.33) (Remote host closed the connection) |
| 03:26:15 | → | toorevitimirp joins (~tooreviti@117.182.182.33) |
| 03:26:43 | × | toorevitimirp quits (~tooreviti@117.182.182.33) (Read error: Connection reset by peer) |
| 03:28:09 | → | toorevitimirp joins (~tooreviti@117.182.182.33) |
| 03:28:09 | → | __Joker joins (~Joker@180.151.105.65) |
| 03:28:35 | → | falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
| 03:31:58 | hackage | stm-queue 0.1.1.0 - An implementation of a real-time concurrent queue https://hackage.haskell.org/package/stm-queue-0.1.1.0 (sgschlesinger) |
| 03:33:09 | → | abhixec joins (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net) |
| 03:34:25 | × | __Joker quits (~Joker@180.151.105.65) (Ping timeout: 260 seconds) |
| 03:35:52 | × | silver quits (~silver@178.121.68.26) (Read error: Connection reset by peer) |
| 03:37:54 | → | olligobber joins (olligobber@gateway/vpn/privateinternetaccess/olligobber) |
| 03:38:06 | → | DirefulSalt joins (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) |
| 03:38:26 | → | bitmagie1 joins (~Thunderbi@200116b8062b2e00fc59d02ac7bcf06a.dip.versatel-1u1.de) |
| 03:39:32 | × | bitmagie quits (~Thunderbi@200116b806ecb800483bd36953a84bd2.dip.versatel-1u1.de) (Ping timeout: 260 seconds) |
| 03:39:33 | bitmagie1 | is now known as bitmagie |
| 03:43:00 | × | zacts quits (~zacts@dragora/developer/zacts) (Ping timeout: 272 seconds) |
| 03:44:04 | × | falafel quits (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Remote host closed the connection) |
| 03:44:32 | → | falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
| 03:45:15 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 03:47:57 | × | justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 272 seconds) |
| 03:50:27 | × | jedws quits (~jedws@121.209.139.222) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 03:50:37 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 264 seconds) |
| 03:54:11 | → | sepi joins (49dc4892@c-73-220-72-146.hsd1.ca.comcast.net) |
| 03:55:08 | <sepi> | Hello guys, why doesn't this return false after running out of elements in a list? |
| 03:55:24 | <sepi> | memb x [] = Falsememb x (y:ys) | x `elem` y:ys = True | otherwise = memb x (y:ys) |
| 03:55:33 | × | falafel quits (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Remote host closed the connection) |
| 03:55:58 | → | falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
| 03:57:11 | → | r2wj joins (~r2wj@185.244.214.216) |
| 03:57:43 | <dolio> | Because it can't run out. |
| 03:58:08 | <ski> | it's an infinite loop, in case the element isn't there |
| 03:59:03 | <ski> | > let memb x [] = False; memb x (y:ys) | x `elem` y:ys = True | otherwise = memb x (y:ys) in memb 3 [] |
| 03:59:05 | <lambdabot> | False |
| 03:59:14 | <ski> | > let memb x [] = False; memb x (y:ys) | x `elem` y:ys = True | otherwise = memb x (y:ys) in memb 3 [0,2,3,1] |
| 03:59:17 | <lambdabot> | True |
| 03:59:21 | <ski> | > let memb x [] = False; memb x (y:ys) | x `elem` y:ys = True | otherwise = memb x (y:ys) in memb 3 [0,2,1] |
| 03:59:27 | <lambdabot> | mueval-core: Time limit exceeded |
| 03:59:41 | × | gestone quits (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) (Ping timeout: 256 seconds) |
| 04:00:01 | <ski> | sepi : do you see why it loops ? |
| 04:00:37 | → | Rudd0 joins (~Rudd0@185.189.115.118) |
| 04:00:45 | <lechner> | Hi, I would like to abstract the calls to the three hash calculations in this code and get the warnings below it. Can I not include 'do' in the function? https://dpaste.com/4ZCGYR975 |
| 04:00:59 | × | falafel quits (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Remote host closed the connection) |
| 04:01:25 | <sepi> | Yeah it checks if its in there, if its not it'll keep calling itself. I suppose I want to know how to stop if it reaches the end of the list |
| 04:01:39 | <ski> | compute :: (Char8.ByteString -> Char8.ByteString) -> String -> Char8.ByteString |
| 04:01:42 | <ski> | should be |
| 04:01:43 | <ski> | compute :: (Char8.ByteString -> Char8.ByteString) -> String -> IO Char8.ByteString |
| 04:02:13 | × | bitmagie quits (~Thunderbi@200116b8062b2e00fc59d02ac7bcf06a.dip.versatel-1u1.de) (Quit: bitmagie) |
| 04:02:15 | <lechner> | ski: i thought the <- drops the IO? |
| 04:02:17 | <ski> | sepi : make sure you take a step forward, rather than walking in place, standing still |
| 04:02:19 | × | denisse quits (~spaceCat@gateway/tor-sasl/alephzer0) (Remote host closed the connection) |
| 04:02:22 | <ski> | no, lechner |
| 04:02:35 | → | denisse joins (~spaceCat@gateway/tor-sasl/alephzer0) |
| 04:02:40 | <ski> | the whole `do'-expression will still have type `IO T', for some type `T' |
| 04:02:47 | <ski> | (you can't escape) |
| 04:03:40 | × | DirefulSalt quits (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Remote host closed the connection) |
| 04:03:50 | <ski> | btw, probably it's better to give a name to `Char8.pack contents', in order to not recompute it ? |
| 04:03:59 | <ski> | (in `main', i mean) |
| 04:04:09 | → | DirefulSalt joins (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) |
| 04:05:02 | <ski> | sepi : also .. if you care to tell, what is `memb' supposed to compute ? |
| 04:05:15 | <lechner> | i thought perhaps the compiler would be smart enough not to, although I thought that the 'effect' from readFile may force it. |
| 04:05:40 | → | mpereira joins (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) |
| 04:05:53 | <ski> | lechner : anyway, if you move the `readFile' out of `compute', you can probably avoid the `IO' in its return type |
| 04:05:53 | × | denisse quits (~spaceCat@gateway/tor-sasl/alephzer0) (Remote host closed the connection) |
| 04:06:09 | → | denisse joins (~spaceCat@gateway/tor-sasl/alephzer0) |
| 04:06:22 | <lechner> | i will, but bear with me for a minute please. i changed the code the way you said, but now the code below fails even though i did not change it. |
| 04:06:26 | <sepi> | like if x = ["abc", "def"]. memb says is ["def"] in x? |
| 04:06:34 | <sepi> | True |
| 04:06:51 | <lechner> | https://dpaste.com/553FLPZG5 |
| 04:06:54 | <ski> | lechner : smart enough not to do what ? recompute the calls to `Char8.pack' ? or reread the file ? |
| 04:07:03 | × | ChaiTRex quits (~ChaiTRex@gateway/tor-sasl/chaitrex) (Ping timeout: 240 seconds) |
| 04:07:04 | × | toorevitimirp quits (~tooreviti@117.182.182.33) (Ping timeout: 272 seconds) |
| 04:07:17 | <ski> | sepi : now try `memb "ghij" x' |
| 04:07:47 | <lechner> | ski: i thought the effectful action of readFile might retrigger the remaining computation, but without that the compiler should not repack |
| 04:08:14 | → | shad0w_ joins (~shad0w_@160.202.36.27) |
| 04:08:16 | <ski> | GHC only does limited CSE |
| 04:08:21 | → | ChaiTRex joins (~ChaiTRex@gateway/tor-sasl/chaitrex) |
| 04:09:22 | <ski> | lechner : anyway, the second error message is because you still have a mistake in `compute'. but perhaps you want to keep the `IO' out of it ? |
| 04:09:22 | <sepi> | It'll just sit there and I have to suspend it rather than being false |
| 04:09:54 | <ski> | (in that case, it would be better to fix that first. although, if you want to, you could fix the other error) |
| 04:10:02 | <ski> | sepi : and why's that ? |
| 04:10:18 | <lechner> | ski: i see. sorry i misread the error message. it's my first day with Haskell |
| 04:10:33 | <ski> | it's okay |
| 04:10:55 | <ski> | it's not that uncommon that fixing an error in one place will trigger an error to be flagged in another location |
| 04:11:29 | <ski> | sometimes it can be hard to know whether one will get out of the "tunnel(s) of error", fixing one after the other |
| 04:11:40 | <ski> | with more experience, you should be able to tell this, quicker |
| 04:12:12 | × | mpereira quits (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) (Ping timeout: 260 seconds) |
| 04:12:25 | <lechner> | ski: How do I add the IO to the result? |
| 04:13:03 | <sepi> | its going to keep looking for the match because recursion, because I suppose there isn't a "if it reaches end, false" statement |
| 04:13:18 | <lechner> | and why is the expected type now without the IO even though I just added it up top? |
| 04:13:56 | <ski> | (this effect can also be noticed, when refactoring, changing the type signature. this can often trigger an error in other places, and fixing those can trigger further errors, like a ripple effect. this is normally a good thing, the implementation telling you all places you must fix, after having changed one place, in order to not encounter problems when running the code) |
| 04:14:32 | × | elliott_ quits (~elliott@2607:fb90:18d6:fc61:a84:10d2:ef86:f415) (Ping timeout: 260 seconds) |
| 04:14:52 | <lechner> | but why did it not accept the actual type without the IO in the first place. just because of the 'do'? |
| 04:15:16 | <ski> | sepi : there is a "if it reaches end, false" case, that's `memb x [] = False'. the problem is that you never take a step closer to it, you're moving your legs up and down, standing still |
| 04:16:04 | <ski> | lechner : "but why did it not accept the actual type without the IO in the first place. just because of the 'do'?" -- no, because of the `readFile' |
| 04:16:14 | × | danso quits (~dan@107-190-41-58.cpe.teksavvy.com) (Read error: Connection reset by peer) |
| 04:16:32 | <ski> | "How do I add the IO to the result?" -- result of what ? `compute' ? |
| 04:16:50 | <lechner> | hashMethod $ Char8.pack contents |
| 04:16:52 | → | danso joins (~dan@107-190-41-58.cpe.teksavvy.com) |
| 04:17:07 | <ski> | "and why is the expected type now without the IO even though I just added it up top?" -- what do you mean ? in <https://dpaste.com/553FLPZG5>, the expected type does have an `IO' |
| 04:17:20 | <ski> | lechner : `return :: a -> IO a' |
| 04:17:26 | <lechner> | yes, but only because I added it up top |
| 04:17:34 | → | jedws joins (~jedws@121.209.139.222) |
| 04:18:06 | <lechner> | thanks. where do I place this return statement, please? and do I retain the name 'a'? |
| 04:18:13 | <ski> | it's complaining that `hashMethod :: Char8.ByteString -> Char8.ByteString', while you're attempting to use it as if it was `hashMethod :: Char8.ByteString -> IO Char8.ByteString' |
| 04:18:24 | <lechner> | right |
| 04:18:44 | <ski> | `a' is a type variable. in your case, `a' would become `Char8.ByteString' |
| 04:19:01 | <ski> | (so that you get `return :: Char8.ByteString -> IO Char8.ByteString' ..) |
| 04:19:54 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 04:19:57 | → | drbean joins (~drbean@TC210-63-209-59.static.apol.com.tw) |
| 04:20:25 | <ski> | (another way to fix the type mismatch for `hashMethod' would be to change the signature of `compute' so that the specified callback (that's `hashMethod'), actually had type `Char8.ByteString -> IO Char8.ByteString' .. but i'm not convinced you actually want to do this) |
| 04:21:07 | → | Saukk joins (~Saukk@2001:998:dc:4a67:1c59:9bb5:b94c:4) |
| 04:21:09 | <lechner> | I will eventually remove the IO out of that function. right now, I am just learning. Where does that return statement go, please? |
| 04:21:14 | × | jedws quits (~jedws@121.209.139.222) (Client Quit) |
| 04:21:29 | <lechner> | and is this thing still called a function? |
| 04:21:52 | <ski> | (usually, especially as a beginner, one should think twice, before putting `IO' inside argument types. it's not that it's dangerous, but rather that it adds extra power, with possibility for extra confusion, that one relatively rarely needs) |
| 04:22:01 | <ski> | `compute' ? sure |
| 04:22:11 | <ski> | `hashMethod' as well |
| 04:22:11 | <lechner> | i agree with that |
| 04:22:34 | <lechner> | i thought perhaps the 'do' would turn compute into a monad |
| 04:22:38 | <ski> | no |
| 04:22:55 | <ski> | monads are not values that you deal with, at run-time |
| 04:22:58 | hackage | reanimate 1.0.0.0 - Animation library based on SVGs. https://hackage.haskell.org/package/reanimate-1.0.0.0 (DavidHimmelstrup) |
| 04:23:06 | <ski> | take e.g. `getLine :: IO String' |
| 04:23:15 | <ski> | `getLine' is not a monad. `IO' is the monad |
| 04:23:23 | <lechner> | i see. that's not a monad either |
| 04:23:28 | <lechner> | or is it? |
| 04:23:28 | <ski> | `getLine' is a monadic action, or just action, for short |
| 04:23:35 | <ski> | if you have |
| 04:23:39 | <ski> | compute :: (Char8.ByteString -> Char8.ByteString) -> String -> IO Char8.ByteString |
| 04:23:43 | <lechner> | the IO is the monad? |
| 04:23:57 | <ski> | then `compute hashMethod fileName' will also be an action. an `IO'-action (since `IO' is the monad here) |
| 04:24:00 | <ski> | yes |
| 04:24:32 | <ski> | the type `IO' (together with its instance of the `Monad' type class) is the monad |
| 04:25:07 | <lechner> | okay, sorry to be persistent. in which line do i stick that return statement, please? |
| 04:25:17 | <ski> | so .. `compute' is a function that computes/returns an action |
| 04:25:41 | <sepi> | I know I would want (y:ys) to be where y gets thrown out, next in ys becomes y. Now I'm trying to figure out how to translate that over |
| 04:25:50 | <ski> | the line in which you currently need `IO Blah', while you actually only have something of type `Blah' in |
| 04:26:12 | <ski> | sepi : perhaps try throwing out `y', then |
| 04:26:13 | <lechner> | so it goes before, which makes it kind of ling |
| 04:26:19 | <lechner> | long |
| 04:26:51 | <ski> | you mean the line of code ? |
| 04:27:16 | <lechner> | i am sticking in before the last line of compute |
| 04:28:05 | <lechner> | something is wrong |
| 04:29:07 | × | Orbstheorem quits (~roosember@hellendaal.orbstheorem.ch) (Ping timeout: 240 seconds) |
| 04:29:13 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 04:29:54 | <ski> | sepi : btw, you didn't say what `memb' is supposed to compute |
| 04:31:30 | ski | idly wonders what lechner is trying |
| 04:31:35 | × | ambiso quits (~ambiso@209.182.239.205) (Quit: Ping timeout (120 seconds)) |
| 04:31:54 | → | ambiso joins (~ambiso@209.182.239.205) |
| 04:32:15 | <sepi> | its supposed to compute true or false, saying true"abc" is in there, or false it isn't in there |
| 04:32:15 | × | irc_user quits (uid423822@gateway/web/irccloud.com/x-yamugsoddzfdaipx) (Quit: Connection closed for inactivity) |
| 04:32:20 | <lechner> | i feel so dumb. i can't put this line in the right place: return :: Char8.ByteString -> IO Char8.ByteString |
| 04:32:22 | <sepi> | I think I got it though |
| 04:33:00 | <sepi> | Thanks I was here for a few hours to get to this point, appreciate your push in the right direction |
| 04:33:03 | <ski> | sepi : what is `memb x ys' supposed to compute, for an arbitrary `x' and list `ys' ? |
| 04:34:09 | <ski> | lechner : oh, i should clarify that i only intended you to use `return'. the `:: Char8.ByteString -> IO Char8.ByteString' was only a clarification, to tell you what type it would have, in your case |
| 04:34:24 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
| 04:34:28 | <ski> | sepi : show the code ? |
| 04:35:37 | <ski> | (if you really want to, you could type in `return :: Char8.ByteString -> IO Char8.ByteString' .. but you'd have to bracket it like `(return :: Char8.ByteString -> IO Char8.ByteString)') |
| 04:37:33 | <lechner> | i was just missing some parentheses (or perhaps a dollar sign). return is a function! |
| 04:37:39 | <ski> | yes, of course |
| 04:37:44 | <ski> | it has a `->' in its type |
| 04:38:08 | <ski> | all values whose types are of the general shape `... -> ...' are functions |
| 04:38:09 | <lechner> | doesn't everything in Haskell? :) |
| 04:38:14 | <ski> | (and only those are functions) |
| 04:38:18 | <lechner> | just kidding |
| 04:38:37 | × | nbloomf quits (~nbloomf@2600:1700:83e0:1f40:7d39:b02b:8868:9bea) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 04:38:46 | <ski> | yea .. "Everything is a function" does not hold in the Functional Programming paradigm |
| 04:38:58 | <lechner> | it was a bad joke |
| 04:39:00 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 04:39:55 | <ski> | see <http://conal.net/blog/posts/everything-is-a-function-in-haskell> :) |
| 04:41:00 | <ski> | lechner : so .. how does your `compute' look, now ? |
| 04:41:15 | <sepi> | memb x [] = Falsememb x (y:ys) | x `elem` y:ys = True | otherwise = mMemb where mMemb = memb x (ys) |
| 04:41:56 | <ski> | that's better |
| 04:42:17 | <lechner> | ski: it's working. https://dpaste.com/CBE8R6EU2 |
| 04:42:20 | <ski> | sepi : although that code not had redundant functionality |
| 04:42:22 | <ski> | er |
| 04:42:25 | <ski> | sepi : although that code now had redundant functionality |
| 04:42:32 | <lechner> | ski: I am just getting the hang of it. thanks so much for your help. |
| 04:43:08 | <lechner> | ski: i'll be back. my first day with haskell is ending, and it's time to call it a night. |
| 04:43:09 | <sepi> | the extra where part? |
| 04:43:10 | <ski> | lechner : yea. btw, i would probably write that last line as `return (hashMethod (Char8.pack contents))' |
| 04:43:27 | <lechner> | that's what I had. why is that superior, please? |
| 04:43:33 | <ski> | sepi : no, not that |
| 04:43:48 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 265 seconds) |
| 04:44:12 | <ski> | sepi : can you tell me, in words, what `memb x ys' is supposed to compute/check ? |
| 04:44:25 | <ski> | lechner : it uses less `$'s :) |
| 04:44:43 | → | Orbstheorem joins (~roosember@hellendaal.orbstheorem.ch) |
| 04:44:47 | <ski> | `$' rarely improve code, imho |
| 04:44:58 | <sepi> | the x = y:ys ? |
| 04:45:11 | → | nbloomf joins (~nbloomf@2600:1700:83e0:1f40:118d:2a8:7881:1f11) |
| 04:45:19 | → | __Joker joins (~Joker@180.151.105.65) |
| 04:45:26 | <ski> | sepi : that question was not about your code, but about what behaviour your code is supposed to have |
| 04:46:03 | <lechner> | thanks again for all your help! unfortunately, i have to go but thanks to you my experience in this channel was super |
| 04:46:06 | <sepi> | Its supposed to check if what's given in x is in the ys list |
| 04:46:07 | → | brandly joins (~brandly@c-73-68-15-46.hsd1.ma.comcast.net) |
| 04:46:35 | <ski> | lechner : in general, it's probably better to replace `f $ g $ h $ x' with `f . g . h $ x' or (i prefer) `(f . g . h) x' .. or just `f (g (h x))' (brackets are nothing to be afraid of) |
| 04:46:54 | × | nbloomf quits (~nbloomf@2600:1700:83e0:1f40:118d:2a8:7881:1f11) (Client Quit) |
| 04:47:22 | <ski> | lechner : the `f . g . h' "chain"/"pipeline" is better, since you can break out and factor away any part of it, giving it a new name. not so with the repeated `$'s |
| 04:47:58 | <ski> | lechner : have fun, and good luck with your continued learning |
| 04:48:08 | <ski> | sepi : yes, thank you |
| 04:48:39 | <ski> | sepi : now, what is x `elem` ys supposed to compute/check ? |
| 04:52:01 | × | perrier-jouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 2.9) |
| 04:52:12 | → | nbloomf joins (~nbloomf@2600:1700:83e0:1f40:118d:2a8:7881:1f11) |
| 04:53:27 | hackage | tagstew 0 - Black magic tagsoup https://hackage.haskell.org/package/tagstew-0 (FumiakiKinoshita) |
| 04:54:14 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 04:55:57 | × | Orbstheorem quits (~roosember@hellendaal.orbstheorem.ch) (Ping timeout: 260 seconds) |
| 04:57:42 | <sepi> | I see that is my redundant part 😅 |
| 04:59:09 | <sepi> | I'm not sure without my = true, my | becomes a parse error input |
| 04:59:40 | <ski> | how do you mean ? |
| 05:01:54 | → | mmohammadi981261 joins (~mmohammad@5.238.182.51) |
| 05:02:15 | <sepi> | does it need a true or false claim before using otherwise? |
| 05:02:30 | × | urodna quits (~urodna@unaffiliated/urodna) (Quit: urodna) |
| 05:02:32 | <ski> | a guard, introduced by the |
| 05:02:56 | <ski> | `|' symbol, expects an expresion evaluating to `True' or `False', after it, yes |
| 05:04:40 | × | shad0w_ quits (~shad0w_@160.202.36.27) (Remote host closed the connection) |
| 05:05:58 | <sepi> | memb x (y:ys) | x == y = True | otherwise = mMemb |
| 05:06:21 | <sepi> | that gets rid of redundancy correct |
| 05:06:22 | <ski> | yay :) |
| 05:06:28 | <ski> | yes |
| 05:07:11 | <sepi> | 💀💀 thank you |
| 05:07:16 | <ski> | now, do you know how to express this using, say, `if'-`then'-`else', instead of guards ? |
| 05:07:24 | <ski> | (or any other way ?) |
| 05:07:28 | hackage | typesafe-precure 0.7.9.1 - Type-safe transformations and purifications of PreCures (Japanese Battle Heroine) https://hackage.haskell.org/package/typesafe-precure-0.7.9.1 (igrep) |
| 05:08:20 | × | mmohammadi981261 quits (~mmohammad@5.238.182.51) (Quit: I quit (╯°□°)╯︵ ┻━┻) |
| 05:08:25 | × | Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net) (Remote host closed the connection) |
| 05:08:32 | × | ericsagnes quits (~ericsagne@2405:6580:0:5100:64a7:3952:c5b0:2946) (Ping timeout: 260 seconds) |
| 05:09:49 | → | Kaiepi joins (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net) |
| 05:11:41 | × | HarveyPwca quits (~HarveyPwc@c-98-220-98-201.hsd1.il.comcast.net) (Quit: Leaving) |
| 05:13:24 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 05:13:26 | → | Lord_of_Life_ joins (~Lord@unaffiliated/lord-of-life/x-0885362) |
| 05:14:12 | × | Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 272 seconds) |
| 05:14:48 | Lord_of_Life_ | is now known as Lord_of_Life |
| 05:16:31 | <sepi> | I know how I'd want to do it conceptually but I'm not too sure on the syntax |
| 05:17:18 | → | abaiste^ joins (abaiste@ip98-184-89-2.mc.at.cox.net) |
| 05:18:01 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
| 05:18:40 | → | cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
| 05:20:16 | → | ericsagnes joins (~ericsagne@2405:6580:0:5100:e941:4ff:7183:882c) |
| 05:22:44 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 05:23:00 | <sepi> | If you could show an example or reference that's similar to my function that'd be cool. I'll be heading to bed for the night soon |
| 05:27:02 | → | rihards joins (~rihards@balticom-142-78-50.balticom.lv) |
| 05:27:13 | × | Alleria_ quits (~AllahuAkb@2604:2000:1484:26:1c6a:a4a1:e2e0:f856) (Ping timeout: 244 seconds) |
| 05:27:19 | <c_wraith> | sepi: it's easier than you might think. memb x (y:ys) = if ... then ... else ... |
| 05:28:08 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
| 05:28:54 | → | Alleria_ joins (~AllahuAkb@2604:2000:1484:26:f9f7:186a:b38:3c1e) |
| 05:29:49 | × | ryansmccoy quits (~ryansmcco@193.37.254.27) (Ping timeout: 260 seconds) |
| 05:30:47 | → | ryansmccoy joins (~ryansmcco@156.96.151.132) |
| 05:33:19 | → | gestone joins (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) |
| 05:33:54 | × | abaiste^ quits (abaiste@ip98-184-89-2.mc.at.cox.net) () |
| 05:36:12 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 05:39:47 | × | brandly quits (~brandly@c-73-68-15-46.hsd1.ma.comcast.net) (Ping timeout: 240 seconds) |
| 05:40:04 | × | sepi quits (49dc4892@c-73-220-72-146.hsd1.ca.comcast.net) (Ping timeout: 245 seconds) |
| 05:41:34 | → | eric joins (~eric@2804:431:c7d4:402a:4dc9:97ef:220b:73aa) |
| 05:43:03 | × | drbean quits (~drbean@TC210-63-209-59.static.apol.com.tw) (Read error: Connection reset by peer) |
| 05:43:14 | × | Rudd0 quits (~Rudd0@185.189.115.118) (Ping timeout: 260 seconds) |
| 05:44:16 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 05:44:27 | → | moondaddi joins (3ae9ffcb@58.233.255.203) |
| 05:45:24 | → | drbean joins (~drbean@TC210-63-209-213.static.apol.com.tw) |
| 05:45:45 | × | eric quits (~eric@2804:431:c7d4:402a:4dc9:97ef:220b:73aa) (Ping timeout: 246 seconds) |
| 05:48:45 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 240 seconds) |
| 05:48:49 | × | __Joker quits (~Joker@180.151.105.65) (Ping timeout: 260 seconds) |
| 05:49:40 | → | __Joker joins (~Joker@180.151.105.65) |
| 05:52:55 | → | Saten-san joins (~Saten-san@ip-83-134-68-146.dsl.scarlet.be) |
| 05:56:34 | × | roconnor quits (~roconnor@host-45-78-192-132.dyn.295.ca) (Ping timeout: 256 seconds) |
| 05:56:51 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 05:57:31 | × | evanjs quits (~evanjs@075-129-188-019.res.spectrum.com) (Quit: ZNC 1.8.1 - https://znc.in) |
| 06:00:02 | × | r2wj quits (~r2wj@185.244.214.216) () |
| 06:00:32 | → | evanjs joins (~evanjs@075-129-188-019.res.spectrum.com) |
| 06:00:47 | × | xff0x_ quits (~fox@2001:1a81:53ac:b300:4ccb:e51f:bb16:7d67) (Ping timeout: 246 seconds) |
| 06:01:37 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 265 seconds) |
| 06:01:45 | → | xff0x_ joins (~fox@port-92-195-46-13.dynamic.as20676.net) |
| 06:01:47 | → | notzmv` joins (~user@177.103.86.92) |
| 06:02:50 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 06:04:49 | × | notzmv quits (~user@unaffiliated/zmv) (Disconnected by services) |
| 06:04:55 | notzmv` | is now known as notzmv |
| 06:05:00 | × | notzmv quits (~user@177.103.86.92) (Changing host) |
| 06:05:00 | → | notzmv joins (~user@unaffiliated/zmv) |
| 06:05:55 | → | Tuplanolla joins (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) |
| 06:07:29 | × | gestone quits (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) (Ping timeout: 260 seconds) |
| 06:07:39 | × | Saukk quits (~Saukk@2001:998:dc:4a67:1c59:9bb5:b94c:4) (Remote host closed the connection) |
| 06:07:43 | → | mpereira joins (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) |
| 06:08:43 | × | josh quits (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Remote host closed the connection) |
| 06:10:45 | × | gmt quits (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 260 seconds) |
| 06:11:17 | × | gienah quits (~mwright@gentoo/developer/gienah) (Quit: leaving) |
| 06:12:42 | × | mpereira quits (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) (Ping timeout: 246 seconds) |
| 06:15:06 | → | mirrorbird joins (~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2) |
| 06:15:38 | × | Jeanne-Kamikaze quits (~Jeanne-Ka@static-198-54-131-172.cust.tzulo.com) (Ping timeout: 272 seconds) |
| 06:16:20 | × | Volt_ quits (~Volt_@c-73-145-164-70.hsd1.mi.comcast.net) (Quit: ) |
| 06:17:13 | → | TooDifficult joins (~TooDiffic@139.59.59.230) |
| 06:17:28 | → | josh joins (~josh@c-67-164-104-206.hsd1.ca.comcast.net) |
| 06:17:58 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 06:22:38 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds) |
| 06:23:58 | → | ggole joins (~ggole@2001:8003:8119:7200:a81f:ad25:a0f4:9303) |
| 06:26:44 | × | moondaddi quits (3ae9ffcb@58.233.255.203) (Ping timeout: 245 seconds) |
| 06:26:55 | → | gestone joins (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) |
| 06:33:32 | → | polyrain joins (~polyrain@2001:8003:e501:6901:3846:7fa4:c749:eb08) |
| 06:35:01 | × | gestone quits (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) (Ping timeout: 264 seconds) |
| 06:37:40 | × | nbloomf quits (~nbloomf@2600:1700:83e0:1f40:118d:2a8:7881:1f11) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 06:38:04 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 06:38:46 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 06:43:05 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds) |
| 06:43:52 | × | kleisli_ quits (~kleisli@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) (Ping timeout: 260 seconds) |
| 06:47:37 | × | josh quits (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Remote host closed the connection) |
| 06:48:42 | × | TooDifficult quits (~TooDiffic@139.59.59.230) (Ping timeout: 258 seconds) |
| 06:51:06 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:52:17 | → | nehsou^ joins (nehsou@ip98-184-89-2.mc.at.cox.net) |
| 06:56:26 | → | jjj joins (~jjj@178.239.168.171) |
| 06:56:48 | → | ph88 joins (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) |
| 06:57:08 | → | TooDifficult joins (~TooDiffic@139.59.59.230) |
| 06:58:05 | × | Saten-san quits (~Saten-san@ip-83-134-68-146.dsl.scarlet.be) (Quit: WeeChat 2.8) |
| 06:59:38 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 07:01:09 | × | ph88 quits (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds) |
| 07:01:40 | → | shafox joins (~shafox@106.51.234.111) |
| 07:02:09 | × | TooDifficult quits (~TooDiffic@139.59.59.230) (Quit: TooDifficult) |
| 07:02:57 | → | TooDifficult joins (~TooDiffic@139.59.59.230) |
| 07:03:57 | hackage | webauthn 0 - Web Authentication API https://hackage.haskell.org/package/webauthn-0 (FumiakiKinoshita) |
| 07:04:25 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds) |
| 07:05:45 | × | nehsou^ quits (nehsou@ip98-184-89-2.mc.at.cox.net) () |
| 07:07:04 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:09:21 | → | tsrt^ joins (tsrt@ip98-184-89-2.mc.at.cox.net) |
| 07:11:47 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 07:13:58 | × | Maxdamantus quits (~Maxdamant@unaffiliated/maxdamantus) (Ping timeout: 256 seconds) |
| 07:15:39 | × | codygman quits (~codygman@47-184-107-46.dlls.tx.frontiernet.net) (Read error: Connection reset by peer) |
| 07:15:54 | → | codygman joins (codygman@gateway/vpn/privateinternetaccess/codygman) |
| 07:15:55 | × | codygman quits (codygman@gateway/vpn/privateinternetaccess/codygman) (Client Quit) |
| 07:15:55 | → | Maxdamantus joins (~Maxdamant@unaffiliated/maxdamantus) |
| 07:20:30 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 07:21:35 | × | danso quits (~dan@107-190-41-58.cpe.teksavvy.com) (Quit: WeeChat 2.9) |
| 07:25:18 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds) |
| 07:28:26 | → | CMCDragonkai1 joins (~Thunderbi@120.17.10.7) |
| 07:41:07 | × | shutdown_-h_now quits (~arjan@2001:1c06:2d0b:2312:c058:b9a7:8857:8837) (Ping timeout: 244 seconds) |
| 07:41:11 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 07:42:06 | → | mmohammadi981261 joins (~mmohammad@2.178.205.88) |
| 07:43:02 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 07:45:25 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds) |
| 07:45:42 | × | proteusguy quits (~proteusgu@cm-58-10-208-180.revip7.asianet.co.th) (Ping timeout: 256 seconds) |
| 07:47:14 | → | shutdown_-h_now joins (~arjan@2001:1c06:2d0b:2312:b1b9:b40:f655:8986) |
| 07:48:19 | × | lambda-11235 quits (~lambda-11@108-237-120-58.lightspeed.frokca.sbcglobal.net) (Quit: Bye) |
| 07:48:20 | → | danvet_ joins (~Daniel@2a02:168:57f4:0:efd0:b9e5:5ae6:c2fa) |
| 07:50:17 | Guest38587 | is now known as lep-delete |
| 07:50:18 | lep-delete | is now known as Guest38587 |
| 07:50:18 | Guest38587 | is now known as lep-delete |
| 07:50:20 | <perdent> | How would you decode this Cistercian Monk Numerals cipher from this image programtically? https://imgur.com/lWxfMHf https://www.dcode.fr/cistercian-numbers |
| 07:51:24 | → | knupfer joins (~Thunderbi@i59F7FF48.versanet.de) |
| 07:52:44 | × | mmohammadi981261 quits (~mmohammad@2.178.205.88) (Ping timeout: 260 seconds) |
| 07:54:06 | × | tzh quits (~tzh@2601:448:c500:5300::ad1c) (Quit: zzz) |
| 07:54:49 | × | wavemode quits (~wavemode@097-070-075-143.res.spectrum.com) (Ping timeout: 264 seconds) |
| 07:56:28 | × | cole-h quits (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) (Quit: Goodbye) |
| 07:56:46 | → | asan joins (~yan4138@124.78.18.192) |
| 07:57:58 | → | proteusguy joins (~proteusgu@cm-58-10-208-180.revip7.asianet.co.th) |
| 08:00:07 | <cheater> | you mean with OCR? |
| 08:00:11 | × | Kaiepi quits (~Kaiepi@nwcsnbsc03w-47-55-157-9.dhcp-dynamic.fibreop.nb.bellaliant.net) (Read error: Connection reset by peer) |
| 08:00:45 | × | blackfield quits (~blackfiel@unaffiliated/blackfield) (Quit: see you) |
| 08:01:42 | <perdent> | cheater: yeah, or is there an easier way? |
| 08:01:49 | × | ddellacosta quits (~dd@86.106.121.168) (Ping timeout: 260 seconds) |
| 08:02:04 | → | blackfield joins (~blackfiel@85.255.4.218) |
| 08:02:10 | <perdent> | Can't ffind any on github |
| 08:02:16 | <perdent> | That do this |
| 08:02:31 | <cheater> | why not just enter the data by hand? |
| 08:02:41 | <cheater> | do you have huge amounts of data to OCR? |
| 08:02:46 | × | blackfield quits (~blackfiel@85.255.4.218) (Changing host) |
| 08:02:46 | → | blackfield joins (~blackfiel@unaffiliated/blackfield) |
| 08:03:29 | <perdent> | I could doit by hand, would be nice to have a script to do it though |
| 08:03:52 | <perdent> | What did you get by hand? |
| 08:06:10 | → | shatriff joins (~vitaliish@176.52.219.10) |
| 08:06:34 | × | shatriff quits (~vitaliish@176.52.219.10) (Remote host closed the connection) |
| 08:06:47 | → | shatriff joins (~vitaliish@176.52.219.10) |
| 08:08:46 | → | mpereira joins (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) |
| 08:10:46 | → | jedws joins (~jedws@121.209.139.222) |
| 08:13:05 | → | shad0w_ joins (~shad0w_@160.202.36.27) |
| 08:13:19 | × | mpereira quits (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) (Ping timeout: 272 seconds) |
| 08:13:24 | × | jedws quits (~jedws@121.209.139.222) (Client Quit) |
| 08:13:36 | <shad0w_> | Hi. i was following up on a link i was suggested to read here yesterday. https://wiki.haskell.org/How_to_write_a_Haskell_program |
| 08:14:08 | <shad0w_> | in the `program structure` section, it gives you a link for reading more about monad transformers. |
| 08:14:14 | <shad0w_> | that link seems to be dead. |
| 08:14:40 | <cheater> | are you new to haskell? |
| 08:14:48 | <shad0w_> | sure |
| 08:15:04 | <cheater> | don't read about monad transformers |
| 08:15:15 | <shad0w_> | lmao |
| 08:15:37 | <cheater> | just saving you a headache |
| 08:15:47 | <shad0w_> | just out of curosity. why ? |
| 08:16:10 | <shad0w_> | are they more complex than they are worth ? or they arent the preffered way anymore ? |
| 08:16:17 | <perdent> | i solved it |
| 08:16:28 | <cheater> | because it's an advanced topic you most certainly will not need for a long time, and any explanation you'll come across will likely be way over your head |
| 08:16:45 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 08:16:49 | <shad0w_> | gotcha |
| 08:16:54 | <shad0w_> | seems fair. |
| 08:17:49 | <perdent> | HTB{m0Nks_kN3w!} |
| 08:17:54 | <perdent> | is what i got |
| 08:18:15 | <cheater> | perdent: 🤷♂️ |
| 08:18:43 | <perdent> | capital M |
| 08:19:11 | → | mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:dcd7:c4bd:12f0:39d4) |
| 08:19:51 | × | mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:dcd7:c4bd:12f0:39d4) (Remote host closed the connection) |
| 08:22:14 | → | mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) |
| 08:22:18 | × | mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Read error: Connection reset by peer) |
| 08:22:27 | → | mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) |
| 08:22:45 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 08:23:48 | → | supercoven joins (~Supercove@dsl-hkibng32-54fb54-166.dhcp.inet.fi) |
| 08:24:13 | × | knupfer quits (~Thunderbi@i59F7FF48.versanet.de) (Ping timeout: 260 seconds) |
| 08:26:28 | <shad0w_> | i had another question. is cabal sandboxing still a thing ? |
| 08:26:39 | → | kleisli_ joins (~kleisli@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) |
| 08:27:05 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds) |
| 08:27:55 | <shad0w_> | i can only find 1 command `v1-sandbox` in cabal help and its listed under `legacy commands` |
| 08:29:15 | <cheater> | yes, v1-sandbox is still a thing, it's what sandbox used to be |
| 08:29:27 | <cheater> | if you use v2-* commands, they work like a sandbox now |
| 08:29:29 | <int-e> | shad0w_: Barely, it'll be removed in version 3.4. You can presumably get a similar effect by manipulating the store directory. |
| 08:29:31 | <cheater> | but the sandboxes are global |
| 08:29:35 | <cheater> | ish |
| 08:29:39 | <cheater> | it's not really like that |
| 08:29:48 | × | pera quits (~pera@unaffiliated/pera) (Quit: leaving) |
| 08:29:51 | <cheater> | but for what you want, using v2-* commands is what you want if you were using sandboxes before |
| 08:30:03 | × | supercoven quits (~Supercove@dsl-hkibng32-54fb54-166.dhcp.inet.fi) (Max SendQ exceeded) |
| 08:30:06 | <cheater> | int-e's suggestion of manipulating the store dir isn't necessary |
| 08:30:17 | → | supercoven joins (~Supercove@dsl-hkibng32-54fb54-166.dhcp.inet.fi) |
| 08:30:29 | <int-e> | cheater: I *wanted* to keep local build artefacts. |
| 08:30:50 | → | mpereira joins (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) |
| 08:31:28 | <cheater> | int-e: shad0w_ is just a person new to haskell doing some basic projects. shad0w_ doesn't need to do any of that crazy stuff. |
| 08:31:29 | <shad0w_> | so, if hypothetically, i am writing a new project, doing cabal init will sandbox it to the very folder ? |
| 08:31:45 | <shad0w_> | cheater: +1 |
| 08:31:49 | <cheater> | shad0w_: not really, no. it will be global. but it will be done so that you don't get cabal hell |
| 08:32:27 | <shad0w_> | now suppose if 2 of my projects depend on the same dep but different version ? |
| 08:32:48 | <shad0w_> | for eg:- say hlint. |
| 08:32:57 | <shad0w_> | i just updated to 3.2 recently |
| 08:33:00 | <cheater> | you used to get cabal hell due to conflicting library versions. you don't get that anymore. every combination of versions is kept separate, so to speak. so two projects using the same exact lib versions will use the same build artefacts. but two projects using different lib versions will use separate lib artefacts and won't know about each other. |
| 08:33:35 | <shad0w_> | and globals can only be 1 copy right ? |
| 08:33:47 | <shad0w_> | like hlint is installed in .cabal/bin/hlint |
| 08:33:57 | <shad0w_> | it seems to be a symlink to a store folder |
| 08:35:46 | <cheater> | i forgot how that works |
| 08:35:53 | <cheater> | i just know you can set it up to work |
| 08:36:10 | <shad0w_> | cool |
| 08:36:15 | × | supercoven quits (~Supercove@dsl-hkibng32-54fb54-166.dhcp.inet.fi) (Max SendQ exceeded) |
| 08:36:27 | × | jjj quits (~jjj@178.239.168.171) (Remote host closed the connection) |
| 08:36:29 | <shad0w_> | tl;dr, sandboxing isn't necessary now ? |
| 08:36:33 | → | supercoven joins (~Supercove@dsl-hkibng32-54fb54-166.dhcp.inet.fi) |
| 08:36:49 | <cheater> | yes |
| 08:36:50 | <int-e> | cheater: fair enough, I should've asked why they want sandboxes first. |
| 08:36:52 | <cheater> | use v2-* |
| 08:36:58 | <cheater> | int-e: it's okay :) |
| 08:36:59 | → | acidjnk_new2 joins (~acidjnk@p200300d0c736584378afc0f7e05aaafd.dip0.t-ipconnect.de) |
| 08:37:08 | <shad0w_> | thanks @cheater |
| 08:37:09 | <cheater> | int-e: you were trying to help, that's what matters :) |
| 08:37:12 | <cheater> | yw shad0w_ |
| 08:37:51 | <shad0w_> | one more thing |
| 08:37:59 | <shad0w_> | there are v2- commands like you said. |
| 08:38:11 | <shad0w_> | there also happens to be some `new-` commands |
| 08:38:27 | <shad0w_> | do they succeed `v2-` commands ? |
| 08:38:59 | <shad0w_> | thanks @int-e too : ) |
| 08:39:32 | × | kori quits (~kori@arrowheads/kori) (Quit: WeeChat 2.8) |
| 08:39:50 | <int-e> | shad0w_: no, the new- command are the v2- commands |
| 08:40:46 | <cheater> | new-* is the current new stuff. once we have v3, new will refer to v3 and not v2 any more. |
| 08:40:49 | <cheater> | v2 is forever v2. |
| 08:40:52 | <cheater> | until it gets removed. |
| 08:40:52 | <int-e> | For historical reasons, the old commands were there, then the 'new-' commands were added. Then somebody realized that this will make the switch awkward, and the 'v1-' aliases for the old commands and the 'v2-' aliases for the new commands were added. |
| 08:41:09 | <int-e> | By now the 'v2-' commands are the default, and the 'new-' prefix is confusing. |
| 08:41:39 | <shad0w_> | so the new- seems like a pointer to the newest stuff, which just happens to be v2- in this case ? |
| 08:41:43 | → | Orbstheorem joins (~roosember@hellendaal.orbstheorem.ch) |
| 08:41:53 | <shad0w_> | while v2- is always hard v2- |
| 08:42:04 | <cheater> | yes |
| 08:42:09 | <shad0w_> | got it. |
| 08:42:21 | <shad0w_> | damn you guys are helpful. |
| 08:42:25 | <shad0w_> | : ) |
| 08:42:48 | <shad0w_> | happy weekend guys. |
| 08:42:58 | <int-e> | cheater: please tell me there are no current plans for a v3 set of cabal commands. |
| 08:43:00 | → | fendor joins (~fendor@212095005091.public.telering.at) |
| 08:43:06 | × | DirefulSalt quits (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Remote host closed the connection) |
| 08:43:09 | <cheater> | int-e: not that i know of |
| 08:43:20 | <cheater> | int-e: but that's what i was told some time ago |
| 08:43:26 | <cheater> | you too shad0w_ |
| 08:43:40 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 08:43:51 | → | DirefulSalt joins (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) |
| 08:45:33 | → | kori joins (~kori@arrowheads/kori) |
| 08:45:45 | → | coot joins (~coot@37.30.55.202.nat.umts.dynamic.t-mobile.pl) |
| 08:46:54 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 08:47:23 | → | knupfer1 joins (~Thunderbi@i59F7FF48.versanet.de) |
| 08:48:16 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 08:49:47 | knupfer1 | is now known as knupfer |
| 08:50:14 | × | coot quits (~coot@37.30.55.202.nat.umts.dynamic.t-mobile.pl) (Client Quit) |
| 08:50:30 | → | coot joins (~coot@37.30.55.202.nat.umts.dynamic.t-mobile.pl) |
| 08:51:02 | × | Orbstheorem quits (~roosember@hellendaal.orbstheorem.ch) (Ping timeout: 260 seconds) |
| 08:52:42 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
| 08:52:57 | → | jedws joins (~jedws@121.209.139.222) |
| 08:54:04 | → | kicov joins (959c7c03@nat.ds3.agh.edu.pl) |
| 08:58:19 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 246 seconds) |
| 08:58:37 | × | ericsagnes quits (~ericsagne@2405:6580:0:5100:e941:4ff:7183:882c) (Ping timeout: 260 seconds) |
| 09:00:09 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 09:00:38 | <kicov> | Hi, was just wondering how to approach doing things with State monad and liquid haskell. Let's say our state is int, and we'd like a check for a function `successor` that checks whether the current int is mod 2. If it is, then we return state+1, if it isn't, boom. |
| 09:00:52 | ← | stites[m] parts (stitesmatr@gateway/shell/matrix.org/x-yuspkxyvracibmrk) ("Kicked by @appservice-irc:matrix.org : Idle for 30+ days") |
| 09:04:28 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 09:07:03 | → | ph88 joins (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) |
| 09:08:58 | → | thc202 joins (~thc202@unaffiliated/thc202) |
| 09:09:04 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 09:10:59 | → | ericsagnes joins (~ericsagne@2405:6580:0:5100:2032:8cd9:bb36:4db2) |
| 09:11:28 | × | blackfield quits (~blackfiel@unaffiliated/blackfield) (Quit: see you) |
| 09:12:27 | → | hiroaki joins (~hiroaki@2a02:908:4b14:d500:8d4c:a111:9cac:718b) |
| 09:13:22 | → | Dolly joins (585fd1fd@ti0203q160-5312.bb.online.no) |
| 09:15:48 | × | asan quits (~yan4138@124.78.18.192) (Ping timeout: 256 seconds) |
| 09:17:52 | × | TooDifficult quits (~TooDiffic@139.59.59.230) (Quit: TooDifficult) |
| 09:18:09 | → | TooDifficult joins (~TooDiffic@139.59.59.230) |
| 09:18:16 | × | TooDifficult quits (~TooDiffic@139.59.59.230) (Remote host closed the connection) |
| 09:18:31 | → | TooDifficult joins (~TooDiffic@139.59.59.230) |
| 09:18:38 | → | oxide joins (~lambda@unaffiliated/mclaren) |
| 09:22:07 | × | TooDifficult quits (~TooDiffic@139.59.59.230) (Client Quit) |
| 09:22:58 | × | OscarZ quits (~oscarz@95.175.104.39) (Quit: Leaving) |
| 09:23:11 | × | unlink__ quits (~unlink2@p200300ebcf25bd0068eb9d9c94da2a17.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 09:24:22 | × | knupfer quits (~Thunderbi@i59F7FF48.versanet.de) (Ping timeout: 272 seconds) |
| 09:24:46 | → | unlink2 joins (~unlink2@p5dc0ae0e.dip0.t-ipconnect.de) |
| 09:25:01 | <ski> | kicov : sounds like you want to encode precondition and postcondition on the state, that is some kind of Hoare triple ? |
| 09:25:26 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 09:29:00 | → | Gurkenglas joins (~Gurkengla@unaffiliated/gurkenglas) |
| 09:29:48 | → | kayvan`` joins (~user@52-119-115-243.PUBLIC.monkeybrains.net) |
| 09:30:01 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 09:30:59 | × | suppi quits (~suppi@172.246.241.246) (Ping timeout: 240 seconds) |
| 09:31:13 | × | kayvan` quits (~user@52-119-115-243.PUBLIC.monkeybrains.net) (Ping timeout: 246 seconds) |
| 09:31:36 | → | suppi joins (~suppi@2605:f700:40:c00::e6fc:6842) |
| 09:31:47 | × | drbean quits (~drbean@TC210-63-209-213.static.apol.com.tw) (Quit: ZNC 1.8.2+cygwin1 - https://znc.in) |
| 09:33:11 | × | mirrorbird quits (~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2) (Quit: Leaving) |
| 09:33:34 | × | mpereira quits (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) (Ping timeout: 244 seconds) |
| 09:34:02 | × | jedws quits (~jedws@121.209.139.222) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 09:38:11 | → | eric_ joins (~eric@2804:431:c7d4:402a:4dc9:97ef:220b:73aa) |
| 09:42:34 | → | ph88^ joins (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) |
| 09:42:42 | × | eric_ quits (~eric@2804:431:c7d4:402a:4dc9:97ef:220b:73aa) (Ping timeout: 260 seconds) |
| 09:43:05 | × | ph88 quits (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds) |
| 09:46:06 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 09:48:06 | <dminuoso> | kicov: What is "boom"? |
| 09:50:33 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 09:53:28 | × | gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving) |
| 09:55:37 | <kicov> | dminuoso: failed constraint |
| 09:56:44 | → | priyesh joins (~priyesh@84.39.117.57) |
| 09:57:18 | × | sw1nn quits (~sw1nn@host81-146-21-49.range81-146.btcentralplus.com) (Quit: WeeChat 2.9) |
| 09:58:07 | × | Sgeo quits (~Sgeo@ool-18b982ad.dyn.optonline.net) (Read error: Connection reset by peer) |
| 09:58:23 | → | gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh) |
| 09:58:40 | → | sw1nn joins (~sw1nn@host81-146-21-49.range81-146.btcentralplus.com) |
| 09:59:39 | <ski> | kicov : so, what does "checks whether the current int is mod 2" mean ? |
| 10:00:35 | <kicov> | ski: Never heard of them, but that would be possible. Maybe continuation passing style could have a similiar problem |
| 10:01:17 | <kicov> | ski: i (the state) `mod` 2 == 0 |
| 10:01:39 | <kicov> | sorry, should be more clear |
| 10:01:43 | <dminuoso> | kicov: So what you're proposing is `successor :: State Int ()` with a matching LH signature that suggests that the *input* state is always even? |
| 10:01:51 | <ski> | kicov : <https://en.wikipedia.org/wiki/Hoare_logic> |
| 10:01:58 | <dminuoso> | kicov: Did I get that right? |
| 10:02:06 | → | Rudd0 joins (~Rudd0@185.189.115.103) |
| 10:02:23 | <kicov> | dminuoso : yep! |
| 10:02:28 | <ski> | presumably also that the output state is always odd, i'd gather |
| 10:02:51 | → | gestone joins (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) |
| 10:03:04 | <dminuoso> | Mmm, I wonder, is there some `liftState :: a -> a -> StateT a ()` function perhaps? |
| 10:03:05 | <ski> | (or maybe even that it's just the successor of the input) |
| 10:03:19 | <dminuoso> | Oh, State rather |
| 10:03:25 | <ski> | what would it do ? |
| 10:03:46 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 10:04:05 | <dminuoso> | Oh hah, that's just modify I guess |
| 10:04:19 | <ski> | oh .. i was beginning to wonder if it was missing some brackets |
| 10:04:29 | → | maroloccio joins (~marolocci@2a02:8084:601d:7f80:164f:8aff:fed8:411d) |
| 10:05:08 | <dminuoso> | Ah indeed, weird. |
| 10:05:08 | × | fendor quits (~fendor@212095005091.public.telering.at) (Remote host closed the connection) |
| 10:05:51 | × | gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving) |
| 10:06:55 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 10:07:26 | × | gestone quits (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) (Ping timeout: 256 seconds) |
| 10:07:28 | → | gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh) |
| 10:07:51 | → | nyd joins (~nyd@unaffiliated/elysian) |
| 10:09:41 | × | ystael quits (~ystael@209.6.50.55) (Ping timeout: 260 seconds) |
| 10:11:52 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds) |
| 10:13:47 | → | Rudd0^ joins (~Rudd0@185.189.115.108) |
| 10:14:37 | × | Rudd0 quits (~Rudd0@185.189.115.103) (Ping timeout: 264 seconds) |
| 10:18:42 | → | day joins (~Unknown@unaffiliated/day) |
| 10:20:41 | × | berberman quits (~berberman@2408:8207:256b:da50::a44) (Quit: ZNC 1.7.5 - https://znc.in) |
| 10:21:01 | → | gienah joins (~mwright@gentoo/developer/gienah) |
| 10:21:06 | × | Dolly quits (585fd1fd@ti0203q160-5312.bb.online.no) (Remote host closed the connection) |
| 10:21:50 | → | Rudd0 joins (~Rudd0@185.189.115.108) |
| 10:23:23 | → | berberman joins (~berberman@2408:8207:2565:18d0:584e:a9ff:fe9b:d3fe) |
| 10:24:08 | × | Rudd0^ quits (~Rudd0@185.189.115.108) (Ping timeout: 258 seconds) |
| 10:24:50 | → | mpereira joins (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) |
| 10:26:37 | × | polyrain quits (~polyrain@2001:8003:e501:6901:3846:7fa4:c749:eb08) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 10:27:08 | → | polyrain joins (~polyrain@2001:8003:e501:6901:3846:7fa4:c749:eb08) |
| 10:27:25 | × | polyrain quits (~polyrain@2001:8003:e501:6901:3846:7fa4:c749:eb08) (Client Quit) |
| 10:27:42 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 10:28:51 | <siraben> | What a good alternative to the monad-gen package? |
| 10:32:32 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 10:35:16 | → | Orbstheorem joins (~roosember@hellendaal.orbstheorem.ch) |
| 10:36:15 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 10:41:25 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 10:42:53 | → | solonarv joins (~solonarv@astrasbourg-653-1-186-165.w90-13.abo.wanadoo.fr) |
| 10:47:34 | × | pfurla quits (~pfurla@ool-182ed2e2.dyn.optonline.net) (Quit: gone to sleep. ZZZzzz…) |
| 10:47:39 | → | random joins (~random@185.219.70.106) |
| 10:47:52 | <random> | hey guys, am I not getting this right or there is no phone parser library for Haskell |
| 10:47:59 | <random> | besides the one that requires libphonenumber? |
| 10:48:30 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 10:48:47 | <Rembane> | random: Is that US phone numbers? |
| 10:48:57 | <random> | I need for european ones |
| 10:49:17 | <random> | but there doesn't seem to be anything for US phones as well |
| 10:49:24 | <random> | thought this was quite a common usecase |
| 10:49:43 | <Rembane> | random: Got it. Maybe it is too simple to write a parser using Megaparsec that everyone does that instead? |
| 10:50:09 | <Rembane> | siraben: I have used this: https://hackage.haskell.org/package/quickcheck-transformer What is good for you? |
| 10:50:30 | → | ystael joins (~ystael@209.6.50.55) |
| 10:50:32 | <random> | Rembane: I guess not too simple but I'll be doing it as well lol... |
| 10:50:59 | <random> | the country code numbers are quite variable |
| 10:52:24 | <Rembane> | random: Yeah. :) |
| 10:52:39 | <Rembane> | random: Just out of curiosity, do you have some examples of country code numbers? |
| 10:52:53 | <random> | https://countrycode.org/ |
| 10:52:55 | × | mpereira quits (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) (Ping timeout: 272 seconds) |
| 10:53:40 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds) |
| 10:53:58 | → | knupfer joins (~Thunderbi@i59F7FF48.versanet.de) |
| 10:55:09 | <cheater> | random: phone numbers are a very difficult thing to parse, like time zone data and time strings, if there's going to be a competent library there's only going to be one |
| 10:55:29 | <random> | cheater: yeah but it relies on a C dep |
| 10:55:34 | <random> | we're in AWS Lambda so that hurts |
| 10:55:42 | <random> | I'll fix it of course, just found it weird |
| 10:55:43 | <Rembane> | random: Dashes! Why?! <- rhetorical question |
| 10:55:46 | <cheater> | that's pretty tough |
| 10:55:47 | <cheater> | sorry |
| 10:56:20 | <random> | alright, putting on my devops gloves |
| 10:56:25 | <random> | wish me luck guys *cries* |
| 10:58:40 | <Rembane> | random: GL HF! |
| 10:58:59 | × | random quits (~random@185.219.70.106) (Quit: Leaving) |
| 10:59:50 | × | kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 265 seconds) |
| 11:00:01 | × | maroloccio quits (~marolocci@2a02:8084:601d:7f80:164f:8aff:fed8:411d) (Quit: WeeChat 2.3) |
| 11:00:19 | <edwardk> | Forgive me, father, for I have sinned. It has been 33 years since my last confession. I used an overlapping instance, and looked lustfully upon another man's type system. What is my penance? |
| 11:01:40 | → | miguel_clean joins (~Miguel@89-72-187-203.dynamic.chello.pl) |
| 11:04:09 | → | AlterEgo- joins (~ladew@124-198-158-163.dynamic.caiway.nl) |
| 11:05:19 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 11:06:05 | × | phaul quits (~phaul@ruby/staff/phaul) (Ping timeout: 240 seconds) |
| 11:06:23 | → | kritzefitz joins (~kritzefit@212.86.56.80) |
| 11:07:55 | → | phaul joins (~phaul@ruby/staff/phaul) |
| 11:09:08 | × | kleisli_ quits (~kleisli@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) (Quit: Leaving) |
| 11:09:16 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 11:09:26 | → | outerpassage joins (~outerpass@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) |
| 11:10:21 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
| 11:11:29 | × | miguel_clean quits (~Miguel@89-72-187-203.dynamic.chello.pl) (Read error: Connection reset by peer) |
| 11:12:14 | → | bicho_rastrero joins (~cerdito@169.85-87-37.dynamic.clientes.euskaltel.es) |
| 11:13:27 | → | gpvs joins (~gp@37.57.178.79) |
| 11:14:05 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 11:14:08 | <phadej> | recite "why functional programming matters" ten times, and contribute to GHC. |
| 11:14:29 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 11:15:55 | <edwardk> | tough but fair |
| 11:20:25 | → | oo_miguel joins (~miguel@89-72-187-203.dynamic.chello.pl) |
| 11:20:26 | × | __Joker quits (~Joker@180.151.105.65) (Ping timeout: 246 seconds) |
| 11:20:37 | × | thc202 quits (~thc202@unaffiliated/thc202) (Ping timeout: 265 seconds) |
| 11:21:18 | × | oo_miguel quits (~miguel@89-72-187-203.dynamic.chello.pl) (Client Quit) |
| 11:22:35 | <gpvs> | Hello. I can't make this compile: |
| 11:22:35 | <gpvs> | Class (Show type_self, AWord type_word) => Animal type_self where |
| 11:22:35 | <gpvs> | say :: type_self -> [type_word] |
| 11:22:35 | <gpvs> | I tried: |
| 11:22:35 | <gpvs> | Class Show type_self => Animal type_self where |
| 11:22:36 | <gpvs> | say :: AWord type_word => type_self -> [type_word] |
| 11:22:36 | <gpvs> | and it compiled, but then |
| 11:22:37 | <gpvs> | instance Animal AnimalSpecific where |
| 11:22:37 | <gpvs> | say (AnimalSpecific arrayOfInstancesOfAWord) = arrayOfInstanceOfAWord |
| 11:22:37 | × | gpvs quits (~gp@37.57.178.79) (Killed (Sigyn (Spam is off topic on freenode.))) |
| 11:23:39 | → | Amras joins (~Amras@unaffiliated/amras0000) |
| 11:23:48 | × | DirefulSalt quits (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Remote host closed the connection) |
| 11:23:48 | ChanServ | sets mode +o ski |
| 11:23:53 | → | gpvs joins (~gp@37.57.178.79) |
| 11:23:54 | <Cale> | oops |
| 11:24:15 | <gpvs> | Hello. How do I paste multiline here not getting banned? |
| 11:24:22 | → | DirefulSalt joins (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) |
| 11:24:26 | <Rembane> | gpvs: What error message do you get? Can you put it in a pastebin? See topic for information. |
| 11:24:33 | <Rembane> | gpvs: You can access topic by running the command /topic |
| 11:24:33 | <Cale> | try https://dpaste.com/ |
| 11:24:39 | <niko> | ski: already lifted |
| 11:24:50 | ChanServ | sets mode -o ski |
| 11:24:53 | <ski> | ok |
| 11:25:10 | → | tchouri joins (~tchouri@gateway/tor-sasl/hekkaidekapus) |
| 11:25:12 | <Rembane> | edwardk: Was it 33 years since you used an overlapping instance last time?! :O |
| 11:25:30 | <edwardk> | pretty close |
| 11:25:36 | <edwardk> | i used one other really |
| 11:26:02 | <int-e> | Overlapping instances is the devil's way of leading you towards incoherent instances. |
| 11:26:03 | <edwardk> | but i was granted an indulgence by one of the simons, so that sin never existed to be forgiven |
| 11:26:40 | <phadej> | I think that my overlapped instance count is negative |
| 11:26:43 | × | hekkaidekapus quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Ping timeout: 240 seconds) |
| 11:27:00 | <edwardk> | here i'm trying to hack around the fact that 1 + isn't injective for Nat. |
| 11:27:05 | <edwardk> | So I've had to get creative |
| 11:27:08 | <Rembane> | edwardk: Seems legit |
| 11:27:37 | <edwardk> | There appears to be a pattern synonym I _can't_ write without injectivity on succ, despite the fact that the GADT version typechecks, i can't emulate the GADT right. |
| 11:28:06 | <Rembane> | I'm probably extremely dense here, but I cannot see why 1 + isn't injective. What have I missed? |
| 11:28:20 | <phadej> | nobody told GHC |
| 11:28:37 | <Rembane> | Oh |
| 11:28:44 | <edwardk> | in theory if i can get the type information at just the right point so that names are in scopes maybe i can unsafeCoerce a :~~: to make the proof i need |
| 11:29:03 | <edwardk> | Rembane: the builtin Nat kind is crippled |
| 11:29:20 | <edwardk> | + only computes will fully grounded numbers |
| 11:29:32 | × | jespada quits (~jespada@90.254.241.6) (Quit: Sleeping) |
| 11:29:44 | <Cale> | At the term level, you have infinity = Succ infinity, which also messes up the injectivity of 1+ |
| 11:29:48 | <Rembane> | edwardk: How terrible is it to uncripple it? |
| 11:29:51 | <edwardk> | so i wind up in situations where i need to know 0 and 1+x are disjoint, or that 1+x = 1 + y => x + y |
| 11:29:58 | <Cale> | er, nevermind |
| 11:30:03 | <Cale> | It's just a fixed point |
| 11:30:07 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 11:30:32 | <phadej> | I think though that GHC knows some weak version of injectivity for (+) though, as otherwise one would get a lot more ambiguous type erros |
| 11:30:36 | <edwardk> | Rembane: that is a ghc hq thing. nats have been terrible for several years, so i'm not holding my breath. |
| 11:30:59 | <ski> | gpvs : do you understand the problem you're getting ? perhaps you want to make `Animal' a MPTC, parameterized by both `type_self' and `type_word' ? do you really need to make a type class at all ? |
| 11:31:06 | <Rembane> | edwardk: Got it. Then I assume that it isn't "just" to e-mail a patch and hope for the best. |
| 11:31:13 | <edwardk> | phadej: oh? afaict all it does it leave it dangling there as a stuck type family |
| 11:31:43 | <edwardk> | unless the args are fully grounded out by previous applications of the magic rule for the type family |
| 11:33:18 | <gpvs> | ski: wait a second please, forming dpaste from another PC |
| 11:33:27 | × | gehmehgeh quits (~ircuser1@gateway/tor-sasl/gehmehgeh) (Quit: Leaving) |
| 11:33:55 | <phadej> | edwardk: if you write foo :: Proxy (x + y) -> Proxy x -> (); foo _ _ = () -- it is accepted |
| 11:34:21 | <phadej> | clearly means that (+ y) is injective. |
| 11:34:25 | × | oxide quits (~lambda@unaffiliated/mclaren) (Ping timeout: 264 seconds) |
| 11:34:31 | <phadej> | "clearly" |
| 11:34:38 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 11:35:22 | → | oxide joins (~lambda@unaffiliated/mclaren) |
| 11:35:50 | <edwardk> | hrmm |
| 11:36:51 | → | gehmehgeh joins (~ircuser1@gateway/tor-sasl/gehmehgeh) |
| 11:37:32 | <edwardk> | the (+) type family is weird |
| 11:37:38 | <phadej> | git grep -i "interaction with inerts" in GHC code |
| 11:37:49 | <phadej> | I just know that makes that `foo` code type-checks |
| 11:37:53 | × | Cale quits (~cale@CPEf48e38ee8583-CM0c473de9d680.cpe.net.cable.rogers.com) (Ping timeout: 272 seconds) |
| 11:38:09 | <phadej> | but how, ask someone else |
| 11:38:22 | <phadej> | (e.g. why it doesn't make partially applied + injective) |
| 11:38:51 | × | Turmfalke quits (~user@unaffiliated/siracusa) (Quit: Bye!) |
| 11:38:56 | <phadej> | but yes, wired-in magic type-families are weird. |
| 11:39:05 | <edwardk> | the fact that + has some kind of privileged f'd up position explains a bit of how i get errors with it i can't get elsewhere |
| 11:39:10 | → | dddddd_ joins (~dddddd@unaffiliated/dddddd) |
| 11:39:15 | × | NieDzejkob quits (~quassel@188.123.215.55) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
| 11:39:31 | <phadej> | re ground terms |
| 11:39:40 | <phadej> | 5 + n ~ 8 does simplify to n ~ 3 |
| 11:39:49 | <gpvs> | I seek to explain to GHC that I want a Class. Class's requirement has a function. Function's "return" type must be instance of another specific Class. Here is what I tried and errors I got: dpaste.com/FTAG9S4MQ , dpaste.com/EG5RM5HXY |
| 11:40:03 | × | Unhammer quits (~Unhammer@gateway/tor-sasl/unhammer) (Ping timeout: 240 seconds) |
| 11:40:24 | <edwardk> | yet it can't figure out 1 + n ~ 1 + m => n ~ m |
| 11:40:29 | <phadej> | no |
| 11:40:34 | <phadej> | nobody told it *that* :) |
| 11:40:42 | <phadej> | there isn't ring-solver in GHC |
| 11:40:53 | <phadej> | (it's available as a plugin) |
| 11:41:09 | <phadej> | https://hackage.haskell.org/package/ghc-typelits-natnormalise |
| 11:41:12 | <edwardk> | yeah |
| 11:41:25 | <edwardk> | was going to try the natnormalize plugin to see if i could use it to compile the pattern i need |
| 11:41:37 | × | dddddd quits (~dddddd@unaffiliated/dddddd) (Ping timeout: 264 seconds) |
| 11:41:58 | <phadej> | I guess Christiaan would appreaciate if you tell him that *it works for you* ;) |
| 11:42:09 | → | NieDzejkob joins (~quassel@188.123.215.55) |
| 11:42:28 | <ski> | gpvs : so you want to associate each `type_self', that you make an instance for, with a particular `type_word' |
| 11:42:54 | <edwardk> | let me add the example i'm fighting with to the repo |
| 11:43:05 | → | utopic_int0x80 joins (~lucid_0x8@188.253.237.87) |
| 11:44:17 | <gpvs> | ski: If I got you correctly: I may, but where is no need to. AWord is good enough abstraction for Animal-s to work with, there is no need to bind particular animals to particular words |
| 11:44:29 | <kicov> | Got a few cpsy + liquid haskell examples: https://dpaste.com/3YX484ND7 and https://dpaste.com/FHMQ5DZ44 - just wondering how both examples could work using single cpsy annotation. |
| 11:44:41 | <gpvs> | ski: and if I must to associate it, how would I do that? |
| 11:44:46 | <edwardk> | oh weeee, more regressions |
| 11:44:47 | × | alx741 quits (~alx741@186.178.110.2) (Ping timeout: 265 seconds) |
| 11:45:42 | → | __Joker joins (~Joker@180.151.105.65) |
| 11:45:42 | <ski> | gpvs : so you definitely don't want the `class Show type_self => Animal type_self where say :: AWord type_word => type_self -> [type_word]' version, since it means that if you pass a `AnimalSpecific' to `say', then `say' will have to be able to compute a list of `type_word's for any instance of `AWord' `type_word', that the caller wants, not just for the `AWordDog' instance |
| 11:45:47 | <edwardk> | phadej: https://github.com/ekmett/haskell/tree/master/types is the project in question |
| 11:45:47 | × | lucid_0x80 quits (~lucid_0x8@188.253.232.248) (Ping timeout: 258 seconds) |
| 11:46:10 | <edwardk> | if i compile with -f-injectiveSucc then examples/Vec.hs goes to hell |
| 11:46:53 | <ski> | gpvs : so, it seems you either want an existential (but i suspect you don't actually want that here), or else you want to make `type_word' an additional parameter of `Animal' (possibly with a Functional Dependency) |
| 11:47:04 | <gpvs> | ski: oh, now I got it. Any reason first approach should not work? |
| 11:47:05 | <edwardk> | you may need to disable the construction of the SingI instances in Data.Type.Internal.TH as well here https://github.com/ekmett/haskell/blob/master/types/src/Data/Type/Internal/TH.hs#L122 |
| 11:47:14 | <ski> | gpvs : hmm |
| 11:47:46 | <edwardk> | but if i write a manual data type that does it rather than emulate a GADT with my pattern synonym i can make it work *headdesk* |
| 11:48:05 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 11:48:19 | <ski> | gpvs : "AWord is good enough abstraction for Animal-s to work with, there is no need to bind particular animals to particular words" -- but you just tried to associate `AnimalSpecific', not to arbitrary instances of `AWord', but specifically to `AWordDog' |
| 11:48:24 | <edwardk> | but i can't have the actual data type because i need a homogeneous representation for my singletons or i lose a huge performance tax. |
| 11:48:51 | <ski> | gpvs : that is, your implementation of `say' tried to do that |
| 11:49:00 | <phadej> | edwardk: I only understood "right and slow vs. doesn't work fast" |
| 11:49:09 | <gpvs> | ski: what's existential? could you provide a link or googling term please? I'm truing two avoid making type_word a parameter to Animal not to bind them |
| 11:49:21 | <edwardk> | the cost is linear vs O(1) |
| 11:49:30 | <edwardk> | i have hacked around every other obstacle in the way |
| 11:49:38 | <edwardk> | this is the last farking leg |
| 11:49:55 | → | Cale joins (~cale@99.253.130.57) |
| 11:50:12 | <ski> | gpvs : do you want to require `say' to return a list of `type_word's, for some `type_word' that's an instance of `AWord' (but each `say' implementation should be allowed to pick which such `type_word' it wants) ? |
| 11:50:42 | × | shad0w_ quits (~shad0w_@160.202.36.27) (Remote host closed the connection) |
| 11:50:44 | <edwardk> | in the process i dragged the Nat kind and hacked it to work like Natural as a type (which will just work when ghc does it for real), hacked Type to look like TypeRep, hacked Symbol to look like String, used stuck data families to get me ways to use Int and Char meaningfully as kinds. |
| 11:50:57 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 11:51:00 | <edwardk> | and came up with a way to get constant time singletons |
| 11:51:13 | <edwardk> | which works for everything except when my singleton gets fancy enough |
| 11:51:17 | <edwardk> | and Nat is involved |
| 11:51:20 | <edwardk> | because Nat is awful |
| 11:51:30 | <gpvs> | ski: exactly. Any Animal's 'say' may return *any* value which is instance of AWord |
| 11:51:40 | <gpvs> | ski: * a list |
| 11:51:45 | × | __Joker quits (~Joker@180.151.105.65) (Ping timeout: 240 seconds) |
| 11:52:20 | <ski> | gpvs : could different elements of the list be of different types `type_word', provided all are instances of `AWord' ? or should all elements in the list be of the same type `type_word' ? |
| 11:53:10 | <gpvs> | ski: I don't have requirement for/against it at the moment. could you please provide both verions? |
| 11:53:19 | <edwardk> | phadej: that said, i really like using Type as Typeable.TypeRep. and then Type.Reflection.TypeRep becomes its singleton |
| 11:53:40 | <edwardk> | very pretty code results |
| 11:54:41 | dddddd_ | is now known as dddddd |
| 11:54:48 | × | Raito_Bezarius quits (~Raito_Bez@unaffiliated/raito-bezarius/x-8764578) (Remote host closed the connection) |
| 11:54:59 | → | Raito_Bezarius joins (~Raito_Bez@2001:bc8:38ee::1) |
| 11:55:02 | <ski> | gpvs : hm, let's consider alternatives, and what they would mean |
| 11:55:25 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds) |
| 11:55:31 | → | josh joins (~josh@c-67-164-104-206.hsd1.ca.comcast.net) |
| 11:55:35 | <Cale> | I'm pretty sure from the looks of the code that made it into the channel that gpvs wants a fundep |
| 11:55:46 | <Cale> | But maybe I missed something |
| 11:55:49 | × | sfvm quits (~sfvm@37.228.215.148) (Quit: off to the basement, mixing up the medicine) |
| 11:55:54 | × | Raito_Bezarius quits (~Raito_Bez@2001:bc8:38ee::1) (Changing host) |
| 11:55:54 | → | Raito_Bezarius joins (~Raito_Bez@unaffiliated/raito-bezarius/x-8764578) |
| 11:56:04 | <ski> | gpvs : `class Show type_self => Animal type_self where say :: AWord type_word => type_self -> [type_word]' means that the caller of `say' will decide which `type_word' to pick, can pick any, as long as its an instance of `AWord'. and you said you don't want that |
| 11:56:15 | → | roconnor joins (~roconnor@host-45-78-255-115.dyn.295.ca) |
| 11:56:26 | → | Unhammer joins (~Unhammer@gateway/tor-sasl/unhammer) |
| 11:56:42 | <Cale> | gpvs: The type of the result should depend on the type of the input, right? |
| 11:57:04 | → | alx741 joins (~alx741@186.178.110.130) |
| 11:57:20 | × | Raito_Bezarius quits (~Raito_Bez@unaffiliated/raito-bezarius/x-8764578) (Read error: Connection reset by peer) |
| 11:57:27 | × | priyesh quits (~priyesh@84.39.117.57) (Remote host closed the connection) |
| 11:57:33 | → | Raito_Bezarius joins (~Raito_Bez@2001:bc8:38ee::1) |
| 11:57:37 | <edwardk> | looks like ghc-typelits-natnormalise isn't able to help solve the 1 + n ~ 1 + m ==> n ~ m problem |
| 11:57:56 | <edwardk> | i get the same issue with the plugin enabled |
| 11:58:28 | <gpvs> | ski: I don't want the rigid return type to be defined at type instantiation moment. I'm interesting in both version where return type is define on call or by implementation itself |
| 11:58:39 | <Cale> | edwardk: Can you use unsafeCoerce to get yourself out of that? |
| 11:58:41 | <edwardk> | the problem is that i'm neck deep in a pattern synonym at the time it happens and can't. really get both n and m in type in scope to unsafeCoerce my way to glory |
| 11:58:43 | <ski> | gpvs : `class (Show type_self, AWord type_word) => Animal type_self where say :: type_self -> [type_word]' means that you have associations between particular `type_self's and particular `type_word'. so, for a particular `type_self', you don't need to have all possible instances `type_word' of `AWord' to consider. you could just have some of them, if you'd like to. also, you could enforce it to be at most one `type_word', if you'd want to |
| 11:58:55 | <Cale> | ahh |
| 11:58:56 | × | Raito_Bezarius quits (~Raito_Bez@2001:bc8:38ee::1) (Client Quit) |
| 11:58:58 | <edwardk> | i've been trying ever more esoteric dances to make that work |
| 11:59:07 | → | Raito_Bezarius joins (~Raito_Bez@unaffiliated/raito-bezarius/x-8764578) |
| 11:59:25 | <Cale> | Pattern synonyms are jankier than I ever imagined they might be |
| 11:59:31 | <gpvs> | Cale: optionaly, but I don't want to bind Animal instances to particular AWord-s instances |
| 11:59:45 | × | josh quits (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Ping timeout: 240 seconds) |
| 11:59:59 | <edwardk> | https://github.com/ekmett/haskell/blob/master/types/example/Vec.hs#L49 the issue is it can't figure out ys is well typed there. |
| 12:00:14 | × | Raito_Bezarius quits (~Raito_Bez@unaffiliated/raito-bezarius/x-8764578) (Read error: Connection reset by peer) |
| 12:00:23 | <Cale> | gpvs: Maybe the solution is just a simple two parameter type class then |
| 12:00:32 | → | Raito_Bezarius joins (~Raito_Bez@unaffiliated/raito-bezarius/x-8764578) |
| 12:00:38 | <edwardk> | there is another issue involving the SingI instance but i can hack around that by moving the type synonym around |
| 12:00:49 | <Cale> | gpvs: Though, that won't be terribly *convenient* since you'll probably have to annotate the type of the result a lot, given that it can't be determined by the type of the input |
| 12:00:58 | <edwardk> | Cale: i'm doing evil things in there |
| 12:01:27 | <ski> | gpvs : the last option is existentials, which here would be either `class Show type_self => Animal type_self where say :: type_self -> exists type_word. AWord type_word *> [type_word]' or `class Show type_self => Animal type_self where say :: type_self -> [exists type_word. AWord type_word *> type_word]'. both of these will allow the choice of `type_word' to depend on the run-time input to `say' (if you don't want that, that could be corrected) |
| 12:01:27 | <edwardk> | Cale: in particular i'm emulating GADTs on a non GADT using pattern synonyms and another GADT as a helper to sort of scaffold all the equalities i need |
| 12:01:40 | <gpvs> | Cale: resulting types will bind particula Animals to particular Words then, wouldn't they? |
| 12:01:43 | <ski> | (er, possibly cut off part was "(if you don't want that, that could be corrected)") |
| 12:01:44 | <edwardk> | the scaffolding GADT is just unsafeCoerced to offer what i need |
| 12:02:15 | × | kicov quits (959c7c03@nat.ds3.agh.edu.pl) (Remote host closed the connection) |
| 12:02:28 | <gpvs> | Cale: I've just read what fundeps are and I believe it's not what I want |
| 12:02:35 | × | wei2912 quits (~wei2912@unaffiliated/wei2912) (Quit: Lost terminal) |
| 12:02:41 | → | mirrorbird joins (~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2) |
| 12:03:39 | <edwardk> | pattern SVCons :: forall k (n :: Nat) (r :: Vec k (1 + n)). () => forall (x :: k) (xs :: Vec k n). r ~ 'VCons x xs => Sing x -> Sing xs -> Sing r; pattern SVCons y ys <- ( upSVec -> SVCons' y ys) where SVCons (Sing y) (Sing ys) = UnsafeSing (VCons y ys); should basically faithfully emulate the GADT constructor that it delegates down to for proof |
| 12:03:47 | <Cale> | gpvs: It would mean that, say, given that you have a list of Cats as input, then the type of words that Cats produce would be determined by the fact that they are Cats |
| 12:04:00 | <Cale> | For example, maybe Cats produce Text |
| 12:04:03 | <edwardk> | upSVec casts from Sing x -> SVec' x |
| 12:04:07 | <gpvs> | ski: "means that the caller of `say' will decide which `type_word' to pick, can pick any" how do I express it in Haskell from the callers perspective? |
| 12:04:14 | <edwardk> | but the constructor for SVec' is well typed and happy |
| 12:04:29 | <edwardk> | i just can't figure out the right way to pass through the lesson from SVec' to Sing |
| 12:04:36 | <Cale> | gpvs: That's just the two-parameter class with no functional dependencies |
| 12:04:37 | → | mpereira joins (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) |
| 12:04:43 | <edwardk> | when it matches it learns a heterogeneous type equality |
| 12:04:52 | × | DavidEichmann quits (~david@43.240.198.146.dyn.plus.net) (Ping timeout: 246 seconds) |
| 12:05:07 | <Cale> | gpvs: and you can write type annotations like (say cats :: [Text]) to determine the type of result then |
| 12:05:24 | <Cale> | (or if it's determined by how the result is used, that's also fine |
| 12:05:26 | <Cale> | ) |
| 12:05:27 | <ski> | gpvs : that option was already expressed in Haskell. i dunno what you mean by "from the callers perspective" (i was already talking there about it being the caller who got to pick `type_word' there) |
| 12:05:27 | <edwardk> | that the output type is carrying an argument of kind Vec k (S n) relative to Vec k n for the inside argument to the vector. |
| 12:07:47 | <edwardk> | -- just works (S n = 1 + n as a type synonym, Z = 0) -- so now what i want is a pattern synonym as a next step that just basically wraps SVCons0 https://www.irccloud.com/pastebin/j3dAUDko/svec0 |
| 12:07:58 | hackage | binaryen 0.0.4.0 - Haskell bindings to binaryen https://hackage.haskell.org/package/binaryen-0.0.4.0 (terrorjack) |
| 12:08:01 | × | rprije quits (~rprije@27.143.220.203.dial.dynamic.acc01-myal-dub.comindico.com.au) (Ping timeout: 258 seconds) |
| 12:08:03 | × | p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Quit: p-core) |
| 12:08:18 | <edwardk> | if that data type didn't type check this wouldn't be so infuriating |
| 12:08:23 | <edwardk> | because i'd know it was impossible |
| 12:08:25 | → | p-core joins (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) |
| 12:08:27 | <gpvs> | ski: `class Show type_self => Animal type_self where say :: AWord type_word => type_self -> [type_word]' I got error trying to compile it. It's in https://dpaste.com/EG5RM5HXY . Did I missed some required extensions? |
| 12:08:29 | <edwardk> | but that is just hunky dory |
| 12:08:45 | <Cale> | edwardk: hmm, think I'll have to fire up ghci here... :) |
| 12:10:15 | <gpvs> | ski: this `class (Show type_self, AWord type_word) => Animal type_self where say :: type_self -> [type_word]' got me compile error too. https://dpaste.com/FTAG9S4MQ |
| 12:10:16 | <ski> | gpvs : no, your `say' implementation doesn't satisfy that type signature |
| 12:10:34 | <ski> | (the `say :: AWord type_word => type_self -> [type_word]' one, i mean) |
| 12:11:03 | <Cale> | gpvs: You need another parameter on the class there |
| 12:11:29 | <Cale> | gpvs: class (Show s, AWord w) => Animal s w where say :: [s] -> [w] |
| 12:11:30 | <ski> | gpvs : oh, sorry. the middle alternative should have been `class (Show type_self, AWord type_word) => Animal type_self type_word where say :: type_self -> [type_word]' .. iow MPTC |
| 12:11:44 | <ski> | Cale : no list input |
| 12:11:45 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 12:12:07 | <Cale> | oh |
| 12:12:08 | × | p-core quits (~Thunderbi@koleje-wifi-0046.koleje.cuni.cz) (Client Quit) |
| 12:12:09 | <Cale> | okay |
| 12:12:17 | <Cale> | yeah, just s -> [w] in that case |
| 12:13:28 | <ski> | gpvs : anyway, perhaps we should first try to determine what you want, before diving into the how ? |
| 12:13:40 | <edwardk> | Cale: i have it boiled down to one file now |
| 12:14:08 | <edwardk> | https://www.irccloud.com/pastebin/KHWDco0s/BrokenVec.hs |
| 12:14:23 | <edwardk> | that is standalone and doesn't need the types library i'm writing |
| 12:14:45 | <Cale> | ah, cool |
| 12:15:31 | <gpvs> | Cale, ski: ok, as far as I can see to get a uniform list of instances I *must* bind types like with multiparam class. What about getting a non-uniform list? Like when Cat can say [WordType0, WordType2]. |
| 12:15:57 | <Cale> | gpvs: Well, what do those word types have in common? What are you going to do with the resulting list? |
| 12:16:19 | <ski> | gpvs : you could do that, too, with existentials |
| 12:16:22 | <gpvs> | ski: I want something like returning an array of objects confirming to interface in OO-kind stuff |
| 12:16:27 | <Cale> | gpvs: You can think of a type as representing permissions to use the corresponding values in particular ways. If you don't know what type something is, it becomes impossible to observe |
| 12:16:27 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds) |
| 12:16:36 | <ski> | gpvs : yea, that sounds like existentials |
| 12:16:37 | → | PropositionJoe joins (~ConJoe@cm-84.215.192.230.getinternet.no) |
| 12:16:49 | <gpvs> | Cale: those word types all are instances of AWord class |
| 12:16:53 | <ski> | gpvs : however, often this is not a good idea / overkill. but you can do it |
| 12:16:53 | <PropositionJoe> | Why do I have to write "`div`" instead of just div? |
| 12:17:04 | <Cale> | Yeah, existentials give you one way to discard information about what type of thing you have |
| 12:17:11 | <ski> | > div 18 7 -- PropositionJoe |
| 12:17:14 | <lambdabot> | 2 |
| 12:17:14 | <edwardk> | > div 4 3 |
| 12:17:17 | <lambdabot> | 1 |
| 12:17:18 | <edwardk> | works for me |
| 12:17:21 | × | suppi quits (~suppi@2605:f700:40:c00::e6fc:6842) (Ping timeout: 244 seconds) |
| 12:17:31 | <PropositionJoe> | so div is prefix "`div`" is infix? |
| 12:17:34 | <ski> | yep |
| 12:17:35 | <Cale> | data SomeWord where MkSomeWord :: AWord w => w -> SomeWord |
| 12:17:37 | × | kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection) |
| 12:17:40 | <PropositionJoe> | thanks ski |
| 12:17:48 | <edwardk> | putting backticks on makes anything infix |
| 12:17:49 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 12:17:50 | <ski> | PropositionJoe : works for any identifier |
| 12:17:51 | <Cale> | (that uses the GADTs extension) |
| 12:17:53 | × | vicfred quits (~vicfred@unaffiliated/vicfred) (Remote host closed the connection) |
| 12:18:20 | → | vicfred joins (~vicfred@unaffiliated/vicfred) |
| 12:19:41 | <ski> | gpvs : `AWord' class currently has no methods (and no superclasses). so `exists type_word. AWord type_word *> ..type_word..' is kind of pointless, you can't get any information out. but perhaps your shown `AWord' was a mockup, and you'll actually have useful methods or superclasses ? |
| 12:21:02 | <Cale> | gpvs: In my example, applying the MkSomeWord data constructor to a value whose type w is an instance of AWord will result in forgetting everything about which type w was, except that it had an instance of AWord, and then the only things you'll be allowed to do with the value when you get it out will be things you could do with any unknown instance of AWord |
| 12:21:07 | <ski> | gpvs : "I want something like returning an array of objects confirming to interface in OO-kind stuff" -- do you actually need that ? how are you going to use the result of calls to `say' ? (Cale's question) |
| 12:21:38 | <gpvs> | Cale, ski: looks like downcasting to me. Seems like I getting closer. I understand it doesn't make a lot sense in Haskell, just trying of how far it can extend. Yes, AWord is a mockup |
| 12:21:44 | <Cale> | If you want to be more like OO, it might be more sensible just to make object types which correspond to whatever your classes would have been |
| 12:21:58 | → | fulc927 joins (~fulc927@unaffiliated/fulc927) |
| 12:22:01 | × | Rudd0 quits (~Rudd0@185.189.115.108) (Ping timeout: 246 seconds) |
| 12:22:02 | <ski> | gpvs : there is no downcasting in Haskell, really |
| 12:22:04 | <Cale> | Don't try to use Haskell classes as OO classes, they're not the same thing |
| 12:22:29 | <Cale> | Instances of OO classes are values, instances of Haskell classes are types. |
| 12:22:30 | <gpvs> | ski: yes, I sayed that making a parallel to what it would be for me in OO |
| 12:22:32 | <ski> | gpvs : and how would you use downcasting, anyway ? test for particular types ? why not use a sum type ? |
| 12:22:45 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 12:22:58 | × | ystael quits (~ystael@209.6.50.55) (Ping timeout: 265 seconds) |
| 12:23:05 | <Cale> | Haskell classes are a good bit like interfaces though |
| 12:23:15 | tchouri | is now known as hekkaidekapus |
| 12:23:17 | <Cale> | But usually it makes more sense not to start from there |
| 12:23:21 | × | ericsagnes quits (~ericsagne@2405:6580:0:5100:2032:8cd9:bb36:4db2) (Ping timeout: 246 seconds) |
| 12:23:40 | <Cale> | What methods were you going to put in the AWord class? |
| 12:23:41 | <ski> | gpvs : if `AWord' is beefy enough for you to be able to do something sensible with values of an unknown type `type_word' that's an instance of `AWord', then existentials start to make more sense |
| 12:23:50 | <gpvs> | ski, Cale: "data SomeWord where MkSomeWord :: AWord w => w -> SomeWord" ok, maybe 'downcasting' is not the best term. Let me call it 'specialization' then. |
| 12:24:42 | <gpvs> | ski: yes, AWord in dpaste is a mockup |
| 12:24:47 | → | suppi joins (~suppi@2605:f700:40:c00::e6fc:6842) |
| 12:24:50 | <ski> | yea, i got that |
| 12:25:06 | × | shatriff quits (~vitaliish@176.52.219.10) (Remote host closed the connection) |
| 12:25:06 | → | __Joker joins (~Joker@180.151.105.65) |
| 12:25:28 | <ski> | gpvs : by "downcasting" i meant being able to do e.g. `toAWordDog :: AWord w => w -> Maybe AWordDog' |
| 12:25:47 | → | shatriff joins (~vitaliish@176.52.219.10) |
| 12:25:48 | <gpvs> | Cale: I will not try to do OO with Haskell, pinkie-promise! :) Just looking at cases while learning. |
| 12:25:54 | <ski> | gpvs : that is the kind of thing you had in mind, yes ? |
| 12:26:57 | <gpvs> | ski: nodes of graph of different types and constructs which can reference each other regardless, relying on fact that all of them confirm to the basic interface |
| 12:27:25 | <ski> | gpvs : which question is that an answer to ? |
| 12:27:58 | <ski> | (it doesn't seem to obviously be about how to use downcasts, e.g.) |
| 12:28:55 | <Cale> | gpvs: Well, I think doing OO with Haskell can be quite good in some cases. The encoding, if you do it right, is indistinguishable from ordinary functional programming. You have first class functions and you have record types. Put those together, and you can make records of methods which can be defined differently for each value you construct. |
| 12:29:06 | <ski> | Cale : although you call interface methods on an object :) |
| 12:29:14 | <Cale> | gpvs: i.e. you don't need subclasses to override method implementations |
| 12:29:24 | <Cale> | (which is good, since you don't have subclasses) |
| 12:29:55 | <gpvs> | ski: I misread 'that' as 'what', sorry. It seems like that. Have to research existentials and try in ghc. |
| 12:30:13 | × | __Joker quits (~Joker@180.151.105.65) (Ping timeout: 264 seconds) |
| 12:30:15 | <Cale> | I would honestly avoid existentials initially |
| 12:30:26 | <Cale> | Most of the time, you won't really need them |
| 12:30:37 | <ski> | @where existential-antipattern |
| 12:30:37 | <lambdabot> | "Haskell Antipattern: Existential Typeclass" by Luke Palmer at <http://lukepalmer.wordpress.com/2010/01/24/haskell-antipattern-existential-typeclass/> |
| 12:31:36 | <gpvs> | ski, Cale: thank you for your help! Will research existentials and try them for my case, just to know it's there. If you wondering, the original idea was "nodes of graph of different types and constructs which can reference each other regardless, relying on fact that all of them confirm to the basic interface" |
| 12:31:36 | <Cale> | gpvs: The important question to think about first is "what am I allowed to do with these things?" -- if you can figure out all the things you're allowed to do with a thing, then one of the ways of defining its type is just as a collection of the results of those operations |
| 12:31:39 | <ski> | gpvs : if we saw the actual `AWord' class, or if you told how you were going to use the results of `say', or both, we might be able to give better advice |
| 12:32:35 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 12:32:41 | <ski> | gpvs : that's a pretty vague, non-committal description |
| 12:33:01 | <gpvs> | lamdabot: thanks for the link |
| 12:34:05 | <ski> | gpvs : (a) often you don't want/need OO-style things; (b) if you do, ordinary lexical scoping with records commonly suffice; (c) sometimes existentials may be required |
| 12:34:30 | <bicho_rastrero> | I'm learning haskell and I saw this syntax in a function "merge list1@(x: xs) list2@(y : ys)", what is the name of the @ operator there? How is that structure named? |
| 12:34:36 | <ski> | gpvs : you should probably not reach for existentials, unless you really need them |
| 12:35:25 | <ski> | bicho_rastrero : "as-patterns" |
| 12:35:30 | <gpvs> | ski: part I stumbled on is the last part of description. Any type of class node should be able to return a list of nodes it's connected to, these nodes might be of different types, but of the same base class. |
| 12:35:48 | <bicho_rastrero> | Thank you, ski |
| 12:36:12 | → | ericsagnes joins (~ericsagne@2405:6580:0:5100:59cb:4e8f:c201:4e04) |
| 12:36:16 | <ski> | bicho_rastrero : it's both giving a name to the whole input, and simultaneously matching it with a pattern, so that you can check its shape, and name parts |
| 12:36:26 | × | carif quits (~mcarifio@cpe-67-246-228-200.rochester.res.rr.com) (Quit: Leaving) |
| 12:37:00 | <bicho_rastrero> | Yeah, that was my understanding, but I wanted to read an proper explanation with more examples. Thanks. |
| 12:37:04 | <ski> | gpvs : yea, it sounds like you could possibly do that with just (b) |
| 12:37:17 | <ski> | (depending on the specifics of what you want to do with them) |
| 12:37:23 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 12:37:31 | <ski> | gpvs : iow the record-of-operations that Cale mentioned |
| 12:39:01 | × | utopic_int0x80 quits (~lucid_0x8@188.253.237.87) (Ping timeout: 260 seconds) |
| 12:39:08 | → | drbean joins (~drbean@TC210-63-209-85.static.apol.com.tw) |
| 12:40:02 | → | ukari joins (~ukari@unaffiliated/ukari) |
| 12:42:28 | → | pfurla joins (~pfurla@ool-182ed2e2.dyn.optonline.net) |
| 12:42:54 | → | henninb joins (~henninb@63-226-191-96.mpls.qwest.net) |
| 12:44:15 | × | henninb quits (~henninb@63-226-191-96.mpls.qwest.net) (Client Quit) |
| 12:44:27 | <Cale> | edwardk: Ah, so annoying to try to get these n1 and n2 in scope... |
| 12:44:35 | <edwardk> | exactly! |
| 12:44:35 | → | henninb joins (~henninb@63-226-191-96.mpls.qwest.net) |
| 12:44:40 | × | henninb quits (~henninb@63-226-191-96.mpls.qwest.net) (Client Quit) |
| 12:45:06 | <Cale> | It's not even syntactically permitted to write something like pattern SVCons y (ys :: ...) |
| 12:45:13 | → | henninb joins (~henninb@63-226-191-96.mpls.qwest.net) |
| 12:45:19 | → | bitmagie joins (~Thunderbi@200116b8062b2e00fc59d02ac7bcf06a.dip.versatel-1u1.de) |
| 12:46:44 | <edwardk> | i fought with writing (\x -> case upSNat x of ... -> (sometypeequality,y,ys) ) -> (Refl,y,ys)) |
| 12:46:52 | <edwardk> | for the viewpattern |
| 12:47:00 | <edwardk> | but that didn't move the needle much |
| 12:47:26 | <edwardk> | if S is replaced with data family S :: Nat -> k -- this just works |
| 12:47:44 | <edwardk> | but then i'm adding exotic types to kind Nat |
| 12:47:47 | <Cale> | I wrote this thing: onePlusInj :: forall n m r. ((1+n) ~ (1+m)) => (n ~ m => r) -> r but of course, I need to disambiguate which types I want to use it with |
| 12:47:55 | <edwardk> | yeah |
| 12:47:58 | <edwardk> | did the same |
| 12:48:02 | <Cale> | The idea being that maybe we can stick it in using a view pattern |
| 12:48:17 | <edwardk> | thats the sort of thing the scenario above tried to use |
| 12:48:18 | × | coot quits (~coot@37.30.55.202.nat.umts.dynamic.t-mobile.pl) (Ping timeout: 272 seconds) |
| 12:48:25 | <Cale> | yeah, I see |
| 12:48:26 | <Cale> | hmm |
| 12:48:27 | <edwardk> | the someTypeEquality thing there can be a refl built |
| 12:48:41 | <edwardk> | and in there i can see x and the types of y and ys |
| 12:48:54 | <edwardk> | before i return them out to the surrounding context |
| 12:50:18 | → | kicov joins (959c7c03@nat.ds3.agh.edu.pl) |
| 12:51:41 | <kicov> | Hi, one more question about liquid haskell : are annotation such as `function :: f:(Int -> Int) -> {ret : Int | f ret == 0}` possible, or is something similiar also possible ? |
| 12:51:55 | <Cale> | btw, I love the super janky required () => in the type of the pattern synonym |
| 12:52:09 | <Cale> | It inspires so much confidence in GHC |
| 12:52:48 | <edwardk> | i also run into problems when i go to write the SingI instance. morally its instance (SingI a, SingI b) => SingI ('VCons a b) -- but the argumentthere has a type synonym in it! |
| 12:53:18 | <edwardk> | which prevents me from hanging the instance |
| 12:53:19 | <Cale> | I wonder... can we bind (kind/type) variables in the pattern's type signature? Does that work? |
| 12:53:26 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 12:53:32 | <edwardk> | oh let me give you a longer worked version |
| 12:53:46 | <edwardk> | yes |
| 12:54:19 | <edwardk> | forall variables. (context needed to call the pattern) => forall more variables (stuff you learn by binding the pattern) => pattern args -> pattern result |
| 12:54:30 | <edwardk> | the two context thing is deliberate |
| 12:54:33 | <edwardk> | it was the chosen syntax |
| 12:54:39 | <edwardk> | by ghc ghc |
| 12:54:41 | <edwardk> | er ghc hq |
| 12:54:57 | hackage | inline-c 0.9.1.1 - Write Haskell source files including C code inline. No FFI required. https://hackage.haskell.org/package/inline-c-0.9.1.1 (FrancescoMazzoli) |
| 12:55:17 | <edwardk> | to disambiguate between what you need to call the pattern (like fromjson, tojson, etc.) and what you learn by matching. (like GADT existential args) |
| 12:55:33 | → | kenran joins (~maier@b2b-37-24-119-190.unitymedia.biz) |
| 12:56:19 | → | nbloomf joins (~nbloomf@2600:1700:83e0:1f40:118d:2a8:7881:1f11) |
| 12:56:40 | → | utopic_int0x80 joins (~lucid_0x8@188.253.237.87) |
| 12:57:56 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 12:58:25 | <gpvs> | lambdabot: <https://lukepalmer.wordpress.com/2010/01/24/haskell-antipattern-existential-typeclass/> yeah, this actually made sense for me once I recalled there is currying |
| 12:58:34 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 12:58:39 | <gpvs> | ski, Cale, lamdabot: thank you for your help! |
| 12:58:40 | → | ystael joins (~ystael@209.6.50.55) |
| 12:58:59 | × | gpvs quits (~gp@37.57.178.79) (Quit: Leaving.) |
| 13:00:58 | × | kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 272 seconds) |
| 13:01:47 | × | ph88^ quits (~ph88@ip5f5af726.dynamic.kabel-deutschland.de) (Ping timeout: 240 seconds) |
| 13:03:19 | × | fiQ2 quits (~fiQ@mirkk.ninja) (Ping timeout: 246 seconds) |
| 13:04:02 | × | laxask quits (~lax@unaffiliated/laxask) (Ping timeout: 246 seconds) |
| 13:04:35 | ski | suspects gpvs meant "partial application" |
| 13:08:28 | <Cale> | edwardk: I got... something... to compile |
| 13:08:43 | <Cale> | I'm not sure if it's not just completely fucked, one sec :D |
| 13:08:43 | <edwardk> | i have a few versions that compile, but none that learn when they match |
| 13:08:54 | × | henninb quits (~henninb@63-226-191-96.mpls.qwest.net) (Quit: leaving) |
| 13:09:42 | × | bicho_rastrero quits (~cerdito@169.85-87-37.dynamic.clientes.euskaltel.es) (Remote host closed the connection) |
| 13:09:53 | <edwardk> | pattern SVCons :: forall (k::Type) (x::k) (n::Nat) (xs :: Vec k n). () => () => Sing x -> Sing xs -> Sing ('VCons x xs :: Vec k (S n)); pattern SVCons a b <- (upSVec -> (SVCons' a b :: SVec' ('VCons a b))) where SVCons (Sing y) (Sing ys) = UnsafeSing (VCons y ys) |
| 13:10:27 | → | polyrain joins (~polyrain@2001:8003:e501:6901:3846:7fa4:c749:eb08) |
| 13:10:35 | <Cale> | Yeah, that looks pretty similar |
| 13:11:08 | → | laxask joins (~lax@unaffiliated/laxask) |
| 13:11:35 | <edwardk> | all of this is to hack around the injectivity of succ, if it was there i could just use literally the same code i generate via template haskell for everything else |
| 13:11:56 | <Cale> | oh wait, what if we just need r ~ 'VCons x xs twice? |
| 13:12:05 | <edwardk> | but if i get gimped by any attempt to use kind nat, which perforce infects Int and other numeric types i lift i get screwed up |
| 13:12:08 | <edwardk> | ? |
| 13:12:45 | × | utopic_int0x80 quits (~lucid_0x8@188.253.237.87) (Ping timeout: 240 seconds) |
| 13:12:45 | <edwardk> | oh, the ~ there is probably going to be a ~~ |
| 13:13:04 | <edwardk> | the starting Vec k n needs to learn it is Vec k n' but that is the kind for the argument type |
| 13:13:15 | <edwardk> | so you need to learn both the kind and the type |
| 13:13:20 | <edwardk> | which is ~~'s job |
| 13:13:32 | × | suppi quits (~suppi@2605:f700:40:c00::e6fc:6842) (Ping timeout: 260 seconds) |
| 13:13:33 | <Cale> | Do you have an example usage handy? |
| 13:13:47 | <Cale> | (of using the pattern synonym to learn the equality) |
| 13:14:11 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 13:14:28 | × | acidjnk_new2 quits (~acidjnk@p200300d0c736584378afc0f7e05aaafd.dip0.t-ipconnect.de) (Remote host closed the connection) |
| 13:14:44 | <edwardk> | https://github.com/ekmett/haskell/blob/master/types/src/Data/Type/Internal.hs#L435 |
| 13:14:44 | × | bitmagie quits (~Thunderbi@200116b8062b2e00fc59d02ac7bcf06a.dip.versatel-1u1.de) (Quit: bitmagie) |
| 13:14:55 | → | acidjnk_new2 joins (~acidjnk@p200300d0c736584378afc0f7e05aaafd.dip0.t-ipconnect.de) |
| 13:14:57 | <edwardk> | each of the patterns in there and all the ones generated by TH learn the result type |
| 13:15:05 | → | suppi joins (~suppi@172.246.241.246) |
| 13:15:07 | <edwardk> | but the result argument's kind doesn't change unlike here |
| 13:17:23 | <edwardk> | when working with a S that is injective, (e.g. using the data family hack) you can just write |
| 13:17:27 | <edwardk> | pattern SVCons :: () => (r ~ 'VCons a b) => Sing a -> Sing b -> Sing r; pattern SVCons a b <- (upSVec -> SVCons' a b) where SVCons (Sing y) (Sing ys) = UnsafeSing (VCons y ys) |
| 13:17:31 | <edwardk> | like every other instance |
| 13:17:39 | <edwardk> | and my TH would have a hope in hell of autogenerating it |
| 13:18:41 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 13:19:57 | × | acidjnk_new2 quits (~acidjnk@p200300d0c736584378afc0f7e05aaafd.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 13:22:55 | × | PropositionJoe quits (~ConJoe@cm-84.215.192.230.getinternet.no) (Quit: Leaving) |
| 13:25:24 | → | kritzefitz joins (~kritzefit@212.86.56.80) |
| 13:25:26 | × | kritzefitz quits (~kritzefit@212.86.56.80) (Remote host closed the connection) |
| 13:25:30 | × | nbloomf quits (~nbloomf@2600:1700:83e0:1f40:118d:2a8:7881:1f11) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 13:29:26 | → | jeremybennett joins (~jeremyben@185.244.214.216) |
| 13:31:18 | → | geekosaur joins (ae68c070@cpe-174-104-192-112.neo.res.rr.com) |
| 13:33:03 | <edwardk> | the main concern about dumping an S into kind Nat like that though is that you get two types that produce the same value, and i can't create a custom KnownNat instance for instance KnownNat n => KnownNat (S n) -- so i can only make an overlapping instance of SingI (S n) |
| 13:33:13 | <edwardk> | and overlapping makes me sad |
| 13:33:25 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 13:35:44 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 13:38:28 | → | danso joins (~dan@107-190-41-58.cpe.teksavvy.com) |
| 13:40:01 | <edwardk> | Cale: https://github.com/TimWSpence/stitch/blob/master/src/Language/Stitch/Exp.hs#L158 |
| 13:40:04 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 246 seconds) |
| 13:40:31 | <edwardk> | SVec ~ Sing here |
| 13:41:08 | <edwardk> | TypeRep a there is Sing (a :: Type) here |
| 13:41:41 | <edwardk> | exprType :: Sing ctx -> Exp ctx ty -> Sing ty |
| 13:42:19 | <edwardk> | comes about from the types library mashing everything into one rep |
| 13:46:49 | × | drbean quits (~drbean@TC210-63-209-85.static.apol.com.tw) (Ping timeout: 260 seconds) |
| 13:47:07 | × | outerpassage quits (~outerpass@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) (Ping timeout: 260 seconds) |
| 13:48:58 | <Cale> | On the one hand, this is all kind of cool, on the other hand, it's definitely crossing the line into dependently-typed stuff that I think Haskell just plain isn't good at yet. I think if you actually need explicit singletons, that's a pretty good indication of "oops, Haskell is going to suck at this". I wonder how long until we can realistically have a working pi. |
| 13:50:24 | → | troydm joins (~troydm@unaffiliated/troydm) |
| 13:50:43 | × | polyrain quits (~polyrain@2001:8003:e501:6901:3846:7fa4:c749:eb08) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 13:51:27 | hackage | inline-c 0.9.1.2 - Write Haskell source files including C code inline. No FFI required. https://hackage.haskell.org/package/inline-c-0.9.1.2 (FrancescoMazzoli) |
| 13:53:37 | × | lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Ping timeout: 264 seconds) |
| 13:55:21 | → | jespada joins (~jespada@148.252.133.47) |
| 13:55:34 | → | acidjnk_new2 joins (~acidjnk@p200300d0c736584378afc0f7e05aaafd.dip0.t-ipconnect.de) |
| 13:55:47 | <edwardk> | well, i have been building a little dependent type checker in haskell, and every time i move more stuff into my types i catch more bugs =) |
| 13:56:09 | <edwardk> | so i'm just trying to push a few more things into them |
| 13:56:17 | <edwardk> | which is what prompted the singleton push |
| 13:56:31 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 13:56:36 | <edwardk> | getting the singleton stuff to be super fast and more homogeneous made me happy, til Nat made me sad |
| 13:59:56 | → | caumeslasal joins (~Thunderbi@157.139.207.77.rev.sfr.net) |
| 14:00:29 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 14:00:35 | × | caumeslasal quits (~Thunderbi@157.139.207.77.rev.sfr.net) (Client Quit) |
| 14:00:39 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 14:01:06 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 258 seconds) |
| 14:01:17 | → | son0p joins (~son0p@186.159.4.142) |
| 14:03:37 | × | kicov quits (959c7c03@nat.ds3.agh.edu.pl) (Remote host closed the connection) |
| 14:05:49 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
| 14:06:41 | → | gmt joins (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) |
| 14:06:53 | → | Ashely3 joins (5beb81b2@gateway/web/cgi-irc/kiwiirc.com/ip.91.235.129.178) |
| 14:08:36 | <edwardk> | i suppose what i could do is build a type data Unnat = Add Int# Nat -- relying on the fact that Int# doesn't promote so we don't have to worry about any 'native' terms in kind Unnat. use my data family trick to inject a S constructor, and one for, so that it morally models data Unnat = S Unnat | N Nat -- so i can distinguish between the base number type i got from type Nat and the number of times i called S on it |
| 14:08:56 | <edwardk> | that way i don't need to worry about S 1 ~ 2 causing the universe to collapse or something |
| 14:10:48 | <edwardk> | another another option is to just do what I do now which is use an hlist and carry a witness of the length around rather than use Vec a N |
| 14:11:05 | × | gmt quits (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 240 seconds) |
| 14:11:16 | <Cale> | Also, I haven't really thought very hard about how this suggestion might help, but generally I think if you're going to use overlapping instances in order to compute things, everything is okay in the case that you can manage to avoid exporting the class. |
| 14:11:32 | → | polyrain joins (~polyrain@2001:8003:e501:6901:3846:7fa4:c749:eb08) |
| 14:11:38 | <edwardk> | the class here is a very public offering |
| 14:11:41 | <Cale> | yeah |
| 14:12:06 | <edwardk> | i was hoping to split this out and ran into this issue while writing up examples |
| 14:12:44 | <edwardk> | i had started looking for 'all the instances i can add to base' when i ran afoul of this |
| 14:12:47 | <Cale> | I don't know if there's a way to make a private analogue and get anything related to what you want (like, make a public instance for that class that depends on an instance of the class that nobody's allowed to see, maybe) |
| 14:12:49 | <edwardk> | er from base |
| 14:13:24 | laxask | is now known as sudden |
| 14:13:42 | × | Ashely3 quits (5beb81b2@gateway/web/cgi-irc/kiwiirc.com/ip.91.235.129.178) (Disconnected by services) |
| 14:13:46 | <edwardk> | i'm inclined to just yolo the data family S thing |
| 14:13:50 | <edwardk> | and go on with my day |
| 14:13:56 | <edwardk> | and if it bites anyone say 'don't do that' |
| 14:14:17 | → | Ashely3 joins (c247e36b@gateway/web/cgi-irc/kiwiirc.com/ip.194.71.227.107) |
| 14:14:25 | × | Ashely3 quits (c247e36b@gateway/web/cgi-irc/kiwiirc.com/ip.194.71.227.107) (Disconnected by services) |
| 14:15:03 | <edwardk> | data family S' :: Nat -> k; type S :: Nat -> Nat; type S = S' -- just works .. til you need to feed it to + and want + to actually compute, because they closed the type family for + |
| 14:15:07 | → | josh joins (~josh@c-67-164-104-206.hsd1.ca.comcast.net) |
| 14:15:17 | <edwardk> | but i could offer my own + and have it delegate to the main + once i changed out the S's |
| 14:15:47 | <edwardk> | but then the benefit of working with base Nat is fleeing fast |
| 14:17:20 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 14:17:43 | × | nyd quits (~nyd@unaffiliated/elysian) (Quit: nyd) |
| 14:18:31 | → | lagothrix joins (~lagothrix@unaffiliated/lagothrix) |
| 14:19:38 | <edwardk> | i want a way to export a thing only at the type level without having to infect it with a type like Type that doesn't exist as a term. |
| 14:19:52 | <edwardk> | where i can have constructors in it, without using my data families |
| 14:20:08 | × | josh quits (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Ping timeout: 272 seconds) |
| 14:20:52 | <edwardk> | leaning towards exporting my own Nat type, ignoring the TypeNats Nat and going on my way. |
| 14:21:19 | → | josh joins (~josh@c-67-164-104-206.hsd1.ca.comcast.net) |
| 14:21:47 | <edwardk> | since Natural currently doesn't promote i _could_ use the data family hack to put Z and S in it as a kind. |
| 14:21:52 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 256 seconds) |
| 14:22:15 | <edwardk> | then you could use linear time slow SingI instances if you had to |
| 14:23:16 | × | josh quits (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Remote host closed the connection) |
| 14:23:17 | <edwardk> | and i'd have both Nat and Natural, with the former working for when i want a large literal and the latter when i want induction for things like environments that'll usually get built from 0, til... next ghc release or so when they merge Nat and Natural |
| 14:23:28 | → | josh joins (~josh@c-67-164-104-206.hsd1.ca.comcast.net) |
| 14:24:01 | <edwardk> | to make the linear time thing less awful, i could emulate a better basis, like binary nats, or zeroless binary or something. |
| 14:25:04 | → | bloodstalker joins (~bloodstal@46.166.187.178) |
| 14:25:09 | <edwardk> | that'd get me log time literals, and Z and S become type families acting on the type, but they require more type information about the rest of the nat to know what to do at some points |
| 14:25:42 | <edwardk> | where peano can succ without forcing or matching on anything |
| 14:25:58 | → | __Joker joins (~Joker@180.151.105.65) |
| 14:27:05 | <Cale> | Yeah, how does merging Nat and Natural work with type families wanting to compute anything? |
| 14:27:11 | × | olligobber quits (olligobber@gateway/vpn/privateinternetaccess/olligobber) (Ping timeout: 265 seconds) |
| 14:27:18 | <Cale> | I mean, in the future GHC case |
| 14:27:56 | → | kicov joins (959c7c03@nat.ds3.agh.edu.pl) |
| 14:28:56 | <Cale> | I guess they just have wired in type families anyway |
| 14:29:32 | <kicov> | Hi, just one more question - did someone try to use liquid haskell on lens? Got any tips how to write these annotations? `fn :: Int -> Lens' State a` doesn't work well |
| 14:30:54 | × | __Joker quits (~Joker@180.151.105.65) (Ping timeout: 272 seconds) |
| 14:31:00 | <Cale> | Is liquid haskell getting to the point where it can be used on nontrivial programs? |
| 14:31:19 | <kicov> | Just for reference: https://dpaste.com/H877D9HQU |
| 14:33:39 | → | howdoi joins (uid224@gateway/web/irccloud.com/x-dtashatgyjqumlie) |
| 14:34:19 | <Cheery> | Haskell's still using STG in the runtime right? |
| 14:35:16 | <lechner> | Hi, will findFiles from System.Directory descend into subdirectories? |
| 14:35:23 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 14:35:30 | → | irc_user joins (uid423822@gateway/web/irccloud.com/x-yhvajookqrbnnurt) |
| 14:36:17 | <Cale> | Cheery: In name more than anything |
| 14:38:05 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 14:38:17 | <edwardk> | well, i suppose what i can do is this. i'll make Z and S hacks that can inhabit kind Natural for now. and when they merge I'll just take the name Nat and move them over there =) |
| 14:38:41 | <Cheery> | Cale: the 1992 paper describes the design space and abstract machine with denotational and operational semantics. Is this still the same? |
| 14:39:08 | <edwardk> | Cheery: the STG has gotten a few upgrades since then, dynamic pointer tagging, etc. |
| 14:39:20 | <edwardk> | but the general flavor is there |
| 14:39:23 | <Cale> | Understanding the original STG will still give a decent understanding of what exists today, even though it's no longer always spineless and usually no longer tagless |
| 14:40:13 | <Cale> | http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.19.411&rep=rep1&type=pdf -- "Putting the Spine back in the Spineless Tagless G-Machine" |
| 14:40:43 | <Cale> | https://simonmar.github.io/bib/papers/ptr-tagging.pdf -- "Faster laziness using dynamic pointer tagging" |
| 14:41:31 | → | pta2002 joins (~quassel@104.248.23.110) |
| 14:42:25 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds) |
| 14:42:46 | → | urodna joins (~urodna@unaffiliated/urodna) |
| 14:43:53 | <Cheery> | I thought I do one last thing with RPython. Exploring eval/apply interpreters and STG. I'll see if there's something to propose in place of Javascript so that there's less room for people to replace it with crap. |
| 14:44:13 | <Cheery> | a nice FP runtime. :) |
| 14:44:13 | → | outerpassage joins (~outerpass@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) |
| 14:45:20 | <Cheery> | Also would love for an efficient logic programming runtime slipped in, but I'll try to not scope creep much. |
| 14:45:28 | × | CMCDragonkai1 quits (~Thunderbi@120.17.10.7) (Ping timeout: 272 seconds) |
| 14:47:04 | → | ddellacosta joins (~dd@86.106.121.168) |
| 14:48:22 | × | polyrain quits (~polyrain@2001:8003:e501:6901:3846:7fa4:c749:eb08) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 14:49:33 | × | petersen quits (~petersen@redhat/juhp) (Quit: petersen) |
| 14:55:42 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 14:56:25 | → | kenran joins (~maier@b2b-37-24-119-190.unitymedia.biz) |
| 15:00:01 | × | jeremybennett quits (~jeremyben@185.244.214.216) () |
| 15:01:33 | × | kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 256 seconds) |
| 15:02:47 | <Orbstheorem> | If building a derivation is a linear process, why doesn't nix cache intemediate build steps ? (e.g. git@`buildPhase::c1kj2h31...`) |
| 15:03:08 | → | __Joker joins (~Joker@180.151.105.65) |
| 15:04:01 | × | outerpassage quits (~outerpass@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) (Quit: Leaving) |
| 15:08:16 | × | __Joker quits (~Joker@180.151.105.65) (Ping timeout: 272 seconds) |
| 15:08:26 | <Orbstheorem> | Oh, my bad, wrong buffer ><" |
| 15:10:39 | × | knupfer quits (~Thunderbi@i59F7FF48.versanet.de) (Quit: knupfer) |
| 15:10:39 | → | knupfer1 joins (~Thunderbi@200116b82c277000795bc1703ccafd48.dip.versatel-1u1.de) |
| 15:12:30 | → | pingiun joins (~pingiun@j63019.upc-j.chello.nl) |
| 15:12:48 | → | HeAvengin7_ joins (~sedx@112.198.75.236) |
| 15:13:03 | knupfer1 | is now known as knupfer |
| 15:16:30 | × | jespada quits (~jespada@148.252.133.47) (Read error: Connection reset by peer) |
| 15:16:45 | → | __Joker joins (~Joker@180.151.105.65) |
| 15:16:48 | × | HeAvengin7_ quits (~sedx@112.198.75.236) (Quit: Please click my blog: https://bit.ly/2RjfReh or https://bit.ly/33tb5lx) |
| 15:17:50 | <sm[m]> | hi lechner, doesn't it's doc say ? |
| 15:19:33 | × | dsf quits (~dsf@cpe-75-80-106-108.san.res.rr.com) (Ping timeout: 260 seconds) |
| 15:22:04 | → | ermau joins (~ermau@185.163.110.116) |
| 15:30:50 | × | knupfer quits (~Thunderbi@200116b82c277000795bc1703ccafd48.dip.versatel-1u1.de) (Quit: knupfer) |
| 15:31:14 | → | knupfer joins (~Thunderbi@200116b82c2770005077b6463d9d1f88.dip.versatel-1u1.de) |
| 15:32:40 | → | dsf joins (~dsf@cpe-75-82-64-167.socal.res.rr.com) |
| 15:37:11 | → | ClaudiusMaximus joins (~claude@198.123.199.146.dyn.plus.net) |
| 15:37:12 | × | ClaudiusMaximus quits (~claude@198.123.199.146.dyn.plus.net) (Changing host) |
| 15:37:12 | → | ClaudiusMaximus joins (~claude@unaffiliated/claudiusmaximus) |
| 15:39:57 | × | ukari quits (~ukari@unaffiliated/ukari) (Remote host closed the connection) |
| 15:40:42 | → | ukari joins (~ukari@unaffiliated/ukari) |
| 15:42:52 | → | Turmfalke joins (~user@unaffiliated/siracusa) |
| 15:46:22 | × | acidjnk_new2 quits (~acidjnk@p200300d0c736584378afc0f7e05aaafd.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 15:51:30 | × | kicov quits (959c7c03@nat.ds3.agh.edu.pl) (Remote host closed the connection) |
| 15:53:32 | → | gmt joins (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) |
| 16:00:39 | → | Rudd0 joins (~Rudd0@185.189.115.98) |
| 16:02:09 | × | gmt quits (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 260 seconds) |
| 16:04:00 | → | outerpassage joins (outerpassa@2600:3c01::f03c:92ff:fed1:4643) |
| 16:04:11 | → | elliott_ joins (~elliott@2600:380:9266:42eb:7b5e:250e:ef35:8b08) |
| 16:07:59 | × | son0p quits (~son0p@186.159.4.142) (Read error: Connection reset by peer) |
| 16:09:19 | <lechner> | sm[m]: I am not sure. I can only see the "given list of directories"---which is elaborated on but not otherwise expanded to recursive behavior in the reference to findFilesWith here: https://hackage.haskell.org/package/directory-1.3.6.1/docs/System-Directory.html#v:findFiles |
| 16:11:01 | × | ryansmccoy quits (~ryansmcco@156.96.151.132) (Ping timeout: 264 seconds) |
| 16:11:12 | → | son0p joins (~son0p@186.159.4.142) |
| 16:11:28 | → | jflewkfjlwjefklf joins (~jfkeflkwe@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) |
| 16:11:42 | → | ryansmccoy joins (~ryansmcco@193.37.254.27) |
| 16:12:33 | × | jflewkfjlwjefklf quits (~jfkeflkwe@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) (Remote host closed the connection) |
| 16:16:59 | → | gmt joins (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) |
| 16:20:18 | → | zebrag joins (~inkbottle@aaubervilliers-654-1-99-86.w86-212.abo.wanadoo.fr) |
| 16:20:52 | × | inkbottle quits (~inkbottle@aaubervilliers-654-1-100-182.w86-212.abo.wanadoo.fr) (Ping timeout: 256 seconds) |
| 16:22:18 | → | thir joins (~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) |
| 16:22:23 | <thir> | #bitsnbugs |
| 16:22:33 | × | gmt quits (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) (Ping timeout: 260 seconds) |
| 16:22:47 | × | DirefulSalt quits (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Remote host closed the connection) |
| 16:23:13 | → | DirefulSalt joins (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) |
| 16:23:42 | ← | thir parts (~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) () |
| 16:28:44 | → | pera joins (~pera@unaffiliated/pera) |
| 16:29:01 | → | Jeanne-Kamikaze joins (~Jeanne-Ka@104.200.129.62) |
| 16:30:36 | → | ajfelfjlsdkfjejf joins (~jfkeflkwe@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) |
| 16:31:27 | hackage | uniqueness-periods-vector-examples 0.5.3.0 - Examples of usage for the uniqueness-periods-vector series of packages https://hackage.haskell.org/package/uniqueness-periods-vector-examples-0.5.3.0 (OleksandrZhabenko) |
| 16:31:28 | × | carlomagno quits (~cararell@inet-hqmc02-o.oracle.com) (Remote host closed the connection) |
| 16:31:45 | → | jespada joins (~jespada@148.252.133.47) |
| 16:32:15 | → | carlomagno joins (~cararell@inet-hqmc02-o.oracle.com) |
| 16:32:27 | × | zopsi quits (~zopsi@irc.dir.ac) (Remote host closed the connection) |
| 16:32:45 | → | gestone joins (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) |
| 16:33:23 | → | zopsi joins (zopsi@2600:3c00::f03c:91ff:fe14:551f) |
| 16:33:26 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 16:34:39 | → | fendor joins (~fendor@77.119.128.171.wireless.dyn.drei.com) |
| 16:35:33 | × | ericsagnes quits (~ericsagne@2405:6580:0:5100:59cb:4e8f:c201:4e04) (Ping timeout: 272 seconds) |
| 16:35:40 | → | aenesidemus joins (~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net) |
| 16:39:20 | → | tzh joins (~tzh@2601:448:c500:5300::ad1c) |
| 16:39:20 | × | cheater quits (~user@unaffiliated/cheater) (Quit: BitchX: the new hardcore, psycho, nitro client -- in a can) |
| 16:41:53 | → | cheater joins (~user@unaffiliated/cheater) |
| 16:43:26 | × | knupfer quits (~Thunderbi@200116b82c2770005077b6463d9d1f88.dip.versatel-1u1.de) (Ping timeout: 244 seconds) |
| 16:47:21 | → | ericsagnes joins (~ericsagne@2405:6580:0:5100:5585:9ff6:72b9:d99a) |
| 16:48:02 | <sm[m]> | lechner: you're right, it's not crystal clear, but yes I'm 99% sure it descends. Probably you tested it by now |
| 16:49:03 | → | Dolly joins (585fd1fd@ti0203q160-5312.bb.online.no) |
| 16:49:48 | → | knupfer joins (~Thunderbi@i59F7FF48.versanet.de) |
| 16:49:55 | → | igghibu joins (~igghibu@net-93-66-17-40.cust.vodafonedsl.it) |
| 16:50:47 | × | pingiun quits (~pingiun@j63019.upc-j.chello.nl) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 16:51:09 | → | justsomeguy joins (~justsomeg@unaffiliated/--/x-3805311) |
| 16:53:42 | <nshepperd2> | whoa i just converted this dynamic programming-based tokenization thing from a laziness based pure Vector implementation to a mutable unboxed vector in ST, and it got like 100 times faster |
| 16:54:02 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 16:54:26 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 16:54:39 | <ski> | top-down to bottom-up ? |
| 16:54:45 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 16:55:52 | <nshepperd2> | I'm not quite sure what those terms mean, but yes I think so |
| 16:57:15 | <nshepperd2> | the lazy one was let table = V.generate (n+1) go; go = ...; in table!n |
| 16:57:19 | → | kenran joins (~maier@b2b-37-24-119-190.unitymedia.biz) |
| 16:57:45 | <nshepperd2> | the fast one was to make a mutable unboxed vector and fill it out in order from 0 to n |
| 16:57:49 | <ski> | where `go' referred to `table' |
| 16:57:55 | <nshepperd2> | yeah |
| 16:58:17 | <sshine> | >_< |
| 16:58:24 | <ski> | hm, what kind of access pattern ? |
| 16:59:25 | <nshepperd2> | 'go i' would reference some or all cells between i-5 and i-1 |
| 16:59:34 | <hekkaidekapus> | sm[m]: The 1% wins again :p It does not descend. At its core, the function calls doesFileExist to the supplied dirs. |
| 17:00:12 | × | ajfelfjlsdkfjejf quits (~jfkeflkwe@2600:1700:4640:c560:68bd:9d76:dbd8:24e7) (Quit: Leaving) |
| 17:00:20 | <hekkaidekapus> | doesFileExist (dir </> file) |
| 17:00:24 | <ski> | "bottom-up" means that you fill in the "lower cells", before the higher ones, "prematurely" so to speak. "top-down" that you start demanding higher ones, which in turn demands lower ones (which are cached) |
| 17:00:39 | <dolio> | There's a lot of overhead in the top-down lazy approach. |
| 17:00:54 | <dolio> | If you're working with integers. |
| 17:01:10 | → | sleblanc joins (~sleblanc@unaffiliated/sebleblanc) |
| 17:01:47 | <nshepperd2> | ski: then yeah, that's exactly what i did |
| 17:01:59 | <ski> | nshepperd2 : i suppose you could even use a five-tuple, or a vector of size five, then |
| 17:02:41 | × | kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 260 seconds) |
| 17:03:28 | × | igghibu quits (~igghibu@net-93-66-17-40.cust.vodafonedsl.it) (Quit: Konversation terminated!) |
| 17:03:37 | <dolio> | Yeah, like computing fibonacci with an accumulator pair. |
| 17:04:10 | <ski> | (you'd use `mod i 5') |
| 17:05:09 | <ski> | i suppose the computation of the next cell isn't a linear function of the previous five ones .. |
| 17:05:10 | × | zaquest quits (~notzaques@5.128.210.178) (Quit: Leaving) |
| 17:06:52 | × | elliott_ quits (~elliott@2600:380:9266:42eb:7b5e:250e:ef35:8b08) (Ping timeout: 260 seconds) |
| 17:07:20 | <ski> | nshepperd2 : probably the lazy approach would work better, in case there's many cells which aren't needed to compute the result |
| 17:07:38 | → | coot joins (~coot@37.30.49.42.nat.umts.dynamic.t-mobile.pl) |
| 17:08:00 | → | notzmv` joins (~user@177.103.86.92) |
| 17:08:11 | <dolio> | Yeah, there are a lot of factors making it sub-optimal for this case. |
| 17:08:29 | → | zaquest joins (~notzaques@5.128.210.178) |
| 17:08:37 | → | hyperisco joins (~hyperisco@d192-186-117-226.static.comm.cgocable.net) |
| 17:10:10 | × | cheater quits (~user@unaffiliated/cheater) (Read error: Connection reset by peer) |
| 17:10:37 | <sshine> | I have a data type, data Foo a = X a | Y a | Z a | P | Q | R; and I'd like to make a type NumFoo = forall n. Num n => Foo n, but it seems that I can't do that. what are my alternatives? I was thinking of a data type with a type class constraint. |
| 17:10:59 | <sshine> | I think I can use GADTs, but that would require me to alter 'Foo', too, right? |
| 17:11:18 | × | notzmv quits (~user@unaffiliated/zmv) (Ping timeout: 256 seconds) |
| 17:11:46 | → | cheater joins (~user@unaffiliated/cheater) |
| 17:11:55 | <nshepperd2> | ski: yeah in this case pretty much all cells are eventually needed |
| 17:13:30 | <ski> | sshine : why can't you ? |
| 17:13:33 | <hyperisco> | sshine, what is the idea of this type? I don't understand |
| 17:14:26 | <ski> | a value of type `NumFoo' possibly contains a number of any numeric type the user wants to get |
| 17:14:52 | → | Lord_of_Life_ joins (~Lord@unaffiliated/lord-of-life/x-0885362) |
| 17:15:26 | × | mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Remote host closed the connection) |
| 17:16:00 | → | mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) |
| 17:16:27 | → | igghibu joins (~igghibu@91.193.5.10) |
| 17:16:50 | × | Lord_of_Life quits (~Lord@unaffiliated/lord-of-life/x-0885362) (Ping timeout: 272 seconds) |
| 17:16:50 | Lord_of_Life_ | is now known as Lord_of_Life |
| 17:22:38 | × | igghibu quits (~igghibu@91.193.5.10) (Quit: Textual IRC Client: www.textualapp.com) |
| 17:22:54 | <zebrag> | I believe `cons :: a -> List l a -> List (Succ l) a` cannot be done with plain GADT? (The following ref, might suggest it could be done?? https://www.cis.upenn.edu/~sweirich/talks/GADT.pdf, page 9) |
| 17:23:15 | → | cole-h joins (~cole-h@c-73-48-197-220.hsd1.ca.comcast.net) |
| 17:23:45 | <hyperisco> | zebrag, is there a compiler error you're seeing? |
| 17:23:56 | × | Dolly quits (585fd1fd@ti0203q160-5312.bb.online.no) (Remote host closed the connection) |
| 17:24:14 | × | mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Remote host closed the connection) |
| 17:24:18 | <zebrag> | At least if you consider `Succ` is a data constructor |
| 17:24:25 | → | mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) |
| 17:24:39 | <zebrag> | hyperisco: no I'm just reading the slides above |
| 17:25:59 | <hyperisco> | all I don't understand is how that is an example of dependent types |
| 17:26:07 | × | tzh quits (~tzh@2601:448:c500:5300::ad1c) (Ping timeout: 260 seconds) |
| 17:26:20 | <hyperisco> | what is your objection? |
| 17:26:37 | → | kindaro joins (5f6e6241@h95-110-98-65.dyn.bashtel.ru) |
| 17:26:57 | × | suppi quits (~suppi@172.246.241.246) (Ping timeout: 260 seconds) |
| 17:27:06 | × | mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Remote host closed the connection) |
| 17:27:26 | → | pingiun joins (~pingiun@j63019.upc-j.chello.nl) |
| 17:27:30 | → | Dolly joins (585fd1fd@ti0203q160-5312.bb.online.no) |
| 17:29:08 | <Cale> | sshine: Just replace "type NumFoo = ..." with "data NumFoo = ..." and what you wrote is valid code, if a little bit useless. Forgetting everything about the type of number except that it was a type of number will mean that you can't really do a whole lot with it (in particular, you won't know that it's the same type as any other type of number, so the arithmetic you can perform is very limited) |
| 17:30:13 | <Cale> | sshine: Or did you really want to define a type synonym for the universal type? |
| 17:31:09 | <c_wraith> | Cale: it's a bit worse than that since Show is no longer a superclass of Num. Num doesn't give you any eliminator to see the value. |
| 17:31:10 | × | DirefulSalt quits (DirefulSal@gateway/vpn/privateinternetaccess/direfulsalt) (Remote host closed the connection) |
| 17:31:18 | <Cale> | Right |
| 17:31:27 | <Cale> | and Eq is gone too |
| 17:31:48 | <c_wraith> | Eq would be pretty useless, though, unless you wanted to test for lack of reflexivity or something |
| 17:32:16 | <Cale> | You could test out arithmetical identities involving your one value of the given type :) |
| 17:32:41 | <c_wraith> | hah. is x + x == x ? :) |
| 17:32:45 | <Cale> | yeah |
| 17:33:08 | <hyperisco> | no |
| 17:33:15 | → | GyroW_ joins (~GyroW@ptr-48ujrfb8c7gfd2lu92q.18120a2.ip6.access.telenet.be) |
| 17:33:18 | × | supercoven quits (~Supercove@dsl-hkibng32-54fb54-166.dhcp.inet.fi) (Ping timeout: 272 seconds) |
| 17:33:43 | <Cale> | (that's essentially the same as checking if x == 0, if the instance is lawful) |
| 17:33:48 | <c_wraith> | I suppose the Num instance would let you throw in literals too, so you could ask if x * 0 == x |
| 17:33:49 | × | GyroW quits (~GyroW@unaffiliated/gyrow) (Ping timeout: 272 seconds) |
| 17:33:51 | → | mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) |
| 17:34:21 | <c_wraith> | That's not true in a modular ring |
| 17:34:41 | <c_wraith> | Oh, I guess it is. nevermind me! |
| 17:34:49 | <phadej> | x * 0 = 0, not x ? |
| 17:35:14 | <Cale> | That was another equation that would only be satisfied when x == 0 |
| 17:35:27 | <c_wraith> | Anyway. The real point is that a value of an unknown type with a Num instance is very low. |
| 17:35:28 | <Cale> | (again, a fun thing to check holds in any ring) |
| 17:35:37 | <hyperisco> | I guess you can use this to dynamically determine which laws might hold |
| 17:35:54 | → | tzh joins (~tzh@c-73-94-222-143.hsd1.mn.comcast.net) |
| 17:35:56 | <c_wraith> | If you add in Eq, you can do that |
| 17:36:07 | <c_wraith> | but with *just* Num, you've got basically nothing. |
| 17:36:24 | → | cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) |
| 17:36:25 | <hyperisco> | I feel like Num without Ord is amiss |
| 17:36:52 | <c_wraith> | so... not a fan of complex numbers? |
| 17:37:23 | <hyperisco> | you telling me they can't be ordered or are you telling me Ord is too strong |
| 17:37:39 | <merijn> | hyperisco: There's two separate and equally valid orderings for them |
| 17:37:43 | <geekosaur> | they can't be ordered |
| 17:37:46 | <merijn> | Well, technically probably more |
| 17:37:54 | <geekosaur> | or, what merijn said. |
| 17:37:55 | <merijn> | But they can't be ordered in a arithmetically meaningful way |
| 17:38:06 | <merijn> | hyperisco: Consider this |
| 17:38:22 | <merijn> | hyperisco: Is "1 + 0i" > than "0 + 1i" or not? |
| 17:38:29 | → | Chi1thangoo joins (~Chi1thang@87.112.60.168) |
| 17:38:55 | <geekosaur> | basically "Ord" only makes sense if they can be squashed down to a line without data loss. complex numbers, quaternions, etc. have infinitely many such squashings, none of which has any claim to being primary |
| 17:39:05 | <hyperisco> | so you're telling me Ord is too strong |
| 17:39:23 | <merijn> | You could argue Num should be Eq |
| 17:39:30 | <merijn> | Which, in fact, the Haskell Report does |
| 17:39:37 | <merijn> | GHC ignores that, however |
| 17:39:40 | → | acidjnk_new2 joins (~acidjnk@p200300d0c736584378afc0f7e05aaafd.dip0.t-ipconnect.de) |
| 17:39:43 | <hyperisco> | what about the cherished function instance though |
| 17:39:49 | <merijn> | The report also mandates a Show instance as superclass of Num |
| 17:39:58 | <merijn> | hyperisco: Those aren't legal per the report |
| 17:40:02 | → | borne joins (~fritjof@200116b86490460022497ba62715fb72.dip.versatel-1u1.de) |
| 17:40:08 | <merijn> | Since they can't have Eq or Show |
| 17:40:14 | <hyperisco> | well the report can stuff itself in regards to Num |
| 17:40:29 | <merijn> | hyperisco: Well, you wanted Ord |
| 17:40:29 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Ping timeout: 260 seconds) |
| 17:40:34 | <merijn> | hyperisco: Which requires Eq :p |
| 17:40:34 | <hyperisco> | it started this mess |
| 17:40:45 | <merijn> | hyperisco: So insisting on Ord for Num kills that instance too :p |
| 17:41:01 | <merijn> | It's easy |
| 17:41:01 | <monochrom> | "forall n. Num n => n" is very likely the same as "Integer". |
| 17:41:14 | <hyperisco> | if you think I'm giving one consistent position here, I'm not |
| 17:41:15 | → | wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
| 17:41:15 | × | wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Client Quit) |
| 17:41:20 | <merijn> | Num is perfectly adequate if you just give up on any notion of "math" definitions of arithmetic |
| 17:41:33 | → | wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
| 17:41:38 | <merijn> | hyperisco: There've been 50 different Num hierarchies "better" than the current one proposed |
| 17:41:56 | <merijn> | But no one uses them, because they're all a pain for anything anyone actually cares about doing |
| 17:41:57 | <phadej> | Num is an unsuccessful attempt to unify operations on `Integer` and `Double` |
| 17:41:58 | → | shad0w_ joins (~shad0w_@160.202.36.27) |
| 17:42:06 | <monochrom> | But you can't squash down those 50 alternatives down to a line. :) |
| 17:42:15 | <hyperisco> | I doubt it |
| 17:42:21 | <merijn> | Turns out the current Num hierarchy does passably well at "stuff people actually care about" |
| 17:42:34 | <phadej> | right now I think that exact and inexact math should just had different operator set :) |
| 17:42:35 | <Cale> | I think Num is pretty okay at the moment. The main things which always bothered me before were the Show and Eq constraints, and those are gone. |
| 17:42:35 | <merijn> | hyperisco: Well, feel free to work out and propose alternative 51 :) |
| 17:42:40 | <hyperisco> | no |
| 17:42:42 | <merijn> | Maybe this time someone will get it right :) |
| 17:43:03 | <hyperisco> | PureScript has a different hierarchy and soils it with invalid instances |
| 17:43:15 | <Cale> | signum/abs being there is a little weird perhaps, but those are always definable in some fashion |
| 17:43:16 | <monochrom> | I am somewhat bothered by the opposite, Cale. For example allowing X->Integer to be a Num instance. |
| 17:43:21 | <hyperisco> | but other than that, I've personally found ample utility in it |
| 17:43:43 | <merijn> | I have no clue about purescript's hierarchy |
| 17:43:58 | <hyperisco> | it is more disciplined than a bag called Num |
| 17:44:06 | <phadej> | I think PureScript makes the same mistake, by having e.g. Double as part of "the only numeric hierarchy" |
| 17:44:22 | <hyperisco> | but then it goes and gives the usual Double instance and pretends Int is Integer |
| 17:44:43 | <monochrom> | Then again I'm bothered by signum and abs, too. |
| 17:44:46 | <merijn> | hyperisco: Well, what's the alternative? |
| 17:44:49 | → | MorrowM joins (~max@bzq-110-168-31-106.red.bezeqint.net) |
| 17:44:59 | <merijn> | Do an Ocaml and use a different + for Int and Double? |
| 17:45:08 | <monochrom> | Yes. |
| 17:45:11 | <hyperisco> | I recommended that |
| 17:45:24 | <merijn> | That's one of the worst things in ocaml >.< |
| 17:45:32 | <monochrom> | It is why I came over to Haskell. :) |
| 17:45:32 | → | Tesseraction joins (~Tesseract@unaffiliated/tesseraction) |
| 17:45:36 | <hyperisco> | though the issue starts at division, not +, for Int |
| 17:45:39 | → | justanotheruser joins (~justanoth@unaffiliated/justanotheruser) |
| 17:45:58 | <hyperisco> | so long as we're willing to accept the reality that Int is a modular ring |
| 17:46:10 | <merijn> | hyperisco: Well, how is your hypothetical hierarchy going to unify + for Int and Double and not get this "wrong instance" for Double you're complaining about |
| 17:46:15 | <hyperisco> | a hard thing for programmers to do, seems |
| 17:46:30 | <hyperisco> | well that's easy |
| 17:46:37 | <hyperisco> | you just cast Double out of the hierarchy altogether |
| 17:46:41 | × | gestone quits (~gestone@c-98-225-37-68.hsd1.wa.comcast.net) (Quit: Lost terminal) |
| 17:46:43 | <merijn> | Right |
| 17:46:59 | <merijn> | So then + doesn't work on Double, but you just said the division start at division |
| 17:47:06 | <hyperisco> | and then you do the harder thing of figuring out truthful axioms for Double |
| 17:47:25 | <hyperisco> | for Int it does |
| 17:47:48 | <hyperisco> | for Double the problem started at the beginning |
| 17:47:55 | <dolio> | Maybe you could accept that not every type class needs to be a grand mathematical design, and sometimes people just want to overload stuff. |
| 17:48:23 | <hyperisco> | frankly that isn't why I use these languages |
| 17:49:16 | <hyperisco> | and I find it bemusing how concerned people get about overloading syntax |
| 17:49:51 | <hyperisco> | how do we get on if + cannot be used for both Int and Double in the same module |
| 17:53:17 | <maralorn> | I wanna design a small library and am uncertain about the design. I want to specify A) a data type representing certain dialog interactions with a user (like a menu, a text input, a yes/no question) and B) multiple implementations of IO actions that execute that dialog. So far so easy. But now I wonder how I can make the type of possible dialogs composable and giving the handlers an option to specify which types of dialogs |
| 17:53:17 | <maralorn> | they support. And I wonder if that's worth it. Because for my use case I could probably just have one data type for "dialogs" and extend it whenever I need to. |
| 17:54:18 | <hyperisco> | merijn, oh sorry I think the division is fine, though there are different ways to do it, but the problem starts at Euclidean rings because Int is not an integral domain |
| 17:54:41 | <maralorn> | On the other hand specifying possible dialog variants in a type level list will probably multiple my development time and lower the ease of use. |
| 17:55:13 | → | juuandyy joins (~juuandyy@90.166.144.65) |
| 17:55:23 | × | knupfer quits (~Thunderbi@i59F7FF48.versanet.de) (Ping timeout: 240 seconds) |
| 17:56:08 | <hyperisco> | merijn, no scratch that, EuclideanRing defines division. :P clumsily remembering the hierarchy |
| 17:56:14 | → | perrier-jouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 17:56:25 | × | orion quits (~orion@unaffiliated/orion) (Ping timeout: 240 seconds) |
| 17:56:33 | ski | looks at sshine |
| 17:56:42 | → | suppi joins (~suppi@172.246.241.246) |
| 17:56:51 | MarcelineVQ | looks at rcloud |
| 17:56:54 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 17:56:54 | <hyperisco> | there is DivisionRing which defines multiplicative inverses but that can't be closed on Int |
| 17:57:03 | → | Lycurgus joins (~niemand@98.4.96.130) |
| 17:58:13 | <hyperisco> | but for example, I can count with semirings, and that has been helpful (technically could with a group, but for whatever reason groups are omitted from the hierarchy, painfully) |
| 17:58:54 | → | dansho joins (~dansho@ip68-108-167-185.lv.lv.cox.net) |
| 17:59:36 | → | worc3131 joins (~quassel@2a02:c7f:c026:9500:7d0b:65d0:38a4:4786) |
| 17:59:38 | <Cale> | hyperisco: Well, Euclidean domains usually are required to be integral domains, but practically speaking, I'm not sure how much trouble you run into with the generalisation... |
| 18:00:02 | × | ermau quits (~ermau@185.163.110.116) () |
| 18:00:16 | <hyperisco> | both instances given in the Prelude for PS are invalid, so I guess you run into trouble on all counts :P |
| 18:00:28 | <Cale> | for PS? |
| 18:00:33 | <hyperisco> | PureScript |
| 18:01:28 | Lycurgus | just reviewed from herstein the group/ring distinction |
| 18:02:13 | → | wavemode joins (~wavemode@097-070-075-143.res.spectrum.com) |
| 18:02:45 | <hyperisco> | I am guessing there are semirings and rings I could avail myself of but I am not instinctively inclined to see things that way yet |
| 18:03:10 | <Cale> | What's wrong with it apart from Int not being an integral domain? |
| 18:03:28 | <Cale> | (I'm not very familiar with purescript) |
| 18:04:13 | → | knupfer joins (~Thunderbi@i59F7FF48.versanet.de) |
| 18:04:42 | <hyperisco> | I stopped investigating at that point, I don't know if anything else is wrong |
| 18:04:59 | → | Sgeo joins (~Sgeo@ool-18b982ad.dyn.optonline.net) |
| 18:05:25 | maralorn | thinks, that trying to closely match any detailed mathematical hierarchy is to rigid. I guess Num is okayish. But I think I would go for more finegrained classes if someone forced me to think of a "correct" definition. Like have one for addition, another one for subtraction, one for multiplication, one or I guess two for division ... |
| 18:05:25 | → | AlterEgo__ joins (~ladew@124-198-158-163.dynamic.caiway.nl) |
| 18:05:31 | × | AlterEgo__ quits (~ladew@124-198-158-163.dynamic.caiway.nl) (Remote host closed the connection) |
| 18:05:55 | <hyperisco> | I was doing something or other with Euclidean spaces I think and it became relevant to have actual an actual Euclidean ring |
| 18:06:15 | <hyperisco> | even the approximation of Double is more palatable than Int |
| 18:06:50 | <hyperisco> | but literally the all-powerful overloaded syntax argument was wheeled out to defend it |
| 18:07:17 | <hyperisco> | and if you're going to do that, I say Num was better |
| 18:07:22 | × | andreas303 quits (~andreas@gateway/tor-sasl/andreas303) (Remote host closed the connection) |
| 18:07:35 | <hyperisco> | lawless, no one ought to care that much about it, just a bag of overloaded names |
| 18:08:01 | × | hiroaki quits (~hiroaki@2a02:908:4b14:d500:8d4c:a111:9cac:718b) (Ping timeout: 272 seconds) |
| 18:08:16 | <hyperisco> | problem is, people aren't viewing this right, and I know it |
| 18:09:17 | <hyperisco> | if you started caring about, say, a Euclidean ring generically, ie the only thing important is the Euclidean ring itself, not any particular instances |
| 18:09:40 | <Cale> | Wait, Double isn't a useful approximation of a Euclidean domain... except in a trivial way |
| 18:09:44 | <hyperisco> | then you'd be upset that after going through that work it could be instantiated with potentially program-crashing instances |
| 18:10:23 | <Cale> | Fields are technically Euclidean domains, they're not very interesting ones though. |
| 18:10:33 | → | andreas303 joins (~andreas@gateway/tor-sasl/andreas303) |
| 18:13:05 | <hyperisco> | all I am saying is that I prefer the problems of Double to the problems of Int |
| 18:13:19 | <Cale> | ah |
| 18:14:01 | merijn | just embraced anarchy and lawlessness |
| 18:14:14 | <merijn> | Seems better for my blood pressure :p |
| 18:15:06 | × | xerox_ quits (~xerox@unaffiliated/xerox) (Ping timeout: 272 seconds) |
| 18:15:12 | × | jespada quits (~jespada@148.252.133.47) (Quit: Sleeping) |
| 18:16:52 | <hyperisco> | I appreciate how rarified the atmosphere is to be arguing with Haskellers over their precision |
| 18:17:31 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 18:17:54 | <Cale> | I just think I'd rather save a proper Ring class hierarchy for when we get dependent types, and even then, it probably doesn't need to be in the Prelude. |
| 18:18:33 | <hyperisco> | what can we gain from dts here? |
| 18:18:49 | <Cale> | Then you can add the actual laws as methods |
| 18:19:10 | <hyperisco> | oh well I feel like that is a broader discussion about how class laws are treated |
| 18:20:20 | <hyperisco> | Idris chose to have lawful and lawless versions of each class, and that seems odd |
| 18:21:17 | <Cale> | I think it makes sense if you try to use the lawful ones and don't enjoy wasting your time convincing the computer :P |
| 18:21:29 | <MarcelineVQ> | that's because idris isn't a proof assistant, it's a gp programming language, and a gp language should endeavor to be useable |
| 18:21:53 | → | laen_ joins (~laen_@s91904426.blix.com) |
| 18:22:01 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 18:22:02 | <hyperisco> | that is fine but why is that the chosen escape hatch |
| 18:22:11 | <hyperisco> | because another option is to just leave the proofs as TODOs |
| 18:22:16 | <MarcelineVQ> | There's other escape hatches, what problem are we escaping? |
| 18:23:05 | <geekosaur> | carrying around proofs that your typeclass instances are law-abiding |
| 18:23:20 | × | nibbling quits (~nibbling@165.227.18.242) (Quit: WeeChat 2.6) |
| 18:23:21 | <Cale> | The proposition might actually be untrue, but you might know that the extent to which it's untrue doesn't matter to you |
| 18:23:35 | <Cale> | (like in the case of most uses of Double for arithmetic) |
| 18:23:52 | <hyperisco> | I'd expect in Haskell, if we had such lawful classes, we could write in error "TODO" or some such instead of a proof |
| 18:23:57 | <MarcelineVQ> | The issue with providing an instance that claims to enforce laws and then not enforcing them is that you have users, and users and surprises are a bad combination |
| 18:24:45 | <hyperisco> | I don't feel like that tracks with the pragmatism argument though |
| 18:25:05 | <MarcelineVQ> | As a user I pragmatically don't like surprises :X |
| 18:25:35 | <hyperisco> | if I make a library do I require you to give me lawful or lawless instances? |
| 18:25:45 | <phadej> | Cale: it's fun (when you think about it) that there's plenty of research how to make computing with IEEE754 less-imprecise / numerically stable / ... |
| 18:25:47 | <hyperisco> | I'm deciding what work you need to do for me, at that point |
| 18:26:16 | <phadej> | Cale: and all of that is thrown away when you try to fit into (just) + and * of Ring class (for example) |
| 18:26:31 | <phadej> | repeating what I said, it is a wrong abstraction |
| 18:27:08 | × | wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Ping timeout: 272 seconds) |
| 18:27:09 | <hyperisco> | on the flip, you give me a lawful instance and it is not truly law-abiding, I'll be upset, true |
| 18:27:13 | <phadej> | something as 'basic' as FMA |
| 18:27:51 | <phadej> | https://gitlab.haskell.org/ghc/ghc/-/issues/10364 :( |
| 18:27:52 | <Cale> | In what way do we throw out numerical stability analysis? |
| 18:28:14 | <phadej> | e.g. not offering fma, for example |
| 18:28:28 | <Cale> | Oh, I see, you just want more operations |
| 18:28:36 | <Cale> | I don't think that requires removing + and * |
| 18:29:09 | <hyperisco> | Cale, it is just that if Double actually works then probably the algebraic structure never mattered |
| 18:29:16 | <MarcelineVQ> | "<hyperisco> I'm deciding what work you need to do for me, at that point" Indeed, that's an issue with laws at api boundries, it's also why I so far advocate to not let dependent types into your api's. |
| 18:29:30 | <hyperisco> | the issue of perspective I am seeing is that people argue from a specific instance, rather than arguing from the algebraic structure |
| 18:29:33 | <Cale> | hyperisco: It *approximately* matters :) |
| 18:29:38 | <hyperisco> | and that is how we get syntax arguments |
| 18:30:19 | <Cale> | The algebraic laws are stated as equations, while what the application probably needed was only inequalities which bounded those things to be true within some interval of error |
| 18:30:49 | <Cale> | and only for values in a particular range |
| 18:30:56 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 18:32:04 | <hyperisco> | fine, but still did the generalisation of that structure, realised as a type class, ever matter |
| 18:32:12 | → | __monty__ joins (~toonn@unaffiliated/toonn) |
| 18:32:34 | <hyperisco> | and I'm not saying you're making this argument |
| 18:33:34 | × | cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Quit: Quit.) |
| 18:34:45 | <Cale> | Not all that much, but it allowed for overloading, and possibly some reuse of functions defined in terms of Num which aren't part of it |
| 18:36:24 | <Cale> | phadej: I think to start with, we should have all the operations like fma but not in a class. |
| 18:36:37 | <Cale> | (maybe in their own class) |
| 18:37:03 | <phadej> | Cale: I'd argue that Double shouldn't be Num (or whatever Ring) to begin with |
| 18:37:03 | <Cale> | Presumably that could be done as a library, though perhaps it's worth wiring the operations into GHC... |
| 18:37:36 | <Cale> | Meh, it's got operations which roughly correspond to the operations of Num to the point that the meanings of things are predictable. |
| 18:37:37 | <phadej> | if you really want, then there could be a newtype wrapping IEEE754 type and pretending it's a Num (or Ring) |
| 18:38:28 | → | jespada joins (~jespada@90.254.241.6) |
| 18:38:36 | <Cale> | I don't think there's all that much value in making it any less convenient to add and multiply Double values |
| 18:39:01 | <Cale> | Or interpret integer literals as Double values, for that matter |
| 18:39:15 | <hyperisco> | biased way to put it but sure, I'd prefer not to lose that |
| 18:39:25 | × | son0p quits (~son0p@186.159.4.142) (Ping timeout: 240 seconds) |
| 18:39:39 | × | jespada quits (~jespada@90.254.241.6) (Read error: Connection reset by peer) |
| 18:40:28 | <Cale> | It's hard to see how kicking Double out of Num is going to result in the same level of convenience even -- at the very least, you're going to have to choose new, slightly more awkward names for the operations -- we're basically out of single-character infix operators |
| 18:41:12 | → | jespada joins (~jespada@90.254.241.6) |
| 18:41:27 | <Cale> | and then you lose all the things which were written to work with an arbitrary instance of Num, many of which still make sense for Double |
| 18:42:22 | <hyperisco> | I sometimes hate our editing tools too |
| 18:42:51 | <Cale> | Our keyboards need more keys |
| 18:43:02 | × | ukari quits (~ukari@unaffiliated/ukari) (Remote host closed the connection) |
| 18:43:24 | → | wroathe joins (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) |
| 18:43:36 | <hyperisco> | one idea is to decouple the notion of overloading |
| 18:43:49 | → | ukari joins (~ukari@unaffiliated/ukari) |
| 18:44:29 | → | xerox_ joins (~xerox@unaffiliated/xerox) |
| 18:44:33 | <Cale> | Add a subclass of Num called Ring, with no additional operations, but more laws |
| 18:44:38 | <hyperisco> | basically what Num does now, at least the report version |
| 18:44:53 | × | mpereira quits (~mpereira@2a02:810d:f40:d96:b46b:1e98:8653:4550) (Remote host closed the connection) |
| 18:44:59 | <Cale> | and then things which truly care that they have a proper Ring can demand it |
| 18:45:47 | <phadej> | Ring is wrong for Natural |
| 18:46:15 | <phadej> | even without thinking about Double :) |
| 18:46:33 | <hyperisco> | a trouble being that Num defines a lot of syntax, more than say a semiring would want |
| 18:47:02 | <hyperisco> | I guess this is the Idris lawful/lawless duality all over again |
| 18:47:30 | <hyperisco> | one is just syntax, the other adds semantics |
| 18:47:56 | <hyperisco> | maybe just a different mechanism is warranted, than type classes |
| 18:48:09 | <hyperisco> | C++ has macros, by preprocessor or template |
| 18:48:15 | <hyperisco> | it isn't a shining example but it is more truthful |
| 18:48:24 | × | juuandyy quits (~juuandyy@90.166.144.65) (Ping timeout: 260 seconds) |
| 18:49:01 | <phadej> | I also don't know how much Ocaml people hate the difference between + and .+ |
| 18:49:39 | <phadej> | whether the dotted operators are driving people crazy and into Haskell |
| 18:49:52 | <hyperisco> | I suspect the best way to solve this is with the editor / code viewer |
| 18:49:53 | <[exa]> | is there a squiggly variant of + in utf8 that could mark the approximate + on doubles etc ? |
| 18:50:14 | <[exa]> | because this is really just ascii problem |
| 18:50:14 | <hyperisco> | but that upends probably the most entrenched aspect of programming |
| 18:51:06 | <hyperisco> | I already use compose sequences to type things like → |
| 18:51:08 | <ski> | ⍭ |
| 18:51:10 | <ski> | maybe ? |
| 18:51:31 | <[exa]> | looks too precise |
| 18:52:26 | <ski> | ⨤ |
| 18:52:32 | <hyperisco> | if the same symbol was used in two ways then all I'd ask is there be some subtle indication of overloading, be it by colour or an extra mark (especially for the colourblind) |
| 18:52:42 | <hyperisco> | and the editor affords a way to unmask the overload |
| 18:53:01 | <[exa]> | ski: that's a strong candidate! |
| 18:53:18 | <hyperisco> | so then we don't have to play the unicode game either |
| 18:53:19 | × | shad0w_ quits (~shad0w_@160.202.36.27) (Remote host closed the connection) |
| 18:53:56 | <ski> | (there's ⌜⨦⌝, too) |
| 18:54:04 | <hyperisco> | in other words, there is a difference of syntax representation in a way somewhat similar to the compose sequences I use |
| 18:54:23 | <hyperisco> | I have multiple ways to type → say, but they present the same |
| 18:55:06 | <hyperisco> | and all I'd want to know is that 1) → represents more than one sequence and 2) which sequence it represents, but I only need to know (2) by explicitly asking |
| 18:55:23 | → | orion joins (~orion@c-76-19-238-5.hsd1.nh.comcast.net) |
| 18:55:23 | × | orion quits (~orion@c-76-19-238-5.hsd1.nh.comcast.net) (Changing host) |
| 18:55:23 | → | orion joins (~orion@unaffiliated/orion) |
| 18:55:31 | <hyperisco> | so then we can have + and .+ and whatever, and these present both as + |
| 18:55:56 | <hyperisco> | plus some signal it is overloaded |
| 18:56:51 | <hyperisco> | and all this without having to go off the deep end of projectional editing |
| 18:57:40 | × | mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Remote host closed the connection) |
| 18:58:10 | → | kenran joins (~maier@b2b-37-24-119-190.unitymedia.biz) |
| 18:58:17 | → | mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) |
| 19:00:27 | → | sfvm joins (~sfvm@37.228.215.148) |
| 19:00:41 | → | adam_wespiser joins (~adam_wesp@209.6.42.110) |
| 19:00:45 | × | abhixec quits (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
| 19:01:18 | → | abhixec joins (~abhixec@c-67-169-141-95.hsd1.ca.comcast.net) |
| 19:01:20 | <sm[m]> | I don't suppose there's any easy way to tell GHCI to use the extensions configured for a particular module ? |
| 19:01:48 | adam_wespiser | is now known as adamwespiser |
| 19:02:33 | <adamwespiser> | On load, you should be able to load a specific module, if I recall correctly, and in that module can be your extensions |
| 19:02:55 | <geekosaur> | but that doesn't set them for interactive use |
| 19:02:57 | × | mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Ping timeout: 260 seconds) |
| 19:03:08 | <sm[m]> | right |
| 19:03:10 | × | kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 258 seconds) |
| 19:03:12 | × | Dolly quits (585fd1fd@ti0203q160-5312.bb.online.no) (Remote host closed the connection) |
| 19:03:18 | <geekosaur> | nor does having multiple modules loaded and switching between them |
| 19:03:31 | <sm[m]> | I'm always being thwarted by mismatches between the module and ghci |
| 19:03:33 | × | Lycurgus quits (~niemand@98.4.96.130) (Quit: Exeunt) |
| 19:04:11 | <geekosaur> | (and this is often a feature, consider ExtendedDefaultRules which you probably don't want turned off by loading a module) |
| 19:04:16 | <sm[m]> | I guess I can make some shorter aliases to turn them on/off |
| 19:05:32 | <ddellacosta> | kind of a nix question, but can anyone tell me (or point me at docs for) how to override a dependency in a nix Haskell project with a local version of that package which I've compiled myself? Basically I just want to install my copy of the library just for that Haskell project |
| 19:06:35 | <sm[m]> | on another note, if anyone here has experience with sdl2, I have questions. Eg, why does destroyWindow not get rid of the window when running in GHCI. And, why does kill -TERM not kill a sdl app, it must be kill -KILL |
| 19:08:35 | → | bennofs joins (~quassel@dslb-178-000-064-245.178.000.pools.vodafone-ip.de) |
| 19:09:04 | → | thir joins (~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) |
| 19:10:47 | × | shafox quits (~shafox@106.51.234.111) (Remote host closed the connection) |
| 19:12:34 | × | howdoi quits (uid224@gateway/web/irccloud.com/x-dtashatgyjqumlie) (Quit: Connection closed for inactivity) |
| 19:12:44 | × | bennofs_ quits (~quassel@dslb-188-106-250-199.188.106.pools.vodafone-ip.de) (Ping timeout: 272 seconds) |
| 19:13:04 | → | notzmv`` joins (~user@177.103.86.92) |
| 19:14:02 | × | thir quits (~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 19:15:24 | × | josh quits (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Remote host closed the connection) |
| 19:16:00 | → | josh joins (~josh@c-67-164-104-206.hsd1.ca.comcast.net) |
| 19:16:05 | × | notzmv` quits (~user@177.103.86.92) (Ping timeout: 240 seconds) |
| 19:17:41 | → | cosimone joins (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) |
| 19:18:44 | <koz_> | Is there a good way to generate a Text randomly which _is_ valid UTF-8, but _not_ valid Latin-1? |
| 19:19:24 | <geekosaur> | I don't think there's an invalid Latin-1 |
| 19:19:52 | <geekosaur> | unless you mean embedded control codes or similar, but that would also apply to UTF-8 |
| 19:19:55 | <koz_> | I think I'm being imprecise, sorry. I want to generate Text which contains at least one grapheme requiring a multi-byte encoding in UTF-8. |
| 19:20:05 | <koz_> | What's a good way to do this? |
| 19:20:16 | × | josh quits (~josh@c-67-164-104-206.hsd1.ca.comcast.net) (Ping timeout: 246 seconds) |
| 19:20:28 | <phadej> | arbitrary ++ [multibytechar] ++ arbitrary |
| 19:20:51 | <adamwespiser> | If you have a bytestring, I might use Data.Text.Encoding for that task |
| 19:20:53 | <geekosaur> | include at least one grapheme with a codepoint > 255 |
| 19:21:04 | <phadej> | geekosaur: >=128 |
| 19:21:16 | <phadej> | but >255 would work too |
| 19:21:24 | <geekosaur> | no, because 128..255 are valid Latin-1 |
| 19:21:36 | <phadej> | at least one grapheme requiring a multi-byte encoding in UTF-8. |
| 19:21:39 | <koz_> | phadej: Yeah, that's a good point. |
| 19:21:44 | <koz_> | Thanks! |
| 19:21:52 | <phadej> | codepoint 128 is encoded as two bytes |
| 19:22:04 | <phadej> | up to koz_ to refine the specification |
| 19:22:19 | <koz_> | phadej: The basic idea works well though. |
| 19:22:28 | <koz_> | Thanks for the suggestion. |
| 19:24:58 | hackage | stm-queue 0.1.2.0 - An implementation of a real-time concurrent queue https://hackage.haskell.org/package/stm-queue-0.1.2.0 (sgschlesinger) |
| 19:26:09 | → | bahamas joins (~lucian@unaffiliated/bahamas) |
| 19:30:27 | hackage | Win32 2.10.0.0 - A binding to Windows Win32 API. https://hackage.haskell.org/package/Win32-2.10.0.0 (TamarChristina) |
| 19:30:50 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 19:31:00 | → | niHiggim joins (~manjaro-u@2606-a000-4545-ba00-0000-0000-0000-0006.inf6.spectrum.com) |
| 19:32:06 | → | knupfer1 joins (~Thunderbi@200116b82c2770004d12026ebf4c4ad8.dip.versatel-1u1.de) |
| 19:32:08 | × | knupfer quits (~Thunderbi@i59F7FF48.versanet.de) (Quit: knupfer) |
| 19:32:08 | knupfer1 | is now known as knupfer |
| 19:33:32 | × | ryansmccoy quits (~ryansmcco@193.37.254.27) (Ping timeout: 256 seconds) |
| 19:34:17 | → | ryansmccoy joins (~ryansmcco@156.96.151.132) |
| 19:36:03 | × | mirrorbird quits (~psutcliff@2a00:801:44a:a00b:20c3:c64:eb15:73a2) (Ping timeout: 272 seconds) |
| 19:38:17 | × | justanotheruser quits (~justanoth@unaffiliated/justanotheruser) (Ping timeout: 260 seconds) |
| 19:42:31 | × | fendor quits (~fendor@77.119.128.171.wireless.dyn.drei.com) (Remote host closed the connection) |
| 19:49:19 | → | fendor joins (~fendor@77.119.128.171.wireless.dyn.drei.com) |
| 19:49:45 | × | solonarv quits (~solonarv@astrasbourg-653-1-186-165.w90-13.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
| 19:51:25 | × | niHiggim quits (~manjaro-u@2606-a000-4545-ba00-0000-0000-0000-0006.inf6.spectrum.com) (Quit: Konversation terminated!) |
| 19:56:23 | → | ahmr88 joins (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) |
| 19:57:26 | × | ukari quits (~ukari@unaffiliated/ukari) (Remote host closed the connection) |
| 20:00:52 | × | auri__ quits (~auri_@fsf/memeber/auri-) (Ping timeout: 246 seconds) |
| 20:02:27 | → | auri_ joins (~auri_@fsf/memeber/auri-) |
| 20:03:02 | × | tsrt^ quits (tsrt@ip98-184-89-2.mc.at.cox.net) () |
| 20:03:45 | × | shatriff quits (~vitaliish@176.52.219.10) (Remote host closed the connection) |
| 20:03:58 | → | shatriff joins (~vitaliish@176.52.219.10) |
| 20:04:17 | → | ntwhaaci^ joins (ntwhaaci@ip98-184-89-2.mc.at.cox.net) |
| 20:04:22 | × | shatriff quits (~vitaliish@176.52.219.10) (Remote host closed the connection) |
| 20:04:39 | → | shatriff joins (~vitaliish@176.52.219.10) |
| 20:05:05 | × | shatriff quits (~vitaliish@176.52.219.10) (Remote host closed the connection) |
| 20:05:07 | × | wroathe quits (~wroathe@c-73-24-27-54.hsd1.mn.comcast.net) (Quit: leaving) |
| 20:06:48 | → | jobor_ joins (~jobor@83.24.161.211.ipv4.supernova.orange.pl) |
| 20:07:02 | → | juuandyy joins (~juuandyy@90.166.144.65) |
| 20:08:44 | × | jobor_ quits (~jobor@83.24.161.211.ipv4.supernova.orange.pl) (Client Quit) |
| 20:09:09 | × | hekkaidekapus quits (~tchouri@gateway/tor-sasl/hekkaidekapus) (Remote host closed the connection) |
| 20:09:33 | → | johnyb joins (~johnyb@83.24.161.211.ipv4.supernova.orange.pl) |
| 20:09:51 | → | hekkaidekapus joins (~tchouri@gateway/tor-sasl/hekkaidekapus) |
| 20:09:53 | × | geekosaur quits (ae68c070@cpe-174-104-192-112.neo.res.rr.com) (Remote host closed the connection) |
| 20:11:38 | × | bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 272 seconds) |
| 20:14:21 | → | g-belmonte joins (~g-belmont@2804:14c:8786:9312:3638:eaf5:dc36:146d) |
| 20:16:49 | <kindaro> | Is there a nice library for logging messages in IO to standard output/error? |
| 20:17:18 | <kindaro> | Like a fancy `putStrLn`, yes. |
| 20:17:41 | <merijn> | @hackage monad-logger |
| 20:17:41 | <lambdabot> | https://hackage.haskell.org/package/monad-logger |
| 20:17:47 | <Uniaika> | co-log exists too |
| 20:17:47 | <merijn> | And a billion others :p |
| 20:17:50 | <[exa]> | logging? |
| 20:17:58 | <[exa]> | ^^ actual package name |
| 20:18:07 | × | johnyb quits (~johnyb@83.24.161.211.ipv4.supernova.orange.pl) (Quit: Leaving...) |
| 20:18:22 | <kindaro> | No, these are not in IO, they have their own transformer or something. |
| 20:18:37 | <merijn> | What I like about monad-logger is that you can start out lazy just using LoggingT and then you can easily later replace it and implement your own stuff |
| 20:18:40 | <merijn> | eh |
| 20:18:48 | <merijn> | Well, then "hPutStrLn"? :p |
| 20:19:13 | <[exa]> | kindaro: https://hackage.haskell.org/package/logging even says "in IO" |
| 20:19:14 | <ddellacosta> | kindaro: logging that [exa] mentioned is just in IO I thought |
| 20:19:22 | <ddellacosta> | lol jinx |
| 20:19:30 | <[exa]> | :] |
| 20:19:30 | <kindaro> | I see `logging` has `log :: Text -> IO ()` — that I like. |
| 20:20:46 | → | mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) |
| 20:22:40 | → | johnyb joins (5318a1d3@83.24.161.211.ipv4.supernova.orange.pl) |
| 20:24:29 | × | ggole quits (~ggole@2001:8003:8119:7200:a81f:ad25:a0f4:9303) (Quit: Leaving) |
| 20:25:18 | <kindaro> | By the way, I see `logging` is using the idiom of `logLevel = unsafePerformIO $ newIORef LevelDebug` for initializing an implicit global state. I know that `random` recently removed a similar feature. Has there been research that shows definitely that such use of `unsafePerformIO` is either safe or unsafe? |
| 20:25:27 | × | mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Ping timeout: 272 seconds) |
| 20:25:48 | × | borne quits (~fritjof@200116b86490460022497ba62715fb72.dip.versatel-1u1.de) (Ping timeout: 260 seconds) |
| 20:26:59 | <kindaro> | Particularly, see this explanation: https://github.com/haskell/random/issues/57#issuecomment-649473745 |
| 20:27:20 | <kindaro> | I am divided on this technique since then — should I like or dislike it? |
| 20:27:25 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 20:28:12 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 20:29:12 | <[exa]> | kindaro: unsafePerformIO is often quite practical, like for tracing |
| 20:29:45 | → | borne joins (~fritjof@200116b86490460022497ba62715fb72.dip.versatel-1u1.de) |
| 20:29:47 | <Cale> | I dislike it just because it means that only one usage is possible. It's fine to use mutable stuff, but it would make more sense to have a little bundle of mutable state containing a handle for where the log message was going, together with the current log level perhaps |
| 20:30:06 | <kindaro> | Not sure I follow. |
| 20:30:21 | <Cale> | I guess the assumption here is that the log is only going to stderr |
| 20:30:26 | × | polyphem quits (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) (Read error: Connection reset by peer) |
| 20:30:37 | <Cale> | But say multiple libraries decide to use this log library |
| 20:30:53 | <Cale> | Then they might interfere with each other when it comes to setting their log level |
| 20:30:56 | johnyb | is now known as JonathanB |
| 20:31:10 | JonathanB | is now known as JonatanB |
| 20:31:18 | <Cale> | One library can't have a different log level than the other, even if it might appear that way, because some initialisation function takes a log level |
| 20:31:22 | <Cale> | (and sets it) |
| 20:31:48 | <Cale> | Just because they accidentally both used logging |
| 20:32:08 | <c_wraith> | I'd probably argue libraries should never set the log level anyway, but that's beside the point a bit. With the point being that there are ways to design it that don't involve unsafePerformIO |
| 20:32:58 | → | polyphem joins (~p0lyph3m@2a02:810d:640:776c:76d7:55f6:f85b:c889) |
| 20:33:12 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
| 20:33:21 | <Cale> | Well, they might set the log level according to what the user of the library requests |
| 20:33:41 | <Cale> | But yeah, I suppose if you're using 'logging', you don't really do that |
| 20:34:06 | <Cale> | because it doesn't make sense, as you can't really have a distinct logging level from any other library which is using it |
| 20:34:09 | JonatanB | is now known as jonatanb |
| 20:36:42 | <jonatanb> | \nick jobo |
| 20:37:19 | × | jonatanb quits (5318a1d3@83.24.161.211.ipv4.supernova.orange.pl) (Remote host closed the connection) |
| 20:37:33 | → | jonatanb` joins (~user@83.24.161.211.ipv4.supernova.orange.pl) |
| 20:38:13 | × | sense quits (uid464711@gateway/web/irccloud.com/x-rdruibjtxeskwext) (Quit: Connection closed for inactivity) |
| 20:38:23 | × | jonatanb` quits (~user@83.24.161.211.ipv4.supernova.orange.pl) (Client Quit) |
| 20:38:57 | → | jonatanb joins (~user@83.24.161.211.ipv4.supernova.orange.pl) |
| 20:41:20 | → | jonatanb27 joins (5318a1d3@83.24.161.211.ipv4.supernova.orange.pl) |
| 20:41:34 | × | heatsink quits (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 20:42:20 | → | heatsink joins (~heatsink@107-136-5-69.lightspeed.sntcca.sbcglobal.net) |
| 20:42:32 | × | jonatanb27 quits (5318a1d3@83.24.161.211.ipv4.supernova.orange.pl) (Remote host closed the connection) |
| 20:43:05 | → | bahamas joins (~lucian@188.24.181.166) |
| 20:43:05 | × | bahamas quits (~lucian@188.24.181.166) (Changing host) |
| 20:43:05 | → | bahamas joins (~lucian@unaffiliated/bahamas) |
| 20:44:58 | × | coot quits (~coot@37.30.49.42.nat.umts.dynamic.t-mobile.pl) (Quit: coot) |
| 20:47:37 | → | mirk0_ joins (~mirko@unaffiliated/-mirko-/x-2946915) |
| 20:47:38 | × | lep-delete quits (~lep@94.31.82.44) (Read error: Connection reset by peer) |
| 20:47:55 | → | lep-delete joins (~lep@94.31.82.44) |
| 20:48:05 | × | bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 260 seconds) |
| 20:48:46 | × | jonatanb quits (~user@83.24.161.211.ipv4.supernova.orange.pl) (Quit: ERC (IRC client for Emacs 26.3)) |
| 20:49:08 | × | tabemann quits (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Ping timeout: 260 seconds) |
| 20:49:21 | → | jonatanb joins (~jonatanb@83.24.161.211.ipv4.supernova.orange.pl) |
| 20:49:22 | → | justanotheruser joins (~justanoth@unaffiliated/justanotheruser) |
| 20:51:47 | × | danso quits (~dan@107-190-41-58.cpe.teksavvy.com) (Read error: Connection reset by peer) |
| 20:51:47 | × | dansho quits (~dansho@ip68-108-167-185.lv.lv.cox.net) (Ping timeout: 240 seconds) |
| 20:51:58 | hackage | Rasterific 0.7.5.3 - A pure haskell drawing engine. https://hackage.haskell.org/package/Rasterific-0.7.5.3 (VincentBerthoux) |
| 20:52:56 | → | danso joins (~dan@107-190-41-58.cpe.teksavvy.com) |
| 20:52:59 | × | aidecoe quits (~aidecoe@unaffiliated/aidecoe) (Ping timeout: 240 seconds) |
| 20:53:59 | × | lagothrix quits (~lagothrix@unaffiliated/lagothrix) (Read error: Connection reset by peer) |
| 20:54:49 | → | lagothrix joins (~lagothrix@unaffiliated/lagothrix) |
| 20:59:05 | → | kenran joins (~maier@b2b-37-24-119-190.unitymedia.biz) |
| 20:59:12 | → | aidecoe joins (~aidecoe@unaffiliated/aidecoe) |
| 20:59:45 | × | juuandyy quits (~juuandyy@90.166.144.65) (Ping timeout: 260 seconds) |
| 21:00:02 | × | laen_ quits (~laen_@s91904426.blix.com) () |
| 21:00:13 | × | ryansmccoy quits (~ryansmcco@156.96.151.132) (Ping timeout: 260 seconds) |
| 21:00:37 | → | ryansmccoy joins (~ryansmcco@156.96.151.132) |
| 21:01:03 | × | knupfer quits (~Thunderbi@200116b82c2770004d12026ebf4c4ad8.dip.versatel-1u1.de) (Quit: knupfer) |
| 21:01:25 | → | knupfer joins (~Thunderbi@200116b82c27700031ead27836249122.dip.versatel-1u1.de) |
| 21:01:26 | × | knupfer quits (~Thunderbi@200116b82c27700031ead27836249122.dip.versatel-1u1.de) (Client Quit) |
| 21:01:42 | <lechner> | sm[m]: not sure what you are doing with sdl2, but maybe this helps https://discourse.libsdl.org/t/mac-os-x-avoid-the-sdl-to-catch-sigterm-and-sigint-signals/27357 |
| 21:01:45 | → | knupfer joins (~Thunderbi@200116b82c277000ad37883ab022eaf9.dip.versatel-1u1.de) |
| 21:01:56 | → | knupfer1 joins (~Thunderbi@200116b82c277000b09f08f0bf52a637.dip.versatel-1u1.de) |
| 21:01:56 | × | knupfer1 quits (~Thunderbi@200116b82c277000b09f08f0bf52a637.dip.versatel-1u1.de) (Read error: Connection reset by peer) |
| 21:02:03 | × | knupfer quits (~Thunderbi@200116b82c277000ad37883ab022eaf9.dip.versatel-1u1.de) (Read error: Connection reset by peer) |
| 21:02:11 | → | knupfer joins (~Thunderbi@200116b82c277000646991969a0bc875.dip.versatel-1u1.de) |
| 21:02:15 | × | knupfer quits (~Thunderbi@200116b82c277000646991969a0bc875.dip.versatel-1u1.de) (Client Quit) |
| 21:02:34 | × | kindaro quits (5f6e6241@h95-110-98-65.dyn.bashtel.ru) (Ping timeout: 245 seconds) |
| 21:02:37 | × | jonatanb quits (~jonatanb@83.24.161.211.ipv4.supernova.orange.pl) (Quit: Leaving...) |
| 21:02:45 | → | jonatanb joins (~jonatanb@83.24.161.211.ipv4.supernova.orange.pl) |
| 21:04:18 | × | kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 258 seconds) |
| 21:04:39 | <orion> | Hi. Does anyone know how to make this typecheck?: https://gist.github.com/centromere/b1f795418d00dff28e2cfcaefd727751 |
| 21:05:00 | <orion> | (The package is acid-state) |
| 21:05:34 | <orion> | I realize that the "event" expressed by the type signature is general, whereas I am trying to use it with a more specific type, leading to the error. |
| 21:05:45 | <orion> | I am not sure how to approach the issue though. |
| 21:05:53 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 21:10:35 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 240 seconds) |
| 21:11:43 | → | Volt_ joins (~Volt_@c-73-145-164-70.hsd1.mi.comcast.net) |
| 21:14:14 | × | oxide quits (~lambda@unaffiliated/mclaren) (Ping timeout: 260 seconds) |
| 21:15:11 | → | bahamas joins (~lucian@unaffiliated/bahamas) |
| 21:16:14 | × | Tuplanolla quits (~Tuplanoll@91-159-68-239.elisa-laajakaista.fi) (Quit: Leaving.) |
| 21:16:27 | <tomsmeding> | orion: EventState is a type family; what does 'EventState AppState' resolve to? |
| 21:16:57 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 258 seconds) |
| 21:16:58 | hackage | termbox 0.3.0 - termbox bindings https://hackage.haskell.org/package/termbox-0.3.0 (mitchellwrosen) |
| 21:18:13 | × | AlterEgo- quits (~ladew@124-198-158-163.dynamic.caiway.nl) (Read error: Connection reset by peer) |
| 21:19:37 | × | bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 246 seconds) |
| 21:20:55 | → | romtam joins (~romtam@s91904426.blix.com) |
| 21:21:53 | × | pingiun quits (~pingiun@j63019.upc-j.chello.nl) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 21:23:39 | × | jonatanb quits (~jonatanb@83.24.161.211.ipv4.supernova.orange.pl) (Quit: Leaving...) |
| 21:23:41 | <sm[m]> | lechner: that looks highly relevant, thanks! |
| 21:24:59 | <sm[m]> | I'm wanting to kill & restart my sdl app on rebuild with entr, which sends SIGTERM |
| 21:25:37 | × | ahmr88 quits (~ahmr88@cpc85006-haye22-2-0-cust131.17-4.cable.virginm.net) (Remote host closed the connection) |
| 21:26:43 | <sm[m]> | though if I could destroy the window from ghci, I would rather run it with ghcid |
| 21:38:04 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 21:38:05 | → | opticblast joins (~june@075-128-229-153.res.spectrum.com) |
| 21:41:10 | → | thir joins (~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) |
| 21:41:10 | × | fendor quits (~fendor@77.119.128.171.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
| 21:52:56 | × | lortabac quits (~lortabac@51.158.65.124) (Ping timeout: 256 seconds) |
| 21:53:17 | → | bahamas joins (~lucian@unaffiliated/bahamas) |
| 21:53:53 | × | hyperisco quits (~hyperisco@d192-186-117-226.static.comm.cgocable.net) (Ping timeout: 260 seconds) |
| 21:54:34 | notzmv`` | is now known as notzvm |
| 21:54:36 | notzvm | is now known as notzmv |
| 21:54:45 | × | notzmv quits (~user@177.103.86.92) (Changing host) |
| 21:54:45 | → | notzmv joins (~user@unaffiliated/zmv) |
| 21:55:30 | → | lortabac joins (~lortabac@51.158.65.124) |
| 21:55:40 | → | isovector1 joins (~isovector@node-1w7jr9squrfoy3fci95ksrhpu.ipv6.telus.net) |
| 21:56:11 | <hyiltiz> | What's the design choice of not sugaring `$ do` into something else (like $$ or whatev) in HSpec? I think it is because both $ and do is basic stuff and simply composing them as a basic HSpec operation is also nice, besides it is not too long to type |
| 21:56:34 | <hyiltiz> | Also, sometimes the do is not needed |
| 21:57:07 | <hyiltiz> | So sugaring it to $$ could lead to confusion |
| 21:57:23 | <edwardk> | hyiltiz: ? do is builtin syntax |
| 21:57:38 | <edwardk> | you can use BlockArguments to drop the $ though |
| 21:58:02 | × | bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 256 seconds) |
| 21:58:23 | <hyiltiz> | I c it is builtin syntax. I am just wondering why not wrap the EDSL into something less verbose |
| 21:58:36 | <ski> | (`$' is a library operation, though) |
| 21:59:06 | → | rprije joins (~rprije@27.143.220.203.dial.dynamic.acc01-myal-dub.comindico.com.au) |
| 21:59:11 | <hyiltiz> | oh wait that $ is overloaded? I thought it was the one from haskell? |
| 21:59:20 | × | adamwespiser quits (~adam_wesp@209.6.42.110) (Remote host closed the connection) |
| 22:00:07 | <edwardk> | not sure how you get lighter weight than do, it acts like parentheses you don't have to close |
| 22:00:27 | <edwardk> | given HSpec doesn't hide prelude's $, it is just the one from Prelude |
| 22:01:07 | <edwardk> | anyways do takes exactly as many characters as ()'s would and self closes when you outdent |
| 22:01:37 | <edwardk> | but using BlockArguments does clean up the 'noise' in an HSpec file |
| 22:02:26 | <edwardk> | BlockArguments https://www.irccloud.com/pastebin/R8v4pxNs/BlockSpec.hs |
| 22:02:47 | <edwardk> | you can swap each of those do's for a $ except the one on the line with describe |
| 22:03:23 | <edwardk> | BlockArguments lets you kill the $ before the lambda for property there as well |
| 22:03:36 | <edwardk> | > 2 * do 3 + 4 |
| 22:03:38 | <lambdabot> | 14 |
| 22:04:04 | <opticblast> | > :t do () |
| 22:04:07 | <lambdabot> | <hint>:1:1: error: <hint>:1:1: error: parse error on input ‘:’ |
| 22:04:08 | <ski> | hyiltiz : no, it's the usual `$' in the library |
| 22:04:23 | <opticblast> | @type do () |
| 22:04:25 | <lambdabot> | () |
| 22:04:29 | <opticblast> | well, that's confusing |
| 22:04:35 | <opticblast> | I thought it would be something like Identity () |
| 22:05:07 | <edwardk> | do doesn't change the types, it just desugars into >>= uses when there is ; -- and maybe does some applicative stuff if applicative do is on |
| 22:05:24 | <edwardk> | when there is only one expression there you want it passed through |
| 22:05:25 | → | adamwespiser joins (~adam_wesp@209.6.42.110) |
| 22:05:33 | <ski> | a `do'-expression has the same type as its last command (which in this case was `()') |
| 22:05:40 | <edwardk> | otherwise in your model do () and do (pure ()) -- would be ambiguous what to do |
| 22:05:53 | <edwardk> | or 'do x' where x happens to be pure y |
| 22:06:00 | <edwardk> | so it _can't_ do the thing you want opticblast |
| 22:06:12 | <opticblast> | ah, makes sense |
| 22:06:41 | <edwardk> | now, back in the day it used to be that do would guide inference to figure out that the type there was the application of some m to some a, but we got them to stop doing that a looong time ago |
| 22:07:14 | × | drdo quits (~drdo@overlord0.drdo.eu) (Remote host closed the connection) |
| 22:08:21 | → | drdo joins (~drdo@overlord0.drdo.eu) |
| 22:09:05 | → | obihann joins (~jhann@156.34.160.69) |
| 22:10:13 | × | adamwespiser quits (~adam_wesp@209.6.42.110) (Ping timeout: 260 seconds) |
| 22:12:08 | <hyiltiz> | edwardk: thx! BlockArguments seems to really clean up the verbose notation |
| 22:12:23 | <hyiltiz> | and I am sure it works not just work HSpec as well |
| 22:12:33 | <hyiltiz> | Reminds me of Ruby's blocks |
| 22:13:14 | × | sagax quits (~sagax_nb@213.138.71.146) (Ping timeout: 272 seconds) |
| 22:13:16 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 256 seconds) |
| 22:14:45 | <edwardk> | i use it more and more these days mostly because when some library messily needs to take a argument that will be very long right before some other empty list argument or something i can break things up by lines and then just use the do to self delimit _that_ argument, without having to figure out how to put the closing paren, or get all lispy with closing parens dangling on the far right of my screen |
| 22:15:27 | hackage | termbox-banana 0.3.0 - reactive-banana + termbox https://hackage.haskell.org/package/termbox-banana-0.3.0 (mitchellwrosen) |
| 22:15:44 | <yushyin> | 6 |
| 22:15:50 | <yushyin> | ups, sorry |
| 22:17:06 | → | tabemann joins (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net) |
| 22:17:55 | <edwardk> | it amazes me that nobody has written an ncurses variant that knows how many lines worth of text it has scrolled in and gives you control over just that portion of the screen space, so it doesn't have to flip to the alt screen and works well for repls. |
| 22:18:04 | GyroW_ | is now known as GyroW |
| 22:18:05 | × | GyroW quits (~GyroW@ptr-48ujrfb8c7gfd2lu92q.18120a2.ip6.access.telenet.be) (Changing host) |
| 22:18:05 | → | GyroW joins (~GyroW@unaffiliated/gyrow) |
| 22:18:31 | <edwardk> | everything that works like this is some bespoke readline like monstrosity |
| 22:19:52 | × | thir quits (~thir@p200300f27f0fc600ed2222922a5678d5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 22:21:40 | → | mariatsji joins (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) |
| 22:23:12 | → | DataComputist joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) |
| 22:27:38 | × | aenesidemus quits (~aenesidem@c-73-53-247-25.hsd1.fl.comcast.net) (Quit: Leaving) |
| 22:29:56 | <dolio> | I think block arguments are a good idea (mostly), but characterising two extra characters as 'verbose' seems a little silly. |
| 22:30:38 | → | bahamas joins (~lucian@unaffiliated/bahamas) |
| 22:33:08 | × | isovector1 quits (~isovector@node-1w7jr9squrfoy3fci95ksrhpu.ipv6.telus.net) (Remote host closed the connection) |
| 22:33:16 | → | isovector1 joins (~isovector@d207-81-8-13.bchsia.telus.net) |
| 22:33:23 | <edwardk> | i mean i grumble about the extra : in :: all the time |
| 22:33:38 | → | ph88 joins (~ph88@2a02:8109:9e40:2704:b503:e755:2c19:955c) |
| 22:33:40 | <edwardk> | so who am i to begrudge someone a complaint about twice as many characters |
| 22:34:46 | <yushyin> | unfortunate hysterical reasons with the : vs. :: matter |
| 22:35:21 | × | bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 265 seconds) |
| 22:35:44 | <Rembane> | We need a Haskell dialect where the : and :: are swapped. |
| 22:35:55 | <koz_> | Rembane: So, Idris? :P |
| 22:36:48 | <edwardk> | then the laziness gets ya |
| 22:39:57 | → | adamwespiser joins (~adam_wesp@209.6.42.110) |
| 22:40:06 | <Rembane> | koz_: Yeah, why not? :) |
| 22:40:21 | <dolio> | I don't think the extra typing hurts as much as being different from the settled notation. |
| 22:40:29 | <yushyin> | Rembane: https://github.com/ghc-proposals/ghc-proposals/pull/118 |
| 22:41:07 | ski | . o O ( ⌜∷⌝ ) |
| 22:41:20 | <Axman6> | Rembane: DAML? |
| 22:42:53 | × | aidecoe quits (~aidecoe@unaffiliated/aidecoe) (Ping timeout: 272 seconds) |
| 22:43:27 | × | mariatsji quits (~mariatsji@2a01:79d:53aa:c66c:342b:5324:f59b:5b0e) (Ping timeout: 260 seconds) |
| 22:43:48 | → | pingiun joins (~pingiun@j63019.upc-j.chello.nl) |
| 22:43:50 | <Rembane> | yushyin: Wow. Nice. |
| 22:44:08 | <Rembane> | Axman6: Dots Are More LOL? |
| 22:46:11 | → | falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
| 22:47:12 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 22:47:43 | <koz_> | Rembane: Dots Are More Leet. |
| 22:47:48 | × | isovector1 quits (~isovector@d207-81-8-13.bchsia.telus.net) (Ping timeout: 258 seconds) |
| 22:47:56 | <dolio> | Regardless, it's never going to be worth changing in its own right. |
| 22:48:46 | <Rembane> | koz_: Of course! I'm way too tired to get that on the first try. |
| 22:53:01 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 272 seconds) |
| 22:53:09 | × | DataComputist quits (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) (Ping timeout: 260 seconds) |
| 22:53:50 | → | DataComputist joins (~lumeng@static-50-43-26-251.bvtn.or.frontiernet.net) |
| 22:54:32 | × | falafel quits (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Ping timeout: 260 seconds) |
| 22:54:39 | <Axman6> | @google DAML |
| 22:54:40 | <lambdabot> | No Result Found. |
| 22:54:45 | <Axman6> | uwot |
| 22:55:06 | × | __monty__ quits (~toonn@unaffiliated/toonn) (Quit: leaving) |
| 22:55:10 | <MarcelineVQ> | don't all mutts leak? |
| 22:55:55 | <Axman6> | https://daml.com - a dialect of Haskell for smart contracts, its compiler GHC with some desugaring on the front end (including : <-> ::, ples a lot of other nice extensions which make using the language day to day really nice) |
| 22:56:07 | → | NaN joins (43aa4b1c@c-67-170-75-28.hsd1.wa.comcast.net) |
| 22:56:31 | NaN | is now known as Guest39453 |
| 22:56:52 | <koz_> | MarcelineVQ: Don't All Marsupials Lie? |
| 22:57:17 | <MarcelineVQ> | Driven Antelopes Must Leap |
| 22:57:30 | <Guest39453> | uh? |
| 22:57:42 | <Axman6> | this is the secret code, you are now authenticated |
| 22:58:18 | → | falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
| 22:58:48 | → | gmt joins (~gmt@pool-71-105-108-44.nycmny.fios.verizon.net) |
| 22:59:11 | <Guest39453> | @help |
| 22:59:12 | <lambdabot> | help <command>. Ask for help for <command>. Try 'list' for all commands |
| 22:59:26 | <Axman6> | plus* |
| 22:59:29 | ski | looks at Guest39453 |
| 23:00:00 | → | kenran joins (~maier@b2b-37-24-119-190.unitymedia.biz) |
| 23:00:01 | <Guest39453> | just seeing if lambdabot is real |
| 23:00:49 | <koz_> | Lambdabot is indeed a figment of your imagination. |
| 23:00:53 | <Axman6> | are bits real? |
| 23:00:56 | <MarcelineVQ> | how can lambdabot be real if our toes aren't real |
| 23:01:11 | → | howdoi joins (uid224@gateway/web/irccloud.com/x-jznybxwchugeubau) |
| 23:01:29 | → | cosimone_ joins (~cosimone@5.170.241.4) |
| 23:03:06 | <Axman6> | deep |
| 23:03:17 | <Axman6> | but not like learning, like the ocean |
| 23:04:28 | × | cosimone quits (~cosimone@2001:b07:ae5:db26:b248:7aff:feea:34b6) (Ping timeout: 260 seconds) |
| 23:05:17 | × | kenran quits (~maier@b2b-37-24-119-190.unitymedia.biz) (Ping timeout: 260 seconds) |
| 23:06:15 | <orion> | tomsmeding: Is a type familiy the same as a type synonym?: https://github.com/acid-state/acid-state/blob/bf1fa2466e749f91d2e3152ced15331f062e8d10/src/Data/Acid/Common.hs#L54 |
| 23:06:58 | <Axman6> | no |
| 23:07:16 | cosimone_ | is now known as cosimone |
| 23:07:42 | × | MorrowM quits (~max@bzq-110-168-31-106.red.bezeqint.net) (Ping timeout: 272 seconds) |
| 23:09:30 | → | bahamas joins (~lucian@188.24.181.166) |
| 23:09:30 | × | bahamas quits (~lucian@188.24.181.166) (Changing host) |
| 23:09:30 | → | bahamas joins (~lucian@unaffiliated/bahamas) |
| 23:10:52 | × | cyphase quits (~cyphase@unaffiliated/cyphase) (Ping timeout: 272 seconds) |
| 23:12:56 | → | machinedgod joins (~machinedg@d67-193-126-196.home3.cgocable.net) |
| 23:13:03 | → | mitchellsalad joins (uid40617@gateway/web/irccloud.com/x-ahcdpvrnkonimwkz) |
| 23:14:01 | → | aidecoe joins (~aidecoe@unaffiliated/aidecoe) |
| 23:14:15 | × | bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 258 seconds) |
| 23:17:50 | <orion> | Oh, tomsmeding was talking about MethodState. |
| 23:19:01 | → | merijn joins (~merijn@83-160-49-249.ip.xs4all.nl) |
| 23:19:35 | × | Jeanne-Kamikaze quits (~Jeanne-Ka@104.200.129.62) (Quit: Leaving) |
| 23:20:29 | × | Guest39453 quits (43aa4b1c@c-67-170-75-28.hsd1.wa.comcast.net) (Remote host closed the connection) |
| 23:20:58 | → | cyphase joins (~cyphase@unaffiliated/cyphase) |
| 23:28:29 | × | ph88 quits (~ph88@2a02:8109:9e40:2704:b503:e755:2c19:955c) (Ping timeout: 272 seconds) |
| 23:30:14 | <orion> | tomsmeding: type instance MethodState UpdateNow = AppState |
| 23:34:51 | → | sepi joins (49dc4892@c-73-220-72-146.hsd1.ca.comcast.net) |
| 23:36:12 | × | pera quits (~pera@unaffiliated/pera) (Ping timeout: 272 seconds) |
| 23:42:14 | × | sepi quits (49dc4892@c-73-220-72-146.hsd1.ca.comcast.net) (Remote host closed the connection) |
| 23:45:21 | × | falafel quits (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Remote host closed the connection) |
| 23:46:45 | → | falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
| 23:49:15 | × | opticblast quits (~june@075-128-229-153.res.spectrum.com) (Quit: leaving) |
| 23:49:21 | → | jedws joins (~jedws@121.209.139.222) |
| 23:49:37 | <orion> | tomsmeding: I got it! All I had to do was change the type signature to this: update :: (UpdateEvent event, MethodState event ~ AppState, MonadIO m, MonadTime m) |
| 23:49:39 | → | bahamas joins (~lucian@unaffiliated/bahamas) |
| 23:50:07 | <orion> | Thank you for your assistance. |
| 23:52:43 | → | MorrowM joins (~max@bzq-110-168-31-106.red.bezeqint.net) |
| 23:53:10 | × | merijn quits (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
| 23:53:20 | × | falafel quits (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) (Remote host closed the connection) |
| 23:53:57 | → | falafel joins (~falafel@2605:e000:1527:d491:f090:20fe:cddf:2a1a) |
| 23:54:34 | × | bahamas quits (~lucian@unaffiliated/bahamas) (Ping timeout: 272 seconds) |
| 23:57:51 | → | cipherchess joins (~oned4@151.51.54.223) |
| 23:58:07 | → | nbloomf joins (~nbloomf@2600:1700:83e0:1f40:10e:bca5:1dcc:68c6) |
| 23:58:14 | → | polyrain joins (~polyrain@2001:8003:e501:6901:3846:7fa4:c749:eb08) |
All times are in UTC on 2020-09-20.