Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
#######
#
# E-scripts on ocaml.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
#   (find-eev-quick-intro)
#   http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/ocaml.e>
#           or at <http://angg.twu.net/e/ocaml.e.html>.
#        See also <http://angg.twu.net/emacs.html>,
#                 <http://angg.twu.net/.emacs[.html]>,
#                 <http://angg.twu.net/.zshrc[.html]>,
#                 <http://angg.twu.net/escripts.html>,
#             and <http://angg.twu.net/>.
#
#######



# «.ocaml-doc»			(to "ocaml-doc")
# «.ocaml-interp»		(to "ocaml-interp")
# «.irc-channel»		(to "irc-channel")
# «.menhir»			(to "menhir")
# «.ocamlbuild»			(to "ocamlbuild")
# «.dune»			(to "dune")
# «.ocamllex»			(to "ocamllex")
# «.ocamldep»			(to "ocamldep")
# «.topfind»			(to "topfind")
# «.caml-mode»			(to "caml-mode")
# «.tuareg»			(to "tuareg")
# «.tuareg-git»			(to "tuareg-git")
# «.tuareg-marmalade»		(to "tuareg-marmalade")
# «.tuareg»			(to "tuareg")
# «.comments»			(to "comments")
# «.tutorials»			(to "tutorials")
# «.opam»			(to "opam")
# «.opam-init»			(to "opam-init")
# «.opam-core»			(to "opam-core")
# «.janestreetcore-git»		(to "janestreetcore-git")
# «.utop»			(to "utop")
# «.ctfp»			(to "ctfp")
# «.ocaml-book-en»		(to "ocaml-book-en")
# «.typer»			(to "typer")
# «.typer-cuc»			(to "typer-cuc")
# «.implementing-functor»	(to "implementing-functor")
# «.tylr»			(to "tylr")
# «.first-hour»			(to "first-hour")
# «.first-hour-graphics»	(to "first-hour-graphics")
# «.pipe»			(to "pipe")
# «.michael-ryan-clarkson»	(to "michael-ryan-clarkson")
# «.lua-and-ocaml»		(to "lua-and-ocaml")
# «.ocaml-canvas»		(to "ocaml-canvas")
# «.error-unbound-module»	(to "error-unbound-module")
# «.metaocaml»			(to "metaocaml")




* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
apti ocaml
apti ocaml-doc


/home/edrx/e(edrx:li)# apti ocaml
[sudo] password for edrx: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  camlp4 ledit libcamlp4-ocaml-dev libfindlib-ocaml libfindlib-ocaml-dev
  ocaml-base ocaml-base-nox ocaml-compiler-libs ocaml-findlib ocaml-interp
  ocaml-nox
Suggested packages:
  ocaml-doc tuareg-mode | ocaml-mode
The following NEW packages will be installed:
  camlp4 ledit libcamlp4-ocaml-dev libfindlib-ocaml libfindlib-ocaml-dev ocaml
  ocaml-base ocaml-base-nox ocaml-compiler-libs ocaml-findlib ocaml-interp
  ocaml-nox
0 upgraded, 12 newly installed, 0 to remove and 0 not upgraded.
Need to get 32.7 MB of archives.
After this operation, 220 MB of additional disk space will be used.
Do you want to continue? [Y/n] 



# (find-zsh "installeddebs | sort | grep ocaml")
# (find-zsh "availabledebs | sort | grep ocaml")

# (find-status   "ocaml-base-nox")
# (find-vldifile "ocaml-base-nox.list")
# (find-udfile   "ocaml-base-nox/")
# (find-status   "ocaml-base")
# (find-vldifile "ocaml-base.list")
# (find-udfile   "ocaml-base/")
# (find-status   "ocaml-interp")
# (find-vldifile "ocaml-interp.list")
# (find-udfile   "ocaml-interp/")
# (find-status   "ocaml-mode")
# (find-vldifile "ocaml-mode.list")
# (find-udfile   "ocaml-mode/")
# (find-status   "ocaml-nox")
# (find-vldifile "ocaml-nox.list")
# (find-udfile   "ocaml-nox/")
# (find-status   "ocaml")
# (find-vldifile "ocaml.list")
# (find-udfile   "ocaml/")

# (find-status   "ocaml-man")
# (find-vldifile "ocaml-man.list")
# (find-udfile   "ocaml-man/")
# (find-status   "ocaml-compiler-libs")
# (find-vldifile "ocaml-compiler-libs.list")
# (find-udfile   "ocaml-compiler-libs/")





#####
#
# ocaml-doc (non-free)
# 2019feb21
#
#####

# «ocaml-doc» (to ".ocaml-doc")
# (find-angg ".emacs" "ocaml")
# https://packages.debian.org/sid/ocaml-doc
# (find-status   "ocaml-doc")
# (find-vldifile "ocaml-doc.list")
# (find-udfile   "ocaml-doc/")
# (find-udfile "ocaml-doc/ocaml.html/")
# (find-udfile "ocaml-doc/ocaml.html/libref/")
# (find-udfile "ocaml-doc/ocaml-4.05-refman.txt.gz")
# (find-fline "/usr/share/doc/ocaml-doc/" "ocaml-4.11-refman.pdf")
# (find-pdf-page "/usr/share/doc/ocaml-doc/ocaml-4.11-refman.pdf")
# (find-pdf-text "/usr/share/doc/ocaml-doc/ocaml-4.11-refman.pdf")
# (code-pdf-page "ocamlref" "/usr/share/doc/ocaml-doc/ocaml-4.11-refman.pdf")
# (code-pdf-text "ocamlref" "/usr/share/doc/ocaml-doc/ocaml-4.11-refman.pdf")
# (find-ocamlrefpage)
# (find-ocamlreftext)

