companion_cube changed the topic of #ocaml to: Discussions about the OCaml programming language | http://www.ocaml.org | OCaml 4.11 release notes: https://caml.inria.fr/pub/distrib/ocaml-4.11/notes/Changes | Try OCaml in your browser: http://try.ocamlpro.com | Public channel logs at http://irclog.whitequark.org/ocaml
<d_bot> <gar> Figured it out. A little OCaml cray-cray. To use a cmi compiled from an mli file, it is not enough to have the cmi file, the mli file must be present. "If the interface file x.mli exists, the implementation x.ml is checked against the corresponding compiled interface x.cmi, which is assumed to exist. " (Manual chapter 9). Seems backwards to me, but that's the way it goes. Anyway, FYI this is due to Bazel's insistence that all input
andreas303 has quit [Ping timeout: 240 seconds]
andreas303 has joined #ocaml
inkbottle has joined #ocaml
zebrag has quit [Ping timeout: 240 seconds]
mfp has quit [Ping timeout: 260 seconds]
spew has quit [Quit: Connection closed for inactivity]
sonologico has quit [Remote host closed the connection]
sonologico has joined #ocaml
vicfred has quit [Quit: Leaving]
inkbottle has quit [Quit: Konversation terminated!]
inkbottle has joined #ocaml
andreas303 has quit [Ping timeout: 240 seconds]
andreas303 has joined #ocaml
spew has joined #ocaml
waleee-cl has quit [Quit: Connection closed for inactivity]
vicfred has joined #ocaml
spew has quit [Quit: Connection closed for inactivity]
ansiwen_ has quit [Quit: ZNC 1.7.1 - https://znc.in]
ansiwen has joined #ocaml
vicfred has quit [Quit: Leaving]
narimiran has joined #ocaml
vicfred has joined #ocaml
inkbottle has quit [Quit: Konversation terminated!]
ggole has joined #ocaml
Serpent7776 has joined #ocaml
cross has quit [Quit: Lost terminal]
osa1 has joined #ocaml
decentpenguin has quit [Read error: Connection reset by peer]
decentpenguin has joined #ocaml
Haudegen has joined #ocaml
<d_bot> <ostera> Hey @gar, how far along are you on the bazel integration? I wrote some rules a few years back that may be of help.
Tuplanolla has joined #ocaml
<d_bot> <ostera> https://github.com/ostera/rules_reason -- the stuff in the ./reason/private/ocaml/*.bzl has the rules used to compile .ml/.mli files into their corresponding outputs
<d_bot> <ostera>
<d_bot> <ostera>
<d_bot> <ostera> ```python
<d_bot> <ostera> # Run ocamldep on the ML sources to compile in right order
<d_bot> <ostera> sorted_sources = _ocamldep(ctx, name, ml_sources, toolchain)
<d_bot> <ostera>
<d_bot> <ostera> # Declare outputs
<d_bot> <ostera> (ml_outputs, c_outputs) = _declare_outputs(ctx, sources)
<d_bot> <ostera> outputs = ml_outputs + c_outputs
<d_bot> <ostera>
<d_bot> <ostera> # Build runfiles
<d_bot> <ostera> runfiles = []
<d_bot> <ostera> runfiles.extend([sorted_sources])
<d_bot> <ostera> runfiles.extend(sources)
<d_bot> <ostera> runfiles.extend(deps)
<d_bot> <ostera> runfiles.extend(stdlib)
<d_bot> <ostera>
<d_bot> <ostera> # Compute import paths
<d_bot> <ostera> import_paths = _build_import_paths(imports, stdlib_path)
<d_bot> <ostera> ```
<d_bot> <ostera> Has there been any work on supporting row polymorphism for records? 🤔
<d_bot> <ostera> I'm aware the object system does support something similar, but I can't seem to find a paper saying "we tried and it can't be done"
<d_bot> <octachron> Well, it can be done since objects are row polymorphic records.
<d_bot> <ggole> There's a bunch of designs for row polymorphic records
<d_bot> <ggole> Differing mostly in how exactly they treat missing/already existing fields
<d_bot> <ostera> I thought they hid their row variables?
amiloradovsky has joined #ocaml
<d_bot> <ggole> eg, elm, purescript, Daan Leijen's work
<d_bot> <ostera> honestly i don't know enough so i'm getting my hands on as much to read as i can find:
<d_bot> <ostera>
<d_bot> <ostera>
<d_bot> <ostera> > Not allowing row variables to be named means that row variables cannot
<d_bot> <ostera> > be shared between different object types.
<d_bot> <ostera> @ggole yes, i'm aware, I was wondering specifically applied to extending OCaml records, but I presume that by @octachron's answer its implied that objects are enough for this purpose?
<d_bot> <ggole> I'm not quite sure what that purpose is. Ocaml's objects are simply one of the possible designs.
<d_bot> <ggole> It's also not really true that different object types can't share the row variable in OCaml, since you can use constraints for sharing
<d_bot> <octachron> If you mean allowing any records to be extended, this implies losing the simple and efficient implementation of records because you cannot assume the existence of a static memory layout anymore.
<d_bot> <ggole> Hmm, or at least I think you can
<d_bot> <ggole> (I don't use the object stuff very much.)
malc_ has joined #ocaml
<d_bot> <Et7f3> You can only if we allow extending at the end.
malc_ has left #ocaml ["ERC (IRC client for Emacs 28.0.50)"]
<d_bot> <Et7f3> Ah no we can't use array repr even if we extend only at the end.
<d_bot> <Et7f3> We only require field: so `<a:int; b:int>` is the same than `<b:int; a:int;>` a could be before b or not. So unless we add constraints on a, b (like alphabetical order) nothing disallow us to send `<a:int; aa:int; b:int>` and here pos of b is different
<d_bot> <ggole> That works for tuples
<d_bot> <ggole> Since there is no field that can fit between field 0 and 1
<d_bot> <ggole> Row-polymorphic tuples would be cool, but probably not super useful. It would be satisfying to be able to give a nicer type to `fst` and `snd` though.
amiloradovsky has quit [Remote host closed the connection]
amiloradovsky has joined #ocaml
borne has joined #ocaml
<d_bot> <ostera> @ggole yeah i haven't seen it used much either, but in my little trip from ocaml to erland and back again, I'm finding that some things type nicely one way, and some others would need some help on their way back
<d_bot> <ostera> its all fun and games when you use polyvariants for pattern matching going from ocaml to erlang, but on the way back, unless I enforce pattern matching to be preceded by an atom that could be turned into a polyvariant tag, I start getting into shakier territories
<d_bot> <ostera> this is especially true for pattern matching that destructures maps, which happens constantly on the erlang side, dynamically, so as long as the map happens to have some keys you're good to go: i.e, row polymorphism
<d_bot> <ostera> but as @octachron says, since objects "are row polymorphic records", maybe I'll end up trying that first and see how useful it is
<d_bot> <ostera> (also when I said ocaml or erlang above I mean "a strict subset of" )
<d_bot> <octachron> For `fst` and `snd`, heterogeneous arrays can be implemented with some `Obj.magic` to steal the memory representation of array, and a healthy dose of caution to avoid the magic float arrays.
amiloradovsky has quit [Ping timeout: 244 seconds]
jbrown has joined #ocaml
nullcone has quit [Quit: Connection closed for inactivity]
reynir has quit [Ping timeout: 258 seconds]
reynir has joined #ocaml
mfp has joined #ocaml
ldbeth has joined #ocaml
<ldbeth> Are there any method to check the largest possible int in current implementation?
h14u has joined #ocaml
<d_bot> <darrenldl> `Int.max_int`?
<d_bot> <darrenldl> it's platform dependent tho iirc, so uh...hm...what do you need the value for?
<d_bot> <ggole> `Sys` has some sizes in bits, `Sys.(int_size, word_size)`
<ldbeth> It is that I want to check if a user written big int library would overflow
osa1_ has joined #ocaml
<d_bot> <darrenldl> hm...somewhat joke answer: supply custom (+), (-), (*) with overflow checks
osa1 has quit [Ping timeout: 256 seconds]
osa1_ has quit [Read error: Connection reset by peer]
<ldbeth> never mind, I just find that that library implemented overflow check
webshinra has quit [Remote host closed the connection]
<ldbeth> and I realized that overflow check does not actually relect the max_int
<ldbeth> what a ***
<d_bot> <gar> @ostera `Hey <@!704868927456673933>, how far along are you on the bazel integration? I wrote some rules a few years back that may be of help.
<d_bot> <gar> [2:25 AM]
<d_bot> <gar> https://github.com/ostera/rules_reason -- the stuff in the ./reason/private/ocaml/*.bzl has the rules used to compile .ml/.mli files into their corresponding outputs`
osa1 has joined #ocaml
<d_bot> <gar> Thanks! I'll take a look.
ldbeth has quit [Remote host closed the connection]
ldbeth has joined #ocaml
<ldbeth> so the integer size is manually set in that library
_whitelogger has joined #ocaml
waleee-cl has joined #ocaml
aaaaaa has joined #ocaml
Haudegen has quit [Quit: Bin weg.]
ldbeth has quit [Quit: ERC (IRC client for Emacs 26.3)]
osa1 has quit [Ping timeout: 260 seconds]
decentpenguin has quit [Ping timeout: 256 seconds]
osa1 has joined #ocaml
olle has joined #ocaml
decentpenguin has joined #ocaml
<d_bot> <gar> @ostera and to answer your question, I'm hoping to make an alpha version available for testing some time in the next few weeks. Unfortunately, I've had such hopes dashed several times, so don't be surprised if it doesn't happen, esp. since I want to review your code carefully.
aaaaaa has quit [Ping timeout: 258 seconds]
osa1 has quit [Read error: Connection reset by peer]
osa1 has joined #ocaml
osa1 has quit [Ping timeout: 256 seconds]
decentpenguin has quit [Ping timeout: 260 seconds]
Haudegen has joined #ocaml
aaaaaa has joined #ocaml
aaaaaa has quit [Client Quit]
decentpenguin has joined #ocaml
dhil has joined #ocaml
spew has joined #ocaml
osa1 has joined #ocaml
borne has quit [Ping timeout: 244 seconds]
borne has joined #ocaml
malc_ has joined #ocaml
h11 has joined #ocaml
<malc_> there are several instances of double empty line in Changes, oversight?
borne has quit [Ping timeout: 244 seconds]
dckc has quit [Ping timeout: 272 seconds]
dckc has joined #ocaml
<octachron> malc_, there are there to separate highligthed items from the others items in a section
<malc_> octachron: i think i can parse that. but still... c'mon
dckc has quit [Ping timeout: 260 seconds]
dckc has joined #ocaml
dckc has quit [Ping timeout: 265 seconds]
dckc has joined #ocaml
olle has quit [Ping timeout: 240 seconds]
nullcone has joined #ocaml
sagax has quit [Remote host closed the connection]
zebrag has joined #ocaml
dhil has quit [Ping timeout: 260 seconds]
Haudegen has quit [Quit: Bin weg.]
zebrag has quit [Quit: Konversation terminated!]
sagax has joined #ocaml
dhil has joined #ocaml
Haudegen has joined #ocaml
smazga has joined #ocaml
<cemerick> I was quite surprised to discover this morning that it is standard practice in opam-repository to change both upstream artifact URLs and their hashes for already-published versions, e.g. https://github.com/ocaml/opam-repository/pull/16610/files
<dash> yikes
<cemerick> I posted a bit about it on discourse in re: bitbucket 404-ing all of the upstream tarballs, but...
<cemerick> this seems like a huge vulnerability
<cemerick> dash: quite
<companion_cube> opam is a curated repository
<companion_cube> (I'm not sure this introduces vulns more than the initial PR to add a package, though)
<cemerick> so? It doesn't own the tarballs
<Armael> you could assume that the opam-repo maintainers do check that the one submitting the PR looks like the original author
<cemerick> to take the PR I linked, an artifact url is `https://github.com/freuk/obandit/archive/v0.1.38.tar.gz`; all one would need to do is own freuk's github account, and you could cause quite a problem
<companion_cube> I think it should own the tarballs :/
<Armael> ah well indeed
<cemerick> especially insofar as the hashes being used are md5 !!
<companion_cube> :D
<d_bot> <Et7f3> But on GitHub when you change username you have a warning so it is fine I presume
<d_bot> <ostera> Github will do a number of redirects for you automatically too
<d_bot> <ostera> but this doesn't change the fact that it currently works, but tarballs may disappear
<companion_cube> yeah but it changes the hash
<companion_cube> so it still breaks
<Armael> I think for proper opam-repo security you might need the 'conex' proposal by hannes ?
<d_bot> <ostera> is there a reason that tarballs aren't uploaded to the opam repo with git lfs?
<d_bot> <Et7f3> Unless someone register with your old name and can put anything he want
<companion_cube> you need to sign packages
<companion_cube> tbh opam should be for developers, not end users, anyway
<companion_cube> so…
<cemerick> d_bot: how do you mean, change usernames? I'm talking about someone maliciously having control over a hosting account.
<d_bot> <Et7f3> And I believe opam cache tarball so 🤷
<Armael> I mean, if you usurp someone's account
<Armael> you can also publish a new release
<companion_cube> cemerick: I don't know of a package manager that protects you against that
<companion_cube> yeah like Armael says
<companion_cube> like a "bugfix" release
<Armael> and everyone will pick that
<cemerick> companion_cube: md5 is a very weak hash, you could change the tarball to add some "useful" code, and pretty straightforwardly also add a file that keeps the hash the same
<cemerick> companion_cube: both maven central and npm own artifacts at this point, for exactly this reason
ransom has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
brown121407 has quit [Changing host]
brown121407 has joined #ocaml
<d_bot> <Et7f3> Yes you can but opam cache tarball
<cemerick> Et7f3: you mean locally?
<Armael> a cache doesn't give you any security properties
<cemerick> in any case, it's _just_ a cache, otherwise the PRs that are changing upstream artifact URLs and hashes would be no-ops
mmohammadi9812 has joined #ocaml
<cemerick> anyway, having spent a long long time in JVM-land, and seen very expensive exploits hit maven in the aughts (before central mandated retaining immutable artifacts and metadata), I was very very surprised to see opam really doing exactly the wrong thing here.
<cemerick> If anyone knows of any prior discussion about this, I'd love to read it...so far, I've not found anything relvant
<d_bot> <Et7f3> It 403 so their is something behind \:)
<cemerick> Indeed, the cache is there, and that's handy for recovering 404'd tarballs, but not much else
<d_bot> <Et7f3> But even with cache just publish a new version and your can inject all the code you want. With github release/tarball at least you can inspect easily the package and diff it with master to see if it is correct
<companion_cube> I agree the hashes should be much stronger :s
<d_bot> <Et7f3> Even with the stronger hash: what will you do on new bugfix ?
<cemerick> Et7f3: oh, I see what you mean. Yes, publishing authority is also an important vector to secure; there, signing is really the only useful mechanism AFAIK.
<companion_cube> bugfix means new release, right? :)
<cemerick> exactly, the fact that you can **update** previously-released version is truly mad
<d_bot> <Et7f3> The only protection against https://medium.com/hackernoon/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8cb347c5b5 is a human that open the archives and inspect the code
<cemerick> Correct, that is yet another vulnerability that is unfortunately not easily dealt with at a repository level
<d_bot> <Et7f3> Yes new release for bugfix. I would be surprised if I see <3.1.4 in the wild
<cemerick> Eh, well, I guess I'll raise an issue on opam later this week or something, but this is something that needs RFC-level attention. If the vuln isn't being used already, it's only by dint of luck and goodwill.
<d_bot> <Bluddy> yeah this is a very big deal. really it should all be automated: you submit the artifact, it gets pulled, the hash gets calculated and saved. nothing to do with humans.
<companion_cube> cemerick: it's also annoying
<d_bot> <Bluddy> even then you can poison the ecosystem with a new release
<companion_cube> it happened that some package that worked for me (cough z3 cough) stopped working because of changes
<companion_cube> in the same version
* cemerick whistles
<d_bot> <Bluddy> that is unacceptable
<cemerick> Bluddy: signing helps there, but not 100%
<cemerick> unacceptable, but AFAICT established policy
<companion_cube> it plays with some initial design choices of opam, made years ago
<companion_cube> (like, a long time ago)
<companion_cube> a new modern PM would never do that I think.
<d_bot> <Bluddy> cemerick: yeah signing is probably necessary
<cemerick> Bluddy: ah, you were actually the originator of the thread that led me here lol
<d_bot> <Bluddy> yeah but only tangentially related 🙂
<cemerick> true true
<d_bot> <Bluddy> I'm glad you expanded the discussion -- it's a very important one
<cemerick> I had totally assumed that the URLs in opam files were used once at publish-time, which is already sorta meh, but never expected to find *waves hands* this
<companion_cube> let's just remake cargo in ocaml 🙃
<companion_cube> (but you first, I'm busy)
<cemerick> well, I had some small hand in building clojars, so this is not unfamiliar territory for me
<d_bot> <Bluddy> As usual, I think taking inspiration from the tools that do it right is usually the best way to go
<d_bot> <Bluddy> (Since they already solved problems and encountered ones we haven't yet encountered)
* d_bot <ostera> cough_ bazel _cough
<cemerick> AFAICT, opam itself is _fine_. Its solver in particular is great. The current issue(s) I think can probably be mostly resolved with process changes and maybe a dedicated backend for publishing.
<cemerick> but there's obviously a well-established culture around opam-repository that isn't immediately cognizant of just how risky the whole endeavor is atm
<companion_cube> (and lockfiles :-°)
<cemerick> (don't lockfiles work nicely? At least, worksforme ;-P)
<companion_cube> the new ones? not sure
<companion_cube> they're still just constraints for the solver, right? :)
<cemerick> I am blissfully ignorant of the details, but they have worked well for me (although I am running an edge build fwiw)
<d_bot> <Bluddy> yeah a dedicated backend would make sure you could only ever increment versions when submitting a package. it would help to impose a consistent version scheme.
<cemerick> The PR workflow _could_ continue to work, but IMO only if either artifacts were included (which probably no one wants at that level), or if a strong signing and hash regime was mandated.
<d_bot> <Bluddy> signing and hashing implies an identity system of some sort, the infrastructure for which does not exist.
<companion_cube> well it's already based on github :)
<companion_cube> which, I think, can store some gpg keys? I've seen this "verified" badge on some commits
<cemerick> Bluddy: there's something somewhere that is pulling info from opam-repository to populate the actual live repo+cache
<d_bot> <ostera> @companion_cube github supports gpg keys to verify commits
malc_ has left #ocaml ["ERC (IRC client for Emacs 28.0.50)"]
<companion_cube> there's you identity system
<companion_cube> your(*
<companion_cube> ofc it's not necessarily a good idea to tie oneself to github
<companion_cube> but opam packages could include gpg public keys in the "maintainer" section…
<d_bot> <Bluddy> how do the commits in opam-repository connect to the source files?
<d_bot> <Bluddy> or artifacts? I guess you supply the hash?
<companion_cube> they don't, I think? but I meant github can store gpg keys
<cemerick> Bluddy: the only connection AFAICT is via the artifact URL and the hash of its contents
<cemerick> github can verify commits, but the artifacts aren't in a commit (or at least, aren't right now). So unless the PRs to opam-repository are going to start including tarballs, signatures would have to go into the published opam file
<companion_cube> I don't think there's enough person-power to do that
<companion_cube> maybe the sane thing to do would be to say that Nix is the official PM :p
<companion_cube> and migrate all opam files to it
<d_bot> <ostera> @cemerick i don't know how clojars works, but what would stop git lfs from being a good place for the tarballs in this scenario?
spew has quit [Quit: Connection closed for inactivity]
<cemerick> ostera: I've honestly never had occasion to use git lfs, so it might be!
<cemerick> clojars is architected as a clojure web app, part of which presents as Just Another Maven Server (i.e. an HTTPS endpoint with a particular layout)
<cemerick> the nut of clojars is the publishing API, which does stuff like authentication, enforce proper hashing and signing of artifacts (and verification thereof), and then storage of all the bits that are picked up by the maven-esque facade
<cemerick> things like trying to re-publish an already-known version of a library are bonked on the head and sent on their way
ransom has joined #ocaml
<d_bot> <Et7f3> but allow to change deps constraint is good IMO: like you are conservative < 4.11 now 4.12 is out and your package is compatible you can either republish with new deps or publish a bugfix release but then for each new compiler version you get a bunch of packages copied and it is useless
<d_bot> <Et7f3> maybe then only allow only to expand constraint.
waleee-cl has quit [Quit: Connection closed for inactivity]
<cemerick> Et7f3: that is a very minor convenience that is IMO readily resolved by publishing a new patch version with no other changes than adjusting the constraints
<cemerick> The metadata and the artifacts should be considered to be a unitary, immutable whole. There's nothing simpler or more secure.
<d_bot> <Bluddy> git lfs works well -- I've used it a lot.
rig0rmortis has joined #ocaml
jnavila has joined #ocaml
rig0rmor_ has joined #ocaml
rig0rmortis has quit [Ping timeout: 256 seconds]
rig0rmor_ has quit [Client Quit]
rig0rmortis has joined #ocaml
mmohammadi98122 has joined #ocaml
mmohammadi98122 has quit [Client Quit]
mmohammadi9812 has quit [Ping timeout: 240 seconds]
zebrag has joined #ocaml
osa1 has quit [Ping timeout: 258 seconds]
mmohammadi9812 has joined #ocaml
smazga has quit [Read error: Connection reset by peer]
zgasma has joined #ocaml
narimiran has quit [Ping timeout: 246 seconds]
ggole has quit [Quit: Leaving]
vicfred has quit [Quit: Leaving]
reynir has quit [Ping timeout: 260 seconds]
reynir has joined #ocaml
webshinra has joined #ocaml
<d_bot> <Et7f3> github going down happen some times so yeah not ideal but packages will be hosted on some kind of host that can't assure 100% uptime and GitHub should be bigger than anything the ocaml community can have + gha CI time is a bit improved because some are fetched from GitHub (well maybe not that much I believe they have some cdn or other kind of architecture).
<d_bot> <Et7f3> And cargo build from source how they solve it ?
<d_bot> <ostera> AFAICT crates.io is its own repository, and they take care of all this stuff there
<cemerick> I don't think any of this is about uptime per se
<cemerick> the e.g. bitbucket failure mode is about things going permanently 404
ransom has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
<d_bot> <shawn> npm has it's own repository as well as far as I know
<cemerick> correct
<d_bot> <ostera> @Drup so after a successful high-level OCaml->Erlang, I'm looking at a lower level Lambda->Core translation now, other than lambda.mli and translmod.ml where can I find docs about the Lambda AST? The OCaml manual seems to make vague references to it only (or I'm looking at the wrong places)
<cemerick> tbc, the more important part is how the repository is allowed to change (or not), not exactly where it lives
ransom has joined #ocaml
<d_bot> <Bluddy> yeah I think we can get good results from
<d_bot> <Bluddy> 1. never modifying a version but only adding new ones
<d_bot> <Bluddy> 2. forcing to use github 2fa on all participants
<d_bot> <Bluddy> 3. switching to a stronger hash
<d_bot> <Bluddy> If opam caches everything (whatever that means, I'm not sure), we kinda already have a solution for that specific issue.
vicfred has joined #ocaml
<companion_cube> @ostera: the doc is lambda.mli :p
<d_bot> <ostera> <luke skywalker that's impossible gif>
<d_bot> <stab> does anybody know if ocamlgraph accepts pull requests? Im willing to close out my own issue if they do
<d_bot> <stab> literally a 1 liner
<d_bot> <craigfe> They do, but perhaps with some delay. (Jean-Christophe is a busy man.)
<d_bot> <craigfe> > literally a 1 liner
<d_bot> <craigfe> @stab Speaking for myself, a 1 line PR is considerably less convincing than a 50 line PR that contains a test case 😉
<d_bot> <stab> yeah i mean i guess a regression test would be nice. to be fair it's just missing an equality check
<d_bot> <craigfe> This is the "dominator relation is not reflexive" thing?
<d_bot> <stab> yeah
smazga has joined #ocaml
zgasma has quit [Read error: Connection reset by peer]
<d_bot> <craigfe> If I were a maintainer, I feel like I'd want a test and a changelog entry for that
<d_bot> <craigfe> but I can't speak for them 🙂
<d_bot> <stab> it also may break current code using it which is awkward...
<d_bot> <craigfe> Indeed
<d_bot> <craigfe> actually, I know for a fact that it breaks some of my own code
<d_bot> <craigfe> but it seems to be an improvement nonetheless
<d_bot> <stab> granted more important for me is the current issue with the Fixpoint module, didnt realize that was an issue but until a new release I guess i need to be manually pulling in master
<companion_cube> are there tests in ocamlgraph?
<d_bot> <stab> yeah there are
<d_bot> <stab> dont know how comprehensive
<companion_cube> nice, I didn't know
<d_bot> <hcarty> cemerick: I'm pretty sure opam provide its own mirror of package sources?
<d_bot> <hcarty> Oh, I see hannes responded in the discuss thread
<hannes> yes, hannes responded in that thread after talking a bit in private with cemerick on irc :)
<d_bot> <hcarty> Hi hannes 🙂
* hannes waves
waleee-cl has joined #ocaml
jnavila has quit [Quit: Konversation terminated!]
<Armael> :)
<d_bot> <Drup> @ostera I don't think there is any docs
<cemerick> hcarty: mirror/cache, yes, but it is subject to retroactive changes in opam-repository
smazga has quit [Quit: leaving]
Serpent7776 has quit [Quit: leaving]
ransom has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
mmohammadi9812 has quit [Quit: I quit (╯°□°)╯︵ ┻━┻]
rig0rmortis has quit [Quit: Textual IRC Client: www.textualapp.com]
rig0rmortis has joined #ocaml
<Armael> in a dune project, can I have an executable that will get installed depend on libraries that I do not want to install?
<rgrinberg> Armael it's possible. Just make sure the library isn't public.
<Armael> what I've done right now is define a package in my dune-project, to which I attached my executable
<Armael> but now if I build with "dune build -p mypackage" it says it doesn't find the library
<Armael> mmh an additional issue I have is that the dune files coming from the libraries do make it public
<Armael> because I'm vendoring the library
<Armael> but I in fact do not want to install them, just the resulting binary that I'm building on top of them
webshinra has quit [Remote host closed the connection]
adrianbrink has quit [Read error: Connection reset by peer]
Duns_Scrotus has quit [Ping timeout: 240 seconds]
cbarrett has quit [Ping timeout: 240 seconds]
lopex has quit [Read error: Connection reset by peer]
conjunctive has quit [Read error: Connection reset by peer]
webshinra has joined #ocaml
bytesighs has quit [Read error: Connection reset by peer]
banjiewen has quit [Read error: Connection reset by peer]
bytesighs has joined #ocaml
cqc has quit [Read error: Connection reset by peer]
nullcone has quit [Read error: Connection reset by peer]
Duns_Scrotus has joined #ocaml
SrPx has quit [Read error: Connection reset by peer]
rgrinberg has quit [Read error: Connection reset by peer]
cqc has joined #ocaml
adrianbrink has joined #ocaml
cbarrett has joined #ocaml
banjiewen has joined #ocaml
lopex has joined #ocaml
conjunctive has joined #ocaml
SrPx has joined #ocaml
nullcone has joined #ocaml
<d_bot> <Et7f3> If you use dune > 1.11 their is vendored_dirs
<d_bot> <Et7f3> It will allow to depend on such without requiring to put with -p (it is forbidden)
<Armael> ah, interesting
kanishka has joined #ocaml
<Armael> looks like adding that makes it justwork®, thanks!
<Armael> (can you expand on what is forbidden exactly?)
<kanishka> Can someone link to good blog or discussion of the idiomatic way of dealing with same problem as typeclasses addresses with ocaml modules?
webshinra has quit [Remote host closed the connection]
dhil has quit [Ping timeout: 260 seconds]
<d_bot> <hcarty> cemerick: Yep, you're right. To echo others - thanks for bringing it up
webshinra has joined #ocaml
dckc has quit [Ping timeout: 260 seconds]
dckc has joined #ocaml
<d_bot> <Mando> Hello
<d_bot> <Mando> is there any compiler discords or something?
<companion_cube> you mean to discuss the compiler itself?
jbrown has quit [Ping timeout: 272 seconds]
kanishka has quit [Quit: Quit]
<d_bot> <Et7f3> If you vendor package A to build package B you can only call: `dune build -p B` without this line you should have written: `dune build -p A,B` or you would write: `dune build some.exe` and copy it (last is just a joke don't do that)
<d_bot> <Et7f3> So in case you vendor A the second command is non-sense and is forbidden
<d_bot> <Et7f3> And btw for other day when we searched a name for compiler channel why not #tips-and-tricks (might want to target more) or #friendly-compiler
Haudegen has quit [Ping timeout: 240 seconds]
Tuplanolla has quit [Quit: Leaving.]
nullcone has quit [Quit: Connection closed for inactivity]