Logs: liberachat/#haskell
| 2026-03-31 06:54:49 | × | foul_owl quits (~kerry@94.156.149.92) (Read error: Connection reset by peer) |
| 2026-03-31 06:57:22 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 2026-03-31 07:00:00 | × | marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli) |
| 2026-03-31 07:03:42 | → | craunts795335385 joins (~craunts@152.32.99.2) |
| 2026-03-31 07:07:30 | → | marinelli joins (~weechat@gateway/tor-sasl/marinelli) |
| 2026-03-31 07:08:17 | → | merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl) |
| 2026-03-31 07:08:34 | × | Angelz quits (Angelz@Angelz.oddprotocol.org) (Changing host) |
| 2026-03-31 07:08:34 | → | Angelz joins (Angelz@user/angelz) |
| 2026-03-31 07:09:18 | <gentauro> | CTRL + F -> "data Transact a -- opaque; cannot be run directly" how does this work with `record :: Transaction -> Transact ()`? Can you even instantiate an `opaque` type? Or do you just use `undefined`? |
| 2026-03-31 07:10:20 | <gentauro> | oh, I see to get it. Nevermind :) |
| 2026-03-31 07:11:55 | → | foul_owl joins (~kerry@94.156.149.94) |
| 2026-03-31 07:12:41 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 265 seconds) |
| 2026-03-31 07:13:15 | → | qqq joins (~qqq@185.54.20.216) |
| 2026-03-31 07:14:50 | × | merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 2026-03-31 07:15:57 | <gentauro> | nah, I don't get it xD |
| 2026-03-31 07:27:37 | <mauke> | Transact is like IO |
| 2026-03-31 07:27:41 | <mauke> | you can't look "inside" |
| 2026-03-31 07:30:22 | → | danza joins (~danza@user/danza) |
| 2026-03-31 07:32:41 | <Leary> | gentauro: 'Opaque' just means the constructors are hidden. `record` and `emit` (provided in their place) are written with access to those constructors. |
| 2026-03-31 07:33:25 | <gentauro> | mauke: -> https://wiki.haskell.org/IO_inside#The_GHC_implementation |
| 2026-03-31 07:33:33 | <Leary> | The actual data declaration might look like, e.g. `data Transact a = Pure a | Record Transaction (Transact a) | Emit Event (Transact a)`. |
| 2026-03-31 07:33:44 | <gentauro> | `IO` still has something on the right side … |
| 2026-03-31 07:33:53 | <mauke> | well, duh |
| 2026-03-31 07:34:19 | <mauke> | the point is, it's an abstract type as far as users of the library are concerned |
| 2026-03-31 07:34:19 | <gentauro> | while their `opaque` type doesn't. So you will never be able to instantiate it |
| 2026-03-31 07:34:38 | × | qqq quits (~qqq@185.54.20.216) (Ping timeout: 252 seconds) |
| 2026-03-31 07:34:38 | <gentauro> | Leary: thx |
| 2026-03-31 07:37:13 | <mauke> | gentauro: related: https://ghc.gitlab.haskell.org/ghc/doc/users_guide/separate_compilation.html#index-19:~:text=it%20can%20be%20given%20abstractly,-%2C%20by |
| 2026-03-31 07:37:53 | <mauke> | as in "this is an interface specification, not actual .hs source code" |
| 2026-03-31 07:42:56 | <gentauro> | mauke: now that I didn't know :o |
| 2026-03-31 07:46:15 | → | xff0x joins (~xff0x@175.177.157.211) |
| 2026-03-31 07:47:38 | → | qqq joins (~qqq@185.54.20.216) |
| 2026-03-31 07:47:53 | → | mistivia joins (~mistivia@user/mistivia) |
| 2026-03-31 07:49:31 | × | puke quits (~puke@user/puke) (Ping timeout: 264 seconds) |
| 2026-03-31 07:51:10 | <gentauro> | mauke: do you know if Haskell has the .ml/.mli like OCaml? Where you can separate definition from implementation? I kind of like that separation tbh |
| 2026-03-31 07:51:41 | tomsmeding_ | is now known as tomsmeding |
| 2026-03-31 07:51:56 | × | xff0x quits (~xff0x@175.177.157.211) (Ping timeout: 256 seconds) |
| 2026-03-31 07:54:43 | <tomsmeding> | gentauro: no, there's no .mli; but for curiosity, there are two kinds of files that both kind of look like an .mli: backpack signatures (https://cabal.readthedocs.io/en/stable/how-to-use-backpack.html) and hs-boot files (https://downloads.haskell.org/ghc/latest/docs/users_guide/separate_compilation.html#mutually-recursive-modules-and-hs-boot-files) |
| 2026-03-31 07:55:31 | <tomsmeding> | backpack signatures are rare because use of backpack in general is rare; hs-boot files are rare because generally people try to avoid module cycles |
| 2026-03-31 07:55:34 | → | oskarw joins (~user@user/oskarw) |
| 2026-03-31 07:57:31 | × | marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Remote host closed the connection) |
| 2026-03-31 07:57:50 | → | marinelli joins (~weechat@gateway/tor-sasl/marinelli) |
| 2026-03-31 08:01:27 | → | acidjnk_new3 joins (~acidjnk@p200300d6e700e586cf86a3ab51f9bf20.dip0.t-ipconnect.de) |
| 2026-03-31 08:06:48 | × | mistivia quits (~mistivia@user/mistivia) (Remote host closed the connection) |
| 2026-03-31 08:06:57 | <gentauro> | tomsmeding: got it |
| 2026-03-31 08:07:02 | → | mistivia joins (~mistivia@user/mistivia) |
| 2026-03-31 08:08:12 | <gentauro> | tomsmeding: if you place `Internal` modules in `other-modules:` (cabal file) for your lib, can they be reached by consumers? |
| 2026-03-31 08:08:34 | <sclv> | no |
| 2026-03-31 08:08:44 | <gentauro> | sclv: nice |
| 2026-03-31 08:09:03 | × | emmanuelux quits (~em@user/emmanuelux) (Quit: bye) |
| 2026-03-31 08:10:06 | → | mistiv1a joins (~mistivia@user/mistivia) |
| 2026-03-31 08:10:11 | → | merijn joins (~merijn@77.242.116.146) |
| 2026-03-31 08:12:18 | × | mistiv1a quits (~mistivia@user/mistivia) (Remote host closed the connection) |
| 2026-03-31 08:12:54 | × | mistivia quits (~mistivia@user/mistivia) (Ping timeout: 256 seconds) |
| 2026-03-31 08:22:47 | → | chele joins (~chele@user/chele) |
| 2026-03-31 08:26:16 | <tomsmeding> | gentauro: other-modules in general are hidden to consumers, not just those named `Internal` |
| 2026-03-31 08:28:22 | → | jreicher joins (~joelr@user/jreicher) |
| 2026-03-31 08:42:08 | → | mistiv1a joins (~mistivia@user/mistivia) |
| 2026-03-31 08:50:05 | <gentauro> | tomsmeding: is it correct to assume that this is a "cabal" thing? I recall using `stack` and there were no way to enforce hidden modules? (I might be wrong) |
| 2026-03-31 08:50:22 | gentauro | but if I'm right, I'm no longer team stack but all onboard team cabal xD |
| 2026-03-31 08:51:21 | <haskellbridge> | <sm> stack uses the same cabal files as cabal, gentauro |
| 2026-03-31 08:51:52 | <sclv> | this is a feature of haskell packages, which are defined with .cabal files. stack the tool and cabal-install the tool both respect cabal files. |
| 2026-03-31 08:56:09 | × | ft quits (~ft@p508db341.dip0.t-ipconnect.de) (Quit: leaving) |
| 2026-03-31 09:05:03 | <gentauro> | 01:21 < mesaoptimizer> https://blog.haskell.org/a-couple-million-lines-of-haskell/ |
| 2026-03-31 09:05:06 | <gentauro> | mesaoptimizer: really good read |
| 2026-03-31 09:07:52 | gentauro | «The beauty of Haskell is charming enough, but there is a whole swath of operational and organizational reality beyond it, and if you ignore that reality for too long, your company will likely fire the whole Haskell team2 and start writing PHP or something instead». It reminds me when I watched Kris Jenkins saying we SHOULD use PHP. Asin PureScript (FE) + Haskell (BE) + PostgreSQL (DS) |
| 2026-03-31 09:21:29 | → | Square2 joins (~Square4@user/square) |
| 2026-03-31 09:26:28 | → | Guest14 joins (~Guest14@mm-197-96-84-93.static.mgts.by) |
| 2026-03-31 09:26:40 | → | srazkvt joins (~sarah@user/srazkvt) |
| 2026-03-31 09:32:10 | <Guest14> | sup |
| 2026-03-31 09:38:14 | × | Guest14 quits (~Guest14@mm-197-96-84-93.static.mgts.by) (Quit: Client closed) |
| 2026-03-31 09:40:55 | → | __monty__ joins (~toonn@user/toonn) |
| 2026-03-31 09:52:02 | × | oskarw quits (~user@user/oskarw) (Remote host closed the connection) |
| 2026-03-31 09:54:08 | → | xff0x joins (~xff0x@2405:6580:b080:900:637c:4b69:bd45:f373) |
| 2026-03-31 10:02:59 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 265 seconds) |
| 2026-03-31 10:03:28 | × | marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Ping timeout: 265 seconds) |
| 2026-03-31 10:03:32 | × | czan quits (~czan@user/mange) (Quit: Zzz...) |
| 2026-03-31 10:04:42 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 2026-03-31 10:05:09 | → | marinelli joins (~weechat@gateway/tor-sasl/marinelli) |
| 2026-03-31 10:07:14 | × | tri quits (~tri@ool-44c70bcb.dyn.optonline.net) (Ping timeout: 248 seconds) |
| 2026-03-31 10:15:20 | × | qqq quits (~qqq@185.54.20.216) (Remote host closed the connection) |
| 2026-03-31 10:20:27 | → | acidjnk_new joins (~acidjnk@p200300d6e700e57349db68dd44053d60.dip0.t-ipconnect.de) |
| 2026-03-31 10:23:07 | → | tri joins (~tri@ool-44c70bcb.dyn.optonline.net) |
| 2026-03-31 10:23:37 | × | acidjnk_new3 quits (~acidjnk@p200300d6e700e586cf86a3ab51f9bf20.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 2026-03-31 10:23:39 | × | Square2 quits (~Square4@user/square) (Ping timeout: 268 seconds) |
| 2026-03-31 10:30:29 | × | mcfrdy quits (~mcfrdy@user/mcfrdy) (Quit: quit) |
| 2026-03-31 10:30:57 | <tomsmeding> | gentauro: don't confuse stack.yaml with package.yaml |
| 2026-03-31 10:31:19 | <tomsmeding> | stack.yaml corresponds to cabal.project, package.yaml is read by hpack (called by stack) to produce yourthing.cabal |
| 2026-03-31 10:36:16 | → | divlamir_ joins (~divlamir@user/divlamir) |
| 2026-03-31 10:36:16 | × | divlamir quits (~divlamir@user/divlamir) (Ping timeout: 256 seconds) |
| 2026-03-31 10:36:53 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 2026-03-31 10:40:50 | × | divlamir_ quits (~divlamir@user/divlamir) (Ping timeout: 248 seconds) |
| 2026-03-31 10:42:22 | → | haritz joins (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) |
| 2026-03-31 10:42:22 | × | haritz quits (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) (Changing host) |
| 2026-03-31 10:42:22 | → | haritz joins (~hrtz@user/haritz) |
| 2026-03-31 10:45:19 | → | terrorjack joins (~terrorjac@2a01:4f8:271:2d98::2) |
| 2026-03-31 10:46:43 | → | divlamir joins (~divlamir@user/divlamir) |
| 2026-03-31 10:48:35 | × | marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Remote host closed the connection) |
| 2026-03-31 10:48:58 | → | marinelli joins (~weechat@gateway/tor-sasl/marinelli) |
| 2026-03-31 10:50:43 | × | danza quits (~danza@user/danza) (Remote host closed the connection) |
All times are in UTC.