# file:///usr/share/doc/ocaml-doc/ocaml.html/index.html

/usr/share/doc/ocaml-doc/ocaml-4.05-refman.pdf

# (find-node "(ocaml)Top")

(code-c-d "ocamlref" "/usr/share/doc/ocaml-doc/ocaml-4.05-refman.")
# (find-ocamlreffile "txt.gz")
# (find-ocamlreffile "txt.gz" "\n1.1  Basics")

* (eepitch-ocaml)
* (eepitch-kill)
* (eepitch-ocaml)
1+2*3;;
let pi = 4.0 *. atan 1.0;;
let square x = x *. x;;
square (sin pi) +. square (cos pi);;
1.0 * 2;;
let rec fib n =
  if n < 2 then n else fib (n-1) + fib (n-2);;
fib 10;;

# (find-ocamlreffile "txt.gz" "\n6.1  Lexical conventions")
# (find-ocamlreffile "txt.gz" "\n6.1  Lexical conventions" "Comments")





#####
#
# ocaml-interp
# 2019feb21
#
#####

# «ocaml-interp» (to ".ocaml-interp")
# (find-es "ml" "ocaml")

# (find-fline "/usr/bin/ocaml")
# (find-fline "/usr/share/pixmaps/ocaml.xpm")
# (find-fline "/usr/share/menu/ocaml-interp")
# (find-udfile "ocaml-interp/copyright")
# (find-man "1 ocaml")
# (find-udfile "ocaml-interp/changelog.Debian.gz")

* (eepitch-ocaml)
* (eepitch-kill)
* (eepitch-ocaml)



#####
#
# irc-channel
# 2022oct05
#
#####

# «irc-channel»  (to ".irc-channel")
# (find-efunction 'find-erclibera)
# On libera:

*** 480 #ocaml Cannot join channel (+S) - SSL/TLS required
(edrx) 




#####
#
# menhir
# 2019sep21 / 2022mar17
#
#####

# «menhir» (to ".menhir")
# (find-zsh "installeddebs | sort | grep menhir")
# (find-zsh "availabledebs | sort | grep menhir")
# (find-status   "menhir")
# (find-vldifile "menhir.list")
# (find-udfile   "menhir/")
# (find-status   "menhir-doc")
# (find-vldifile "menhir-doc.list")
# (find-udfile   "menhir-doc/")
# (code-pdf-page "menhir" "/usr/share/doc/menhir/manual.pdf.gz")
# (code-pdf-text "menhir" "/usr/share/doc/menhir/manual.pdf.gz")
# (find-menhirpage)
# (find-menhirtext)

apti menhir menhir-doc




#####
#
# ocamlbuild
# 2022mar17
#
#####

# «ocamlbuild»  (to ".ocamlbuild")
# (find-status   "ocamlbuild")
# (find-vldifile "ocamlbuild.list")
# (find-udfile   "ocamlbuild/")
# (find-ocamlrefpage (+ 2 333) "19" "The ocamlbuild compilation manager")
# (find-ocamlreftext (+ 2 333) "19" "The ocamlbuild compilation manager")

# https://github.com/ocaml/ocamlbuild -> dune
# (find-git-links "https://github.com/ocaml/ocamlbuild" "ocamlbuild")
# (code-c-d "ocamlbuild" "~/usrc/ocamlbuild/")
# (find-ocamlbuildfile "")
# (find-ocamlbuildfile "manual/manual.adoc")
# (find-ocamlbuildfile "manual/manual.adoc" "-build-dir")

