├── .github └── workflows │ ├── pipeline.yml │ └── test.yml ├── .gitignore ├── LICENSE ├── README.md └── packages ├── demo ├── .gitignore ├── README.md ├── bsconfig.json ├── package.json ├── src │ ├── demo.bs.js │ └── demo.res └── yarn.lock └── ppx ├── .npmignore ├── bin ├── Bin.re └── dune ├── dune-project ├── dune-workspace ├── esy.json ├── esy.lock ├── .gitattributes ├── .gitignore ├── index.json ├── opam │ ├── atd.2.2.1 │ │ └── opam │ ├── atdgen-runtime.2.2.1 │ │ └── opam │ ├── atdgen.2.2.1 │ │ └── opam │ ├── base-threads.base │ │ └── opam │ ├── base-unix.base │ │ └── opam │ ├── biniou.1.2.1 │ │ └── opam │ ├── cppo.1.6.7 │ │ └── opam │ ├── csexp.1.4.0 │ │ └── opam │ ├── dot-merlin-reader.4.1 │ │ └── opam │ ├── dune-build-info.2.8.4 │ │ └── opam │ ├── dune.2.8.4 │ │ └── opam │ ├── easy-format.1.3.2 │ │ └── opam │ ├── fix.20201120 │ │ └── opam │ ├── menhir.20210310 │ │ └── opam │ ├── menhirLib.20210310 │ │ └── opam │ ├── menhirSdk.20210310 │ │ └── opam │ ├── merlin-extend.0.6 │ │ └── opam │ ├── merlin.4.1-412 │ │ └── opam │ ├── ocaml-compiler-libs.v0.12.3 │ │ └── opam │ ├── ocaml-migrate-parsetree.2.1.0 │ │ └── opam │ ├── ocamlfind.1.9.1 │ │ └── opam │ ├── ppx_derivers.1.2.1 │ │ └── opam │ ├── ppx_yojson_conv_lib.v0.14.0 │ │ └── opam │ ├── ppxlib.0.22.0 │ │ └── opam │ ├── re.1.9.0 │ │ └── opam │ ├── result.1.5 │ │ └── opam │ ├── seq.base │ │ ├── files │ │ │ ├── META.seq │ │ │ └── seq.install │ │ └── opam │ ├── sexplib0.v0.14.0 │ │ └── opam │ ├── stdlib-shims.0.3.0 │ │ └── opam │ └── yojson.1.7.0 │ │ └── opam └── overrides │ └── opam__s__ocamlfind_opam__c__1.9.1_opam_override │ ├── files │ └── findlib-1.9.1.patch │ └── package.json ├── lenses-ppx.opam ├── package-lock.json ├── package.json ├── postinstall.js ├── src ├── LensesPpx.re ├── Utils.re └── dune └── test ├── Test.ml ├── Test.re └── Wanted.ml /.github/workflows/pipeline.yml: -------------------------------------------------------------------------------- 1 | name: npm-publish 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | tag_name: 7 | description: "Optional tag name" 8 | required: false 9 | 10 | jobs: 11 | build_linux: 12 | runs-on: ${{ matrix.os }} 13 | strategy: 14 | matrix: 15 | os: [ubuntu-latest] 16 | node_version: [14] 17 | 18 | container: 19 | image: cichocinski/docker-esy:alpine3.8 20 | 21 | steps: 22 | - uses: actions/checkout@v2 23 | - uses: actions/setup-node@v2-beta 24 | with: 25 | node-version: ${{ matrix.node_version }} 26 | 27 | - run: esy install 28 | working-directory: packages/ppx 29 | 30 | - run: esy release-static 31 | working-directory: packages/ppx 32 | 33 | - uses: actions/upload-artifact@v2 34 | with: 35 | name: ${{ matrix.os }} 36 | path: packages/ppx/_build/default/bin/bin.exe 37 | 38 | build: 39 | runs-on: ${{ matrix.os }} 40 | strategy: 41 | matrix: 42 | node_version: [14] 43 | os: [macOS-latest, windows-latest] 44 | 45 | steps: 46 | - uses: actions/checkout@v2 47 | 48 | - uses: actions/setup-node@v2-beta 49 | with: 50 | node-version: ${{ matrix.node_version }} 51 | 52 | - run: npm i -g esy 53 | - run: esy install 54 | working-directory: packages/ppx 55 | 56 | - run: esy build 57 | working-directory: packages/ppx 58 | 59 | - uses: actions/upload-artifact@v2 60 | with: 61 | name: ${{ matrix.os }} 62 | path: packages/ppx/_build/default/bin/bin.exe 63 | 64 | release: 65 | needs: [build, build_linux] 66 | runs-on: ubuntu-latest 67 | steps: 68 | - uses: actions/checkout@v2 69 | with: 70 | fetch-depth: 0 71 | persist-credentials: false 72 | 73 | - uses: actions/download-artifact@v2 74 | with: 75 | name: macOS-latest 76 | path: packages/darwin 77 | 78 | - uses: actions/download-artifact@v2 79 | with: 80 | name: ubuntu-latest 81 | path: packages/linux 82 | 83 | - uses: actions/download-artifact@v2 84 | with: 85 | name: windows-latest 86 | path: packages/windows 87 | 88 | - uses: actions/setup-node@v2-beta 89 | with: 90 | node-version: "14" 91 | registry-url: https://registry.npmjs.org/ 92 | 93 | - run: mkdir -p $GITHUB_WORKSPACE/tarball 94 | - run: | 95 | cd packages/ppx 96 | npm version patch 97 | 98 | - run: | 99 | cd packages/ppx 100 | cp package.json $GITHUB_WORKSPACE/tarball 101 | cp postinstall.js $GITHUB_WORKSPACE/tarball 102 | 103 | - run: | 104 | cd packages 105 | cp darwin/bin.exe $GITHUB_WORKSPACE/tarball/darwin 106 | cp linux/bin.exe $GITHUB_WORKSPACE/tarball/linux 107 | cp windows/bin.exe $GITHUB_WORKSPACE/tarball/win32 108 | 109 | - run: | 110 | cd $GITHUB_WORKSPACE/tarball 111 | npm publish $(npm pack | tail -1) --access public 112 | env: 113 | NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} 114 | 115 | - run: | 116 | git config --global user.email "github-actions@github.com" 117 | git config --global user.name "github-actions[bot]" 118 | git commit --message "Update package.json" --all 119 | 120 | - uses: ad-m/github-push-action@master 121 | with: 122 | github_token: ${{ secrets.GITHUB_TOKEN }} 123 | branch: ${{ github.ref }} 124 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test build 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - master 7 | 8 | jobs: 9 | build_linux: 10 | runs-on: ${{ matrix.os }} 11 | strategy: 12 | matrix: 13 | os: [ubuntu-latest] 14 | node_version: [14] 15 | 16 | container: 17 | image: cichocinski/docker-esy:alpine3.8 18 | 19 | steps: 20 | - uses: actions/checkout@v2 21 | - uses: actions/setup-node@v2-beta 22 | with: 23 | node-version: ${{ matrix.node_version }} 24 | 25 | - run: esy install 26 | working-directory: packages/ppx 27 | 28 | - run: esy release-static 29 | working-directory: packages/ppx 30 | 31 | - uses: actions/upload-artifact@v2 32 | with: 33 | name: ${{ matrix.os }} 34 | path: packages/ppx/_build/default/bin/bin.exe 35 | 36 | build: 37 | runs-on: ${{ matrix.os }} 38 | strategy: 39 | matrix: 40 | node_version: [14] 41 | os: [macOS-latest, windows-latest] 42 | 43 | steps: 44 | - uses: actions/checkout@v2 45 | 46 | - uses: actions/setup-node@v2-beta 47 | with: 48 | node-version: ${{ matrix.node_version }} 49 | 50 | - run: npm i -g esy 51 | - run: esy install 52 | working-directory: packages/ppx 53 | 54 | - run: esy build 55 | working-directory: packages/ppx 56 | 57 | - uses: actions/upload-artifact@v2 58 | with: 59 | name: ${{ matrix.os }} 60 | path: packages/ppx/_build/default/bin/bin.exe 61 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.exe 2 | *.obj 3 | *.out 4 | *.compile 5 | *.native 6 | *.byte 7 | *.cmo 8 | *.annot 9 | *.cmi 10 | *.cmx 11 | *.cmt 12 | *.cmti 13 | *.cma 14 | *.a 15 | *.cmxa 16 | *.obj 17 | *~ 18 | *.annot 19 | *.cmj 20 | *.bak 21 | lib/bs 22 | *.mlast 23 | *.mliast 24 | .vscode 25 | .merlin 26 | .bsb.lock 27 | node_modules 28 | /ppx 29 | _esy 30 | _build 31 | lenses-ppx.install 32 | _release 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Astrocoders 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # What are GADTs? 2 | [GADTs: A primer](https://sketch.sh/s/yH0MJiujNSiofDWOU85loX/) 3 | 4 | # Why 5 | Differently from normal lenses/optics the following approach allows for composing "lenses" into lists/arrays which is them useful for things like https://github.com/rescriptbr/reschema 6 | 7 | # Install 8 | Install the last stable version 9 | 10 | For ReScript 11 | ``` 12 | npm install --save-dev lenses-ppx@latest 13 | or 14 | yarn add lenses-ppx@latest -D 15 | ``` 16 | 17 | For BuckleScript < 6 18 | ``` 19 | npm install --save-dev lenses-ppx@4.0.0 20 | or 21 | yarn add lenses-ppx@4.0.0 -D 22 | ``` 23 | 24 | # Build 25 | ``` 26 | npm run build 27 | ``` 28 | 29 | # Watch 30 | 31 | ``` 32 | npm run watch 33 | ``` 34 | 35 | In 36 | ```rescript 37 | module StateLenses = %lenses( 38 | type state = { 39 | email: string, 40 | age: int, 41 | } 42 | ) 43 | ``` 44 | 45 | Out 46 | 47 | ```rescript 48 | module StateLenses = { 49 | type state = { 50 | email: string, 51 | age: int, 52 | } 53 | type rec field<_> = 54 | | Email: field 55 | | Age: field 56 | let get: 57 | type value. (state, field) => value = 58 | (state, field) => 59 | switch field { 60 | | Email => state.email 61 | | Age => state.age 62 | } 63 | let set: 64 | type value. (state, field, value) => state = 65 | (state, field, value) => 66 | switch field { 67 | | Email => {...state, email: value} 68 | | Age => {...state, age: value} 69 | } 70 | } 71 | ``` 72 | Using 73 | ```rescript 74 | open StateLenses 75 | 76 | let state = {email: "fakenickels@gov.br", age: 969} 77 | 78 | Js.log(state->get(Email)) 79 | Js.log(state->get(Age)) 80 | ``` 81 | 82 | 83 | Alternatively you can also use it like 84 | ```rescript 85 | @lenses @decco 86 | type bartux = { 87 | color: string, 88 | top: int, 89 | } 90 | 91 | let bartux = {color: "red", top: 10} 92 | 93 | Js.log(bartux->bartux_get(Color)) 94 | Js.log(bartux->bartux_set(Top, 20)) 95 | Js.log(bartux_encode(bartux)) 96 | ``` 97 | 98 | 99 | Alternatives 100 | 101 | - https://github.com/scoville/re-optic/blob/master/docs/lenses-ppx.md which is more strict and follows more closely Optics standards 102 | -------------------------------------------------------------------------------- /packages/demo/.gitignore: -------------------------------------------------------------------------------- 1 | *.exe 2 | *.obj 3 | *.out 4 | *.compile 5 | *.native 6 | *.byte 7 | *.cmo 8 | *.annot 9 | *.cmi 10 | *.cmx 11 | *.cmt 12 | *.cmti 13 | *.cma 14 | *.a 15 | *.cmxa 16 | *.obj 17 | *~ 18 | *.annot 19 | *.cmj 20 | *.bak 21 | lib/bs 22 | *.mlast 23 | *.mliast 24 | .vscode 25 | .merlin 26 | .bsb.lock -------------------------------------------------------------------------------- /packages/demo/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Build 4 | ``` 5 | npm run build 6 | ``` 7 | 8 | # Watch 9 | 10 | ``` 11 | npm run watch 12 | ``` 13 | 14 | 15 | # Editor 16 | If you use `vscode`, Press `Windows + Shift + B` it will build automatically -------------------------------------------------------------------------------- /packages/demo/bsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demo", 3 | "version": "0.1.0", 4 | "sources": { 5 | "dir" : "src", 6 | "subdirs" : true 7 | }, 8 | "package-specs": { 9 | "module": "commonjs", 10 | "in-source": true 11 | }, 12 | "suffix": ".bs.js", 13 | "bs-dependencies": [ 14 | "decco" 15 | ], 16 | "warnings": { 17 | "error" : "+101" 18 | }, 19 | "refmt": 3, 20 | "ppx-flags": [ 21 | "decco/ppx", 22 | "../ppx/_build/default/bin/bin.exe" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /packages/demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "demo", 3 | "version": "0.1.0", 4 | "scripts": { 5 | "clean": "bsb -clean-world", 6 | "build": "bsb -make-world", 7 | "watch": "bsb -make-world -w" 8 | }, 9 | "keywords": [ 10 | "BuckleScript" 11 | ], 12 | "author": "", 13 | "license": "MIT", 14 | "devDependencies": { 15 | "bs-platform": "9" 16 | }, 17 | "dependencies": { 18 | "decco": "^1.3.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/demo/src/demo.bs.js: -------------------------------------------------------------------------------- 1 | // Generated by ReScript, PLEASE EDIT WITH CARE 2 | 'use strict'; 3 | 4 | var Decco = require("decco/src/Decco.bs.js"); 5 | var Js_dict = require("bs-platform/lib/js/js_dict.js"); 6 | var Js_json = require("bs-platform/lib/js/js_json.js"); 7 | var Belt_Option = require("bs-platform/lib/js/belt_Option.js"); 8 | 9 | function get(values, field) { 10 | if (field) { 11 | return values.age; 12 | } else { 13 | return values.email; 14 | } 15 | } 16 | 17 | function set(values, field, value) { 18 | if (field) { 19 | return { 20 | email: values.email, 21 | age: value 22 | }; 23 | } else { 24 | return { 25 | email: value, 26 | age: values.age 27 | }; 28 | } 29 | } 30 | 31 | var StateLenses = { 32 | get: get, 33 | set: set 34 | }; 35 | 36 | console.log("fakenickels@brazil.gov.br"); 37 | 38 | console.log(0); 39 | 40 | function bartux_get(values, field) { 41 | if (field) { 42 | return values.top; 43 | } else { 44 | return values.color; 45 | } 46 | } 47 | 48 | function bartux_set(values, field, value) { 49 | if (field) { 50 | return { 51 | color: values.color, 52 | top: value 53 | }; 54 | } else { 55 | return { 56 | color: value, 57 | top: values.top 58 | }; 59 | } 60 | } 61 | 62 | function bartux_encode(v) { 63 | return Js_dict.fromArray([ 64 | [ 65 | "color", 66 | Decco.stringToJson(v.color) 67 | ], 68 | [ 69 | "top", 70 | Decco.intToJson(v.top) 71 | ] 72 | ]); 73 | } 74 | 75 | function bartux_decode(v) { 76 | var dict = Js_json.classify(v); 77 | if (typeof dict === "number") { 78 | return Decco.error(undefined, "Not an object", v); 79 | } 80 | if (dict.TAG !== /* JSONObject */2) { 81 | return Decco.error(undefined, "Not an object", v); 82 | } 83 | var dict$1 = dict._0; 84 | var color = Decco.stringFromJson(Belt_Option.getWithDefault(Js_dict.get(dict$1, "color"), null)); 85 | if (color.TAG === /* Ok */0) { 86 | var top = Decco.intFromJson(Belt_Option.getWithDefault(Js_dict.get(dict$1, "top"), null)); 87 | if (top.TAG === /* Ok */0) { 88 | return { 89 | TAG: /* Ok */0, 90 | _0: { 91 | color: color._0, 92 | top: top._0 93 | } 94 | }; 95 | } 96 | var e = top._0; 97 | return { 98 | TAG: /* Error */1, 99 | _0: { 100 | path: ".top" + e.path, 101 | message: e.message, 102 | value: e.value 103 | } 104 | }; 105 | } 106 | var e$1 = color._0; 107 | return { 108 | TAG: /* Error */1, 109 | _0: { 110 | path: ".color" + e$1.path, 111 | message: e$1.message, 112 | value: e$1.value 113 | } 114 | }; 115 | } 116 | 117 | var bartux = { 118 | color: "red", 119 | top: 10 120 | }; 121 | 122 | console.log("red"); 123 | 124 | console.log(bartux_set(bartux, /* Top */1, 20)); 125 | 126 | console.log(bartux_encode(bartux)); 127 | 128 | var state = { 129 | email: "fakenickels@brazil.gov.br", 130 | age: 0 131 | }; 132 | 133 | exports.StateLenses = StateLenses; 134 | exports.state = state; 135 | exports.bartux_get = bartux_get; 136 | exports.bartux_set = bartux_set; 137 | exports.bartux_encode = bartux_encode; 138 | exports.bartux_decode = bartux_decode; 139 | exports.bartux = bartux; 140 | /* Not a pure module */ 141 | -------------------------------------------------------------------------------- /packages/demo/src/demo.res: -------------------------------------------------------------------------------- 1 | module StateLenses = %lenses( 2 | type state = { 3 | email: string, 4 | age: int, 5 | } 6 | ) 7 | 8 | open StateLenses 9 | 10 | let state = {email: "fakenickels@brazil.gov.br", age: 0} 11 | 12 | Js.log(state->get(Email)) 13 | Js.log(state->get(Age)) 14 | 15 | @lenses @decco 16 | type bartux = { 17 | color: string, 18 | top: int, 19 | } 20 | 21 | @deriving(abstract) 22 | type should_not_conflict_with_deriving_abstract = { 23 | buy: string, 24 | bitcoin: string 25 | }; 26 | 27 | let bartux = {color: "red", top: 10} 28 | 29 | Js.log(bartux->bartux_get(Color)) 30 | Js.log(bartux->bartux_set(Top, 20)) 31 | Js.log(bartux_encode(bartux)) 32 | -------------------------------------------------------------------------------- /packages/demo/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | bs-platform@9: 6 | version "9.0.1" 7 | resolved "https://registry.yarnpkg.com/bs-platform/-/bs-platform-9.0.1.tgz#069dae007aadb400963cec25c8349ea1f3f6cae0" 8 | integrity sha512-RxUrwxVBCx9AiiyFIthZwfPn+tAn9noRHCb9xJK4Uw2deGxIytqyoWDepMbH35v7EpxX0OhfXL5RrjHTaXersA== 9 | 10 | decco@^1.3.0: 11 | version "1.3.0" 12 | resolved "https://registry.yarnpkg.com/decco/-/decco-1.3.0.tgz#25a130a4638fcf2088f713fe871e58308604c0cb" 13 | integrity sha512-pednHg+Skby+sw193hbHTRLihZskmXrPsVMlqL9XpuLm+HfwMgS76lFRAkTGAi3435q0TBygTpt8McVTyk4Sfw== 14 | -------------------------------------------------------------------------------- /packages/ppx/.npmignore: -------------------------------------------------------------------------------- 1 | _build 2 | _esy 3 | -------------------------------------------------------------------------------- /packages/ppx/bin/Bin.re: -------------------------------------------------------------------------------- 1 | open Ppxlib; 2 | include LensesPpx; 3 | 4 | let () = Driver.standalone(); 5 | -------------------------------------------------------------------------------- /packages/ppx/bin/dune: -------------------------------------------------------------------------------- 1 | (executable 2 | (name bin) 3 | (public_name lenses-ppx) 4 | (libraries lenses-ppx.lib)) 5 | -------------------------------------------------------------------------------- /packages/ppx/dune-project: -------------------------------------------------------------------------------- 1 | (lang dune 1.11) 2 | -------------------------------------------------------------------------------- /packages/ppx/dune-workspace: -------------------------------------------------------------------------------- 1 | (lang dune 1.11) 2 | 3 | (env (release-static (flags (:standard -ccopt -static)))) 4 | -------------------------------------------------------------------------------- /packages/ppx/esy.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lenses-ppx", 3 | "version": "2.0.0", 4 | "scripts": { 5 | "clean": "bsb -clean-world", 6 | "build": "bsb -make-world -backend native", 7 | "watch": "bsb -make-world -w", 8 | "postinstall": "npm run build && cp lib/bs/native/lensesppx.native ppx", 9 | "release-static": "dune build --root . --only-packages '#{self.name}' --ignore-promoted-rules --no-config --profile release-static", 10 | "dev:rewriter": 11 | "ocamlfind ppx_tools/rewriter _build/default/bin/bin.exe test/Test.ml", 12 | "dev:dumpast": "ocamlfind ppx_tools/dumpast test/Wanted.ml" 13 | }, 14 | "esy": { 15 | "buildsInSource": "_build", 16 | "release": { "releasedBinaries": [ "bin.exe" ] } 17 | }, 18 | "dependencies": { 19 | "@esy-ocaml/reason": "*", 20 | "@opam/ppxlib": ">=0.22.0", 21 | "ocaml": "4.12.0+BS" 22 | }, 23 | "resolutions": { 24 | "ocaml": "anmonteiro/ocaml#75f22c8" 25 | }, 26 | "devDependencies": { 27 | "@opam/ocaml-lsp-server": "ocaml/ocaml-lsp:ocaml-lsp-server.opam", 28 | "refmterr": "*", 29 | "@opam/merlin": "*", 30 | "@opam/dune": "*" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/.gitattributes: -------------------------------------------------------------------------------- 1 | 2 | # Set eol to LF so files aren't converted to CRLF-eol on Windows. 3 | * text eol=lf linguist-generated 4 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Reset any possible .gitignore, we want all esy.lock to be un-ignored. 3 | !* 4 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "checksum": "440f5eab0243edb6ff8306022879381f", 3 | "root": "lenses-ppx@link-dev:./esy.json", 4 | "node": { 5 | "refmterr@3.3.2@d41d8cd9": { 6 | "id": "refmterr@3.3.2@d41d8cd9", 7 | "name": "refmterr", 8 | "version": "3.3.2", 9 | "source": { 10 | "type": "install", 11 | "source": [ 12 | "archive:https://registry.npmjs.org/refmterr/-/refmterr-3.3.2.tgz#sha1:0536990e8a9f69684bdaa1e441904da6722fbb5a" 13 | ] 14 | }, 15 | "overrides": [], 16 | "dependencies": [ 17 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 18 | "@reason-native/pastel@0.3.0@d41d8cd9", 19 | "@reason-native/console@0.1.0@d41d8cd9", 20 | "@opam/re@opam:1.9.0@d4d5e13d", "@opam/dune@opam:2.8.4@ee414d6c", 21 | "@opam/atdgen@opam:2.2.1@d73fda11", 22 | "@esy-ocaml/reason@3.7.0@d41d8cd9" 23 | ], 24 | "devDependencies": [] 25 | }, 26 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9": { 27 | "id": "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 28 | "name": "ocaml", 29 | "version": "github:anmonteiro/ocaml#75f22c8", 30 | "source": { 31 | "type": "install", 32 | "source": [ "github:anmonteiro/ocaml#75f22c8" ] 33 | }, 34 | "overrides": [], 35 | "dependencies": [], 36 | "devDependencies": [] 37 | }, 38 | "lenses-ppx@link-dev:./esy.json": { 39 | "id": "lenses-ppx@link-dev:./esy.json", 40 | "name": "lenses-ppx", 41 | "version": "link-dev:./esy.json", 42 | "source": { "type": "link-dev", "path": ".", "manifest": "esy.json" }, 43 | "overrides": [], 44 | "dependencies": [ 45 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 46 | "@opam/ppxlib@opam:0.22.0@d2d2223a", 47 | "@esy-ocaml/reason@3.7.0@d41d8cd9" 48 | ], 49 | "devDependencies": [ 50 | "refmterr@3.3.2@d41d8cd9", 51 | "@opam/ocaml-lsp-server@github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#de0213cfe26862b2533c55ed232c6811cfc08f14@d41d8cd9", 52 | "@opam/merlin@opam:4.1-412@a9da5f4b", 53 | "@opam/dune@opam:2.8.4@ee414d6c" 54 | ] 55 | }, 56 | "@reason-native/pastel@0.3.0@d41d8cd9": { 57 | "id": "@reason-native/pastel@0.3.0@d41d8cd9", 58 | "name": "@reason-native/pastel", 59 | "version": "0.3.0", 60 | "source": { 61 | "type": "install", 62 | "source": [ 63 | "archive:https://registry.npmjs.org/@reason-native/pastel/-/pastel-0.3.0.tgz#sha1:07da3c5a0933e61bc3b353bc85aa71ac7c0f311c" 64 | ] 65 | }, 66 | "overrides": [], 67 | "dependencies": [ 68 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 69 | "@opam/re@opam:1.9.0@d4d5e13d", "@opam/dune@opam:2.8.4@ee414d6c", 70 | "@esy-ocaml/reason@3.7.0@d41d8cd9" 71 | ], 72 | "devDependencies": [] 73 | }, 74 | "@reason-native/console@0.1.0@d41d8cd9": { 75 | "id": "@reason-native/console@0.1.0@d41d8cd9", 76 | "name": "@reason-native/console", 77 | "version": "0.1.0", 78 | "source": { 79 | "type": "install", 80 | "source": [ 81 | "archive:https://registry.npmjs.org/@reason-native/console/-/console-0.1.0.tgz#sha1:3b56f0e9e1be8464329793df29020aa90e71c22c" 82 | ] 83 | }, 84 | "overrides": [], 85 | "dependencies": [ 86 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 87 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/reason@3.7.0@d41d8cd9" 88 | ], 89 | "devDependencies": [] 90 | }, 91 | "@opam/yojson@opam:1.7.0@7056d985": { 92 | "id": "@opam/yojson@opam:1.7.0@7056d985", 93 | "name": "@opam/yojson", 94 | "version": "opam:1.7.0", 95 | "source": { 96 | "type": "install", 97 | "source": [ 98 | "archive:https://opam.ocaml.org/cache/md5/b8/b89d39ca3f8c532abe5f547ad3b8f84d#md5:b89d39ca3f8c532abe5f547ad3b8f84d", 99 | "archive:https://github.com/ocaml-community/yojson/releases/download/1.7.0/yojson-1.7.0.tbz#md5:b89d39ca3f8c532abe5f547ad3b8f84d" 100 | ], 101 | "opam": { 102 | "name": "yojson", 103 | "version": "1.7.0", 104 | "path": "esy.lock/opam/yojson.1.7.0" 105 | } 106 | }, 107 | "overrides": [], 108 | "dependencies": [ 109 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 110 | "@opam/easy-format@opam:1.3.2@0484b3c4", 111 | "@opam/dune@opam:2.8.4@ee414d6c", "@opam/cppo@opam:1.6.7@c28ac3ae", 112 | "@opam/biniou@opam:1.2.1@d7570399", 113 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 114 | ], 115 | "devDependencies": [ 116 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 117 | "@opam/easy-format@opam:1.3.2@0484b3c4", 118 | "@opam/dune@opam:2.8.4@ee414d6c", "@opam/biniou@opam:1.2.1@d7570399" 119 | ] 120 | }, 121 | "@opam/stdlib-shims@opam:0.3.0@0d088929": { 122 | "id": "@opam/stdlib-shims@opam:0.3.0@0d088929", 123 | "name": "@opam/stdlib-shims", 124 | "version": "opam:0.3.0", 125 | "source": { 126 | "type": "install", 127 | "source": [ 128 | "archive:https://opam.ocaml.org/cache/sha256/ba/babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a#sha256:babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a", 129 | "archive:https://github.com/ocaml/stdlib-shims/releases/download/0.3.0/stdlib-shims-0.3.0.tbz#sha256:babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a" 130 | ], 131 | "opam": { 132 | "name": "stdlib-shims", 133 | "version": "0.3.0", 134 | "path": "esy.lock/opam/stdlib-shims.0.3.0" 135 | } 136 | }, 137 | "overrides": [], 138 | "dependencies": [ 139 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 140 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 141 | ], 142 | "devDependencies": [ 143 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 144 | "@opam/dune@opam:2.8.4@ee414d6c" 145 | ] 146 | }, 147 | "@opam/sexplib0@opam:v0.14.0@ddeb6438": { 148 | "id": "@opam/sexplib0@opam:v0.14.0@ddeb6438", 149 | "name": "@opam/sexplib0", 150 | "version": "opam:v0.14.0", 151 | "source": { 152 | "type": "install", 153 | "source": [ 154 | "archive:https://opam.ocaml.org/cache/md5/37/37aff0af8f8f6f759249475684aebdc4#md5:37aff0af8f8f6f759249475684aebdc4", 155 | "archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/sexplib0-v0.14.0.tar.gz#md5:37aff0af8f8f6f759249475684aebdc4" 156 | ], 157 | "opam": { 158 | "name": "sexplib0", 159 | "version": "v0.14.0", 160 | "path": "esy.lock/opam/sexplib0.v0.14.0" 161 | } 162 | }, 163 | "overrides": [], 164 | "dependencies": [ 165 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 166 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 167 | ], 168 | "devDependencies": [ 169 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 170 | "@opam/dune@opam:2.8.4@ee414d6c" 171 | ] 172 | }, 173 | "@opam/seq@opam:base@d8d7de1d": { 174 | "id": "@opam/seq@opam:base@d8d7de1d", 175 | "name": "@opam/seq", 176 | "version": "opam:base", 177 | "source": { 178 | "type": "install", 179 | "source": [ "no-source:" ], 180 | "opam": { 181 | "name": "seq", 182 | "version": "base", 183 | "path": "esy.lock/opam/seq.base" 184 | } 185 | }, 186 | "overrides": [], 187 | "dependencies": [ 188 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 189 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 190 | ], 191 | "devDependencies": [ "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9" ] 192 | }, 193 | "@opam/result@opam:1.5@6b753c82": { 194 | "id": "@opam/result@opam:1.5@6b753c82", 195 | "name": "@opam/result", 196 | "version": "opam:1.5", 197 | "source": { 198 | "type": "install", 199 | "source": [ 200 | "archive:https://opam.ocaml.org/cache/md5/1b/1b82dec78849680b49ae9a8a365b831b#md5:1b82dec78849680b49ae9a8a365b831b", 201 | "archive:https://github.com/janestreet/result/releases/download/1.5/result-1.5.tbz#md5:1b82dec78849680b49ae9a8a365b831b" 202 | ], 203 | "opam": { 204 | "name": "result", 205 | "version": "1.5", 206 | "path": "esy.lock/opam/result.1.5" 207 | } 208 | }, 209 | "overrides": [], 210 | "dependencies": [ 211 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 212 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 213 | ], 214 | "devDependencies": [ 215 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 216 | "@opam/dune@opam:2.8.4@ee414d6c" 217 | ] 218 | }, 219 | "@opam/re@opam:1.9.0@d4d5e13d": { 220 | "id": "@opam/re@opam:1.9.0@d4d5e13d", 221 | "name": "@opam/re", 222 | "version": "opam:1.9.0", 223 | "source": { 224 | "type": "install", 225 | "source": [ 226 | "archive:https://opam.ocaml.org/cache/md5/bd/bddaed4f386a22cace7850c9c7dac296#md5:bddaed4f386a22cace7850c9c7dac296", 227 | "archive:https://github.com/ocaml/ocaml-re/releases/download/1.9.0/re-1.9.0.tbz#md5:bddaed4f386a22cace7850c9c7dac296" 228 | ], 229 | "opam": { 230 | "name": "re", 231 | "version": "1.9.0", 232 | "path": "esy.lock/opam/re.1.9.0" 233 | } 234 | }, 235 | "overrides": [], 236 | "dependencies": [ 237 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 238 | "@opam/seq@opam:base@d8d7de1d", "@opam/dune@opam:2.8.4@ee414d6c", 239 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 240 | ], 241 | "devDependencies": [ 242 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 243 | "@opam/seq@opam:base@d8d7de1d", "@opam/dune@opam:2.8.4@ee414d6c" 244 | ] 245 | }, 246 | "@opam/ppxlib@opam:0.22.0@d2d2223a": { 247 | "id": "@opam/ppxlib@opam:0.22.0@d2d2223a", 248 | "name": "@opam/ppxlib", 249 | "version": "opam:0.22.0", 250 | "source": { 251 | "type": "install", 252 | "source": [ 253 | "archive:https://opam.ocaml.org/cache/sha256/3e/3eeb91e03966662284a3222e612dee7f4fa2b7637c53d9572d2a74134bb96d7a#sha256:3eeb91e03966662284a3222e612dee7f4fa2b7637c53d9572d2a74134bb96d7a", 254 | "archive:https://github.com/ocaml-ppx/ppxlib/releases/download/0.22.0/ppxlib-0.22.0.tbz#sha256:3eeb91e03966662284a3222e612dee7f4fa2b7637c53d9572d2a74134bb96d7a" 255 | ], 256 | "opam": { 257 | "name": "ppxlib", 258 | "version": "0.22.0", 259 | "path": "esy.lock/opam/ppxlib.0.22.0" 260 | } 261 | }, 262 | "overrides": [], 263 | "dependencies": [ 264 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 265 | "@opam/stdlib-shims@opam:0.3.0@0d088929", 266 | "@opam/sexplib0@opam:v0.14.0@ddeb6438", 267 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 268 | "@opam/ocaml-migrate-parsetree@opam:2.1.0@a3b6747d", 269 | "@opam/ocaml-compiler-libs@opam:v0.12.3@f0f069bd", 270 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 271 | ], 272 | "devDependencies": [ 273 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 274 | "@opam/stdlib-shims@opam:0.3.0@0d088929", 275 | "@opam/sexplib0@opam:v0.14.0@ddeb6438", 276 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 277 | "@opam/ocaml-migrate-parsetree@opam:2.1.0@a3b6747d", 278 | "@opam/ocaml-compiler-libs@opam:v0.12.3@f0f069bd", 279 | "@opam/dune@opam:2.8.4@ee414d6c" 280 | ] 281 | }, 282 | "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6": { 283 | "id": "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6", 284 | "name": "@opam/ppx_yojson_conv_lib", 285 | "version": "opam:v0.14.0", 286 | "source": { 287 | "type": "install", 288 | "source": [ 289 | "archive:https://opam.ocaml.org/cache/md5/e2/e23c5593a7211ad4fb09e26e9a74698a#md5:e23c5593a7211ad4fb09e26e9a74698a", 290 | "archive:https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_yojson_conv_lib-v0.14.0.tar.gz#md5:e23c5593a7211ad4fb09e26e9a74698a" 291 | ], 292 | "opam": { 293 | "name": "ppx_yojson_conv_lib", 294 | "version": "v0.14.0", 295 | "path": "esy.lock/opam/ppx_yojson_conv_lib.v0.14.0" 296 | } 297 | }, 298 | "overrides": [], 299 | "dependencies": [ 300 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 301 | "@opam/yojson@opam:1.7.0@7056d985", "@opam/dune@opam:2.8.4@ee414d6c", 302 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 303 | ], 304 | "devDependencies": [ 305 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 306 | "@opam/yojson@opam:1.7.0@7056d985", "@opam/dune@opam:2.8.4@ee414d6c" 307 | ] 308 | }, 309 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45": { 310 | "id": "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 311 | "name": "@opam/ppx_derivers", 312 | "version": "opam:1.2.1", 313 | "source": { 314 | "type": "install", 315 | "source": [ 316 | "archive:https://opam.ocaml.org/cache/md5/5d/5dc2bf130c1db3c731fe0fffc5648b41#md5:5dc2bf130c1db3c731fe0fffc5648b41", 317 | "archive:https://github.com/ocaml-ppx/ppx_derivers/archive/1.2.1.tar.gz#md5:5dc2bf130c1db3c731fe0fffc5648b41" 318 | ], 319 | "opam": { 320 | "name": "ppx_derivers", 321 | "version": "1.2.1", 322 | "path": "esy.lock/opam/ppx_derivers.1.2.1" 323 | } 324 | }, 325 | "overrides": [], 326 | "dependencies": [ 327 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 328 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 329 | ], 330 | "devDependencies": [ 331 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 332 | "@opam/dune@opam:2.8.4@ee414d6c" 333 | ] 334 | }, 335 | "@opam/ocamlfind@opam:1.9.1@b748edf6": { 336 | "id": "@opam/ocamlfind@opam:1.9.1@b748edf6", 337 | "name": "@opam/ocamlfind", 338 | "version": "opam:1.9.1", 339 | "source": { 340 | "type": "install", 341 | "source": [ 342 | "archive:https://opam.ocaml.org/cache/md5/65/65e6dc9b305ccbed1267275fe180f538#md5:65e6dc9b305ccbed1267275fe180f538", 343 | "archive:http://download.camlcity.org/download/findlib-1.9.1.tar.gz#md5:65e6dc9b305ccbed1267275fe180f538" 344 | ], 345 | "opam": { 346 | "name": "ocamlfind", 347 | "version": "1.9.1", 348 | "path": "esy.lock/opam/ocamlfind.1.9.1" 349 | } 350 | }, 351 | "overrides": [ 352 | { 353 | "opamoverride": 354 | "esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.1_opam_override" 355 | } 356 | ], 357 | "dependencies": [ 358 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 359 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 360 | ], 361 | "devDependencies": [ "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9" ] 362 | }, 363 | "@opam/ocaml-migrate-parsetree@opam:2.1.0@a3b6747d": { 364 | "id": "@opam/ocaml-migrate-parsetree@opam:2.1.0@a3b6747d", 365 | "name": "@opam/ocaml-migrate-parsetree", 366 | "version": "opam:2.1.0", 367 | "source": { 368 | "type": "install", 369 | "source": [ 370 | "archive:https://opam.ocaml.org/cache/sha256/38/387b788ee4c0537f1fe02c25e05f0335af424828fc6fe940acc0db5948a5a71f#sha256:387b788ee4c0537f1fe02c25e05f0335af424828fc6fe940acc0db5948a5a71f", 371 | "archive:https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v2.1.0/ocaml-migrate-parsetree-v2.1.0.tbz#sha256:387b788ee4c0537f1fe02c25e05f0335af424828fc6fe940acc0db5948a5a71f" 372 | ], 373 | "opam": { 374 | "name": "ocaml-migrate-parsetree", 375 | "version": "2.1.0", 376 | "path": "esy.lock/opam/ocaml-migrate-parsetree.2.1.0" 377 | } 378 | }, 379 | "overrides": [], 380 | "dependencies": [ 381 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 382 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 383 | ], 384 | "devDependencies": [ 385 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 386 | "@opam/dune@opam:2.8.4@ee414d6c" 387 | ] 388 | }, 389 | "@opam/ocaml-lsp-server@github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#de0213cfe26862b2533c55ed232c6811cfc08f14@d41d8cd9": { 390 | "id": 391 | "@opam/ocaml-lsp-server@github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#de0213cfe26862b2533c55ed232c6811cfc08f14@d41d8cd9", 392 | "name": "@opam/ocaml-lsp-server", 393 | "version": 394 | "github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#de0213cfe26862b2533c55ed232c6811cfc08f14", 395 | "source": { 396 | "type": "install", 397 | "source": [ 398 | "github:ocaml/ocaml-lsp:ocaml-lsp-server.opam#de0213cfe26862b2533c55ed232c6811cfc08f14" 399 | ] 400 | }, 401 | "overrides": [], 402 | "dependencies": [ 403 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 404 | "@opam/yojson@opam:1.7.0@7056d985", 405 | "@opam/stdlib-shims@opam:0.3.0@0d088929", 406 | "@opam/result@opam:1.5@6b753c82", 407 | "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6", 408 | "@opam/ocamlfind@opam:1.9.1@b748edf6", 409 | "@opam/dune-build-info@opam:2.8.4@c3b98e33", 410 | "@opam/dune@opam:2.8.4@ee414d6c", 411 | "@opam/dot-merlin-reader@opam:4.1@120afa42", 412 | "@opam/csexp@opam:1.4.0@bd1cb034", "@esy-ocaml/substs@0.0.1@d41d8cd9" 413 | ], 414 | "devDependencies": [ 415 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 416 | "@opam/yojson@opam:1.7.0@7056d985", 417 | "@opam/stdlib-shims@opam:0.3.0@0d088929", 418 | "@opam/result@opam:1.5@6b753c82", 419 | "@opam/ppx_yojson_conv_lib@opam:v0.14.0@116b53d6", 420 | "@opam/ocamlfind@opam:1.9.1@b748edf6", 421 | "@opam/dune-build-info@opam:2.8.4@c3b98e33", 422 | "@opam/dune@opam:2.8.4@ee414d6c", 423 | "@opam/dot-merlin-reader@opam:4.1@120afa42", 424 | "@opam/csexp@opam:1.4.0@bd1cb034" 425 | ] 426 | }, 427 | "@opam/ocaml-compiler-libs@opam:v0.12.3@f0f069bd": { 428 | "id": "@opam/ocaml-compiler-libs@opam:v0.12.3@f0f069bd", 429 | "name": "@opam/ocaml-compiler-libs", 430 | "version": "opam:v0.12.3", 431 | "source": { 432 | "type": "install", 433 | "source": [ 434 | "archive:https://opam.ocaml.org/cache/sha256/a8/a8403531439c14bbda2d504ef93610fd29a8e9520fc700f21889d893a513e3c9#sha256:a8403531439c14bbda2d504ef93610fd29a8e9520fc700f21889d893a513e3c9", 435 | "archive:https://github.com/janestreet/ocaml-compiler-libs/releases/download/v0.12.3/ocaml-compiler-libs-v0.12.3.tbz#sha256:a8403531439c14bbda2d504ef93610fd29a8e9520fc700f21889d893a513e3c9" 436 | ], 437 | "opam": { 438 | "name": "ocaml-compiler-libs", 439 | "version": "v0.12.3", 440 | "path": "esy.lock/opam/ocaml-compiler-libs.v0.12.3" 441 | } 442 | }, 443 | "overrides": [], 444 | "dependencies": [ 445 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 446 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 447 | ], 448 | "devDependencies": [ 449 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 450 | "@opam/dune@opam:2.8.4@ee414d6c" 451 | ] 452 | }, 453 | "@opam/merlin-extend@opam:0.6@404f814c": { 454 | "id": "@opam/merlin-extend@opam:0.6@404f814c", 455 | "name": "@opam/merlin-extend", 456 | "version": "opam:0.6", 457 | "source": { 458 | "type": "install", 459 | "source": [ 460 | "archive:https://opam.ocaml.org/cache/sha256/c2/c2f236ae97feb6ba0bc90f33beb7b7343e42f9871b66de9ba07974917e256c43#sha256:c2f236ae97feb6ba0bc90f33beb7b7343e42f9871b66de9ba07974917e256c43", 461 | "archive:https://github.com/let-def/merlin-extend/releases/download/v0.6/merlin-extend-v0.6.tbz#sha256:c2f236ae97feb6ba0bc90f33beb7b7343e42f9871b66de9ba07974917e256c43" 462 | ], 463 | "opam": { 464 | "name": "merlin-extend", 465 | "version": "0.6", 466 | "path": "esy.lock/opam/merlin-extend.0.6" 467 | } 468 | }, 469 | "overrides": [], 470 | "dependencies": [ 471 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 472 | "@opam/dune@opam:2.8.4@ee414d6c", "@opam/cppo@opam:1.6.7@c28ac3ae", 473 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 474 | ], 475 | "devDependencies": [ 476 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 477 | "@opam/dune@opam:2.8.4@ee414d6c" 478 | ] 479 | }, 480 | "@opam/merlin@opam:4.1-412@a9da5f4b": { 481 | "id": "@opam/merlin@opam:4.1-412@a9da5f4b", 482 | "name": "@opam/merlin", 483 | "version": "opam:4.1-412", 484 | "source": { 485 | "type": "install", 486 | "source": [ 487 | "archive:https://opam.ocaml.org/cache/sha256/fb/fb4caede73bdb8393bd60e31792af74b901ae2d319ac2f2a2252c694d2069d8d#sha256:fb4caede73bdb8393bd60e31792af74b901ae2d319ac2f2a2252c694d2069d8d", 488 | "archive:https://github.com/ocaml/merlin/releases/download/v4.1-412/merlin-v4.1-412.tbz#sha256:fb4caede73bdb8393bd60e31792af74b901ae2d319ac2f2a2252c694d2069d8d" 489 | ], 490 | "opam": { 491 | "name": "merlin", 492 | "version": "4.1-412", 493 | "path": "esy.lock/opam/merlin.4.1-412" 494 | } 495 | }, 496 | "overrides": [], 497 | "dependencies": [ 498 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 499 | "@opam/yojson@opam:1.7.0@7056d985", "@opam/result@opam:1.5@6b753c82", 500 | "@opam/dune@opam:2.8.4@ee414d6c", 501 | "@opam/dot-merlin-reader@opam:4.1@120afa42", 502 | "@opam/csexp@opam:1.4.0@bd1cb034", "@esy-ocaml/substs@0.0.1@d41d8cd9" 503 | ], 504 | "devDependencies": [ 505 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 506 | "@opam/yojson@opam:1.7.0@7056d985", "@opam/result@opam:1.5@6b753c82", 507 | "@opam/dune@opam:2.8.4@ee414d6c", 508 | "@opam/dot-merlin-reader@opam:4.1@120afa42", 509 | "@opam/csexp@opam:1.4.0@bd1cb034" 510 | ] 511 | }, 512 | "@opam/menhirSdk@opam:20210310@5abaafca": { 513 | "id": "@opam/menhirSdk@opam:20210310@5abaafca", 514 | "name": "@opam/menhirSdk", 515 | "version": "opam:20210310", 516 | "source": { 517 | "type": "install", 518 | "source": [ 519 | "archive:https://opam.ocaml.org/cache/md5/1c/1cbc71c0bc1f3ddc3e71d5c1f919fd1a#md5:1cbc71c0bc1f3ddc3e71d5c1f919fd1a", 520 | "archive:https://gitlab.inria.fr/fpottier/menhir/repository/20210310/archive.tar.gz#md5:1cbc71c0bc1f3ddc3e71d5c1f919fd1a" 521 | ], 522 | "opam": { 523 | "name": "menhirSdk", 524 | "version": "20210310", 525 | "path": "esy.lock/opam/menhirSdk.20210310" 526 | } 527 | }, 528 | "overrides": [], 529 | "dependencies": [ 530 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 531 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 532 | ], 533 | "devDependencies": [ 534 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 535 | "@opam/dune@opam:2.8.4@ee414d6c" 536 | ] 537 | }, 538 | "@opam/menhirLib@opam:20210310@f9315713": { 539 | "id": "@opam/menhirLib@opam:20210310@f9315713", 540 | "name": "@opam/menhirLib", 541 | "version": "opam:20210310", 542 | "source": { 543 | "type": "install", 544 | "source": [ 545 | "archive:https://opam.ocaml.org/cache/md5/1c/1cbc71c0bc1f3ddc3e71d5c1f919fd1a#md5:1cbc71c0bc1f3ddc3e71d5c1f919fd1a", 546 | "archive:https://gitlab.inria.fr/fpottier/menhir/repository/20210310/archive.tar.gz#md5:1cbc71c0bc1f3ddc3e71d5c1f919fd1a" 547 | ], 548 | "opam": { 549 | "name": "menhirLib", 550 | "version": "20210310", 551 | "path": "esy.lock/opam/menhirLib.20210310" 552 | } 553 | }, 554 | "overrides": [], 555 | "dependencies": [ 556 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 557 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 558 | ], 559 | "devDependencies": [ 560 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 561 | "@opam/dune@opam:2.8.4@ee414d6c" 562 | ] 563 | }, 564 | "@opam/menhir@opam:20210310@50de9216": { 565 | "id": "@opam/menhir@opam:20210310@50de9216", 566 | "name": "@opam/menhir", 567 | "version": "opam:20210310", 568 | "source": { 569 | "type": "install", 570 | "source": [ 571 | "archive:https://opam.ocaml.org/cache/md5/1c/1cbc71c0bc1f3ddc3e71d5c1f919fd1a#md5:1cbc71c0bc1f3ddc3e71d5c1f919fd1a", 572 | "archive:https://gitlab.inria.fr/fpottier/menhir/repository/20210310/archive.tar.gz#md5:1cbc71c0bc1f3ddc3e71d5c1f919fd1a" 573 | ], 574 | "opam": { 575 | "name": "menhir", 576 | "version": "20210310", 577 | "path": "esy.lock/opam/menhir.20210310" 578 | } 579 | }, 580 | "overrides": [], 581 | "dependencies": [ 582 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 583 | "@opam/menhirSdk@opam:20210310@5abaafca", 584 | "@opam/menhirLib@opam:20210310@f9315713", 585 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 586 | ], 587 | "devDependencies": [ 588 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 589 | "@opam/menhirSdk@opam:20210310@5abaafca", 590 | "@opam/menhirLib@opam:20210310@f9315713", 591 | "@opam/dune@opam:2.8.4@ee414d6c" 592 | ] 593 | }, 594 | "@opam/fix@opam:20201120@5c318621": { 595 | "id": "@opam/fix@opam:20201120@5c318621", 596 | "name": "@opam/fix", 597 | "version": "opam:20201120", 598 | "source": { 599 | "type": "install", 600 | "source": [ 601 | "archive:https://opam.ocaml.org/cache/md5/7e/7eb570b759635fe66f3556d2b1cc88e3#md5:7eb570b759635fe66f3556d2b1cc88e3", 602 | "archive:https://gitlab.inria.fr/fpottier/fix/repository/20201120/archive.tar.gz#md5:7eb570b759635fe66f3556d2b1cc88e3" 603 | ], 604 | "opam": { 605 | "name": "fix", 606 | "version": "20201120", 607 | "path": "esy.lock/opam/fix.20201120" 608 | } 609 | }, 610 | "overrides": [], 611 | "dependencies": [ 612 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 613 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 614 | ], 615 | "devDependencies": [ 616 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 617 | "@opam/dune@opam:2.8.4@ee414d6c" 618 | ] 619 | }, 620 | "@opam/easy-format@opam:1.3.2@0484b3c4": { 621 | "id": "@opam/easy-format@opam:1.3.2@0484b3c4", 622 | "name": "@opam/easy-format", 623 | "version": "opam:1.3.2", 624 | "source": { 625 | "type": "install", 626 | "source": [ 627 | "archive:https://opam.ocaml.org/cache/sha256/34/3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926#sha256:3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926", 628 | "archive:https://github.com/mjambon/easy-format/releases/download/1.3.2/easy-format-1.3.2.tbz#sha256:3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926" 629 | ], 630 | "opam": { 631 | "name": "easy-format", 632 | "version": "1.3.2", 633 | "path": "esy.lock/opam/easy-format.1.3.2" 634 | } 635 | }, 636 | "overrides": [], 637 | "dependencies": [ 638 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 639 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 640 | ], 641 | "devDependencies": [ 642 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 643 | "@opam/dune@opam:2.8.4@ee414d6c" 644 | ] 645 | }, 646 | "@opam/dune-build-info@opam:2.8.4@c3b98e33": { 647 | "id": "@opam/dune-build-info@opam:2.8.4@c3b98e33", 648 | "name": "@opam/dune-build-info", 649 | "version": "opam:2.8.4", 650 | "source": { 651 | "type": "install", 652 | "source": [ 653 | "archive:https://opam.ocaml.org/cache/sha256/4e/4e6420177584aabdc3b7b37aee3026b094b82bf5d7ed175344a68e321f72e8ac#sha256:4e6420177584aabdc3b7b37aee3026b094b82bf5d7ed175344a68e321f72e8ac", 654 | "archive:https://github.com/ocaml/dune/releases/download/2.8.4/dune-2.8.4.tbz#sha256:4e6420177584aabdc3b7b37aee3026b094b82bf5d7ed175344a68e321f72e8ac" 655 | ], 656 | "opam": { 657 | "name": "dune-build-info", 658 | "version": "2.8.4", 659 | "path": "esy.lock/opam/dune-build-info.2.8.4" 660 | } 661 | }, 662 | "overrides": [], 663 | "dependencies": [ 664 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 665 | ], 666 | "devDependencies": [ "@opam/dune@opam:2.8.4@ee414d6c" ] 667 | }, 668 | "@opam/dune@opam:2.8.4@ee414d6c": { 669 | "id": "@opam/dune@opam:2.8.4@ee414d6c", 670 | "name": "@opam/dune", 671 | "version": "opam:2.8.4", 672 | "source": { 673 | "type": "install", 674 | "source": [ 675 | "archive:https://opam.ocaml.org/cache/sha256/4e/4e6420177584aabdc3b7b37aee3026b094b82bf5d7ed175344a68e321f72e8ac#sha256:4e6420177584aabdc3b7b37aee3026b094b82bf5d7ed175344a68e321f72e8ac", 676 | "archive:https://github.com/ocaml/dune/releases/download/2.8.4/dune-2.8.4.tbz#sha256:4e6420177584aabdc3b7b37aee3026b094b82bf5d7ed175344a68e321f72e8ac" 677 | ], 678 | "opam": { 679 | "name": "dune", 680 | "version": "2.8.4", 681 | "path": "esy.lock/opam/dune.2.8.4" 682 | } 683 | }, 684 | "overrides": [], 685 | "dependencies": [ 686 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 687 | "@opam/base-unix@opam:base@87d0b2eb", 688 | "@opam/base-threads@opam:base@36803084", 689 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 690 | ], 691 | "devDependencies": [ 692 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 693 | "@opam/base-unix@opam:base@87d0b2eb", 694 | "@opam/base-threads@opam:base@36803084" 695 | ] 696 | }, 697 | "@opam/dot-merlin-reader@opam:4.1@120afa42": { 698 | "id": "@opam/dot-merlin-reader@opam:4.1@120afa42", 699 | "name": "@opam/dot-merlin-reader", 700 | "version": "opam:4.1", 701 | "source": { 702 | "type": "install", 703 | "source": [ 704 | "archive:https://opam.ocaml.org/cache/sha256/14/14a36d6fb8646a5df4530420a7861722f1a4ee04753717947305e3676031e7cd#sha256:14a36d6fb8646a5df4530420a7861722f1a4ee04753717947305e3676031e7cd", 705 | "archive:https://github.com/ocaml/merlin/releases/download/v4.1/dot-merlin-reader-v4.1.tbz#sha256:14a36d6fb8646a5df4530420a7861722f1a4ee04753717947305e3676031e7cd" 706 | ], 707 | "opam": { 708 | "name": "dot-merlin-reader", 709 | "version": "4.1", 710 | "path": "esy.lock/opam/dot-merlin-reader.4.1" 711 | } 712 | }, 713 | "overrides": [], 714 | "dependencies": [ 715 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 716 | "@opam/yojson@opam:1.7.0@7056d985", "@opam/result@opam:1.5@6b753c82", 717 | "@opam/ocamlfind@opam:1.9.1@b748edf6", 718 | "@opam/dune@opam:2.8.4@ee414d6c", "@opam/csexp@opam:1.4.0@bd1cb034", 719 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 720 | ], 721 | "devDependencies": [ 722 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 723 | "@opam/yojson@opam:1.7.0@7056d985", "@opam/result@opam:1.5@6b753c82", 724 | "@opam/ocamlfind@opam:1.9.1@b748edf6", 725 | "@opam/dune@opam:2.8.4@ee414d6c", "@opam/csexp@opam:1.4.0@bd1cb034" 726 | ] 727 | }, 728 | "@opam/csexp@opam:1.4.0@bd1cb034": { 729 | "id": "@opam/csexp@opam:1.4.0@bd1cb034", 730 | "name": "@opam/csexp", 731 | "version": "opam:1.4.0", 732 | "source": { 733 | "type": "install", 734 | "source": [ 735 | "archive:https://opam.ocaml.org/cache/sha256/8e/8e3d6fca87f102a126dee8b72a2a0d146f10439c47218dfc149d51bf3edf364e#sha256:8e3d6fca87f102a126dee8b72a2a0d146f10439c47218dfc149d51bf3edf364e", 736 | "archive:https://github.com/ocaml-dune/csexp/releases/download/1.4.0/csexp-1.4.0.tbz#sha256:8e3d6fca87f102a126dee8b72a2a0d146f10439c47218dfc149d51bf3edf364e" 737 | ], 738 | "opam": { 739 | "name": "csexp", 740 | "version": "1.4.0", 741 | "path": "esy.lock/opam/csexp.1.4.0" 742 | } 743 | }, 744 | "overrides": [], 745 | "dependencies": [ 746 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 747 | "@opam/result@opam:1.5@6b753c82", "@opam/dune@opam:2.8.4@ee414d6c", 748 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 749 | ], 750 | "devDependencies": [ 751 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 752 | "@opam/result@opam:1.5@6b753c82", "@opam/dune@opam:2.8.4@ee414d6c" 753 | ] 754 | }, 755 | "@opam/cppo@opam:1.6.7@c28ac3ae": { 756 | "id": "@opam/cppo@opam:1.6.7@c28ac3ae", 757 | "name": "@opam/cppo", 758 | "version": "opam:1.6.7", 759 | "source": { 760 | "type": "install", 761 | "source": [ 762 | "archive:https://opam.ocaml.org/cache/sha256/db/db553e3e6c206df09b1858c3aef5e21e56564d593642a3c78bcedb6af36f529d#sha256:db553e3e6c206df09b1858c3aef5e21e56564d593642a3c78bcedb6af36f529d", 763 | "archive:https://github.com/ocaml-community/cppo/releases/download/v1.6.7/cppo-v1.6.7.tbz#sha256:db553e3e6c206df09b1858c3aef5e21e56564d593642a3c78bcedb6af36f529d" 764 | ], 765 | "opam": { 766 | "name": "cppo", 767 | "version": "1.6.7", 768 | "path": "esy.lock/opam/cppo.1.6.7" 769 | } 770 | }, 771 | "overrides": [], 772 | "dependencies": [ 773 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 774 | "@opam/dune@opam:2.8.4@ee414d6c", 775 | "@opam/base-unix@opam:base@87d0b2eb", 776 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 777 | ], 778 | "devDependencies": [ 779 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 780 | "@opam/dune@opam:2.8.4@ee414d6c", 781 | "@opam/base-unix@opam:base@87d0b2eb" 782 | ] 783 | }, 784 | "@opam/biniou@opam:1.2.1@d7570399": { 785 | "id": "@opam/biniou@opam:1.2.1@d7570399", 786 | "name": "@opam/biniou", 787 | "version": "opam:1.2.1", 788 | "source": { 789 | "type": "install", 790 | "source": [ 791 | "archive:https://opam.ocaml.org/cache/sha256/35/35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335#sha256:35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335", 792 | "archive:https://github.com/mjambon/biniou/releases/download/1.2.1/biniou-1.2.1.tbz#sha256:35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335" 793 | ], 794 | "opam": { 795 | "name": "biniou", 796 | "version": "1.2.1", 797 | "path": "esy.lock/opam/biniou.1.2.1" 798 | } 799 | }, 800 | "overrides": [], 801 | "dependencies": [ 802 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 803 | "@opam/easy-format@opam:1.3.2@0484b3c4", 804 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 805 | ], 806 | "devDependencies": [ 807 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 808 | "@opam/easy-format@opam:1.3.2@0484b3c4", 809 | "@opam/dune@opam:2.8.4@ee414d6c" 810 | ] 811 | }, 812 | "@opam/base-unix@opam:base@87d0b2eb": { 813 | "id": "@opam/base-unix@opam:base@87d0b2eb", 814 | "name": "@opam/base-unix", 815 | "version": "opam:base", 816 | "source": { 817 | "type": "install", 818 | "source": [ "no-source:" ], 819 | "opam": { 820 | "name": "base-unix", 821 | "version": "base", 822 | "path": "esy.lock/opam/base-unix.base" 823 | } 824 | }, 825 | "overrides": [], 826 | "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], 827 | "devDependencies": [] 828 | }, 829 | "@opam/base-threads@opam:base@36803084": { 830 | "id": "@opam/base-threads@opam:base@36803084", 831 | "name": "@opam/base-threads", 832 | "version": "opam:base", 833 | "source": { 834 | "type": "install", 835 | "source": [ "no-source:" ], 836 | "opam": { 837 | "name": "base-threads", 838 | "version": "base", 839 | "path": "esy.lock/opam/base-threads.base" 840 | } 841 | }, 842 | "overrides": [], 843 | "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], 844 | "devDependencies": [] 845 | }, 846 | "@opam/atdgen-runtime@opam:2.2.1@6a3a6395": { 847 | "id": "@opam/atdgen-runtime@opam:2.2.1@6a3a6395", 848 | "name": "@opam/atdgen-runtime", 849 | "version": "opam:2.2.1", 850 | "source": { 851 | "type": "install", 852 | "source": [ 853 | "archive:https://opam.ocaml.org/cache/sha256/db/db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e#sha256:db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e", 854 | "archive:https://github.com/ahrefs/atd/releases/download/2.2.1/atd-2.2.1.tbz#sha256:db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e" 855 | ], 856 | "opam": { 857 | "name": "atdgen-runtime", 858 | "version": "2.2.1", 859 | "path": "esy.lock/opam/atdgen-runtime.2.2.1" 860 | } 861 | }, 862 | "overrides": [], 863 | "dependencies": [ 864 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 865 | "@opam/yojson@opam:1.7.0@7056d985", "@opam/re@opam:1.9.0@d4d5e13d", 866 | "@opam/dune@opam:2.8.4@ee414d6c", "@opam/biniou@opam:1.2.1@d7570399", 867 | "@esy-ocaml/substs@0.0.1@d41d8cd9" 868 | ], 869 | "devDependencies": [ 870 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 871 | "@opam/yojson@opam:1.7.0@7056d985", "@opam/re@opam:1.9.0@d4d5e13d", 872 | "@opam/dune@opam:2.8.4@ee414d6c", "@opam/biniou@opam:1.2.1@d7570399" 873 | ] 874 | }, 875 | "@opam/atdgen@opam:2.2.1@d73fda11": { 876 | "id": "@opam/atdgen@opam:2.2.1@d73fda11", 877 | "name": "@opam/atdgen", 878 | "version": "opam:2.2.1", 879 | "source": { 880 | "type": "install", 881 | "source": [ 882 | "archive:https://opam.ocaml.org/cache/sha256/db/db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e#sha256:db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e", 883 | "archive:https://github.com/ahrefs/atd/releases/download/2.2.1/atd-2.2.1.tbz#sha256:db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e" 884 | ], 885 | "opam": { 886 | "name": "atdgen", 887 | "version": "2.2.1", 888 | "path": "esy.lock/opam/atdgen.2.2.1" 889 | } 890 | }, 891 | "overrides": [], 892 | "dependencies": [ 893 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 894 | "@opam/yojson@opam:1.7.0@7056d985", "@opam/dune@opam:2.8.4@ee414d6c", 895 | "@opam/biniou@opam:1.2.1@d7570399", 896 | "@opam/atdgen-runtime@opam:2.2.1@6a3a6395", 897 | "@opam/atd@opam:2.2.1@071ab6bd", "@esy-ocaml/substs@0.0.1@d41d8cd9" 898 | ], 899 | "devDependencies": [ 900 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 901 | "@opam/yojson@opam:1.7.0@7056d985", "@opam/dune@opam:2.8.4@ee414d6c", 902 | "@opam/biniou@opam:1.2.1@d7570399", 903 | "@opam/atdgen-runtime@opam:2.2.1@6a3a6395", 904 | "@opam/atd@opam:2.2.1@071ab6bd" 905 | ] 906 | }, 907 | "@opam/atd@opam:2.2.1@071ab6bd": { 908 | "id": "@opam/atd@opam:2.2.1@071ab6bd", 909 | "name": "@opam/atd", 910 | "version": "opam:2.2.1", 911 | "source": { 912 | "type": "install", 913 | "source": [ 914 | "archive:https://opam.ocaml.org/cache/sha256/db/db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e#sha256:db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e", 915 | "archive:https://github.com/ahrefs/atd/releases/download/2.2.1/atd-2.2.1.tbz#sha256:db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e" 916 | ], 917 | "opam": { 918 | "name": "atd", 919 | "version": "2.2.1", 920 | "path": "esy.lock/opam/atd.2.2.1" 921 | } 922 | }, 923 | "overrides": [], 924 | "dependencies": [ 925 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 926 | "@opam/re@opam:1.9.0@d4d5e13d", 927 | "@opam/menhir@opam:20210310@50de9216", 928 | "@opam/easy-format@opam:1.3.2@0484b3c4", 929 | "@opam/dune@opam:2.8.4@ee414d6c", "@esy-ocaml/substs@0.0.1@d41d8cd9" 930 | ], 931 | "devDependencies": [ 932 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 933 | "@opam/re@opam:1.9.0@d4d5e13d", 934 | "@opam/menhir@opam:20210310@50de9216", 935 | "@opam/easy-format@opam:1.3.2@0484b3c4", 936 | "@opam/dune@opam:2.8.4@ee414d6c" 937 | ] 938 | }, 939 | "@esy-ocaml/substs@0.0.1@d41d8cd9": { 940 | "id": "@esy-ocaml/substs@0.0.1@d41d8cd9", 941 | "name": "@esy-ocaml/substs", 942 | "version": "0.0.1", 943 | "source": { 944 | "type": "install", 945 | "source": [ 946 | "archive:https://registry.npmjs.org/@esy-ocaml/substs/-/substs-0.0.1.tgz#sha1:59ebdbbaedcda123fc7ed8fb2b302b7d819e9a46" 947 | ] 948 | }, 949 | "overrides": [], 950 | "dependencies": [], 951 | "devDependencies": [] 952 | }, 953 | "@esy-ocaml/reason@3.7.0@d41d8cd9": { 954 | "id": "@esy-ocaml/reason@3.7.0@d41d8cd9", 955 | "name": "@esy-ocaml/reason", 956 | "version": "3.7.0", 957 | "source": { 958 | "type": "install", 959 | "source": [ 960 | "archive:https://registry.npmjs.org/@esy-ocaml/reason/-/reason-3.7.0.tgz#sha1:36f92c1c854477c4da37e4769a045ffe60e4fb10" 961 | ] 962 | }, 963 | "overrides": [], 964 | "dependencies": [ 965 | "ocaml@github:anmonteiro/ocaml#75f22c8@d41d8cd9", 966 | "@opam/result@opam:1.5@6b753c82", 967 | "@opam/ppx_derivers@opam:1.2.1@ecf0aa45", 968 | "@opam/ocamlfind@opam:1.9.1@b748edf6", 969 | "@opam/merlin-extend@opam:0.6@404f814c", 970 | "@opam/menhir@opam:20210310@50de9216", 971 | "@opam/fix@opam:20201120@5c318621", "@opam/dune@opam:2.8.4@ee414d6c" 972 | ], 973 | "devDependencies": [] 974 | } 975 | } 976 | } -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/atd.2.2.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Parser for the ATD data format description language" 3 | description: """ 4 | ATD is the OCaml library providing a parser for the ATD language and various 5 | utilities. ATD stands for Adjustable Type Definitions in reference to its main 6 | property of supporting annotations that allow a good fit with a variety of data 7 | formats. """ 8 | maintainer: ["Rudi Grinberg "] 9 | authors: [ 10 | "Martin Jambon " 11 | "David Sheets " 12 | "Rudi Grinberg " 13 | "Ivan Jager " 14 | "Jeff Meister " 15 | "Carmelo Piccione " 16 | "Raman Varabets " 17 | "Mathieu Baudet " 18 | "Rauan Mayemir " 19 | "Louis Roché " 20 | "Brendan Long " 21 | "Christophe Troestler " 22 | "Vincent Bernardoff " 23 | "haoyang " 24 | ] 25 | license: "MIT" 26 | homepage: "https://github.com/ahrefs/atd" 27 | bug-reports: "https://github.com/ahrefs/atd/issues" 28 | depends: [ 29 | "ocaml" {>= "4.02"} 30 | "dune" {>= "2.0"} 31 | "menhir" 32 | "easy-format" 33 | "re" 34 | ] 35 | dev-repo: "git+https://github.com/ahrefs/atd.git" 36 | build: [ 37 | ["dune" "subst"] {pinned} 38 | [ 39 | "dune" 40 | "build" 41 | "-p" 42 | name 43 | "-j" 44 | jobs 45 | "@install" 46 | "@doc" {with-doc} 47 | ] 48 | ] 49 | url { 50 | src: "https://github.com/ahrefs/atd/releases/download/2.2.1/atd-2.2.1.tbz" 51 | checksum: [ 52 | "sha256=db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e" 53 | "sha512=0c7f1985cc4d87ddd541bb2f7085b72f81aaef69468653319a4a52e6cd6c9318511229784a12cdb413ae500e7a5b8195759e0d8d49946a9b00f62e8dda07e8a2" 54 | ] 55 | } 56 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/atdgen-runtime.2.2.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Runtime library for code generated by atdgen" 3 | description: """ 4 | This package should be used only in conjunction with the stdgen code 5 | generator""" 6 | maintainer: ["Rudi Grinberg "] 7 | authors: [ 8 | "Martin Jambon " 9 | "David Sheets " 10 | "Rudi Grinberg " 11 | "Ivan Jager " 12 | "Jeff Meister " 13 | "Carmelo Piccione " 14 | "Raman Varabets " 15 | "Mathieu Baudet " 16 | "Rauan Mayemir " 17 | "Louis Roché " 18 | "Brendan Long " 19 | "Christophe Troestler " 20 | "Vincent Bernardoff " 21 | "haoyang " 22 | ] 23 | license: "MIT" 24 | homepage: "https://github.com/ahrefs/atd" 25 | bug-reports: "https://github.com/ahrefs/atd/issues" 26 | depends: [ 27 | "ocaml" {>= "4.02"} 28 | "dune" {>= "2.0"} 29 | "yojson" {>= "1.7.0"} 30 | "biniou" {>= "1.0.6"} 31 | "re" 32 | ] 33 | dev-repo: "git+https://github.com/ahrefs/atd.git" 34 | build: [ 35 | ["dune" "subst"] {pinned} 36 | [ 37 | "dune" 38 | "build" 39 | "-p" 40 | name 41 | "-j" 42 | jobs 43 | "@install" 44 | "@doc" {with-doc} 45 | ] 46 | ] 47 | url { 48 | src: "https://github.com/ahrefs/atd/releases/download/2.2.1/atd-2.2.1.tbz" 49 | checksum: [ 50 | "sha256=db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e" 51 | "sha512=0c7f1985cc4d87ddd541bb2f7085b72f81aaef69468653319a4a52e6cd6c9318511229784a12cdb413ae500e7a5b8195759e0d8d49946a9b00f62e8dda07e8a2" 52 | ] 53 | } 54 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/atdgen.2.2.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: 3 | "Generates efficient JSON serializers, deserializers and validators" 4 | description: """ 5 | Atdgen is a command-line program that takes as input type definitions in the ATD 6 | syntax and produces OCaml code suitable for data serialization and 7 | deserialization. 8 | Two data formats are currently supported, these are biniou and JSON. 9 | Atdgen-biniou and Atdgen-json will refer to Atdgen used in one context or the 10 | other. 11 | Atdgen was designed with efficiency and durability in mind. Software authors are 12 | encouraged to use Atdgen directly and to write tools that may reuse part of 13 | Atdgen’s source code.""" 14 | maintainer: ["Rudi Grinberg "] 15 | authors: [ 16 | "Martin Jambon " 17 | "David Sheets " 18 | "Rudi Grinberg " 19 | "Ivan Jager " 20 | "Jeff Meister " 21 | "Carmelo Piccione " 22 | "Raman Varabets " 23 | "Mathieu Baudet " 24 | "Rauan Mayemir " 25 | "Louis Roché " 26 | "Brendan Long " 27 | "Christophe Troestler " 28 | "Vincent Bernardoff " 29 | "haoyang " 30 | ] 31 | license: "MIT" 32 | homepage: "https://github.com/ahrefs/atd" 33 | bug-reports: "https://github.com/ahrefs/atd/issues" 34 | depends: [ 35 | "ocaml" {>= "4.02"} 36 | "dune" {>= "2.0"} 37 | "atd" {>= "2.0.0"} 38 | "atdgen-runtime" {>= "2.0.0"} 39 | "atdgen-codec-runtime" {with-test} 40 | "biniou" {>= "1.0.6"} 41 | "yojson" {>= "1.7.0"} 42 | ] 43 | dev-repo: "git+https://github.com/ahrefs/atd.git" 44 | build: [ 45 | ["dune" "subst"] {pinned} 46 | [ 47 | "dune" 48 | "build" 49 | "-p" 50 | name 51 | "-j" 52 | jobs 53 | "@install" 54 | "@doc" {with-doc} 55 | ] 56 | ] 57 | url { 58 | src: "https://github.com/ahrefs/atd/releases/download/2.2.1/atd-2.2.1.tbz" 59 | checksum: [ 60 | "sha256=db6b4c1a6293b214a7b7a3da435e681abd1b16b55d5aa246b93d26736d3a559e" 61 | "sha512=0c7f1985cc4d87ddd541bb2f7085b72f81aaef69468653319a4a52e6cd6c9318511229784a12cdb413ae500e7a5b8195759e0d8d49946a9b00f62e8dda07e8a2" 62 | ] 63 | } 64 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/base-threads.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "https://github.com/ocaml/opam-repository/issues" 3 | description: """ 4 | Threads library distributed with the OCaml compiler 5 | """ 6 | 7 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/base-unix.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "https://github.com/ocaml/opam-repository/issues" 3 | description: """ 4 | Unix library distributed with the OCaml compiler 5 | """ 6 | 7 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/biniou.1.2.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | build: [ 3 | ["dune" "subst"] {pinned} 4 | ["dune" "build" "-p" name "-j" jobs] 5 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 6 | ["dune" "build" "-p" name "@doc"] {with-doc} 7 | ] 8 | maintainer: ["martin@mjambon.com"] 9 | authors: ["Martin Jambon"] 10 | bug-reports: "https://github.com/mjambon/biniou/issues" 11 | homepage: "https://github.com/mjambon/biniou" 12 | doc: "https://mjambon.github.io/biniou/" 13 | license: "BSD-3-Clause" 14 | dev-repo: "git+https://github.com/mjambon/biniou.git" 15 | synopsis: 16 | "Binary data format designed for speed, safety, ease of use and backward compatibility as protocols evolve" 17 | description: """ 18 | 19 | Biniou (pronounced "be new") is a binary data format designed for speed, safety, 20 | ease of use and backward compatibility as protocols evolve. Biniou is vastly 21 | equivalent to JSON in terms of functionality but allows implementations several 22 | times faster (4 times faster than yojson), with 25-35% space savings. 23 | 24 | Biniou data can be decoded into human-readable form without knowledge of type 25 | definitions except for field and variant names which are represented by 31-bit 26 | hashes. A program named bdump is provided for routine visualization of biniou 27 | data files. 28 | 29 | The program atdgen is used to derive OCaml-Biniou serializers and deserializers 30 | from type definitions. 31 | 32 | Biniou format specification: mjambon.github.io/atdgen-doc/biniou-format.txt""" 33 | depends: [ 34 | "easy-format" 35 | "dune" {>= "1.10"} 36 | "ocaml" {>= "4.02.3"} 37 | ] 38 | url { 39 | src: 40 | "https://github.com/mjambon/biniou/releases/download/1.2.1/biniou-1.2.1.tbz" 41 | checksum: [ 42 | "sha256=35546c68b1929a8e6d27a3b39ecd17b38303a0d47e65eb9d1480c2061ea84335" 43 | "sha512=82670cc77bf3e869ee26e5fbe5a5affa45a22bc8b6c4bd7e85473912780e0111baca59b34a2c14feae3543ce6e239d7fddaeab24b686a65bfe642cdb91d27ebf" 44 | ] 45 | } 46 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/cppo.1.6.7/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "martin@mjambon.com" 3 | authors: "Martin Jambon" 4 | license: "BSD-3-Clause" 5 | homepage: "https://github.com/ocaml-community/cppo" 6 | doc: "https://ocaml-community.github.io/cppo/" 7 | bug-reports: "https://github.com/ocaml-community/cppo/issues" 8 | depends: [ 9 | "ocaml" {>= "4.02.3"} 10 | "dune" {>= "1.0"} 11 | "base-unix" 12 | ] 13 | build: [ 14 | ["dune" "subst"] {pinned} 15 | ["dune" "build" "-p" name "-j" jobs] 16 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 17 | ] 18 | dev-repo: "git+https://github.com/ocaml-community/cppo.git" 19 | synopsis: "Code preprocessor like cpp for OCaml" 20 | description: """ 21 | Cppo is an equivalent of the C preprocessor for OCaml programs. 22 | It allows the definition of simple macros and file inclusion. 23 | 24 | Cppo is: 25 | 26 | * more OCaml-friendly than cpp 27 | * easy to learn without consulting a manual 28 | * reasonably fast 29 | * simple to install and to maintain 30 | """ 31 | x-commit-hash: "7d217864a5fdc4551699e248137a2f8b719d2078" 32 | url { 33 | src: 34 | "https://github.com/ocaml-community/cppo/releases/download/v1.6.7/cppo-v1.6.7.tbz" 35 | checksum: [ 36 | "sha256=db553e3e6c206df09b1858c3aef5e21e56564d593642a3c78bcedb6af36f529d" 37 | "sha512=9722b50fd23aaccf86816313333a3bf8fc7c6b4ef06b153e5e1e1aaf14670cf51a4aac52fb1b4a0e5531699c4047a1eff6c24c969f7e5063e78096c2195b5819" 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/csexp.1.4.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Parsing and printing of S-expressions in Canonical form" 3 | description: """ 4 | 5 | This library provides minimal support for Canonical S-expressions 6 | [1]. Canonical S-expressions are a binary encoding of S-expressions 7 | that is super simple and well suited for communication between 8 | programs. 9 | 10 | This library only provides a few helpers for simple applications. If 11 | you need more advanced support, such as parsing from more fancy input 12 | sources, you should consider copying the code of this library given 13 | how simple parsing S-expressions in canonical form is. 14 | 15 | To avoid a dependency on a particular S-expression library, the only 16 | module of this library is parameterised by the type of S-expressions. 17 | 18 | [1] https://en.wikipedia.org/wiki/Canonical_S-expressions 19 | """ 20 | maintainer: ["Jeremie Dimino "] 21 | authors: [ 22 | "Quentin Hocquet " 23 | "Jane Street Group, LLC " 24 | "Jeremie Dimino " 25 | ] 26 | license: "MIT" 27 | homepage: "https://github.com/ocaml-dune/csexp" 28 | doc: "https://ocaml-dune.github.io/csexp/" 29 | bug-reports: "https://github.com/ocaml-dune/csexp/issues" 30 | depends: [ 31 | "dune" {>= "1.11"} 32 | "ocaml" {>= "4.02.3"} 33 | "result" {>= "1.5"} 34 | ] 35 | dev-repo: "git+https://github.com/ocaml-dune/csexp.git" 36 | build: [ 37 | ["dune" "subst"] {pinned} 38 | [ 39 | "dune" 40 | "build" 41 | "-p" 42 | name 43 | "-j" 44 | jobs 45 | "@install" 46 | # "@runtest" {with-test & ocaml:version >= "4.04"} 47 | "@doc" {with-doc} 48 | ] 49 | ] 50 | x-commit-hash: "0e1b2044c8d1ff187c27cec3e46d9cde14892650" 51 | url { 52 | src: 53 | "https://github.com/ocaml-dune/csexp/releases/download/1.4.0/csexp-1.4.0.tbz" 54 | checksum: [ 55 | "sha256=8e3d6fca87f102a126dee8b72a2a0d146f10439c47218dfc149d51bf3edf364e" 56 | "sha512=604a5094fbbf61f497b342ad0aa8ec25275b2a904cd0c1823fc40daa54a15796b360374ff495c0d8ca3b4c1e6723b2ce37e030857fae131222606de818fb8129" 57 | ] 58 | } 59 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/dot-merlin-reader.4.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "defree@gmail.com" 3 | authors: "The Merlin team" 4 | synopsis: "Reads config files for merlin" 5 | homepage: "https://github.com/ocaml/merlin" 6 | bug-reports: "https://github.com/ocaml/merlin/issues" 7 | dev-repo: "git+https://github.com/ocaml/merlin.git" 8 | build: [ 9 | ["dune" "subst"] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.06.1" } 14 | "dune" {>= "2.7.0"} 15 | "yojson" {>= "1.6.0"} 16 | "ocamlfind" {>= "1.6.0"} 17 | "csexp" {>= "1.2.3"} 18 | "result" {>= "1.5"} 19 | ] 20 | description: 21 | "Helper process: reads .merlin files and gives the normalized content to merlin" 22 | x-commit-hash: "ab02f60994c81166820791b5f465f467d752b8dc" 23 | url { 24 | src: 25 | "https://github.com/ocaml/merlin/releases/download/v4.1/dot-merlin-reader-v4.1.tbz" 26 | checksum: [ 27 | "sha256=14a36d6fb8646a5df4530420a7861722f1a4ee04753717947305e3676031e7cd" 28 | "sha512=65fd4ab08904c05651a7ef8971802ffaa428daa920765dbcf162e3c56e8047e4c9e4356daa45efccce7c73a586635c8f6cf8118fd3059789de9aff68579bd436" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/dune-build-info.2.8.4/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Embed build informations inside executable" 3 | description: """ 4 | The build-info library allows to access information about how the 5 | executable was built, such as the version of the project at which it 6 | was built or the list of statically linked libraries with their 7 | versions. It supports reporting the version from the version control 8 | system during development to get an precise reference of when the 9 | executable was built. 10 | """ 11 | maintainer: ["Jane Street Group, LLC "] 12 | authors: ["Jane Street Group, LLC "] 13 | license: "MIT" 14 | homepage: "https://github.com/ocaml/dune" 15 | doc: "https://dune.readthedocs.io/" 16 | bug-reports: "https://github.com/ocaml/dune/issues" 17 | depends: [ 18 | "dune" {>= "2.8"} 19 | "odoc" {with-doc} 20 | ] 21 | dev-repo: "git+https://github.com/ocaml/dune.git" 22 | build: [ 23 | ["dune" "subst"] {dev} 24 | [ 25 | "dune" 26 | "build" 27 | "-p" 28 | name 29 | "-j" 30 | jobs 31 | "@install" 32 | "@doc" {with-doc} 33 | ] 34 | ] 35 | x-commit-hash: "b6a3f66fb15378fc7170e94778f4d2c0b142ad92" 36 | url { 37 | src: "https://github.com/ocaml/dune/releases/download/2.8.4/dune-2.8.4.tbz" 38 | checksum: [ 39 | "sha256=4e6420177584aabdc3b7b37aee3026b094b82bf5d7ed175344a68e321f72e8ac" 40 | "sha512=efc1834c4add40138a101734665a1f462c19fe76d1cbb457b1fc20f95991118a50b24d485fb98d39046e41bec03885a8dc071bf8add51083ac9780bff9f6668a" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/dune.2.8.4/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Fast, portable, and opinionated build system" 3 | description: """ 4 | 5 | dune is a build system that was designed to simplify the release of 6 | Jane Street packages. It reads metadata from "dune" files following a 7 | very simple s-expression syntax. 8 | 9 | dune is fast, has very low-overhead, and supports parallel builds on 10 | all platforms. It has no system dependencies; all you need to build 11 | dune or packages using dune is OCaml. You don't need make or bash 12 | as long as the packages themselves don't use bash explicitly. 13 | 14 | dune supports multi-package development by simply dropping multiple 15 | repositories into the same directory. 16 | 17 | It also supports multi-context builds, such as building against 18 | several opam roots/switches simultaneously. This helps maintaining 19 | packages across several versions of OCaml and gives cross-compilation 20 | for free. 21 | """ 22 | maintainer: ["Jane Street Group, LLC "] 23 | authors: ["Jane Street Group, LLC "] 24 | license: "MIT" 25 | homepage: "https://github.com/ocaml/dune" 26 | doc: "https://dune.readthedocs.io/" 27 | bug-reports: "https://github.com/ocaml/dune/issues" 28 | conflicts: [ 29 | "merlin" {< "3.4.0"} 30 | "ocaml-lsp-server" {< "1.3.0"} 31 | "dune-configurator" {< "2.3.0"} 32 | "odoc" {< "1.3.0"} 33 | "dune-release" {< "1.3.0"} 34 | "js_of_ocaml-compiler" {< "3.6.0"} 35 | "jbuilder" {= "transition"} 36 | ] 37 | dev-repo: "git+https://github.com/ocaml/dune.git" 38 | build: [ 39 | # opam 2 sets OPAM_SWITCH_PREFIX, so we don't need a hardcoded path 40 | ["ocaml" "configure.ml" "--libdir" lib] {opam-version < "2"} 41 | ["ocaml" "bootstrap.ml" "-j" jobs] 42 | ["./dune.exe" "build" "-p" name "--profile" "dune-bootstrap" "-j" jobs] 43 | ] 44 | depends: [ 45 | # Please keep the lower bound in sync with .github/workflows/workflow.yml, 46 | # dune-project and min_ocaml_version in bootstrap.ml 47 | ("ocaml" {>= "4.08"} | ("ocaml" {< "4.08~~"} & "ocamlfind-secondary")) 48 | "base-unix" 49 | "base-threads" 50 | ] 51 | x-commit-hash: "b6a3f66fb15378fc7170e94778f4d2c0b142ad92" 52 | url { 53 | src: "https://github.com/ocaml/dune/releases/download/2.8.4/dune-2.8.4.tbz" 54 | checksum: [ 55 | "sha256=4e6420177584aabdc3b7b37aee3026b094b82bf5d7ed175344a68e321f72e8ac" 56 | "sha512=efc1834c4add40138a101734665a1f462c19fe76d1cbb457b1fc20f95991118a50b24d485fb98d39046e41bec03885a8dc071bf8add51083ac9780bff9f6668a" 57 | ] 58 | } 59 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/easy-format.1.3.2/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | build: [ 3 | ["dune" "subst"] {pinned} 4 | ["dune" "build" "-p" name "-j" jobs] 5 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 6 | ["dune" "build" "-p" name "@doc"] {with-doc} 7 | ] 8 | maintainer: ["martin@mjambon.com" "rudi.grinberg@gmail.com"] 9 | authors: ["Martin Jambon"] 10 | bug-reports: "https://github.com/mjambon/easy-format/issues" 11 | homepage: "https://github.com/mjambon/easy-format" 12 | doc: "https://mjambon.github.io/easy-format/" 13 | license: "BSD-3-Clause" 14 | dev-repo: "git+https://github.com/mjambon/easy-format.git" 15 | synopsis: 16 | "High-level and functional interface to the Format module of the OCaml standard library" 17 | description: """ 18 | 19 | This module offers a high-level and functional interface to the Format module of 20 | the OCaml standard library. It is a pretty-printing facility, i.e. it takes as 21 | input some code represented as a tree and formats this code into the most 22 | visually satisfying result, breaking and indenting lines of code where 23 | appropriate. 24 | 25 | Input data must be first modelled and converted into a tree using 3 kinds of 26 | nodes: 27 | 28 | * atoms 29 | * lists 30 | * labelled nodes 31 | 32 | Atoms represent any text that is guaranteed to be printed as-is. Lists can model 33 | any sequence of items such as arrays of data or lists of definitions that are 34 | labelled with something like "int main", "let x =" or "x:".""" 35 | depends: [ 36 | "dune" {>= "1.10"} 37 | "ocaml" {>= "4.02.3"} 38 | ] 39 | url { 40 | src: 41 | "https://github.com/mjambon/easy-format/releases/download/1.3.2/easy-format-1.3.2.tbz" 42 | checksum: [ 43 | "sha256=3440c2b882d537ae5e9011eb06abb53f5667e651ea4bb3b460ea8230fa8c1926" 44 | "sha512=e39377a2ff020ceb9ac29e8515a89d9bdbc91dfcfa871c4e3baafa56753fac2896768e5d9822a050dc1e2ade43c8967afb69391a386c0a8ecd4e1f774e236135" 45 | ] 46 | } 47 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/fix.20201120/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "francois.pottier@inria.fr" 3 | authors: [ 4 | "François Pottier " 5 | ] 6 | homepage: "https://gitlab.inria.fr/fpottier/fix" 7 | dev-repo: "git+https://gitlab.inria.fr/fpottier/fix.git" 8 | bug-reports: "francois.pottier@inria.fr" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" { >= "4.03" } 14 | "dune" {>= "1.3" } 15 | ] 16 | synopsis: "Facilities for memoization and fixed points" 17 | url { 18 | src: 19 | "https://gitlab.inria.fr/fpottier/fix/repository/20201120/archive.tar.gz" 20 | checksum: [ 21 | "md5=7eb570b759635fe66f3556d2b1cc88e3" 22 | "sha512=344dcc619f9e8b8a6c998775b6d2dab2ea5253e6a67abe4797f76dc5dd30bc776568abce1e90477422e9db447821579889737e3531c42139708f813e983ea5d4" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/menhir.20210310/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "francois.pottier@inria.fr" 3 | authors: [ 4 | "François Pottier " 5 | "Yann Régis-Gianas " 6 | ] 7 | homepage: "http://gitlab.inria.fr/fpottier/menhir" 8 | dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git" 9 | bug-reports: "menhir@inria.fr" 10 | build: [ 11 | ["dune" "build" "-p" name "-j" jobs] 12 | ] 13 | depends: [ 14 | "ocaml" {>= "4.02.3"} 15 | "dune" { >= "2.2.0"} 16 | "menhirLib" {= version} 17 | "menhirSdk" {= version} 18 | ] 19 | synopsis: "An LR(1) parser generator" 20 | url { 21 | src: 22 | "https://gitlab.inria.fr/fpottier/menhir/repository/20210310/archive.tar.gz" 23 | checksum: [ 24 | "md5=1cbc71c0bc1f3ddc3e71d5c1f919fd1a" 25 | "sha512=3c309fa2cc4ad7c6fba85107bd946a542894882fa39741496b150307e93455b717418f19e94b5dad06ab269f5c55e8dc25705c96c0a5092e623fa38f1ce43c7f" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/menhirLib.20210310/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "francois.pottier@inria.fr" 3 | authors: [ 4 | "François Pottier " 5 | "Yann Régis-Gianas " 6 | ] 7 | homepage: "http://gitlab.inria.fr/fpottier/menhir" 8 | dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git" 9 | bug-reports: "menhir@inria.fr" 10 | build: [ 11 | ["dune" "build" "-p" name "-j" jobs] 12 | ] 13 | depends: [ 14 | "ocaml" { >= "4.02.3" } 15 | "dune" { >= "2.0.0" } 16 | ] 17 | conflicts: [ 18 | "menhir" { != version } 19 | ] 20 | synopsis: "Runtime support library for parsers generated by Menhir" 21 | url { 22 | src: 23 | "https://gitlab.inria.fr/fpottier/menhir/repository/20210310/archive.tar.gz" 24 | checksum: [ 25 | "md5=1cbc71c0bc1f3ddc3e71d5c1f919fd1a" 26 | "sha512=3c309fa2cc4ad7c6fba85107bd946a542894882fa39741496b150307e93455b717418f19e94b5dad06ab269f5c55e8dc25705c96c0a5092e623fa38f1ce43c7f" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/menhirSdk.20210310/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "francois.pottier@inria.fr" 3 | authors: [ 4 | "François Pottier " 5 | "Yann Régis-Gianas " 6 | ] 7 | homepage: "http://gitlab.inria.fr/fpottier/menhir" 8 | dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git" 9 | bug-reports: "menhir@inria.fr" 10 | build: [ 11 | ["dune" "build" "-p" name "-j" jobs] 12 | ] 13 | depends: [ 14 | "ocaml" { >= "4.02.3" } 15 | "dune" { >= "2.0.0" } 16 | ] 17 | conflicts: [ 18 | "menhir" { != version } 19 | ] 20 | synopsis: "Compile-time library for auxiliary tools related to Menhir" 21 | url { 22 | src: 23 | "https://gitlab.inria.fr/fpottier/menhir/repository/20210310/archive.tar.gz" 24 | checksum: [ 25 | "md5=1cbc71c0bc1f3ddc3e71d5c1f919fd1a" 26 | "sha512=3c309fa2cc4ad7c6fba85107bd946a542894882fa39741496b150307e93455b717418f19e94b5dad06ab269f5c55e8dc25705c96c0a5092e623fa38f1ce43c7f" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/merlin-extend.0.6/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "Frederic Bour " 3 | authors: "Frederic Bour " 4 | homepage: "https://github.com/let-def/merlin-extend" 5 | bug-reports: "https://github.com/let-def/merlin-extend" 6 | license: "MIT" 7 | dev-repo: "git+https://github.com/let-def/merlin-extend.git" 8 | build: [ 9 | ["dune" "subst"] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "dune" {>= "1.0"} 14 | "cppo" {build} 15 | "ocaml" {>= "4.02.3"} 16 | ] 17 | synopsis: "A protocol to provide custom frontend to Merlin" 18 | description: """ 19 | This protocol allows to replace the OCaml frontend of Merlin. 20 | It extends what used to be done with the `-pp' flag to handle a few more cases.""" 21 | doc: "https://let-def.github.io/merlin-extend" 22 | x-commit-hash: "640620568a5f5c7798239ecf7c707c813e3df3cf" 23 | url { 24 | src: 25 | "https://github.com/let-def/merlin-extend/releases/download/v0.6/merlin-extend-v0.6.tbz" 26 | checksum: [ 27 | "sha256=c2f236ae97feb6ba0bc90f33beb7b7343e42f9871b66de9ba07974917e256c43" 28 | "sha512=4c64a490e2ece04fc89aef679c1d9202175df4fe045b5fdc7a37cd7cebe861226fddd9648c1bf4f06175ecfcd2ed7686c96bd6a8cae003a5096f6134c240f857" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/merlin.4.1-412/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "defree@gmail.com" 3 | authors: "The Merlin team" 4 | homepage: "https://github.com/ocaml/merlin" 5 | bug-reports: "https://github.com/ocaml/merlin/issues" 6 | dev-repo: "git+https://github.com/ocaml/merlin.git" 7 | build: [ 8 | ["dune" "subst"] {pinned} 9 | ["dune" "build" "-p" name "-j" jobs] 10 | ["dune" "runtest" "-p" "merlin,dot-merlin-reader" "-j" "1"] {with-test} 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.12" & < "4.13"} 14 | "dune" {>= "2.7.0"} 15 | "dot-merlin-reader" {>= "4.0"} 16 | "yojson" {>= "1.6.0"} 17 | "conf-jq" {with-test} 18 | "csexp" {>= "1.2.3"} 19 | "result" {>= "1.5"} 20 | "menhir" {dev} 21 | "menhirLib" {dev} 22 | "menhirSdk" {dev} 23 | ] 24 | synopsis: 25 | "Editor helper, provides completion, typing and source browsing in Vim and Emacs" 26 | description: 27 | "Merlin is an assistant for editing OCaml code. It aims to provide the features available in modern IDEs: error reporting, auto completion, source browsing and much more." 28 | post-messages: [ 29 | "merlin installed. 30 | 31 | Quick setup for VIM 32 | ------------------- 33 | Append this to your .vimrc to add merlin to vim's runtime-path: 34 | let g:opamshare = substitute(system('opam var share'),'\\n$','','''') 35 | execute \"set rtp+=\" . g:opamshare . \"/merlin/vim\" 36 | 37 | Also run the following line in vim to index the documentation: 38 | :execute \"helptags \" . g:opamshare . \"/merlin/vim/doc\" 39 | 40 | Quick setup for EMACS 41 | ------------------- 42 | Add opam emacs directory to your load-path by appending this to your .emacs: 43 | (let ((opam-share (ignore-errors (car (process-lines \"opam\" \"config\" \"var\" \"share\"))))) 44 | (when (and opam-share (file-directory-p opam-share)) 45 | ;; Register Merlin 46 | (add-to-list 'load-path (expand-file-name \"emacs/site-lisp\" opam-share)) 47 | (autoload 'merlin-mode \"merlin\" nil t nil) 48 | ;; Automatically start it in OCaml buffers 49 | (add-hook 'tuareg-mode-hook 'merlin-mode t) 50 | (add-hook 'caml-mode-hook 'merlin-mode t) 51 | ;; Use opam switch to lookup ocamlmerlin binary 52 | (setq merlin-command 'opam))) 53 | 54 | Take a look at https://github.com/ocaml/merlin for more information 55 | 56 | Quick setup with opam-user-setup 57 | -------------------------------- 58 | 59 | Opam-user-setup support Merlin. 60 | 61 | $ opam user-setup install 62 | 63 | should take care of basic setup. 64 | See https://github.com/OCamlPro/opam-user-setup 65 | " 66 | {success & !user-setup:installed} 67 | ] 68 | x-commit-hash: "35c3ad0fb4a1de53f6afb028961800e63b9363bd" 69 | url { 70 | src: 71 | "https://github.com/ocaml/merlin/releases/download/v4.1-412/merlin-v4.1-412.tbz" 72 | checksum: [ 73 | "sha256=fb4caede73bdb8393bd60e31792af74b901ae2d319ac2f2a2252c694d2069d8d" 74 | "sha512=ec301e0f97e11c1c331478030372d373d381a0ddbb7f72c83f7baa4c2c6d4f26094c3398f56bcf3d40c1242044391369fd06e8cd2ccfe1f5d78467eb3e9d33be" 75 | ] 76 | } 77 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/ocaml-compiler-libs.v0.12.3/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/ocaml-compiler-libs" 5 | bug-reports: "https://github.com/janestreet/ocaml-compiler-libs/issues" 6 | dev-repo: "git+https://github.com/janestreet/ocaml-compiler-libs.git" 7 | license: "MIT" 8 | build: [ 9 | ["dune" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" {>= "4.04.1"} 13 | "dune" {>= "1.5.1"} 14 | ] 15 | synopsis: """OCaml compiler libraries repackaged""" 16 | description: """ 17 | 18 | This packages exposes the OCaml compiler libraries repackages under 19 | the toplevel names Ocaml_common, Ocaml_bytecomp, Ocaml_optcomp, ... 20 | """ 21 | x-commit-hash: "7f5d1d2931b96fb3ee6dd569a469b51f621a6dd4" 22 | url { 23 | src: 24 | "https://github.com/janestreet/ocaml-compiler-libs/releases/download/v0.12.3/ocaml-compiler-libs-v0.12.3.tbz" 25 | checksum: [ 26 | "sha256=a8403531439c14bbda2d504ef93610fd29a8e9520fc700f21889d893a513e3c9" 27 | "sha512=0bb03b38e93bab3274a8ade38d017808110bc02f2181a594d8775c68fdd465733393f0451dbbf8860e6b50b56c45671d2182637c0840d1d6574803ec18673972" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/ocaml-migrate-parsetree.2.1.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "frederic.bour@lakaban.net" 3 | authors: [ 4 | "Frédéric Bour " 5 | "Jérémie Dimino " 6 | ] 7 | license: "LGPL-2.1 with OCaml linking exception" 8 | homepage: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree" 9 | bug-reports: "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/issues" 10 | dev-repo: "git+https://github.com/ocaml-ppx/ocaml-migrate-parsetree.git" 11 | doc: "https://ocaml-ppx.github.io/ocaml-migrate-parsetree/" 12 | tags: [ "syntax" "org:ocamllabs" ] 13 | build: [ 14 | ["dune" "build" "-p" name "-j" jobs] 15 | ] 16 | depends: [ 17 | "dune" {>= "1.11"} 18 | "ocaml" {>= "4.02.3" & < "4.13"} 19 | ] 20 | synopsis: "Convert OCaml parsetrees between different versions" 21 | description: """ 22 | Convert OCaml parsetrees between different versions 23 | 24 | This library converts parsetrees, outcometree and ast mappers between 25 | different OCaml versions. High-level functions help making PPX 26 | rewriters independent of a compiler version. 27 | """ 28 | x-commit-hash: "4a05cf7a00d84e5f827cc9ae9c75e5dc85126085" 29 | url { 30 | src: 31 | "https://github.com/ocaml-ppx/ocaml-migrate-parsetree/releases/download/v2.1.0/ocaml-migrate-parsetree-v2.1.0.tbz" 32 | checksum: [ 33 | "sha256=387b788ee4c0537f1fe02c25e05f0335af424828fc6fe940acc0db5948a5a71f" 34 | "sha512=6ac80face6b77531c8d89a77d7a246bd5d43da435c355f62c03c8b8e360e1d7e339c904709fd3dbc9aa340c86ada9a69d5ebcf97cbdb7bd51bec97f831741b99" 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/ocamlfind.1.9.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "A library manager for OCaml" 3 | description: """ 4 | Findlib is a library manager for OCaml. It provides a convention how 5 | to store libraries, and a file format ("META") to describe the 6 | properties of libraries. There is also a tool (ocamlfind) for 7 | interpreting the META files, so that it is very easy to use libraries 8 | in programs and scripts. 9 | """ 10 | license: "MIT" 11 | maintainer: "Thomas Gazagnaire " 12 | authors: "Gerd Stolpmann " 13 | homepage: "http://projects.camlcity.org/projects/findlib.html" 14 | bug-reports: "https://github.com/ocaml/ocamlfind/issues" 15 | depends: [ 16 | "ocaml" {>= "4.00.0"} 17 | ] 18 | depopts: ["graphics"] 19 | build: [ 20 | [ 21 | "./configure" 22 | "-bindir" bin 23 | "-sitelib" lib 24 | "-mandir" man 25 | "-config" "%{lib}%/findlib.conf" 26 | "-no-custom" 27 | "-no-camlp4" {!ocaml:preinstalled & ocaml:version >= "4.02.0"} 28 | "-no-topfind" {ocaml:preinstalled} 29 | ] 30 | [make "all"] 31 | [make "opt"] {ocaml:native} 32 | ] 33 | install: [ 34 | [make "install"] 35 | ["install" "-m" "0755" "ocaml-stub" "%{bin}%/ocaml"] {ocaml:preinstalled} 36 | ] 37 | dev-repo: "git+https://github.com/ocaml/ocamlfind.git" 38 | url { 39 | src: "http://download.camlcity.org/download/findlib-1.9.1.tar.gz" 40 | checksum: [ 41 | "md5=65e6dc9b305ccbed1267275fe180f538" 42 | "sha512=83a05f3e310fa7cabb0475c5525f7a87c1b6bc2dc5e39f094cabfb5d944a826a5581844ba00ec1a48dd96184eb9de3c4d1055cdddee2b83c700a2de5a6dc6f84" 43 | ] 44 | } 45 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/ppx_derivers.1.2.1/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "jeremie@dimino.org" 3 | authors: ["Jérémie Dimino"] 4 | license: "BSD-3-Clause" 5 | homepage: "https://github.com/ocaml-ppx/ppx_derivers" 6 | bug-reports: "https://github.com/ocaml-ppx/ppx_derivers/issues" 7 | dev-repo: "git://github.com/ocaml-ppx/ppx_derivers.git" 8 | build: [ 9 | ["dune" "build" "-p" name "-j" jobs] 10 | ] 11 | depends: [ 12 | "ocaml" 13 | "dune" 14 | ] 15 | synopsis: "Shared [@@deriving] plugin registry" 16 | description: """ 17 | Ppx_derivers is a tiny package whose sole purpose is to allow 18 | ppx_deriving and ppx_type_conv to inter-operate gracefully when linked 19 | as part of the same ocaml-migrate-parsetree driver.""" 20 | url { 21 | src: "https://github.com/ocaml-ppx/ppx_derivers/archive/1.2.1.tar.gz" 22 | checksum: "md5=5dc2bf130c1db3c731fe0fffc5648b41" 23 | } 24 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/ppx_yojson_conv_lib.v0.14.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/ppx_yojson_conv_lib" 5 | bug-reports: "https://github.com/janestreet/ppx_yojson_conv_lib/issues" 6 | dev-repo: "git+https://github.com/janestreet/ppx_yojson_conv_lib.git" 7 | doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/ppx_yojson_conv_lib/index.html" 8 | license: "MIT" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.02.3"} 14 | "dune" {>= "2.0.0"} 15 | "yojson" {>= "1.7.0"} 16 | ] 17 | synopsis: "Runtime lib for ppx_yojson_conv" 18 | description: " 19 | Part of the Jane Street's PPX rewriters collection. 20 | " 21 | url { 22 | src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/ppx_yojson_conv_lib-v0.14.0.tar.gz" 23 | checksum: "md5=e23c5593a7211ad4fb09e26e9a74698a" 24 | } 25 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/ppxlib.0.22.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | synopsis: "Standard library for ppx rewriters" 3 | description: """ 4 | Ppxlib is the standard library for ppx rewriters and other programs 5 | that manipulate the in-memory reprensation of OCaml programs, a.k.a 6 | the "Parsetree". 7 | 8 | It also comes bundled with two ppx rewriters that are commonly used to 9 | write tools that manipulate and/or generate Parsetree values; 10 | `ppxlib.metaquot` which allows to construct Parsetree values using the 11 | OCaml syntax directly and `ppxlib.traverse` which provides various 12 | ways of automatically traversing values of a given type, in particular 13 | allowing to inject a complex structured value into generated code. 14 | """ 15 | maintainer: ["opensource@janestreet.com"] 16 | authors: ["Jane Street Group, LLC "] 17 | license: "MIT" 18 | homepage: "https://github.com/ocaml-ppx/ppxlib" 19 | doc: "https://ocaml-ppx.github.io/ppxlib/" 20 | bug-reports: "https://github.com/ocaml-ppx/ppxlib/issues" 21 | depends: [ 22 | "dune" {>= "2.7"} 23 | "ocaml" {>= "4.04.1" & < "4.13"} 24 | "ocaml-compiler-libs" {>= "v0.11.0"} 25 | "ocaml-migrate-parsetree" {>= "2.1.0"} 26 | "ppx_derivers" {>= "1.0"} 27 | "sexplib0" 28 | "stdlib-shims" 29 | "ocamlfind" {with-test} 30 | "re" {with-test & >= "1.9.0"} 31 | "cinaps" {with-test & >= "v0.12.1"} 32 | "base" {with-test} 33 | "stdio" {with-test} 34 | "odoc" {with-doc} 35 | ] 36 | build: [ 37 | ["dune" "subst"] {dev} 38 | [ 39 | "dune" 40 | "build" 41 | "-p" 42 | name 43 | "-j" 44 | jobs 45 | "@install" 46 | "@runtest" {with-test} 47 | "@doc" {with-doc} 48 | ] 49 | ] 50 | dev-repo: "git+https://github.com/ocaml-ppx/ppxlib.git" 51 | x-commit-hash: "06a2c9bdad8c1d3361a3d9430e9bf58476b08590" 52 | url { 53 | src: 54 | "https://github.com/ocaml-ppx/ppxlib/releases/download/0.22.0/ppxlib-0.22.0.tbz" 55 | checksum: [ 56 | "sha256=3eeb91e03966662284a3222e612dee7f4fa2b7637c53d9572d2a74134bb96d7a" 57 | "sha512=425051dff9df53579a6edd17369d66c10f87a78daeddf1691e50997990ed643e874fcc6a30112a4dacbfd2d0097a19445354e04cd920d9522f76c51cdbc7f1db" 58 | ] 59 | } 60 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/re.1.9.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | 3 | maintainer: "rudi.grinberg@gmail.com" 4 | authors: [ 5 | "Jerome Vouillon" 6 | "Thomas Gazagnaire" 7 | "Anil Madhavapeddy" 8 | "Rudi Grinberg" 9 | "Gabriel Radanne" 10 | ] 11 | license: "LGPL-2.0-only with OCaml-LGPL-linking-exception" 12 | homepage: "https://github.com/ocaml/ocaml-re" 13 | bug-reports: "https://github.com/ocaml/ocaml-re/issues" 14 | dev-repo: "git+https://github.com/ocaml/ocaml-re.git" 15 | 16 | build: [ 17 | ["dune" "subst"] {pinned} 18 | ["dune" "build" "-p" name "-j" jobs] 19 | ["dune" "runtest" "-p" name "-j" jobs] {with-test} 20 | ] 21 | 22 | depends: [ 23 | "ocaml" {>= "4.02"} 24 | "dune" 25 | "ounit" {with-test} 26 | "seq" 27 | ] 28 | 29 | synopsis: "RE is a regular expression library for OCaml" 30 | description: """ 31 | Pure OCaml regular expressions with: 32 | * Perl-style regular expressions (module Re.Perl) 33 | * Posix extended regular expressions (module Re.Posix) 34 | * Emacs-style regular expressions (module Re.Emacs) 35 | * Shell-style file globbing (module Re.Glob) 36 | * Compatibility layer for OCaml's built-in Str module (module Re.Str) 37 | """ 38 | url { 39 | src: 40 | "https://github.com/ocaml/ocaml-re/releases/download/1.9.0/re-1.9.0.tbz" 41 | checksum: "md5=bddaed4f386a22cace7850c9c7dac296" 42 | } 43 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/result.1.5/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/result" 5 | dev-repo: "git+https://github.com/janestreet/result.git" 6 | bug-reports: "https://github.com/janestreet/result/issues" 7 | license: "BSD-3-Clause" 8 | build: [["dune" "build" "-p" name "-j" jobs]] 9 | depends: [ 10 | "ocaml" 11 | "dune" {>= "1.0"} 12 | ] 13 | synopsis: "Compatibility Result module" 14 | description: """ 15 | Projects that want to use the new result type defined in OCaml >= 4.03 16 | while staying compatible with older version of OCaml should use the 17 | Result module defined in this library.""" 18 | url { 19 | src: 20 | "https://github.com/janestreet/result/releases/download/1.5/result-1.5.tbz" 21 | checksum: "md5=1b82dec78849680b49ae9a8a365b831b" 22 | } 23 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/seq.base/files/META.seq: -------------------------------------------------------------------------------- 1 | name="seq" 2 | version="[distributed with OCaml 4.07 or above]" 3 | description="dummy backward-compatibility package for iterators" 4 | requires="" 5 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/seq.base/files/seq.install: -------------------------------------------------------------------------------- 1 | lib:[ 2 | "META.seq" {"META"} 3 | ] 4 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/seq.base/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: " " 3 | authors: " " 4 | homepage: " " 5 | depends: [ 6 | "ocaml" {>= "4.07.0"} 7 | ] 8 | dev-repo: "git+https://github.com/ocaml/ocaml.git" 9 | bug-reports: "https://caml.inria.fr/mantis/main_page.php" 10 | synopsis: 11 | "Compatibility package for OCaml's standard iterator type starting from 4.07." 12 | extra-files: [ 13 | ["seq.install" "md5=026b31e1df290373198373d5aaa26e42"] 14 | ["META.seq" "md5=b33c8a1a6c7ed797816ce27df4855107"] 15 | ] 16 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/sexplib0.v0.14.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "opensource@janestreet.com" 3 | authors: ["Jane Street Group, LLC "] 4 | homepage: "https://github.com/janestreet/sexplib0" 5 | bug-reports: "https://github.com/janestreet/sexplib0/issues" 6 | dev-repo: "git+https://github.com/janestreet/sexplib0.git" 7 | doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/sexplib0/index.html" 8 | license: "MIT" 9 | build: [ 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | depends: [ 13 | "ocaml" {>= "4.04.2"} 14 | "dune" {>= "2.0.0"} 15 | ] 16 | synopsis: "Library containing the definition of S-expressions and some base converters" 17 | description: " 18 | Part of Jane Street's Core library 19 | The Core suite of libraries is an industrial strength alternative to 20 | OCaml's standard library that was developed by Jane Street, the 21 | largest industrial user of OCaml. 22 | " 23 | url { 24 | src: "https://ocaml.janestreet.com/ocaml-core/v0.14/files/sexplib0-v0.14.0.tar.gz" 25 | checksum: "md5=37aff0af8f8f6f759249475684aebdc4" 26 | } 27 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/stdlib-shims.0.3.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "The stdlib-shims programmers" 3 | authors: "The stdlib-shims programmers" 4 | homepage: "https://github.com/ocaml/stdlib-shims" 5 | doc: "https://ocaml.github.io/stdlib-shims/" 6 | dev-repo: "git+https://github.com/ocaml/stdlib-shims.git" 7 | bug-reports: "https://github.com/ocaml/stdlib-shims/issues" 8 | tags: ["stdlib" "compatibility" "org:ocaml"] 9 | license: ["typeof OCaml system"] 10 | depends: [ 11 | "dune" 12 | "ocaml" {>= "4.02.3"} 13 | ] 14 | build: [ "dune" "build" "-p" name "-j" jobs ] 15 | synopsis: "Backport some of the new stdlib features to older compiler" 16 | description: """ 17 | Backport some of the new stdlib features to older compiler, 18 | such as the Stdlib module. 19 | 20 | This allows projects that require compatibility with older compiler to 21 | use these new features in their code. 22 | """ 23 | x-commit-hash: "fb6815e5d745f07fd567c11671149de6ef2e74c8" 24 | url { 25 | src: 26 | "https://github.com/ocaml/stdlib-shims/releases/download/0.3.0/stdlib-shims-0.3.0.tbz" 27 | checksum: [ 28 | "sha256=babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a" 29 | "sha512=1151d7edc8923516e9a36995a3f8938d323aaade759ad349ed15d6d8501db61ffbe63277e97c4d86149cf371306ac23df0f581ec7e02611f58335126e1870980" 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/opam/yojson.1.7.0/opam: -------------------------------------------------------------------------------- 1 | opam-version: "2.0" 2 | maintainer: "martin@mjambon.com" 3 | authors: ["Martin Jambon"] 4 | homepage: "https://github.com/ocaml-community/yojson" 5 | bug-reports: "https://github.com/ocaml-community/yojson/issues" 6 | dev-repo: "git+https://github.com/ocaml-community/yojson.git" 7 | doc: "https://ocaml-community.github.io/yojson/" 8 | build: [ 9 | ["dune" "subst"] {pinned} 10 | ["dune" "build" "-p" name "-j" jobs] 11 | ] 12 | run-test: [["dune" "runtest" "-p" name "-j" jobs]] 13 | depends: [ 14 | "ocaml" {>= "4.02.3"} 15 | "dune" 16 | "cppo" {build} 17 | "easy-format" 18 | "biniou" {>= "1.2.0"} 19 | "alcotest" {with-test & >= "0.8.5"} 20 | ] 21 | synopsis: 22 | "Yojson is an optimized parsing and printing library for the JSON format" 23 | description: """ 24 | Yojson is an optimized parsing and printing library for the JSON format. 25 | 26 | It addresses a few shortcomings of json-wheel including 2x speedup, 27 | polymorphic variants and optional syntax for tuples and variants. 28 | 29 | ydump is a pretty-printing command-line program provided with the 30 | yojson package. 31 | 32 | The program atdgen can be used to derive OCaml-JSON serializers and 33 | deserializers from type definitions.""" 34 | url { 35 | src: 36 | "https://github.com/ocaml-community/yojson/releases/download/1.7.0/yojson-1.7.0.tbz" 37 | checksum: "md5=b89d39ca3f8c532abe5f547ad3b8f84d" 38 | } 39 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.1_opam_override/files/findlib-1.9.1.patch: -------------------------------------------------------------------------------- 1 | --- ./Makefile 2 | +++ ./Makefile 3 | @@ -57,16 +57,16 @@ 4 | cat findlib.conf.in | \ 5 | $(SH) tools/patch '@SITELIB@' '$(OCAML_SITELIB)' >findlib.conf 6 | if ./tools/cmd_from_same_dir ocamlc; then \ 7 | - echo 'ocamlc="ocamlc.opt"' >>findlib.conf; \ 8 | + echo 'ocamlc="ocamlc.opt$(EXEC_SUFFIX)"' >>findlib.conf; \ 9 | fi 10 | if ./tools/cmd_from_same_dir ocamlopt; then \ 11 | - echo 'ocamlopt="ocamlopt.opt"' >>findlib.conf; \ 12 | + echo 'ocamlopt="ocamlopt.opt$(EXEC_SUFFIX)"' >>findlib.conf; \ 13 | fi 14 | if ./tools/cmd_from_same_dir ocamldep; then \ 15 | - echo 'ocamldep="ocamldep.opt"' >>findlib.conf; \ 16 | + echo 'ocamldep="ocamldep.opt$(EXEC_SUFFIX)"' >>findlib.conf; \ 17 | fi 18 | if ./tools/cmd_from_same_dir ocamldoc; then \ 19 | - echo 'ocamldoc="ocamldoc.opt"' >>findlib.conf; \ 20 | + echo 'ocamldoc="ocamldoc.opt$(EXEC_SUFFIX)"' >>findlib.conf; \ 21 | fi 22 | 23 | .PHONY: install-doc 24 | --- ./src/findlib/findlib_config.mlp 25 | +++ ./src/findlib/findlib_config.mlp 26 | @@ -24,3 +24,5 @@ 27 | | "MacOS" -> "" (* don't know *) 28 | | _ -> failwith "Unknown Sys.os_type" 29 | ;; 30 | + 31 | +let exec_suffix = "@EXEC_SUFFIX@";; 32 | --- ./src/findlib/findlib.ml 33 | +++ ./src/findlib/findlib.ml 34 | @@ -28,15 +28,20 @@ 35 | let conf_ldconf = ref "";; 36 | let conf_ignore_dups_in = ref ([] : string list);; 37 | 38 | -let ocamlc_default = "ocamlc";; 39 | -let ocamlopt_default = "ocamlopt";; 40 | -let ocamlcp_default = "ocamlcp";; 41 | -let ocamloptp_default = "ocamloptp";; 42 | -let ocamlmklib_default = "ocamlmklib";; 43 | -let ocamlmktop_default = "ocamlmktop";; 44 | -let ocamldep_default = "ocamldep";; 45 | -let ocamlbrowser_default = "ocamlbrowser";; 46 | -let ocamldoc_default = "ocamldoc";; 47 | +let add_exec str = 48 | + match Findlib_config.exec_suffix with 49 | + | "" -> str 50 | + | a -> str ^ a ;; 51 | +let ocamlc_default = add_exec "ocamlc";; 52 | +let ocamlopt_default = add_exec "ocamlopt";; 53 | +let ocamlcp_default = add_exec "ocamlcp";; 54 | +let ocamloptp_default = add_exec "ocamloptp";; 55 | +let ocamlmklib_default = add_exec "ocamlmklib";; 56 | +let ocamlmktop_default = add_exec "ocamlmktop";; 57 | +let ocamldep_default = add_exec "ocamldep";; 58 | +let ocamlbrowser_default = add_exec "ocamlbrowser";; 59 | +let ocamldoc_default = add_exec "ocamldoc";; 60 | + 61 | 62 | 63 | let init_manually 64 | --- ./src/findlib/fl_package_base.ml 65 | +++ ./src/findlib/fl_package_base.ml 66 | @@ -133,7 +133,15 @@ 67 | List.find (fun def -> def.def_var = "exists_if") p.package_defs in 68 | let files = Fl_split.in_words def.def_value in 69 | List.exists 70 | - (fun file -> Sys.file_exists (Filename.concat d' file)) 71 | + (fun file -> 72 | + let fln = Filename.concat d' file in 73 | + let e = Sys.file_exists fln in 74 | + (* necessary for ppx executables *) 75 | + if e || Sys.os_type <> "Win32" || Filename.check_suffix fln ".exe" then 76 | + e 77 | + else 78 | + Sys.file_exists (fln ^ ".exe") 79 | + ) 80 | files 81 | with Not_found -> true in 82 | 83 | --- ./src/findlib/fl_split.ml 84 | +++ ./src/findlib/fl_split.ml 85 | @@ -126,10 +126,17 @@ 86 | | '/' | '\\' -> true 87 | | _ -> false in 88 | let norm_dir_win() = 89 | - if l >= 1 && s.[0] = '/' then 90 | - Buffer.add_char b '\\' else Buffer.add_char b s.[0]; 91 | - if l >= 2 && s.[1] = '/' then 92 | - Buffer.add_char b '\\' else Buffer.add_char b s.[1]; 93 | + if l >= 1 then ( 94 | + if s.[0] = '/' then 95 | + Buffer.add_char b '\\' 96 | + else 97 | + Buffer.add_char b s.[0] ; 98 | + if l >= 2 then 99 | + if s.[1] = '/' then 100 | + Buffer.add_char b '\\' 101 | + else 102 | + Buffer.add_char b s.[1]; 103 | + ); 104 | for k = 2 to l - 1 do 105 | let c = s.[k] in 106 | if is_slash c then ( 107 | --- ./src/findlib/frontend.ml 108 | +++ ./src/findlib/frontend.ml 109 | @@ -31,10 +31,18 @@ 110 | else 111 | Sys_error (arg ^ ": " ^ Unix.error_message code) 112 | 113 | +let is_win = Sys.os_type = "Win32" 114 | + 115 | +let () = 116 | + match Findlib_config.system with 117 | + | "win32" | "win64" | "mingw" | "cygwin" | "mingw64" | "cygwin64" -> 118 | + (try set_binary_mode_out stdout true with _ -> ()); 119 | + (try set_binary_mode_out stderr true with _ -> ()); 120 | + | _ -> () 121 | 122 | let slashify s = 123 | match Findlib_config.system with 124 | - | "mingw" | "mingw64" | "cygwin" -> 125 | + | "win32" | "win64" | "mingw" | "cygwin" | "mingw64" | "cygwin64" -> 126 | let b = Buffer.create 80 in 127 | String.iter 128 | (function 129 | @@ -49,7 +57,7 @@ 130 | 131 | let out_path ?(prefix="") s = 132 | match Findlib_config.system with 133 | - | "mingw" | "mingw64" | "cygwin" -> 134 | + | "win32" | "win64" | "mingw" | "mingw64" | "cygwin" -> 135 | let u = slashify s in 136 | prefix ^ 137 | (if String.contains u ' ' then 138 | @@ -273,11 +281,9 @@ 139 | 140 | 141 | let identify_dir d = 142 | - match Sys.os_type with 143 | - | "Win32" -> 144 | - failwith "identify_dir" (* not available *) 145 | - | _ -> 146 | - let s = Unix.stat d in 147 | + if is_win then 148 | + failwith "identify_dir"; (* not available *) 149 | + let s = Unix.stat d in 150 | (s.Unix.st_dev, s.Unix.st_ino) 151 | ;; 152 | 153 | @@ -459,6 +465,96 @@ 154 | ) 155 | packages 156 | 157 | +let rewrite_cmd s = 158 | + if s = "" || not is_win then 159 | + s 160 | + else 161 | + let s = 162 | + let l = String.length s in 163 | + let b = Buffer.create l in 164 | + for i = 0 to pred l do 165 | + match s.[i] with 166 | + | '/' -> Buffer.add_char b '\\' 167 | + | x -> Buffer.add_char b x 168 | + done; 169 | + Buffer.contents b 170 | + in 171 | + if (Filename.is_implicit s && String.contains s '\\' = false) || 172 | + Filename.check_suffix (String.lowercase s) ".exe" then 173 | + s 174 | + else 175 | + let s' = s ^ ".exe" in 176 | + if Sys.file_exists s' then 177 | + s' 178 | + else 179 | + s 180 | + 181 | +let rewrite_cmd s = 182 | + if s = "" || not is_win then s else 183 | + let s = 184 | + let l = String.length s in 185 | + let b = Buffer.create l in 186 | + for i = 0 to pred l do 187 | + match s.[i] with 188 | + | '/' -> Buffer.add_char b '\\' 189 | + | x -> Buffer.add_char b x 190 | + done; 191 | + Buffer.contents b 192 | + in 193 | + if (Filename.is_implicit s && String.contains s '\\' = false) || 194 | + Filename.check_suffix (String.lowercase s) ".exe" then 195 | + s 196 | + else 197 | + let s' = s ^ ".exe" in 198 | + if Sys.file_exists s' then 199 | + s' 200 | + else 201 | + s 202 | + 203 | +let rewrite_pp cmd = 204 | + if not is_win then cmd else 205 | + let module T = struct exception Keep end in 206 | + let is_whitespace = function 207 | + | ' ' | '\011' | '\012' | '\n' | '\r' | '\t' -> true 208 | + | _ -> false in 209 | + (* characters that triggers special behaviour (cmd.exe, not unix shell) *) 210 | + let is_unsafe_char = function 211 | + | '(' | ')' | '%' | '!' | '^' | '<' | '>' | '&' -> true 212 | + | _ -> false in 213 | + let len = String.length cmd in 214 | + let buf = Buffer.create (len + 4) in 215 | + let buf_cmd = Buffer.create len in 216 | + let rec iter_ws i = 217 | + if i >= len then () else 218 | + let cur = cmd.[i] in 219 | + if is_whitespace cur then ( 220 | + Buffer.add_char buf cur; 221 | + iter_ws (succ i) 222 | + ) 223 | + else 224 | + iter_cmd i 225 | + and iter_cmd i = 226 | + if i >= len then add_buf_cmd () else 227 | + let cur = cmd.[i] in 228 | + if is_unsafe_char cur || cur = '"' || cur = '\'' then 229 | + raise T.Keep; 230 | + if is_whitespace cur then ( 231 | + add_buf_cmd (); 232 | + Buffer.add_substring buf cmd i (len - i) 233 | + ) 234 | + else ( 235 | + Buffer.add_char buf_cmd cur; 236 | + iter_cmd (succ i) 237 | + ) 238 | + and add_buf_cmd () = 239 | + if Buffer.length buf_cmd > 0 then 240 | + Buffer.add_string buf (rewrite_cmd (Buffer.contents buf_cmd)) 241 | + in 242 | + try 243 | + iter_ws 0; 244 | + Buffer.contents buf 245 | + with 246 | + | T.Keep -> cmd 247 | 248 | let process_pp_spec syntax_preds packages pp_opts = 249 | (* Returns: pp_command *) 250 | @@ -549,7 +645,7 @@ 251 | None -> [] 252 | | Some cmd -> 253 | ["-pp"; 254 | - cmd ^ " " ^ 255 | + (rewrite_cmd cmd) ^ " " ^ 256 | String.concat " " (List.map Filename.quote pp_i_options) ^ " " ^ 257 | String.concat " " (List.map Filename.quote pp_archives) ^ " " ^ 258 | String.concat " " (List.map Filename.quote pp_opts)] 259 | @@ -625,9 +721,11 @@ 260 | in 261 | try 262 | let preprocessor = 263 | + rewrite_cmd ( 264 | resolve_path 265 | ~base ~explicit:true 266 | - (package_property predicates pname "ppx") in 267 | + (package_property predicates pname "ppx") ) 268 | + in 269 | ["-ppx"; String.concat " " (preprocessor :: options)] 270 | with Not_found -> [] 271 | ) 272 | @@ -895,6 +993,14 @@ 273 | switch (e.g. -L instead of -L ) 274 | *) 275 | 276 | +(* We may need to remove files on which we do not have complete control. 277 | + On Windows, removing a read-only file fails so try to change the 278 | + mode of the file first. *) 279 | +let remove_file fname = 280 | + try Sys.remove fname 281 | + with Sys_error _ when is_win -> 282 | + (try Unix.chmod fname 0o666 with Unix.Unix_error _ -> ()); 283 | + Sys.remove fname 284 | 285 | let ocamlc which () = 286 | 287 | @@ -1022,9 +1128,12 @@ 288 | 289 | "-intf", 290 | Arg.String (fun s -> pass_files := !pass_files @ [ Intf(slashify s) ]); 291 | - 292 | + 293 | "-pp", 294 | - Arg.String (fun s -> pp_specified := true; add_spec_fn "-pp" s); 295 | + Arg.String (fun s -> pp_specified := true; add_spec_fn "-pp" (rewrite_pp s)); 296 | + 297 | + "-ppx", 298 | + Arg.String (fun s -> add_spec_fn "-ppx" (rewrite_pp s)); 299 | 300 | "-thread", 301 | Arg.Unit (fun _ -> threads := threads_default); 302 | @@ -1237,7 +1346,7 @@ 303 | with 304 | any -> 305 | close_out initl; 306 | - Sys.remove initl_file_name; 307 | + remove_file initl_file_name; 308 | raise any 309 | end; 310 | 311 | @@ -1245,9 +1354,9 @@ 312 | at_exit 313 | (fun () -> 314 | let tr f x = try f x with _ -> () in 315 | - tr Sys.remove initl_file_name; 316 | - tr Sys.remove (Filename.chop_extension initl_file_name ^ ".cmi"); 317 | - tr Sys.remove (Filename.chop_extension initl_file_name ^ ".cmo"); 318 | + tr remove_file initl_file_name; 319 | + tr remove_file (Filename.chop_extension initl_file_name ^ ".cmi"); 320 | + tr remove_file (Filename.chop_extension initl_file_name ^ ".cmo"); 321 | ); 322 | 323 | let exclude_list = [ stdlibdir; threads_dir; vmthreads_dir ] in 324 | @@ -1493,7 +1602,9 @@ 325 | [ "-v", Arg.Unit (fun () -> verbose := Verbose); 326 | "-pp", Arg.String (fun s -> 327 | pp_specified := true; 328 | - options := !options @ ["-pp"; s]); 329 | + options := !options @ ["-pp"; rewrite_pp s]); 330 | + "-ppx", Arg.String (fun s -> 331 | + options := !options @ ["-ppx"; rewrite_pp s]); 332 | ] 333 | ) 334 | ) 335 | @@ -1672,7 +1783,9 @@ 336 | Arg.String (fun s -> add_spec_fn "-I" (slashify (resolve_path s))); 337 | 338 | "-pp", Arg.String (fun s -> pp_specified := true; 339 | - add_spec_fn "-pp" s); 340 | + add_spec_fn "-pp" (rewrite_pp s)); 341 | + "-ppx", Arg.String (fun s -> add_spec_fn "-ppx" (rewrite_pp s)); 342 | + 343 | ] 344 | ) 345 | ) 346 | @@ -1830,7 +1943,10 @@ 347 | output_string ch_out append; 348 | close_out ch_out; 349 | close_in ch_in; 350 | - Unix.utimes outpath s.Unix.st_mtime s.Unix.st_mtime; 351 | + (try Unix.utimes outpath s.Unix.st_mtime s.Unix.st_mtime 352 | + with Unix.Unix_error(e,_,_) -> 353 | + prerr_endline("Warning: setting utimes for " ^ outpath 354 | + ^ ": " ^ Unix.error_message e)); 355 | 356 | prerr_endline("Installed " ^ outpath); 357 | with 358 | @@ -1882,6 +1998,8 @@ 359 | Unix.openfile (Filename.concat dir owner_file) [Unix.O_RDONLY] 0 in 360 | let f = 361 | Unix.in_channel_of_descr fd in 362 | + if is_win then 363 | + set_binary_mode_in f false; 364 | try 365 | let line = input_line f in 366 | let is_my_file = (line = pkg) in 367 | @@ -2208,7 +2326,7 @@ 368 | let lines = read_ldconf !ldconf in 369 | let dlldir_norm = Fl_split.norm_dir dlldir in 370 | let dlldir_norm_lc = string_lowercase_ascii dlldir_norm in 371 | - let ci_filesys = (Sys.os_type = "Win32") in 372 | + let ci_filesys = is_win in 373 | let check_dir d = 374 | let d' = Fl_split.norm_dir d in 375 | (d' = dlldir_norm) || 376 | @@ -2356,7 +2474,7 @@ 377 | List.iter 378 | (fun file -> 379 | let absfile = Filename.concat dlldir file in 380 | - Sys.remove absfile; 381 | + remove_file absfile; 382 | prerr_endline ("Removed " ^ absfile) 383 | ) 384 | dll_files 385 | @@ -2365,7 +2483,7 @@ 386 | (* Remove the files from the package directory: *) 387 | if Sys.file_exists pkgdir then begin 388 | let files = Sys.readdir pkgdir in 389 | - Array.iter (fun f -> Sys.remove (Filename.concat pkgdir f)) files; 390 | + Array.iter (fun f -> remove_file (Filename.concat pkgdir f)) files; 391 | Unix.rmdir pkgdir; 392 | prerr_endline ("Removed " ^ pkgdir) 393 | end 394 | @@ -2415,7 +2533,9 @@ 395 | 396 | 397 | let print_configuration() = 398 | + let sl = slashify in 399 | let dir s = 400 | + let s = sl s in 401 | if Sys.file_exists s then 402 | s 403 | else 404 | @@ -2453,27 +2573,27 @@ 405 | if md = "" then "the corresponding package directories" else dir md 406 | ); 407 | Printf.printf "The standard library is assumed to reside in:\n %s\n" 408 | - (Findlib.ocaml_stdlib()); 409 | + (sl (Findlib.ocaml_stdlib())); 410 | Printf.printf "The ld.conf file can be found here:\n %s\n" 411 | - (Findlib.ocaml_ldconf()); 412 | + (sl (Findlib.ocaml_ldconf())); 413 | flush stdout 414 | | Some "conf" -> 415 | - print_endline (Findlib.config_file()) 416 | + print_endline (sl (Findlib.config_file())) 417 | | Some "path" -> 418 | - List.iter print_endline (Findlib.search_path()) 419 | + List.iter ( fun x -> print_endline (sl x)) (Findlib.search_path()) 420 | | Some "destdir" -> 421 | - print_endline (Findlib.default_location()) 422 | + print_endline ( sl (Findlib.default_location())) 423 | | Some "metadir" -> 424 | - print_endline (Findlib.meta_directory()) 425 | + print_endline ( sl (Findlib.meta_directory())) 426 | | Some "metapath" -> 427 | let mdir = Findlib.meta_directory() in 428 | let ddir = Findlib.default_location() in 429 | - print_endline 430 | - (if mdir <> "" then mdir ^ "/META.%s" else ddir ^ "/%s/META") 431 | + print_endline ( sl 432 | + (if mdir <> "" then mdir ^ "/META.%s" else ddir ^ "/%s/META")) 433 | | Some "stdlib" -> 434 | - print_endline (Findlib.ocaml_stdlib()) 435 | + print_endline ( sl (Findlib.ocaml_stdlib())) 436 | | Some "ldconf" -> 437 | - print_endline (Findlib.ocaml_ldconf()) 438 | + print_endline ( sl (Findlib.ocaml_ldconf())) 439 | | _ -> 440 | assert false 441 | ;; 442 | @@ -2481,7 +2601,7 @@ 443 | 444 | let ocamlcall pkg cmd = 445 | let dir = package_directory pkg in 446 | - let path = Filename.concat dir cmd in 447 | + let path = rewrite_cmd (Filename.concat dir cmd) in 448 | begin 449 | try Unix.access path [ Unix.X_OK ] 450 | with 451 | @@ -2647,6 +2767,10 @@ 452 | | Sys_error f -> 453 | prerr_endline ("ocamlfind: " ^ f); 454 | exit 2 455 | + | Unix.Unix_error (e, fn, f) -> 456 | + prerr_endline ("ocamlfind: " ^ fn ^ " " ^ f 457 | + ^ ": " ^ Unix.error_message e); 458 | + exit 2 459 | | Findlib.No_such_package(pkg,info) -> 460 | prerr_endline ("ocamlfind: Package `" ^ pkg ^ "' not found" ^ 461 | (if info <> "" then " - " ^ info else "")); 462 | --- ./src/findlib/Makefile 463 | +++ ./src/findlib/Makefile 464 | @@ -90,6 +90,7 @@ 465 | cat findlib_config.mlp | \ 466 | $(SH) $(TOP)/tools/patch '@CONFIGFILE@' '$(OCAMLFIND_CONF)' | \ 467 | $(SH) $(TOP)/tools/patch '@STDLIB@' '$(OCAML_CORE_STDLIB)' | \ 468 | + $(SH) $(TOP)/tools/patch '@EXEC_SUFFIX@' '$(EXEC_SUFFIX)' | \ 469 | sed -e 's;@AUTOLINK@;$(OCAML_AUTOLINK);g' \ 470 | -e 's;@SYSTEM@;$(SYSTEM);g' \ 471 | >findlib_config.ml 472 | -------------------------------------------------------------------------------- /packages/ppx/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.1_opam_override/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "build": [ 3 | [ 4 | "bash", 5 | "-c", 6 | "#{os == 'windows' ? 'patch -p1 < findlib-1.9.1.patch' : 'true'}" 7 | ], 8 | [ 9 | "./configure", 10 | "-bindir", 11 | "#{self.bin}", 12 | "-sitelib", 13 | "#{self.lib}", 14 | "-mandir", 15 | "#{self.man}", 16 | "-config", 17 | "#{self.lib}/findlib.conf", 18 | "-no-custom", 19 | "-no-topfind" 20 | ], 21 | [ 22 | "make", 23 | "all" 24 | ], 25 | [ 26 | "make", 27 | "opt" 28 | ] 29 | ], 30 | "install": [ 31 | [ 32 | "make", 33 | "install" 34 | ], 35 | [ 36 | "install", 37 | "-m", 38 | "0755", 39 | "ocaml-stub", 40 | "#{self.bin}/ocaml" 41 | ], 42 | [ 43 | "mkdir", 44 | "-p", 45 | "#{self.toplevel}" 46 | ], 47 | [ 48 | "install", 49 | "-m", 50 | "0644", 51 | "src/findlib/topfind", 52 | "#{self.toplevel}/topfind" 53 | ] 54 | ], 55 | "exportedEnv": { 56 | "OCAML_TOPLEVEL_PATH": { 57 | "val": "#{self.toplevel}", 58 | "scope": "global" 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /packages/ppx/lenses-ppx.opam: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Astrocoders/lenses-ppx/d0e54641a9e36eeda4a08c81c34e7d2b91c50105/packages/ppx/lenses-ppx.opam -------------------------------------------------------------------------------- /packages/ppx/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lenses-ppx", 3 | "version": "6.1.10", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "bsb-native": { 8 | "version": "4.0.7000", 9 | "resolved": "https://registry.npmjs.org/bsb-native/-/bsb-native-4.0.7000.tgz", 10 | "integrity": "sha512-RcmbmdwvGHnQBhxkz6B7+J0d4cTUhWDGIJ94DmjHDlwgH7cnzWTTKqASWkPiPTqlNFyZtQxZ9qTvAQrsE/iMpw==", 11 | "requires": { 12 | "yauzl": "^2.9.1" 13 | } 14 | }, 15 | "buffer-crc32": { 16 | "version": "0.2.13", 17 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 18 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" 19 | }, 20 | "fd-slicer": { 21 | "version": "1.1.0", 22 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 23 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 24 | "requires": { 25 | "pend": "~1.2.0" 26 | } 27 | }, 28 | "pend": { 29 | "version": "1.2.0", 30 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 31 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" 32 | }, 33 | "yauzl": { 34 | "version": "2.10.0", 35 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 36 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 37 | "requires": { 38 | "buffer-crc32": "~0.2.3", 39 | "fd-slicer": "~1.1.0" 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /packages/ppx/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lenses-ppx", 3 | "version": "6.1.10", 4 | "scripts": { 5 | "build": "esy build", 6 | "dev:rewriter": "ocamlfind ppx_tools/rewriter _build/default/bin/bin.exe test/Test.ml", 7 | "dev:dumpast": "ocamlfind ppx_tools/dumpast test/Wanted.ml", 8 | "postinstall": "node postinstall.js" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/ppx/postinstall.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | 3 | const { platform } = process; 4 | if (!fs.existsSync(platform)) { 5 | throw new Error(platform + " lenses-ppx binary not found"); 6 | } 7 | 8 | /** 9 | * Windows needs two ppx files for some reason 10 | * One extra with *.exe suffix 11 | */ 12 | if (platform === "win32") { 13 | fs.copyFileSync("win32", "ppx.exe"); 14 | fs.chmodSync("ppx.exe", 0o744); 15 | } 16 | 17 | fs.renameSync(platform, "ppx"); 18 | fs.chmodSync("ppx", 0o744); 19 | -------------------------------------------------------------------------------- /packages/ppx/src/LensesPpx.re: -------------------------------------------------------------------------------- 1 | open Ppxlib; 2 | open Asttypes; 3 | open Parsetree; 4 | open Ast_helper; 5 | 6 | let loc = Location.none; 7 | let createSetLens = (~typeName, ~gadtFieldName, ~prefix="", ~fields, ()) => { 8 | let cases = 9 | List.map( 10 | field => { 11 | Ast_helper.Exp.case( 12 | Ast_helper.Pat.construct( 13 | {loc, txt: Lident(String.capitalize_ascii(field.pld_name.txt))}, 14 | None, 15 | ), 16 | Ast_helper.Exp.record( 17 | [({loc, txt: Lident(field.pld_name.txt)}, [%expr value])], 18 | // Spread not needed when there is only one field in the type. 19 | // So we avoid the "redundant with" warning 20 | List.length(fields) > 1 ? Some([%expr values]) : None, 21 | ), 22 | ) 23 | }, 24 | fields, 25 | ); 26 | 27 | let recordType = 28 | Ast_helper.Typ.mk(Ptyp_constr({txt: Lident(typeName), loc}, [])); 29 | 30 | let gadtTypePoly = 31 | Ast_helper.Typ.mk( 32 | Ptyp_constr({txt: Lident(gadtFieldName), loc}, [[%type: 'value]]), 33 | ); 34 | 35 | let gadtTypeLocal = 36 | Ast_helper.Typ.mk( 37 | Ptyp_constr({txt: Lident(gadtFieldName), loc}, [[%type: value]]), 38 | ); 39 | 40 | let typeDefinition = 41 | Ast_helper.Typ.poly( 42 | [{txt: "value", loc}], 43 | [%type: ([%t recordType], [%t gadtTypePoly], 'value) => [%t recordType]], 44 | ) 45 | |> Ast_helper.Typ.force_poly; 46 | 47 | let typeDefinitionFilledWithPolyLocalType = [%type: 48 | ([%t recordType], [%t gadtTypeLocal], value) => [%t recordType] 49 | ]; 50 | 51 | let patMatch = 52 | Ast_helper.Exp.mk( 53 | Pexp_match( 54 | Ast_helper.Exp.mk(Pexp_ident({txt: Lident("field"), loc})), 55 | cases, 56 | ), 57 | ); 58 | 59 | // Properly applying type constraints for the poly local abstract type 60 | // https://caml.inria.fr/pub/docs/manual-ocaml/locallyabstract.html#p:polymorpic-locally-abstract 61 | let body = [%expr (values, field, value) => [%e patMatch]]; 62 | let fnName = Ast_helper.Pat.var({txt: prefix ++ "set", loc}); 63 | let pat = Ast_helper.Pat.constraint_(fnName, typeDefinition); 64 | let body = 65 | Ast_helper.Exp.constraint_(body, typeDefinitionFilledWithPolyLocalType); 66 | 67 | [%stri let [%p pat] = (type value) => [%e body]]; 68 | }; 69 | 70 | let createGetLens = (~typeName, ~gadtFieldName, ~prefix="", ~fields, ()) => { 71 | let cases = 72 | List.map( 73 | field => { 74 | Ast_helper.Exp.case( 75 | Ast_helper.Pat.construct( 76 | {loc, txt: Lident(String.capitalize_ascii(field.pld_name.txt))}, 77 | None, 78 | ), 79 | Ast_helper.Exp.field( 80 | [%expr values], 81 | {loc, txt: Lident(field.pld_name.txt)}, 82 | ), 83 | ) 84 | }, 85 | fields, 86 | ); 87 | 88 | let recordType = 89 | Ast_helper.Typ.mk(Ptyp_constr({txt: Lident(typeName), loc}, [])); 90 | 91 | let gadtTypePoly = 92 | Ast_helper.Typ.mk( 93 | Ptyp_constr({txt: Lident(gadtFieldName), loc}, [[%type: 'value]]), 94 | ); 95 | 96 | let gadtTypeLocal = 97 | Ast_helper.Typ.mk( 98 | Ptyp_constr({txt: Lident(gadtFieldName), loc}, [[%type: value]]), 99 | ); 100 | 101 | let typeDefinition = 102 | Ast_helper.Typ.poly( 103 | [{txt: "value", loc}], 104 | [%type: ([%t recordType], [%t gadtTypePoly]) => 'value], 105 | ) 106 | |> Ast_helper.Typ.force_poly; 107 | 108 | let typeDefinitionFilledWithPolyLocalType = [%type: 109 | ([%t recordType], [%t gadtTypeLocal]) => value 110 | ]; 111 | 112 | let patMatch = 113 | Ast_helper.Exp.mk( 114 | Pexp_match( 115 | Ast_helper.Exp.mk(Pexp_ident({txt: Lident("field"), loc})), 116 | cases, 117 | ), 118 | ); 119 | 120 | // Properly applying type constraints for the poly local abstract type 121 | // https://caml.inria.fr/pub/docs/manual-ocaml/locallyabstract.html#p:polymorpic-locally-abstract 122 | let body = [%expr (values, field) => [%e patMatch]]; 123 | let fnName = Ast_helper.Pat.var({txt: prefix ++ "get", loc}); 124 | 125 | let pat = Ast_helper.Pat.constraint_(fnName, typeDefinition); 126 | let body = 127 | Ast_helper.Exp.constraint_(body, typeDefinitionFilledWithPolyLocalType); 128 | 129 | [%stri let [%p pat] = (type value) => [%e body]]; 130 | }; 131 | 132 | let createGadt = (~gadtFieldName, ~fields) => { 133 | pstr_loc: Location.none, 134 | pstr_desc: 135 | Pstr_type( 136 | Recursive, 137 | [ 138 | { 139 | ptype_loc: Location.none, 140 | ptype_attributes: [], 141 | ptype_name: { 142 | txt: gadtFieldName, 143 | loc: Location.none, 144 | }, 145 | ptype_params: [ 146 | ( 147 | { 148 | ptyp_loc_stack: [], 149 | ptyp_desc: Ptyp_any, 150 | ptyp_loc: Location.none, 151 | ptyp_attributes: [], 152 | }, 153 | (NoVariance, NoInjectivity), 154 | ), 155 | ], 156 | ptype_cstrs: [], 157 | ptype_kind: 158 | Ptype_variant( 159 | List.map( 160 | field => 161 | { 162 | pcd_loc: Location.none, 163 | pcd_attributes: [], 164 | pcd_name: { 165 | txt: String.capitalize_ascii(field.pld_name.txt), 166 | loc: Location.none, 167 | }, 168 | pcd_args: Pcstr_tuple([]), 169 | pcd_res: 170 | Some({ 171 | ptyp_loc_stack: [], 172 | ptyp_loc: Location.none, 173 | ptyp_attributes: [], 174 | ptyp_desc: 175 | Ptyp_constr( 176 | {txt: Lident(gadtFieldName), loc: Location.none}, 177 | [ 178 | { 179 | ptyp_desc: field.pld_type.ptyp_desc, 180 | ptyp_loc_stack: [], 181 | ptyp_loc: Location.none, 182 | ptyp_attributes: [], 183 | }, 184 | ], 185 | ), 186 | }), 187 | }, 188 | fields, 189 | ), 190 | ), 191 | ptype_private: Public, 192 | ptype_manifest: None, 193 | }, 194 | ], 195 | ), 196 | }; 197 | 198 | let createStructureLenses = 199 | (~typeName, ~gadtFieldName, ~prefix=?, ~fields, ()) => { 200 | [ 201 | createGadt(~gadtFieldName, ~fields), 202 | createGetLens(~typeName, ~gadtFieldName, ~prefix?, ~fields, ()), 203 | createSetLens(~typeName, ~gadtFieldName, ~prefix?, ~fields, ()), 204 | ]; 205 | }; 206 | 207 | let createModule = (~typeDef, ~typeName, ~fields) => 208 | Mod.mk( 209 | Pmod_structure([ 210 | typeDef, 211 | ...createStructureLenses( 212 | ~typeName, 213 | ~gadtFieldName="field", 214 | ~fields, 215 | (), 216 | ), 217 | ]), 218 | ); 219 | 220 | // Heavily borrowed from Decco's code 221 | module StructureMapper = { 222 | open Utils; 223 | let mapTypeDecl = decl => { 224 | let { 225 | ptype_attributes, 226 | ptype_name: {txt: typeName, _}, 227 | ptype_manifest, 228 | ptype_loc, 229 | ptype_kind, 230 | _, 231 | } = decl; 232 | 233 | switch (getSettingsFromAttributes(ptype_attributes)) { 234 | | Ok(Some({lenses: true})) => 235 | switch (ptype_manifest, ptype_kind) { 236 | | (None, Ptype_abstract) => 237 | fail(ptype_loc, "Can't generate lenses for unspecified type") 238 | | (None, Ptype_record(fields)) => 239 | createStructureLenses( 240 | ~typeName, 241 | ~gadtFieldName=typeName ++ "_" ++ "field", 242 | ~prefix=typeName ++ "_", 243 | ~fields, 244 | (), 245 | ) 246 | | _ => fail(ptype_loc, "This type is not handled by lenses-ppx") 247 | } 248 | | Ok(Some({lenses: false})) 249 | | Ok(None) => [] 250 | | Error(s) => fail(ptype_loc, s) 251 | }; 252 | }; 253 | let mapStructureItem = (mapper, {pstr_desc, _} as structureItem) => 254 | switch (pstr_desc) { 255 | | Pstr_type(_recFlag, decls) => 256 | let valueBindings = decls |> List.map(mapTypeDecl) |> List.concat; 257 | [mapper#structure_item(structureItem)] 258 | @ (List.length(valueBindings) > 0 ? valueBindings : []); 259 | 260 | | _ => [mapper#structure_item(structureItem)] 261 | }; 262 | let mapStructure = (mapper, structure) => 263 | structure |> List.map(mapStructureItem(mapper)) |> List.concat; 264 | }; 265 | 266 | 267 | class lensesMapper = { 268 | as self; 269 | inherit class Ast_traverse.map as super; 270 | 271 | pub! structure = structure => { 272 | StructureMapper.mapStructure(self, structure); 273 | }; 274 | 275 | pub! module_expr = expr => { 276 | switch (expr) { 277 | | { 278 | pmod_desc: 279 | Pmod_extension(( 280 | {txt: "lenses", _}, 281 | PStr([ 282 | { 283 | pstr_desc: 284 | Pstr_type( 285 | rec_flag, 286 | [ 287 | { 288 | ptype_name: {txt: typeName, _}, 289 | ptype_kind: Ptype_record(fields), 290 | _, 291 | }, 292 | ], 293 | ), 294 | _, 295 | }, 296 | ]), 297 | )), 298 | _, 299 | } => 300 | createModule( 301 | ~typeDef={ 302 | Ast_helper.Str.type_( 303 | rec_flag, 304 | [ 305 | Ast_helper.Type.mk( 306 | ~kind=Ptype_record(fields), 307 | {txt: typeName, loc: Location.none}, 308 | ), 309 | ], 310 | ); 311 | }, 312 | ~typeName, 313 | ~fields, 314 | ) 315 | | _ => super#module_expr(expr) 316 | }; 317 | }; 318 | }; 319 | 320 | let structure_mapper = s => (new lensesMapper)#structure(s); 321 | 322 | let () = 323 | Driver.register_transformation( 324 | ~preprocess_impl=structure_mapper, 325 | "lenses-ppx" 326 | ); 327 | 328 | -------------------------------------------------------------------------------- /packages/ppx/src/Utils.re: -------------------------------------------------------------------------------- 1 | open Asttypes; 2 | open Parsetree; 3 | 4 | let annotationName = "lenses"; 5 | let getAttributeByName = (attributes: list(attribute), name) => { 6 | let filtered = 7 | attributes |> List.filter(({attr_name: {txt, _},_}) => txt == name); 8 | 9 | switch (filtered) { 10 | | [] => Ok(None) 11 | | [attribute] => Ok(Some(attribute)) 12 | | _ => Error("Too many occurrences of \"" ++ name ++ "\" attribute") 13 | }; 14 | }; 15 | 16 | type generatorSettings = {lenses: bool}; 17 | let getSettingsFromAttributes = ( attributes: list(attribute) ) => 18 | switch (getAttributeByName(attributes, annotationName)) { 19 | | Ok(Some(_)) => Ok(Some({lenses: true})) 20 | | Ok(None) => Ok(None) 21 | | Error(_) as e => e 22 | }; 23 | 24 | 25 | let fail = (loc, message) => 26 | Location.error(~loc, message) 27 | |> (v) => Location.Error(v) 28 | |> raise; -------------------------------------------------------------------------------- /packages/ppx/src/dune: -------------------------------------------------------------------------------- 1 | (library 2 | (name LensesPpx) 3 | (public_name lenses-ppx.lib) 4 | (libraries reason ocaml-migrate-parsetree ppxlib) 5 | (kind ppx_rewriter) 6 | (preprocess (pps ppxlib.metaquot))) 7 | 8 | -------------------------------------------------------------------------------- /packages/ppx/test/Test.ml: -------------------------------------------------------------------------------- 1 | module FormConfig = struct 2 | module State = [%lenses 3 | type t = { 4 | email: string; 5 | age: int; 6 | };; 7 | ] 8 | end;; 9 | 10 | module User = [%lenses 11 | type t = { 12 | email: string; 13 | age: int; 14 | };; 15 | ] 16 | 17 | module OnlyOneField = [%lenses 18 | type t = { 19 | email: string; 20 | };; 21 | ];; 22 | 23 | type profile = { 24 | name: string; 25 | isActive: int; 26 | } 27 | [@@lenses] -------------------------------------------------------------------------------- /packages/ppx/test/Test.re: -------------------------------------------------------------------------------- 1 | module State = [%lenses 2 | type state = { 3 | email: string, 4 | age: int, 5 | } 6 | ]; 7 | 8 | let state: State.state = {email: "", age: 0}; 9 | 10 | [%lenses] 11 | type profile = { 12 | email: string, 13 | age: int, 14 | } -------------------------------------------------------------------------------- /packages/ppx/test/Wanted.ml: -------------------------------------------------------------------------------- 1 | module FormConfig = 2 | struct 3 | type _ field = 4 | | Email: string field 5 | | Age: int field 6 | type state = { 7 | email: string; 8 | age: int;} 9 | let get : 'value . state -> 'value field -> 'value= fun (type value) -> 10 | (fun state -> 11 | fun field -> 12 | match field with | Email -> state.email | Age -> state.age : 13 | state -> value field -> value) 14 | let set : 'value . state -> 'value field -> 'value -> state= fun (type 15 | value) -> 16 | (fun state -> 17 | fun field -> 18 | fun value -> 19 | match field with 20 | | Email -> { state with email = value } 21 | | Age -> { state with age = value } : state -> 22 | value field -> 23 | value -> state) 24 | end 25 | --------------------------------------------------------------------------------