# (find-udfile "ocamlbuild/examples/")
# (find-udfile "ocamlbuild/examples/01-simple/")
# (find-man  "1 ocamlbuild")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rv /tmp/ocamlbuild01/
mkdir  /tmp/ocamlbuild01/
cd     /tmp/ocamlbuild01/
cp /usr/share/doc/ocamlbuild/examples/01-simple/* .
make |& tee om

# (find-fline "/usr/share/doc/ocamlbuild/examples/01-simple/")
# (find-fline "/tmp/ocamlbuild01/")
# (find-fline "/tmp/ocamlbuild01/om")
# (find-fline "/tmp/ocamlbuild01/_build/")
# (find-tuareggrep "grep --color=auto -nH --null -e _build *.el")
# (find-tuaregfile "tuareg.el" "(defun tuareg--switch-outside-build")




#####
#
# dune
# 2022mar17
#
#####

# «dune»  (to ".dune")
# (find-status   "ocaml-dune")
# (find-vldifile "ocaml-dune.list")
# (find-udfile   "ocaml-dune/")
# (find-sh "apt-file search dune | grep ocaml")
# (find-zsh "availabledebs | sort | grep dune")
# https://github.com/ocaml/dune
# (find-git-links "https://github.com/ocaml/dune" "dune")
# (code-c-d "dune" "~/usrc/dune/")
# (find-dunefile "")
# (find-dunefile "doc/")
# (find-dunefile "example/")




#####
#
# ocamllex
# 2022mar17
#
#####

# «ocamllex»  (to ".ocamllex")
# (find-ocamlrefpage (+ 2 271) "13" "Lexer and parser generators")
# (find-ocamlreftext (+ 2 271) "13" "Lexer and parser generators")
# (find-status   "ocaml-nox")
# (find-vldifile "ocaml-nox.list")
# (find-udfile   "ocaml-nox/")
# (find-man "1 ocamllex")



#####
#
# ocamldep
# 2022mar17
#
#####

# «ocamldep»  (to ".ocamldep")
# (find-ocamlrefpage (+ 2 285) "14" "Dependency generator (ocamldep)")
# (find-ocamlreftext (+ 2 285) "14" "Dependency generator (ocamldep)")
# (find-man "1 ocamldep")





#####
#
# topfind
# 2022mar17
#
#####

# «topfind»  (to ".topfind")

# (find-status   "libfindlib-ocaml")
# (find-vldifile "libfindlib-ocaml.list")
# (find-udfile   "libfindlib-ocaml/")
# (find-status   "libfindlib-ocaml-dev")
# (find-vldifile "libfindlib-ocaml-dev.list")
# (find-udfile   "libfindlib-ocaml-dev/")
# (find-status   "ocaml-findlib")
# (find-vldifile "ocaml-findlib.list")
# (find-udfile   "ocaml-findlib/")

# (find-status   "libgraphics-ocaml")
# (find-vldifile "libgraphics-ocaml.list")
# (find-udfile   "libgraphics-ocaml/")
# (find-status   "libgraphics-ocaml-dev")
# (find-vldifile "libgraphics-ocaml-dev.list")
# (find-udfile   "libgraphics-ocaml-dev/")




#####
#
# plzoo-git
# 2019aug29
#
#####

# «plzoo-git» (to ".plzoo-git")
# (find-es "ml" "plzoo-git")
# https://github.com/andrejbauer/plzoo

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/plzoo/
cd      ~/usrc/
git clone https://github.com/andrejbauer/plzoo
cd      ~/usrc/plzoo/

git branch --list -a
git for-each-ref
PAGER=cat git log --oneline --graph --all -20

make     |& tee om
make all |& tee om

# (find-fline "~/usrc/")
# (find-fline "~/usrc/plzoo/")
# (find-gitk  "~/usrc/plzoo/")

# (code-c-d "plzoo" "~/usrc/plzoo/")
# (find-plzoofile "")
# (find-plzoofile "src/")
# (find-plzoofile "src/lambda/")
# (find-plzoofile "src/levy/")




#####
#
# caml-mode
# 2019sep21
#
#####

# «caml-mode» (to ".caml-mode")
# (find-es "ml" "ocaml-mode")
# (find-epackages "\n  caml " t)
# (find-epackage 'caml)
# (find-elpafile "caml-readme.txt")
# (find-elpafile "caml-20190413.1205/")
# https://github.com/ocaml/ocaml/

# (code-c-d "camlmode" "~/.emacs.d/elpa/caml-20190413.1205/")
# (find-camlmodefile "")




#####
#
# tuareg
# 2022mar17
#
#####

# «tuareg»  (to ".tuareg")
# (find-epackage-links 'tuareg "tuareg" t)
# (find-epackage       'tuareg)
# (code-c-d "tuareg" "~/.emacs.d/elpa/tuareg-20220104.2039/")
# https://github.com/ocaml/tuareg
# (find-tuaregfile "")
# (find-tuaregfile "tuareg.el")



#####
#
# tuareg-git
# 2019sep21
#
#####

# «tuareg-git» (to ".tuareg-git")
# (find-es "ml" "ocaml-mode")
# http://www.emacswiki.org/emacs/TuaregMode ->
# http://tuareg.forge.ocamlcore.org/ ->
# https://github.com/ocaml/tuareg

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/tuareg/
cd      ~/usrc/
git clone https://github.com/ocaml/tuareg
cd      ~/usrc/tuareg/

git branch --list -a
git for-each-ref
PAGER=cat git log --oneline --graph --all -20

# (find-fline "~/usrc/")
# (find-fline "~/usrc/tuareg/")
# (find-gitk  "~/usrc/tuareg/")

# (code-c-d "tuareggit" "~/usrc/tuareg/")
# (find-tuaregfile "")
# (find-tuareggitfile "")
# (find-tuareggitfile "README.md")
# (find-tuareggitfile "tuareg-site-file.el")
# (find-tuareggitfile "tuareg.el" "M-x tuareg-run-ocaml")
# (find-tuareggitgrep "grep --color -nH -e run-ocaml *.el")

# (load "~/usrc/tuareg/tuareg-site-file")





#####
#
# tuareg-marmalade
# 2019sep21
#
#####

# «tuareg-marmalade» (to ".tuareg-marmalade")
# (find-es "emacs" "marmalade")
# https://marmalade-repo.org/
# https://marmalade-repo.org/packages/tuareg
# https://forge.ocamlcore.org/projects/tuareg/
# https://forge.ocamlcore.org/tracker/?group_id=43
# http://melpa.org/#/tuareg

(package-refresh-contents)
;; (find-evardescr 'package-archives)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-refresh-contents)

M-x package-refresh-contents [RET]
M-: (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
M-x package-refresh-contents [RET]
M-x package-install [RET] marmalade-demo
(find-epackage-links 'tuareg)

;; (find-fline "~/.emacs.d/elpa/tuareg-20190805.958/")
(code-c-d "tuareg" "~/.emacs.d/elpa/tuareg-20190805.958/")
;; (find-tuaregfile "")




#####
#
# tuareg
# 2019nov30
#
#####

# «tuareg» (to ".tuareg")
# (find-efunctiondescr 'tuareg-mode)
# (find-efunction      'tuareg-mode)
# (find-ekeymapdescr tuareg-mode-map)
# (find-ekeymapdescr tuareg-interactive-mode-map)
# (find-tuaregfile "")
# (find-tuareggitfile "")
# (find-tuareggitfile "README.md")
# (find-tuareggitfile "README.md" "M-x run-ocaml")
# (find-efunctiondescr 'run-ocaml)
# (find-efunction      'run-ocaml)

# (find-tuareggrep "grep --color -nH --null -e tuareg-eval-phrase *.el")
# (find-tuaregfile "tuareg.el" "(defun tuareg-eval-phrase ()")




#####
#
# comments
# 2019sep21
#
#####

# «comments» (to ".comments")
# (find-ocamlrefpage (+ 2 91) "6.1    Lexical conventions")
# (find-ocamlreftext (+ 2 91) "6.1    Lexical conventions")





#####
#
# tutorials
# 2019sep21
#
#####

# «tutorials» (to ".tutorials")
# https://ocaml.org/docs
# https://ocaml.org/learn/tutorials/
# https://ocaml.org/learn/tutorials/basics.html




#####
#
# opam
# 2019sep21
#
#####

# «opam» (to ".opam")
# https://opam.ocaml.org/
# https://opam.ocaml.org/doc/Install.html
# https://opam.ocaml.org/doc/Install.html#Debian
# https://opam.ocaml.org/doc/Usage.html
# https://github.com/ocaml/opam

# (find-status   "opam")
# (find-vldifile "opam.list")
# (find-udfile   "opam/")
# (find-status   "opam-doc")
# (find-vldifile "opam-doc.list")
# (find-udfile   "opam-doc/")
# (find-fline "/usr/share/doc-base/opam-dev-man")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
export PAGER=cat
opam
opam help
# (find-sh "opam help")
# (find-sh "opam help | col -bx")
# (find-sh "opam help source | col -bx")

opam init
opam update
opam upgrade

opam info core
opam install core

# (find-anggfile ".ocamlinit" "Added by OPAM")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
opam install utop
opam info utop

opam list
opam show utop

apti opam opam-doc

# (find-man "1 opam")
# (find-man "1 opam-admin-check")
# (find-man "1 opam-admin-depexts")
# (find-man "1 opam-admin-findlib")
# (find-man "1 opam-admin-make")
# (find-man "1 opam-admin-rename")
# (find-man "1 opam-admin-stats")
# (find-man "1 opam-admin")
# (find-man "1 opam-config")
# (find-man "1 opam-help")
# (find-man "1 opam-info")
# (find-man "1 opam-init")
# (find-man "1 opam-init" "-j JOBS, --jobs=JOBS")
# (find-man "1 opam-install")
# (find-man "1 opam-installer")
# (find-man "1 opam-lint")
# (find-man "1 opam-list")
# (find-man "1 opam-pin")
# (find-man "1 opam-reinstall")
# (find-man "1 opam-remote")
# (find-man "1 opam-remove")
# (find-man "1 opam-repository")
# (find-man "1 opam-search")
# (find-man "1 opam-show")
# (find-man "1 opam-source")
# (find-man "1 opam-switch")
# (find-man "1 opam-uninstall")
# (find-man "1 opam-unpin")
# (find-man "1 opam-update")
# (find-man "1 opam-upgrade")

(code-pdf-page "opam" "/usr/share/doc/opam-docs/dev-manual.pdf")
(code-pdf-text "opam" "/usr/share/doc/opam-docs/dev-manual.pdf")
(code-c-d      "opam" "~/.opam/")
;; (find-opampage)
;; (find-opamtext)
;; (find-opamfile "")
;; (find-opamsh "find * | sort")
;; (find-opamsh "du -c | sort -n")
;; (find-opamsh "find * | sort | grep utop")
# (find-fline "~/.opam/system/lib/utop/")




#####
#
# opam-init
# 2019sep21
#
#####

# «opam-init» (to ".opam-init")
# (find-angg ".zshrc" "opam")
# (find-man "1 opam-init")
# (find-fline "~/.opam/")
# (find-fline "~/.opam/opam-init/")
# (find-fline "~/.opam/opam-init/init.zsh")
# (find-fline "~/.opam/opam-init/variables.sh")

# (code-c-d      "opam" "~/.opam/")
# (find-opamfile "")
# (find-opamsh "find * | sort")

In normal operation, OPAM only alters files within ~/.opam.

During this initialisation, you can allow OPAM to add information to two
other files for best results. You can also make these additions manually
if you wish.

If you agree, OPAM will modify:

  - ~/.zshrc (or a file you specify) to set the right environment
    variables and to load the auto-completion scripts for your shell (zsh)
    on startup. Specifically, it checks for and appends the following line:

    . /home/edrx/.opam/opam-init/init.zsh > /dev/null 2> /dev/null || true


  - ~/.ocamlinit to ensure that non-system installations of `ocamlfind`
    (i.e. those installed by OPAM) will work correctly when running the
    OCaml toplevel. It does this by adding $OCAML_TOPLEVEL_PATH to the list
    of include directories.

If you choose to not configure your system now, you can either configure
OPAM manually (instructions will be displayed) or launch the automatic setup
later by running:

   opam config setup -a


Do you want OPAM to modify ~/.zshrc and ~/.ocamlinit?
(default is 'no', use 'f' to name a file other than ~/.zshrc)
    [N/y/f] 

Global configuration:
  Updating ~/.opam/opam-init/init.sh
  Updating ~/.opam/opam-init/init.zsh
  Updating ~/.opam/opam-init/init.csh
  Updating ~/.opam/opam-init/init.fish

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

1. To configure OPAM in the current shell session, you need to run:

      eval `opam config env`

2. To correctly configure OPAM for subsequent use, add the following
   line to your profile file (for instance ~/.zshrc):

      . /home/edrx/.opam/opam-init/init.zsh > /dev/null 2> /dev/null || true

3. To avoid issues related to non-system installations of `ocamlfind`
   add the following lines to ~/.ocamlinit (create it if necessary):

      let () =
        try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH")
        with Not_found -> ()
      ;;

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=




#####
#
# Where opam stores a package ("core")
# 2019nov30
#
#####

# «opam-core» (to ".opam-core")
# (find-anggsh "find .opam/ | sort")
# (find-anggsh "find .opam/ | sort | grep core")
# (find-fline "~/.opam/")
# (find-fline "~/.opam/system/lib/core/")
# (find-fline "~/.opam/packages/")
# (find-fline "~/.opam/packages/" " core")
# (find-fline "~/.opam/packages/core/core.113.33.03/")
# (find-fline "~/.opam/packages/core/core.113.33.03/opam")
# (find-fline "~/.opam/packages/core/core.113.33.03/url")
# (find-fline "~/.opam/repo/default/packages/core/")
# (find-fline "~/.opam/repo/default/packages/core/core.113.33.03/")
# (find-fline "~/.opam/repo/default/packages/core/core.113.33.03/opam")
# (find-fline "~/.opam/repo/default/packages/core/core.113.33.03/url")
# (find-fline "~/.opam/archives/core.113.33.03+opam.tar.gz")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# (find-fline "~/usrc/core.113.33.03/")
rm -Rv ~/usrc/core.113.33.03/
mkdir  ~/usrc/core.113.33.03/
cd     ~/usrc/
tar -xvzf ~/.opam/archives/core.113.33.03+opam.tar.gz
cd     ~/usrc/core.113.33.03/

# (code-c-d "janestreetcore" "~/usrc/core.113.33.03/")
# (find-janestreetcorefile "")




#####
#
# janestreetcore-git
# 2019nov30
#
#####

# «janestreetcore-git» (to ".janestreetcore-git")
# (find-git-links "https://github.com/janestreet/core" "janestreetcoregit")
# https://github.com/janestreet/core

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/core/
cd      ~/usrc/
git clone https://github.com/janestreet/core
cd      ~/usrc/core/

# (find-fline "~/usrc/")
# (find-fline "~/usrc/core/")
# (find-gitk  "~/usrc/core/")

# (code-c-d "janestreetcoregit" "~/usrc/core/")
# (find-janestreetcoregitfile "")




https://github.com/janestreet/core
https://opensource.janestreet.com/core/
https://ocaml.janestreet.com/ocaml-core/v0.12/doc/
https://opam.ocaml.org/packages/core/
https://discuss.ocaml.org/t/documentation-on-jane-street-core/200








#####
#
# utop
# 2019sep21
#
#####

# «utop» (to ".utop")
# https://opam.ocaml.org/blog/about-utop/
# https://opam.ocaml.org/packages/utop/
# (find-status   "utop")
# (find-vldifile "utop.list")
# (find-udfile   "utop/")
# (find-fline "/etc/emacs/site-start.d/50utop.el")


# (find-man "utop")
# (find-fline "~/.opam/packages/utop/utop.2.2.0/")


https://ocaml.org/learn/books.html

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
utop
#utop_help




#####
#
# Category Theory for Programmers - OCaml edition
# 2020feb16
#
#####

# «ctfp» (to ".ctfp")
# https://github.com/hmemcpy/milewski-ctfp-pdf/
# https://github.com/hmemcpy/milewski-ctfp-pdf/releases/tag/v1.4.0-rc1
# https://github.com/hmemcpy/milewski-ctfp-pdf/releases/download/v1.4.0-rc1/category-theory-for-programmers-ocaml.pdf

(code-pdf-page "ctfpocaml" "$S/https/github.com/hmemcpy/milewski-ctfp-pdf/releases/download/v1.4.0-rc1/category-theory-for-programmers-ocaml.pdf")
(code-pdf-text "ctfpocaml" "$S/https/github.com/hmemcpy/milewski-ctfp-pdf/releases/download/v1.4.0-rc1/category-theory-for-programmers-ocaml.pdf")
;; (find-ctfpocamlpage)
;; (find-ctfpocamlpage 3 "Contents")
;; (find-ctfpocamltext 3 "Contents")
;; (find-ctfpocamltext)




#####
#
# ocaml-book-en - Developing applications with Objective Caml (O'Reilly, 2000)
# 2020may09
#
#####

# «ocaml-book-en» (to ".ocaml-book-en")
# (find-status   "ocaml-book-en")
# (find-vldifile "ocaml-book-en.list")
# (find-udfile   "ocaml-book-en/")
# (code-pdf-page "ocamlorabook" "/usr/share/doc/ocaml-book/en/ocaml-ora-book.pdf")
# (code-pdf-text "ocamlorabook" "/usr/share/doc/ocaml-book/en/ocaml-ora-book.pdf")
# (find-ocamlorabookpage)
# (find-ocamlorabooktext)
# (find-ocamlorabookpage 7 "Contents")
# (find-ocamlorabooktext 7 "Contents")






#####
#
# typer
# 2020may09
#
#####

# «typer» (to ".typer")
# (find-books "__comp/__comp.el" "monnier-typer")
# http://www.iro.umontreal.ca/~monnier/

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/usrc/typer/
cd      ~/usrc/
git clone https://gitlab.com/monnier/typer
cd      ~/usrc/typer/

# (find-gitk  "~/usrc/typer/")
# (code-c-d "typer" "~/usrc/typer/")
# (find-typerfile "")
# (find-typerfile ".travis.yml" "sudo apt-get install opam")
# (find-typerfile "GNUmakefile")
# (find-typerfile "README.md")
# (find-typersh "find * | sort")
# (find-typersh "find * | grep typer | sort")
# (find-typersh "find * | grep tex | sort")

apti opam
apti ocamlbuild
apti ocaml-findlib
apti libzarith-ocaml-dev libzarith-ocaml-doc
apti dune

git reset
make clean
cd      ~/usrc/typer/
make install

make tests

# (find-fline "~/usrc/typer/doc/formal/")
# (find-fline "~/usrc/typer/doc/formal/typer_theory.tex")
cd ~/usrc/typer/
git checkout master

cd ~/usrc/typer/doc/formal/
pdflatex typer_theory.tex
bibtex   typer_theory
pdflatex typer_theory.tex
pdflatex typer_theory.tex

# «typer-cuc»  (to ".typer-cuc")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
rm -Rfv ~/usrc/typer/
cd      ~/usrc/
git clone https://gitlab.com/monnier/typer
cd      ~/usrc/typer/
git checkout report/itd

# (find-fline "~/usrc/typer/")
# (find-typerfile "GNUmakefile")
# (find-typerfile "GNUmakefile" "bibexport")
# (find-typerfile "paper.tex")
# (find-typerfile "paper.tex" "\\caption{Mapping CUC to CIC}")
cd ~/usrc/typer/
pdflatex paper
bibtex   paper
pdflatex paper
pdflatex paper




Ooops, sorry (?)!
I just found about 50% of what I was looking for...

  mkdir -p ~/usrc/
  rm -Rfv  ~/usrc/typer/
  cd       ~/usrc/
  git clone https://gitlab.com/monnier/typer
  cd       ~/usrc/typer/
  cd       ~/usrc/typer/doc/formal/
  pdflatex typer_theory.tex
  bibtex   typer_theory
  pdflatex typer_theory.tex
  pdflatex typer_theory.tex

  # (code-c-d      "typertheory" "~/usrc/typer/doc/formal/")
  # (code-pdf-page "typertheory" "~/usrc/typer/doc/formal/typer_theory.pdf")
  # (code-pdf-text "typertheory" "~/usrc/typer/doc/formal/typer_theory.pdf")
  # (find-typertheoryfile "")
  # (find-typertheorypage)
  # (find-typertheorytext)

but if you can share the source of your Figure 12 in
<http://www.iro.umontreal.ca/~monnier/itd-tyde-2019.pdf#page=10>
that would be really great!

  Cheers =),
    Eduardo





#####
#
# implementing-functor
# 2021apr23
#
#####

# «implementing-functor»  (to ".implementing-functor")
# https://blog.0branch.com/posts/2012-03-26-01-implementing-functor-ocaml.html
# https://blog.0branch.com/posts/2012-03-26-02-from-functor.html




#####
#
# tylr
# 2022aug10
#
#####

# «tylr»  (to ".tylr")
# https://twitter.com/dm_0ney/status/1414742742530498566?s=20
# https://tylr.fun/
# https://github.com/hazelgrove/tylr
# (find-git-links "https://github.com/hazelgrove/tylr" "tylr")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
# rm -Rfv ~/bigsrc/tylr/
cd      ~/bigsrc/
git clone https://github.com/hazelgrove/tylr
cd      ~/bigsrc/tylr/

# (find-fline "~/bigsrc/")
# (find-fline "~/bigsrc/tylr/")
# (find-gitk  "~/bigsrc/tylr/")

# (code-c-d "tylr" "~/bigsrc/tylr/")
# (find-tylrfile "")
# (find-tylrfile "README.md")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd      ~/bigsrc/tylr/
make deps       # build dependencies (locked in opam.export)
make            # build tylr src
make echo-html  # echo path to compiled page

# file:///home/edrx/bigsrc/tylr/_build/default/src/web/www/index.html




#####
#
# A First Hour with OCaml
# 2022mar16
#
#####

# «first-hour»  (to ".first-hour")
# https://ocaml.org/learn/tutorials/a_first_hour_with_ocaml.html
# (brprinceurl "https://ocaml.org/learn/tutorials/a_first_hour_with_ocaml.html")
# (code-pdf-page "firsthour" "$S/https/ocaml.org/learn/tutorials/a_first_hour_with_ocaml.pdf")
# (code-pdf-text "firsthour" "$S/https/ocaml.org/learn/tutorials/a_first_hour_with_ocaml.pdf")
# (find-firsthourpage)
# (find-firsthourtext)

* (eepitch-ocaml)
* (eepitch-kill)
* (eepitch-ocaml)
50 * 50;;

(*# #use "program.ml"
*)

let x = 50;;
x * x;;
let x = 50 in x * x;;
let a   = 1 in
let b   = 2 in
    a + b;;
let square x = x * x;;
square 50;;

let square_is_even x =
    square x mod 2 = 0;;
square_is_even 50;;
square_is_even 3;;

let ordered a b c =
  a <= b && b <= c;;
ordered 1 1 2;;

let average a b =
    (a +. b) /. 2.0;;
1 +  2.5;;   (* err *)
1 +. 2.5;;   (* err *)
float_of_int 1 +. 2.5;;

let rec range a b =
    if a > b then []
    else a :: range (a + 1) b;;
let digits = range 0 9;;

(* (find-firsthourpage 5 "Types")
 * (find-firsthourtext   "Types")
*)
1 + 2;;
1.0 +. 2.0;;
false;;
'c';;
"Help me!";;

int_of_char;;

let rec factorial n =
  if n <= 1 then 1 else n * factorial (n - 1);;
let rec factorial n =
  match n with
  | 0 | 1 -> 1
  | x -> x * factorial (x - 1);;
let rec factorial n =
  match n with
  | 0 | 1 -> 1
  | _ -> n * factorial (n - 1);;
let rec factorial = function
  | 0 | 1 -> 1
  | n -> n * factorial (n - 1);;

(* (find-firsthourpage 7 "Lists")
 * (find-firsthourtext 7 "Lists")
*)

[];;
[1; 2; 3];;
[false; false; true];;
[[1; 2]; [3; 4]; [5; 6]];;
1 :: [2; 3];;
[1] @ [2; 3];;

let rec total l =
  match l with
  | [] -> 0
  | h :: t -> h + total t;;
total [1; 3; 5; 3; 1];;

let rec total_wrong l =
  match l with
  | h :: t -> h + total_wrong t;;  (* warning: not exhaustive *)

total_wrong [1; 3; 5; 3; 1];;

let rec length l =
  match l with
  | [] -> 0
  | _ :: t -> 1 + length t;;

length [1; 2; 3];;
length ["cow"; "sheep"; "cat"];;
length [[]];;

let rec append a b =
  match a with
  | [] -> b
  | h :: t -> h :: append t b;;

let rec map f l =
  match l with
  | [] -> []
  | h :: t -> f h :: map f t;;

map total [[1; 2]; [3; 4]; [5; 6]];;
map (fun x -> x * 2) [1; 2; 3];;

let add a b = a + b;;
add;;
let f = add 6;;
f 7;;
map (add 6) [1; 2; 3];;
map (map (fun x -> x * 2)) [[1; 2]; [3; 4]; [5; 6]];;

(* (find-firsthourpage 10 "Other built-in types")
 * (find-firsthourtext 10 "Other built-in types")
*)

let t = (1, "one", '1');;
type person =
  {first_name : string;
   surname : string;
   age : int};;
let frank =
  {first_name = "Frank";
   surname = "Smith";
   age = 40};;
let s = frank.surname;;
type colour = Red | Blue | Green | Yellow;;
let l = [Red; Blue; Red];;
type colour =
  | Red
  | Blue
  | Green
  | Yellow
  | RGB of int * int * int;;
let l = [Red; Blue; RGB (30, 255, 154)];;

type 'a tree =
  | Leaf
  | Node of 'a tree * 'a * 'a tree;;
let t =
  Node (Node (Leaf, 1, Leaf), 2, Node (Node (Leaf, 3, Leaf), 4, Leaf));;

let rec total t =
  match t with
  | Leaf -> 0
  | Node (l, x, r) -> total l + x + total r;;
let rec flip t =
  match t with
  | Leaf -> Leaf
  | Node (l, x, r) -> Node (flip r, x, flip l);;
let all = total t;;
let flipped = flip t;;
t = flip flipped;;

(* (find-firsthourpage 12 "Dealing with errors")
 * (find-firsthourtext 12 "Dealing with errors")
*)

exception E;;
exception E2 of string;;
let f a b =
  if b = 0 then raise (E2 "division by zero") else a / b;;
try f 10 0 with E2 _ -> 0;;
f 10 0;;
let f a b =
  if b = 0 then None else Some (a / b);;
let list_find_opt p l =
  try Some (List.find p l) with
    Not_found -> None;;
let list_find_opt p l =
  match List.find p l with
  | v -> Some v
  | exception Not_found -> None;;

* (eepitch-ocaml)
* (eepitch-kill)
* (eepitch-ocaml)

(* (find-firsthourpage 12 "Imperative OCaml")
 * (find-firsthourtext 12 "Imperative OCaml")
*)

let r = ref 0;;
r := 100;;
!r;;
let swap a b =
  let t = !a in
    a := !b;
    b := t;;
let print_number n =
  print_string (string_of_int n);
  print_newline ();;
print_newline;;
let table n =
  for row = 1 to n do
    for column = 1 to n do
      print_string (string_of_int (row * column));
      print_string " "
    done;
    print_newline ()
  done;;
let smallest_power_of_two x =
  let t = ref 1 in
    while !t < x do
      t := !t * 2
    done;
    !t;;
let arr = [|1; 2; 3|];;
arr.(0);;
arr.(0) <- 0;;
arr;;
type person =
  {first_name : string;
   surname : string;
   mutable age : int};;
let birthday p =
  p.age <- p.age + 1;;

(* (find-firsthourpage 15 "The Standard Library")
 * (find-firsthourtext 15 "The Standard Library")
*)

List.concat [[1; 2; 3]; [4; 5; 6]; [7; 8; 9]];;
List.filter (( < ) 10) [1; 4; 20; 10; 9; 2];;
List.sort compare [1; 6; 2; 2; 3; 56; 3; 2];;
let print_length s =
  Printf.printf "%s has %i characters\n" s (String.length s);;
List.iter print_length ["one"; "two"; "three"];;


** «first-hour-graphics»  (to ".first-hour-graphics")
**
* (eepitch-ocaml)
* (eepitch-kill)
* (eepitch-ocaml)
#use "topfind";;
#require "graphics";;
open Graphics;;
open_graph " 640x480";;

for i = 12 downto 1 do
  let radius = i * 20 in
    set_color (if i mod 2 = 0 then red else yellow);
    fill_circle 320 240 radius
done;;

read_line ();;

Random.self_init ();;

Graphics.open_graph " 640x480";;

set_color red;;

let rec iterate r x_init i =
  if i = 1 then x_init else
    let x = iterate r x_init (i - 1) in
      r *. x *. (1.0 -. x);;

for x = 0 to 639 do
  let r = 4.0 *. (float_of_int x) /. 640.0 in
  for i = 0 to 39 do
    let x_init = Random.float 1.0 in
    let x_final = iterate r x_init 500 in
    let y = int_of_float (x_final *. 480.) in
       Graphics.plot x y
  done
done;;

read_line ();;



#####
#
# pipe
# 2022oct05
#
#####

# «pipe»  (to ".pipe")
# (find-books "__comp/__comp.el" "ocaml")
# (find-books "__comp/__comp.el" "ocaml" "Pipe.transfer")
# (find-realworldocamlpage (+ 24 352)     "Pipe.transfer")
# (find-realworldocamltext (+ 24 352)     "Pipe.transfer")
# (find-anggfile "OCAML/PipeTest1.ml")

https://v2.ocaml.org/api/index.html



#####
#
# michael-ryan-clarkson
# 2022oct10
#
#####

# «michael-ryan-clarkson»  (to ".michael-ryan-clarkson")
# https://yewtu.be/playlist?list=PLre5AT9JnKShBOPeuiD9b-I4XROIJhkIU




#####
#
# lua-and-ocaml
# 2022nov01
#
#####

# «lua-and-ocaml»  (to ".lua-and-ocaml")
# https://stackoverflow.com/questions/405995/embedding-lua-in-ocaml?rq=1




#####
#
# ocaml-canvas
# 2022dec15
#
#####

# «ocaml-canvas»  (to ".ocaml-canvas")
# https://news.ycombinator.com/item?id=33954958 OCaml Canvas (ocamlpro.github.io)
# https://github.com/ocamlpro/ocaml-canvas
# https://ocamlpro.github.io/ocaml-canvas/
# https://ocamlpro.github.io/ocaml-canvas/sphinx/
# (code-c-d "ocamlcanvas" "~/usrc/ocaml-canvas/")
# (find-ocamlcanvasfile "")
# (find-ocamlcanvasfile "examples/")
# (find-ocamlcanvasfile "sphinx/")
# (find-opam-links "ocaml-canvas")
# (find-opamsourcesfile "ocaml-canvas.1.0.0/")

* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
opam update
opam upgrade
opam install ocaml-canvas

apti libxcb-image0-dev libxcb-keysyms1-dev libxcb-xkb-dev

# (find-fline "~/OCAML/canv.ml")





#####
#
# Error: Unbound module OcamlCanvas
# 2022dec17
#
#####

# «error-unbound-module»  (to ".error-unbound-module")
# https://discuss.ocaml.org/t/unbound-module-base-unbound-directive-require/8196/4

* (eepitch-ocaml)
* (eepitch-kill)
* (eepitch-ocaml)
#use "topfind";;
#list;;
#require "ocaml-canvas";;
#use "ocaml-canvas";;




#####
#
# metaocaml
# 2023apr21
#
#####

# «metaocaml»  (to ".metaocaml")
# (find-fline "~/LOGS/2023apr21.emacs" "MetaOCaml")
# https://okmij.org/ftp/ML/MetaOCaml.html
# https://okmij.org/ftp/meta-programming/




https://github.com/clayrat/sequent-calc uses Levy

https://discuss.ocaml.org/t/interactive-ocaml-development-with-utop-in-emacs/6058
https://samarthkishor.github.io/posts/interactive_ocaml_development/
https://discuss.ocaml.org/t/ocaml-repl-driven-development/4068

Today was all about setting up Emacs for OCaml development.
https://kevinsjoberg.com/30-days-of-emacs-day-2

https://batsov.com/articles/2022/08/23/setting-up-emacs-for-ocaml-development/
https://batsov.com/articles/2022/08/19/learning-ocaml/
https://batsov.com/articles/2022/08/28/ocaml-tips-multiple-let-bindings/
https://batsov.com/articles/2022/08/29/ocaml-at-first-glance/
https://batsov.com/articles/2022/09/03/zipping-collections-in-ocaml/

https://news.ycombinator.com/item?id=32954517 OCaml Exercises (ocaml.org)

<edrx> hi all - I'm a beginner who has only followed some basic tutorials, but
       I haven't even used any libraries/modules yet...
<edrx> I'm wondering if it's easy to make ocaml call an external program -
       say, for an example/prototype, tac
<edrx> ...with a given input, and capture what it spits on stdout, and returns
       that as a string...
<edrx> where can I learn how do to that? any recommended links?
<edrx> actually the external program that I want to call is this one:
       http://angg.twu.net/eev-maxima.html#luatree




<><> ocp-indent.1.8.1 installed successfully ><><><><><><><><><><><><><><><><><>
=> This package requires additional configuration for use in editors. Install package 'user-setup', or
   manually:

   * for Emacs, add these lines to ~/.emacs:
     (add-to-list 'load-path "/home/edrx/.opam/default/share/emacs/site-lisp")
     (require 'ocp-indent)

   * for Vim, add this line to ~/.vimrc:
     set rtp^="/home/edrx/.opam/default/share/ocp-indent/vim"

<><> merlin.3.8.0 installed successfully ><><><><><><><><><><><><><><><><><><><>
=> merlin installed.

   Quick setup for VIM
   -------------------
   Append this to your .vimrc to add merlin to vim's runtime-path:
     let g:opamshare = substitute(system('opam var share'),'\n$','','''')
     execute "set rtp+=" . g:opamshare . "/merlin/vim"

   Also run the following line in vim to index the documentation:
     :execute "helptags " . g:opamshare . "/merlin/vim/doc"

   Quick setup for EMACS
   -------------------
   Add opam emacs directory to your load-path by appending this to your .emacs:
     (let ((opam-share (ignore-errors (car (process-lines "opam" "config" "var" "share")))))
      (when (and opam-share (file-directory-p opam-share))
       ;; Register Merlin
       (add-to-list 'load-path (expand-file-name "emacs/site-lisp" opam-share))
       (autoload 'merlin-mode "merlin" nil t nil)
       ;; Automatically start it in OCaml buffers
       (add-hook 'tuareg-mode-hook 'merlin-mode t)
       (add-hook 'caml-mode-hook 'merlin-mode t)
       ;; Use opam switch to lookup ocamlmerlin binary
       (setq merlin-command 'opam)))

   Take a look at https://github.com/ocaml/merlin for more information

   Quick setup with opam-user-setup
   --------------------------------

   Opam-user-setup support Merlin.

     $ opam user-setup install

   should take care of basic setup.
   See https://github.com/OCamlPro/opam-user-setup
# Run eval $(opam env) to update the current shell environment


https://sancho.dev/blog/learning-ocaml in 2023 ***
https://gist.github.com/Hirrolot/27e6b02a051df333811a23b97c375196 How to implement dependent types in 80 lines of code ***
https://borretti.me/article/design-austral-compiler
https://osa1.net/posts/2023-04-24-ocaml-thoughts.html
https://news.ycombinator.com/item?id=36094799 Oxidizing OCaml: Locality (janestreet.com)




#  Local Variables:
#  coding:               utf-8-unix
#  End: