CINXE.COM

OCaml Books

<!DOCTYPE html> <html lang="en"> <head id="htmx-head"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content="A selection of books to learn the OCaml programming language."> <meta name="twitter:title" content="OCaml Books"> <meta name="twitter:description" content="A selection of books to learn the OCaml programming language."> <meta name="twitter:image" content="https://ocaml.org/_/MWIyY2ZmMWM5YzdkYWNmYWI4NGQ0MDBjOGFiZTYxOTg/ocaml_org_social_media.png"> <meta property="og:site_name" content="OCaml"> <meta property="og:type" content="object"> <meta property="og:title" content="OCaml Books"> <meta property="og:description" content="A selection of books to learn the OCaml programming language."> <meta name="og:image" content="https://ocaml.org/_/MWIyY2ZmMWM5YzdkYWNmYWI4NGQ0MDBjOGFiZTYxOTg/ocaml_org_social_media.png"> <meta name="theme-color" content="#fff" > <meta name="color-scheme" content="white"> <meta name="ahrefs-site-verification" content="6ff715b377cdcd566334b44ae8888791189ce24640c8a403eacdc3bcbaa9449b"> <link rel="canonical" href="https://ocaml.org/books"> <link rel="icon" type="image/x-icon" href="/_/ZDJmMjgzN2NkZmJlMzgxNGQxMTMxNGVlMzk1NzZkN2I/favicon.ico"> <link rel="manifest" href="/manifest.json"> <link rel="stylesheet" href="/_/M2QzNTJkMGFlMzUxZDFkZDE4MDdjYzljNThkN2U1YjQ/css/main.css"> <link rel="stylesheet" href="/_/NmFjYjY5ZmIxYWRhMWQxMTQxODM4ZDEwYTgwMDcwNmI/vendors/font-files/inter.css"> <link rel="stylesheet" href="/_/YjM3OGY4YzIwN2E2ZmUxZTczOWVkNDQwZWRhMDU0MGM/vendors/font-files/roboto-mono.css"> <script defer src="/_/OWYyZDQyZjg4MTFlNWEzZjE4ZGY0YWM0OTU1NGEzYTI/vendors/alpine-clipboard.js"></script> <script defer src="/_/NGI1NjQzZjdkODY0MTY2MmViNThhM2VlZTYwMDk3NTI/vendors/alpine.min.js"></script> <script defer src="/_/YTNhODI2Yzg0Yzk4M2ZiNDcxYmRiYzdhY2FiN2Y0OWQ/vendors/htmx.min.js"></script> <script defer data-domain="ocaml.org" src="https://plausible.ci.dev/js/script.js"></script> <link rel="search" href="/opensearch.xml" type="application/opensearchdescription+xml" title="OCaml"> <title>OCaml Books</title> </head> <body> <script> if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches)) { document.body.classList.add("dark"); } else { document.body.classList.remove("dark"); } </script> <header class="h-20 flex items-center bg-sand dark:bg-dark-background_navigation" x-data="{ open: false }"> <nav class="container-fluid wide header flex justify-between items-center gap-5 xl:gap-8"> <ul class="order-0 space space-x-5 xl:space-x-8 items-center flex text-content font-medium dark:text-title dark:text-opacity-60 dark:font-semibold"> <li style="width:132px"> <a href="/" class="block pb-2"> <img src="/_/MDBjN2M4YjIxY2Y1YWExZWE3Njk4M2FiZTg1NWZjNTM/logo-with-name.svg" width="132" alt="OCaml logo" class="dark:hidden"> <img src="/_/MTE3YWE5YzJlZmExNmYyMmI3ZmEwYjliMDEwNDBkMDY/logo-with-name-white.svg" width="132" alt="OCaml logo" class="hidden dark:inline"> </a> </li> </ul> <ul class="order-2 hidden lg:flex items-center"> <li> <form x-data="{ row: null, col: 0, max: 0, total: 0 }" @submit="if (row !== null) { window.location = document.getElementById('package-autocomplete-'+row+'-'+col).getAttribute('href'); $event.stopPropagation(); $event.preventDefault(); return false }" action="/packages/search" method="GET"> <div class="dropdown-container flex items-center justify-center h-10 rounded-md focus-within:outline-primary_25 dark:focus-within:outline-dark-primary_40 focus-within:outline focus-within:outline-2 lg:w-56 xl:w-80" tabindex="0"> <label for="q" class="sr-only">Search OCaml packages</label> <input type="search" name="q" placeholder="Search OCaml packages" @keydown.escape="$event.target.blur()" class="bg-white dark:bg-dark-card text-title dark:text-dark-title h-full w-full font-normal focus:border-primary dark:focus:border-dark-primary focus:ring-0 border-primary dark:border-dark-primary rounded-md rounded-r-none px-3 py-1 placeholder-text-content dark:placeholder:text-dark-content appearance-none focus:outline-none" @keydown.stop @keyup.down="if (row === null) { row = 0; col = 0; } else { row +=1; if (row > max) { row = max } }" @keyup.up="if (row !== null) { row -=1; if (row < 0) { row = null } }" @keyup.right="if (col < 1) col++" @keyup.left="if (col >= 1) col--" :aria-activedescendant="row !== null ? 'package-autocomplete-'+row+'-'+col : null" hx-get="/packages/autocomplete" hx-params="q" hx-trigger="keyup changed, search" hx-target="#header-search-results" hx-indicator="#header-search-indicator" autocomplete="off" > <button aria-label="search" class="h-full flex items-center justify-center rounded-r-md bg-primary dark:bg-dark-primary text-white dark:text-dark-white px-4" type="submit" ><svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" /> </svg> </button> <div class="dropdown w-full lg:w-[32rem] xl:w-[32rem] z-10 absolute rounded-md mt-12 shadow-2xl top-1 p-2 bg-background dark:bg-dark-background shadow-3xl dark:outline dark:outline-1 dark:outline-primary"> <div id="header-search-results" aria-live="polite"></div> <a class="flex py-2 px-2 mx-2 gap-4 hover:bg-primary_nav_block_hover_10 dark:hover:bg-dark-primary_nav_block_hover_10 font-normal rounded-md text-primary dark:text-dark-primary" href="/api"> Standard Library API <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path> </svg> </a> </div> </div> </form> </li> </ul> <ul class="order-1 mr-auto items-center hidden lg:flex font-medium dark:text-white dark:text-opacity-60 dark:font-semibold"> <li><a href="/docs" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-primary dark:text-dark-primary underline">Learn</a> </li> <li><a href="/tools" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-title dark:text-dark-title">Tools</a> </li> <li><a href="/packages" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-title dark:text-dark-title">Packages</a> </li> <li><a href="/community" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-title dark:text-dark-title">Community</a> </li> <li><a href="/changelog" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-title dark:text-dark-title">News</a> </li> <li><a href="/play" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primary text-title dark:text-dark-title">Play</a> </li> </ul> <ul class="order-3 hidden lg:flex items-center"> <li><a href="/docs/get-started" class="border border-primary dark:border-dark-primary text-primary dark:text-dark-primary font-bold py-2.5 px-7 whitespace-nowrap rounded">Get Started</a></li> </ul> <ul class="order-1 lg:hidden flex items-center"> <li class="h-12 w-12 hover:bg-primary_25 dark:hover:bg-primary_20 flex items-center justify-center rounded-full text-content dark:text-dark-title"> <button aria-label="open menu" @click="open = ! open"> <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 10h16M4 14h16M4 18h16" /> </svg> </button> </li> </ul> </nav> <div class="bg-black fixed w-full h-full left-0 top-0 opacity-60 z-40" x-show='open' x-cloak></div> <nav class="z-50 h-full fixed right-0 top-0 max-w-full w-96 bg-background dark:bg-dark-background shadow-lg" x-show="open" x-cloak @click.away="open = false" x-transition:enter="transition duration-200 ease-out" x-transition:enter-start="translate-x-full" x-transition:leave="transition duration-100 ease-in" x-transition:leave-end="translate-x-full"> <ul class="text-content p-6 font-semibold"> <li class="flex justify-between items-center"> <a href="/"> <img src="/_/MDBjN2M4YjIxY2Y1YWExZWE3Njk4M2FiZTg1NWZjNTM/logo-with-name.svg" width="132" alt="OCaml logo" class="dark:hidden"> <img src="/_/MTE3YWE5YzJlZmExNmYyMmI3ZmEwYjliMDEwNDBkMDY/logo-with-name-white.svg" width="132" alt="OCaml logo" class="hidden dark:inline"> </a> <div class="" x-on:click="open = false"> <button aria-label="close" class="text-content dark:text-dark-title"> <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" /> </svg> </button> </div> </li> <li class="mt-6 mb-3"> <form action="/packages/search" method="GET"> <div class="dropdown-container flex items-center justify-center h-10 rounded-md focus-within:outline-primary_25 dark:focus-within:outline-dark-primary_40 focus-within:outline focus-within:outline-2 " tabindex="0"> <label for="q" class="sr-only">Search OCaml packages</label> <input type="search" name="q" placeholder="Search OCaml packages" @keydown.escape="$event.target.blur()" class="bg-white dark:bg-dark-card text-title dark:text-dark-title h-full w-full font-normal focus:border-primary dark:focus:border-dark-primary focus:ring-0 border-primary dark:border-dark-primary rounded-md rounded-r-none px-3 py-1 placeholder-text-content dark:placeholder:text-dark-content appearance-none focus:outline-none" > <button aria-label="search" class="h-full flex items-center justify-center rounded-r-md bg-primary dark:bg-dark-primary text-white dark:text-dark-white px-4" type="submit" ><svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" /> </svg> </button> </div> </form> </li> <li><a href="/docs" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-primary dark:text-dark-primary underline">Learn</a> </li> <li><a href="/tools" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-title dark:text-dark-title">Tools</a> </li> <li><a href="/packages" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-title dark:text-dark-title">Packages</a> </li> <li><a href="/community" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-title dark:text-dark-title">Community</a> </li> <li><a href="/changelog" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-title dark:text-dark-title">News</a> </li> <li><a href="/play" class="block font-normal py-3 mg:py-4 px-1 lg:px-3 hover:text-primary dark:hover:text-dark-primaryblock text-title dark:text-dark-title">Play</a> </li> <li> <a href="/api" class="flex py-3 px-1 gap-4 font-semibold text-primary dark:text-dark-primary">Standard Library API<svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"></path> </svg> </a> </li> <li class="mt-3 mb-6"> <a href="/docs/get-started" class="w-full rounded font-normal py-3 px-7 flex items-center justify-center bg-primary dark:bg-dark-primary text-white dark:text-dark-title">Get started</a> </li> <li> <div class="space-x-6 text-2xl flex items-center"> <a aria-label="OCaml's Discord" href="https://discord.gg/cCYQbqN" class="opacity-60 hover:opacity-100 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M18.9419 5.29661C17.6473 4.69088 16.263 4.25066 14.8157 4C14.638 4.32134 14.4304 4.75355 14.2872 5.09738C12.7487 4.86601 11.2245 4.86601 9.7143 5.09738C9.57116 4.75355 9.3588 4.32134 9.17947 4C7.73067 4.25066 6.3448 4.6925 5.05016 5.29982C2.43887 9.24582 1.73099 13.0938 2.08493 16.8872C3.81688 18.1805 5.49534 18.9662 7.14548 19.4804C7.55291 18.9196 7.91628 18.3235 8.22931 17.6953C7.63313 17.4688 7.06211 17.1892 6.52256 16.8647C6.6657 16.7586 6.80571 16.6478 6.94098 16.5337C10.2318 18.0729 13.8074 18.0729 17.0589 16.5337C17.1958 16.6478 17.3358 16.7586 17.4774 16.8647C16.9362 17.1908 16.3637 17.4704 15.7675 17.697C16.0805 18.3235 16.4423 18.9212 16.8513 19.4819C18.503 18.9678 20.183 18.1822 21.915 16.8872C22.3303 12.4897 21.2056 8.67705 18.9419 5.29661ZM8.67765 14.5543C7.68977 14.5543 6.87963 13.632 6.87963 12.509C6.87963 11.3859 7.67247 10.4621 8.67765 10.4621C9.68285 10.4621 10.493 11.3843 10.4757 12.509C10.4772 13.632 9.68285 14.5543 8.67765 14.5543ZM15.3223 14.5543C14.3344 14.5543 13.5243 13.632 13.5243 12.509C13.5243 11.3859 14.3171 10.4621 15.3223 10.4621C16.3275 10.4621 17.1376 11.3843 17.1203 12.509C17.1203 13.632 16.3275 14.5543 15.3223 14.5543Z" clip-rule="evenodd" /> </svg> </a> <a aria-label="The OCaml Compiler on GitHub" href="https://github.com/ocaml/ocaml" class="opacity-60 hover:opacity-100 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" /> </svg> </a> <a aria-label="The OCaml Language Twitter Account" href="https://twitter.com/ocaml_org" class="opacity-60 hover:opacity-100 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <svg xmlns="http://www.w3.org/2000/svg" class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84" /> </svg> </a> </div> </li> </ul> </nav> </header> <script> window.addEventListener('keydown', function(event) { if (event.key === "/") { event.preventDefault(); document.querySelector("input[type='search']").focus() } }) </script> <main class="bg-background dark:bg-dark-background"><nav aria-label="breadcrumbs" class="px-4 flex bg-title dark:bg-[#111827] text-white dark:text-dark-title md:hidden"> <ul> <li class="inline-block"> <a href="/docs" class="flex items-center px-2 py-2 border-transparent border-2 border-b-4"> Learn <span> <svg xmlns="http://www.w3.org/2000/svg" class="w-3 h-3 ml-2" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5" /> </svg> </span> </a> </li> <li class="inline-block"> <select onchange="location = this.value;" class="appearance-none border-2 border-b-4 bg-transparent bg-none font-bold border-none w-auto p-0 m-0 cursor-pointer focus:outline-none focus:ring-0"> <option value="/docs" > Overview </option> <option value="/docs/get-started" > Get Started </option> <option value="/docs/language" > Language </option> <option value="/docs/tools" > Platform </option> <option value="/docs/guides" > Guides </option> <option value="/cookbook" > Cookbook </option> <option value="/exercises" > Exercises </option> <option value="/books" selected> Books </option> </select> <span class="text-primary dark:text-dark-primary cursor-pointer">&#x25BE;</span> </li> </ul> </nav> <div class="bg-title dark:bg-[#111827] hidden md:flex"> <nav class="container-fluid wide flex flex-wrap"> <a href="/docs" class="justify-start px-4 py-2 text-white dark:text-dark-title items-center font-normal border-2 border-b-4 border-transparent rounded opacity-80 hover:text-primary dark:hover:text-dark-primary"> Overview </a> <a href="/docs/get-started" class="justify-start px-4 py-2 text-white dark:text-dark-title items-center font-normal border-2 border-b-4 border-transparent rounded opacity-80 hover:text-primary dark:hover:text-dark-primary"> Get Started </a> <a href="/docs/language" class="justify-start px-4 py-2 text-white dark:text-dark-title items-center font-normal border-2 border-b-4 border-transparent rounded opacity-80 hover:text-primary dark:hover:text-dark-primary"> Language </a> <a href="/docs/tools" class="justify-start px-4 py-2 text-white dark:text-dark-title items-center font-normal border-2 border-b-4 border-transparent rounded opacity-80 hover:text-primary dark:hover:text-dark-primary"> Platform </a> <a href="/docs/guides" class="justify-start px-4 py-2 text-white dark:text-dark-title items-center font-normal border-2 border-b-4 border-transparent rounded opacity-80 hover:text-primary dark:hover:text-dark-primary"> Guides </a> <a href="/cookbook" class="justify-start px-4 py-2 text-white dark:text-dark-title items-center font-normal border-2 border-b-4 border-transparent rounded opacity-80 hover:text-primary dark:hover:text-dark-primary"> Cookbook </a> <a href="/exercises" class="justify-start px-4 py-2 text-white dark:text-dark-title items-center font-normal border-2 border-b-4 border-transparent rounded opacity-80 hover:text-primary dark:hover:text-dark-primary"> Exercises </a> <a href="/books" class="justify-start px-4 py-2 text-white dark:text-dark-title items-center font-normal border-2 border-b-4 border-transparent rounded border-b-primary dark:border-b-dark-primary"> Books </a> </nav> </div> <div class="bg-background dark:bg-dark-background"> <div class="flex-1 z-0 z- min-w-0 pb-12"> <div class="bg-background dark:bg-dark-background"> <div class="container-fluid pt-10"> <div class="prose dark:prose-invert mb-10"> <h1 class="font-normal text-4xl">Books On OCaml (18)</h2> </div> <form action="/books" method="GET"> <div class="flex mb-0 flex-col gap-4 sm:flex-row"> <select class="w-full appearance-none text-title dark:text-dark-white border rounded-lg py-3 pl-6 border-primary dark:border-dark-primary bg-white dark:bg-dark-card pr-14 h-12 outline-none focus:ring-2 ring-separator_20 dark:ring-dark-separator_30 focus:ring-primary dark:focus:ring-dark-primary w-48" id="language" name="language" onchange="this.form.submit()" > <option value="All" selected > All Languages </option> <option value="english" > English </option> <option value="french" > French </option> <option value="italian" > Italian </option> <option value="japanese" > Japanese </option> <option value="chinese" > Chinese </option> </select> <select class="w-full appearance-none text-title dark:text-dark-white border rounded-lg py-3 pl-6 border-primary dark:border-dark-primary bg-white dark:bg-dark-card pr-14 h-12 outline-none focus:ring-2 ring-separator_20 dark:ring-dark-separator_30 focus:ring-primary dark:focus:ring-dark-primary w-48" id="difficulty" name="difficulty" onchange="this.form.submit()" > <option value="All" selected > Any Difficulty </option> <option value="beginner" > Beginner </option> <option value="intermediate" > Intermediate </option> <option value="advanced" > Advanced </option> </select> <select class="w-full appearance-none text-title dark:text-dark-white border rounded-lg py-3 pl-6 border-primary dark:border-dark-primary bg-white dark:bg-dark-card pr-14 h-12 outline-none focus:ring-2 ring-separator_20 dark:ring-dark-separator_30 focus:ring-primary dark:focus:ring-dark-primary w-48" id="pricing" name="pricing" onchange="this.form.submit()" > <option value="All" selected > Free or Paid </option> <option value="free" > Free </option> <option value="paid" > Paid </option> </select> </div> </form> <div class="overflow-x-scroll lg:overflow-hidden mt-5"> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <div class="absolute -mt-8 ml-3 w-16 h-16"> <div class="bg-primary dark:bg-dark-primary rotate-[-10deg] rounded-full w-16 h-16 flex items-center justify-center" style="filter: drop-shadow(-4px -2px 4px rgb(0 0 0 / 0.25));"> <div class="text-center text-white text-base font-bold leading-7 tracking-wide"> FREE </div> </div> </div> <img src="/media/_/NGYyNDk3NDljN2IxZWNhNDUzMjcyMDNkMGE4NTM4NTk/books/learn-programming-with-ocaml.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">Learn Programming with OCaml</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Jean-Christophe Filliâtre, Sylvain Conchon</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>Computer programming is hard to learn. Being a skillful programmer requires imagination, anticipation, knowledge in algorithmics, the mastery of a programming language, and above all, experience, as difficulties are often hidden in details. This book synthesises our experience as teachers and programmers.</p> <p>The programming style is essential. Given a programming language, the same algorithm can be written in multiple ways, and some of them can be both elegant and efficient. This is what the programmer must seek at all costs and the reason why we choose a programming language for this book rather than pseudo-code. Our choice is OCaml.</p> <p>This book is organised into three parts. The first one introduces OCaml and targets beginners, whether they're programming beginners or simply new to OCaml. Through small programs, the reader is introduced to fundamental concepts of programming and of OCaml. The second and third parts are dedicated to fundamental concepts of algorithmics and should allow the reader to write programs in a structured and efficient way. Algorithmic concepts are directly presented in the syntax of OCaml and any code snippet from the book is available online.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://usr.lmf.cnrs.fr/lpo/lpo.pdf"> <span>PDF download</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <div class="absolute -mt-8 ml-3 w-16 h-16"> <div class="bg-primary dark:bg-dark-primary rotate-[-10deg] rounded-full w-16 h-16 flex items-center justify-center" style="filter: drop-shadow(-4px -2px 4px rgb(0 0 0 / 0.25));"> <div class="text-center text-white text-base font-bold leading-7 tracking-wide"> FREE </div> </div> </div> <img src="/media/_/NDE4NjEzZjUxYzA3MTVhOGZjMWI1YTg0MGY3NGZlY2M/books/ocaml-programming-cs3110.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">OCaml Programming: Correct + Efficient + Beautiful</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Michael R. Clarkson</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>A textbook on functional programming and data structures in OCaml, with an emphasis on semantics and software engineering.</p> <p>This book is used at Cornell for a third-semester programming course. Most students have had one semester of introductory programming in Python, followed by one semester of object-oriented programming in Java. Frequent comparisons are therefore made to those two languages. Readers who have studied similar languages should have no difficulty following along. The book does not assume any prior knowledge of functional programming, but it does assume that readers have prior experience programming in some mainstream imperative language. Knowledge of discrete mathematics at the level of a standard first-semester CS course is also assumed.</p> <p>There are over 200 YouTube videos embedded in this book. They can be watched independently of reading the book.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://cs3110.github.io/textbook/"> <span>Read Online</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <div class="absolute -mt-8 ml-3 w-16 h-16"> <div class="bg-primary dark:bg-dark-primary rotate-[-10deg] rounded-full w-16 h-16 flex items-center justify-center" style="filter: drop-shadow(-4px -2px 4px rgb(0 0 0 / 0.25));"> <div class="text-center text-white text-base font-bold leading-7 tracking-wide"> FREE </div> </div> </div> <img src="/media/_/YmNlOWQyY2U3NWVhN2NkMTc0ZjExNWVhYzBjNWZlMTQ/books/abstraction-and-design-in-computation-cs51.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">Programming Well: Abstraction and Design In Computation</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Stuart M. Shieber</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>This textbook is written for Harvard's CS51 Abstraction and Design in Computation class which uses OCaml to introduce different programming paradigms including imperative, functional, and object-oriented.</p> <p>CS51 is a second-semester class following the entry-level CS50's Introduction to Computer Science course. It teaches fundamental concepts in the design of computer programs, emphasizing the crucial role of abstraction. The goal of the course is to give students insight into the difference between programming and programming well.</p> <p>The book assumes basic programming experience from an introductory computer science course but does not require prior exposure to functional programming.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://book.cs51.io/"> <span>Read Online</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <div class="absolute -mt-8 ml-3 w-16 h-16"> <div class="bg-primary dark:bg-dark-primary rotate-[-10deg] rounded-full w-16 h-16 flex items-center justify-center" style="filter: drop-shadow(-4px -2px 4px rgb(0 0 0 / 0.25));"> <div class="text-center text-white text-base font-bold leading-7 tracking-wide"> FREE </div> </div> </div> <img src="/media/_/NmRkY2MwMzg0YjUyOTNmODM0NjdlMDQ0NGI4NzIzOWY/books/real-world-ocaml.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-tertiary dark:bg-dark-tertiary_lighter rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Intermediate </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">Real World OCaml</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Anil Madhavapeddy, Yaron Minsky</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>Learn how to solve day-to-day problems in data processing, numerical computation, system scripting, and database-driven web applications with the OCaml multi-paradigm programming language. This hands-on book shows you how to take advantage of OCaml’s functional, imperative, and object-oriented programming styles with recipes for many real-world tasks.</p> <p>You’ll start with OCaml basics, including how to set up a development environment, and move toward more advanced topics such as the module system, foreign-function interface, macro language, and the OCaml tools. Quickly learn how to put OCaml to work for writing succinct and readable code.</p> <p>The code examples in this books uses Jane Street <a href="https://ocaml.org/p/core/latest">core library</a>.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://realworldocaml.org/"> <span>Read Online</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <img src="/media/_/OTg1ZWQ3NWMzZTZkYzVjNDRjN2VkY2FiNWJjNjEzMzk/books/ocaml-scientific-computing.png" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-primary dark:bg-dark-primary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Advanced </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">OCaml Scientific Computing</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Liang Wang, Jianxin Zhao, Richard Mortier</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>This book is about the harmonious synthesis of functional programming and numerical computation. It shows how the expressiveness of OCaml allows for fast and safe development of data science applications. Step by step, the authors build up to use cases drawn from many areas of Data Science, Machine Learning, and AI, and then delve into how to deploy at scale, using parallel, distributed, and accelerated frameworks to gain all the advantages of cloud computing environments.</p> <p>This book aims at anyone with a basic knowledge of functional programming and a desire to explore the world of scientific computing, whether to generally explore the field in the round, to build applications for particular topics, or to deep-dive into how numerical systems are constructed. It does not assume strict ordering in reading – readers can simply jump to the topic that interests them most.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://link.springer.com/book/10.1007/978-3-030-97645-3"> <span>Buy on Springer</span> </a> </div> <div> <a class="btn" href="https://www.amazon.com/gp/product/3030976440"> <span>Buy on Amazon</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <div class="absolute -mt-8 ml-3 w-16 h-16"> <div class="bg-primary dark:bg-dark-primary rotate-[-10deg] rounded-full w-16 h-16 flex items-center justify-center" style="filter: drop-shadow(-4px -2px 4px rgb(0 0 0 / 0.25));"> <div class="text-center text-white text-base font-bold leading-7 tracking-wide"> FREE </div> </div> </div> <img src="/media/_/YzExYjgxYWM1NWRlYzZjM2ZiZDkxZmY5OTlmOTM0OTU/books/intro-to-fp-and-structure-of-pl.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">Introduction to Functional Programming and the Structure of Programming Languages using OCaml</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Gert Smolka</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>This text teaches functional programming and the structure of programming languages to beginning students. It is written for the Programming 1 course for computer science students at Saarland University. We assume that incoming students are familiar with mathematical thinking, but we do not assume programming experience. The course is designed to take about one third of the first semester's study time.</p> <p>As it comes to functional programming, we cover higher-order recursive functions, polymorphic typing, and constructor types for lists, trees, and abstract syntax. We emphasise the role of correctness statements and practice inductive correctness proofs. We also cover asymptotic running time considering binary search (logarithmic), insertion sort (quadratic), merge sort (linearithmic), and other algorithms.</p> <p>As it comes to the structure of programming languages, we study the different layers of syntax and semantics at the example of the idealised functional programming language Mini-OCaml. We describe the syntactic layers with grammar and the semantic layers with inference rules. Based on these formal descriptions, we program recursive descent parsers, type checkers and evaluators.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://github.com/uds-psl/Prog"> <span>GitHub repository</span> </a> </div> <div> <a class="btn" href="https://www.ps.uni-saarland.de/~smolka/drafts/prog2021.pdf"> <span>PDF download</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <img src="/media/_/YjQ3NGE2ZjNjODhhYjA5MDY1ZWY0M2JhZGJlMjk5ODM/books/ocaml-yuyan-biancheng-jichu-jiaocheng.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">OCaml语言编程基础教程</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">G. Chen</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"></div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://www.epubit.com/bookDetails?id=N18159"> <span>Order at Epubit.com</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <img src="/media/_/M2Y3YzVmNTRkOTY5Nzk2MzM3NzExNThmNjBjMDU0NGY/books/initiation-a-la-programmation-fonctionnelle-en-ocaml.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">Initiation à la programmation fonctionnelle en OCaml</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Mohammed-Said Habet</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>La programmation fonctionnelle est un style de programmation qui consiste à considérer les programmes informatiques comme des fonctions au sens mathématique du terme. Ce style est proposé dans de nombreux langages de programmation anciens et récents comme OCaml.</p> <p>Le but de ce livre est d’initier le lecteur au style fonctionnel de programmation en utilisant le langage OCaml. Cet ouvrage s’adresse donc principalement aux débutants en informatique. Il peut également être l’occasion pour les initiés de découvrir le langage de programmation OCaml.</p> <p>Le lecteur trouvera une présentation progressive des concepts de programmation fonctionnelle dans le langage OCaml, illustrée par des exemples, de nombreux exercices corrigés et d’autres laissés à l’initiative du lecteur.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://www.edilivre.com/initiation-a-la-programmation-fonctionnelle-en-ocaml-mohammed-said-habet.html"> <span>Website</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <img src="/media/_/NmYwMGYzNGNiOTk0YTM0NTIzNDUxMzNiNDdiN2Y1ZmE/books/more-ocaml-algorithms-methods-diversions.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-tertiary dark:bg-dark-tertiary_lighter rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Intermediate </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">More OCaml: Algorithms, Methods, &amp; Diversions</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">John Whitington</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>In &quot;More OCaml,&quot; John Whitington takes a meandering tour of functional programming with OCaml, introducing various language features and describing some classic algorithms. The book ends with a large worked example dealing with the production of PDF files. There are questions for each chapter together with worked answers and hints.</p> <p>&quot;More OCaml&quot; will appeal both to existing OCaml programmers who wish to brush up their skills and to experienced programmers eager to explore functional languages such as OCaml. It is hoped that each reader will find something new or see an old thing in a new light. For the more casual reader, or those who are used to a different functional language, a summary of basic OCaml is provided at the front of the book.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://www.amazon.com/gp/product/0957671113"> <span>Buy on Amazon</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <img src="/media/_/ZWE5MDIyNGUzMTA4MDlkZmRjYzFiZWJiYjJiOGYyMmY/books/apprendre-a-programmer-avec-ocaml.png" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">Apprendre à programmer avec OCaml</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Jean-Christophe Filliâtre, Sylvain Conchon</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>Computer programming is hard to learn. Being a skillful programmer requires imagination, anticipation, knowledge in algorithmics, the mastery of a programming language, and above all, experience, as difficulties are often hidden in details. This book synthesises our experience as teachers and programmers.</p> <p>The programming style is essential. Given a programming language, the same algorithm can be written in multiple ways, and some of them can be both elegant and efficient. This is what the programmer must seek at all costs and the reason why we choose a programming language for this book rather than pseudo-code. Our choice is OCaml.</p> <p>This book is organised into three parts. The first one introduces OCaml and targets beginners, whether they're programming beginners or simply new to OCaml. Through small programs, the reader is introduced to fundamental concepts of programming and of OCaml. The second and third parts are dedicated to fundamental concepts of algorithmics and should allow the reader to write programs in a structured and efficient way. Algorithmic concepts are directly presented in the syntax of OCaml and any code snippet from the book is available online.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://www.amazon.fr/Apprendre-programmer-avec-Ocaml-Algorithmes/dp/2212136781/"> <span>Buy on Amazon.fr</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <div class="absolute -mt-8 ml-3 w-16 h-16"> <div class="bg-primary dark:bg-dark-primary rotate-[-10deg] rounded-full w-16 h-16 flex items-center justify-center" style="filter: drop-shadow(-4px -2px 4px rgb(0 0 0 / 0.25));"> <div class="text-center text-white text-base font-bold leading-7 tracking-wide"> FREE </div> </div> </div> <img src="/media/_/ZGZjM2JiMzVhZmYzMmIzYjNmMTAyMWFiYmVmMTRiZjg/books/ocaml-from-the-very-beginning.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">OCaml From the Very Beginning</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">John Whitington</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>In <em>OCaml from the Very Beginning</em>, John Whitington takes a no-prerequisites approach to teaching a modern general-purpose programming language. Each small, self-contained chapter introduces a new topic, building until the reader can write quite substantial programs. There are plenty of questions and, crucially, worked answers and hints.</p> <p><em>OCaml from the Very Beginning</em> will appeal both to new programmers, and experienced programmers eager to explore functional languages such as OCaml. It is suitable both for formal use within an undergraduate or graduate curriculum, and for the interested amateur.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://ocaml-book.com/"> <span>Read Online</span> </a> </div> <div> <a class="btn" href="https://www.amazon.com/gp/product/0957671105"> <span>Buy on Amazon</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <div class="absolute -mt-8 ml-3 w-16 h-16"> <div class="bg-primary dark:bg-dark-primary rotate-[-10deg] rounded-full w-16 h-16 flex items-center justify-center" style="filter: drop-shadow(-4px -2px 4px rgb(0 0 0 / 0.25));"> <div class="text-center text-white text-base font-bold leading-7 tracking-wide"> FREE </div> </div> </div> <img src="/media/_/YzI2YzExNmIzMDUyZjVkMGQyMWExNTBiNGNmYjUwYzc/books/think-ocaml-how-to-think-like-a-functional-programmer.png" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">Think OCaml: How to Think Like a Functional Programmer</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Nicholas Monje, Allen Downey</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>This book is a work in progress. It is an introductory programming textbook based on the OCaml language. It is a modified version of <em>Think Python</em>, by Allen Downey. It is intended for newcomers to programming and also those who know some programming but want to learn programming in the function-oriented paradigm, or those who simply want to learn OCaml.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://greenteapress.com/thinkocaml/thinkocaml.pdf"> <span>Read Online</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <img src="/media/_/MTBmNzU5N2E5ZjJiOWJlNDYxZGRiZDNkZDQ2OTE3ZDk/books/puroguramingu-in-ocaml.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-tertiary dark:bg-dark-tertiary_lighter rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Intermediate </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">A. Igarashi (五十嵐 淳)</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"></div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-OCaml-%E3%80%9C%E9%96%A2%E6%95%B0%E5%9E%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89GUI%E6%A7%8B%E7%AF%89%E3%81%BE%E3%81%A7%E3%80%9C-%E4%BA%94%E5%8D%81%E5%B5%90%E6%B7%B3-ebook/dp/B00QRPI1AS"> <span>Order at Amazon.co.jp</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <img src="/media/_/NmQ0OGQ1ZjFjOWM0OGUxMWZmOWE3ZWQ2YTRlM2UzYmU/books/nyumon-ocaml.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">入門OCaml ~プログラミング基礎と実践理解~</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">OCaml-Nagoya</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"></div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://www.amazon.co.jp/%E5%85%A5%E9%96%80OCaml-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%9F%BA%E7%A4%8E%E3%81%A8%E5%AE%9F%E8%B7%B5%E7%90%86%E8%A7%A3-OCaml-Nagoya/dp/4839923116"> <span>Order at Amazon.co.jp</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <img src="/media/_/Y2IwN2NjY2VlMzFjZjI3OWI2NGZmN2MyMGZmMTIzYWM/books/programmation-de-droite-a-gauche-et-vice-versa.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-tertiary dark:bg-dark-tertiary_lighter rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Intermediate </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">Programmation de droite à gauche et vice-versa</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Pascal Manoury</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"></div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://www.decitre.fr/livres/programmation-de-droite-a-gauche-et-vice-versa-9782916466064.html"> <span>Order on Paracamplus</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <img src="/media/_/ZjZiYzEzNWI5MzM4NWJmOThmMDA2MDYzOWI1YjQxMTQ/books/apprentissage-de-la-programmation-avec-ocaml.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">Apprentissage de la programmation avec OCaml</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Catherine Dubois, Valérie Ménissier Morain</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>Programming is a discipline by which the strengths of computers can be harnessed: large amounts of reliable memory, the ability to execute repetitive tasks relentlessly, and a high computation speed. In order to write correct programs that fulfill their specified needs, it is necessary to understand the precise semantics of the programming language. This book is targeted towards beginner programmers and provides teaching material for all programmers wishing to learn the functional programming style. The programming features introduced in this book are available in all dialects of the ML language, notably Caml-Light, OCaml and Standard ML. The concepts presented therein and illustrated in OCaml easily transpose to other programming languages.</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://www.amazon.com/apprentissage-programmation-avec-ocaml/dp/2746208199"> <span>Buy on Amazon.fr</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <img src="/media/_/ZGY1YTE1YTkyNDBiNjA3YmMxYjY0NGQxZDk5YTU2NDc/books/introduzione-alla-programmazione-funzionale.gif" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-secondary dark:bg-dark-secondary rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Beginner </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">Introduzione alla programmazione funzionale</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Carla Limongelli, Marta Cialdea</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"></div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://www.amazon.it/Introduzione-programmazione-funzionale-Marta-Cialdea/dp/8874880316"> <span>Order at Amazon.it</span> </a> </div> </div> </div> </div> <div class="flex gap-10 pt-6 lg:gap-y-0 lg:gap-x-10 pb-10 mt-4 flex-col lg:flex-row"> <div class="flex flex-col gap-y-4"> <div class="relative w-full sm:w-72 lg:w-64 max-w-full"> <div class="relative"> <div class="absolute -mt-8 ml-3 w-16 h-16"> <div class="bg-primary dark:bg-dark-primary rotate-[-10deg] rounded-full w-16 h-16 flex items-center justify-center" style="filter: drop-shadow(-4px -2px 4px rgb(0 0 0 / 0.25));"> <div class="text-center text-white text-base font-bold leading-7 tracking-wide"> FREE </div> </div> </div> <img src="/media/_/ZWUzNmZkYmVlMTBmYmQ4MmFmMzRkYjU3ZGZlMDQ3OGM/books/developpement-d-applications-avec-objective-caml.jpg" class="w-full border z-10" alt=""> </div> <div class="mt-5 px-3 py-1 bg-tertiary dark:bg-dark-tertiary_lighter rounded-3xl font-semibold text-center text-white dark:text-dark-white tracking-widest leading-5"> Intermediate </div> </div> </div> <div class="flex-col flex-1 prose dark:prose-invert prose-lg"> <h2 class="font-normal text-2xl mb-6">Développement d&#x27;applications avec Objective Caml</h2> <div class="font-normal text-content dark:text-dark-content text-lg mb-6">Emmanuel Chailloux, Pascal Manoury, Bruno Pagano</div> <div class="prose dark:prose-invert prose-lg prose-orange mb-6"><p>A comprehensive (742 pages) book on OCaml, covering not only the core language, but also modules, objects and classes, threads and systems programming, and interoperability with C.</p> <p>&quot;Objective CAML est un langage de programmation : un de plus dira-t-on ! Ils sont en effet déjà nombreux et pourtant il en apparaît constamment de nouveaux. Au delà de leurs disparités, la conception et la genèse de chacun d'eux procèdent d'une motivation partagée : la volonté d'abstraire&quot;</p> </div> <div class="flex gap-x-5 gap-y-4 flex-col sm:flex-row"> <div> <a class="btn" href="https://www-apr.lip6.fr/~chaillou/Public/DA-OCAML/"> <span>Read Online</span> </a> </div> <div> <a class="btn" href="https://caml.inria.fr/pub/docs/oreilly-book/"> <span>English Edition</span> </a> </div> <div> <a class="btn" href="https://www.amazon.fr/exec/obidos/ASIN/2841771210"> <span>Order at Amazon.fr</span> </a> </div> </div> </div> </div> </div> <div class="prose dark:prose-invert"> If you want to add a new book, check out the <a href="https://github.com/ocaml/ocaml.org/blob/main/CONTRIBUTING.md#content-book" target="_blank">Contributing Guide</a> on GitHub. </div> </div> </div> </div> </div> </main> <button class="fixed bottom-8 right-10 md:bottom-[5rem] lg:bottom-[8.37rem] lg:right-[6.5rem] border-0 hidden focus:outline-none z-50 rounded-full shadow-custom p-4 bg-primary dark:bg-dark-primary" onclick="scrollToTop()" id="scrollToTop" title="Scroll to top"><svg class="h-6 w-6" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path d="M4.5 10.5L12 3M12 3L19.5 10.5M12 3V21" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> </svg> </button> <footer x-data class="border-t border-separator_30 dark:border-dark-separator_30 bg-dark-sand dark:bg-dark-card" aria-labelledby="footer-heading"> <h2 id="footer-heading" class="sr-only">Footer</h2> <div class="mx-auto max-w-7xl px-6 py-16 lg:px-8"> <div class="flex w-full items-center justify-between mb-8"> <a href="/"><img class="h-8 dark:hidden" src="/_/MDBjN2M4YjIxY2Y1YWExZWE3Njk4M2FiZTg1NWZjNTM/logo-with-name.svg" alt="OCaml"> <img class="h-8 hidden dark:inline" src="/_/MTE3YWE5YzJlZmExNmYyMmI3ZmEwYjliMDEwNDBkMDY/logo-with-name-white.svg" alt="OCaml"> </a> <div class="hidden md:flex"> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border rounded-l rounded-l-full border-r-0" :class='$store.themeSettings.preference === "light" ? "bg-gradient-to-r from-[#FFA932] to-[#C24F1E] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("light")' > <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none" class="mr-2"> <path d="M7 0.5V2.125M11.5962 2.40378L10.4472 3.55283M13.5 7H11.875M11.5962 11.5962L10.4472 10.4472M7 11.875V13.5M3.55283 10.4472L2.40378 11.5962M2.125 7H0.5M3.55283 3.55283L2.40378 2.40378M9.70833 7C9.70833 7.71829 9.42299 8.40717 8.91508 8.91508C8.40717 9.42299 7.71829 9.70833 7 9.70833C6.28171 9.70833 5.59283 9.42299 5.08492 8.91508C4.57701 8.40717 4.29167 7.71829 4.29167 7C4.29167 6.28171 4.57701 5.59283 5.08492 5.08492C5.59283 4.57701 6.28171 4.29167 7 4.29167C7.71829 4.29167 8.40717 4.57701 8.91508 5.08492C9.42299 5.59283 9.70833 6.28171 9.70833 7Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> Light </button> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border border-r-0" :class='$store.themeSettings.preference === "dark" ? "bg-gradient-to-r from-[#0F254F] to-[#0B1228] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("dark")' > <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="mr-2"> <path d="M11.1573 7.90842C10.5134 8.17678 9.8226 8.3145 9.125 8.31358C6.20812 8.31358 3.84375 5.94921 3.84375 3.03233C3.84375 2.31192 3.98783 1.62562 4.24892 1C3.28663 1.40144 2.46465 2.07865 1.88651 2.94635C1.30836 3.81404 0.999911 4.83342 1 5.87608C1 8.79296 3.36437 11.1573 6.28125 11.1573C7.32391 11.1574 8.34329 10.849 9.21099 10.2708C10.0787 9.69268 10.7559 8.8707 11.1573 7.90842Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> Dark </button> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border rounded-r rounded-r-full" :class='$store.themeSettings.preference === "system" ? "bg-gradient-to-r from-[#2B7866] to-[#004039] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("system")' > <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="mr-2"> <path d="M7.19553 2.955C7.26303 2.5485 7.61553 2.25 8.02803 2.25H9.97278C10.3853 2.25 10.7378 2.5485 10.8053 2.955L10.965 3.91575C11.0123 4.19625 11.1998 4.43025 11.4488 4.56825C11.5043 4.59825 11.559 4.6305 11.6138 4.6635C11.8575 4.8105 12.1538 4.85625 12.42 4.7565L13.3328 4.4145C13.5198 4.34416 13.7258 4.34248 13.9139 4.40978C14.1021 4.47708 14.2603 4.60899 14.3603 4.782L15.3323 6.46725C15.4321 6.64028 15.4672 6.8431 15.4315 7.03962C15.3958 7.23615 15.2916 7.41363 15.1373 7.5405L14.385 8.16075C14.1653 8.3415 14.0565 8.6205 14.0625 8.90475C14.0636 8.9685 14.0636 9.03225 14.0625 9.096C14.0565 9.3795 14.1653 9.6585 14.385 9.83925L15.138 10.4595C15.456 10.722 15.5385 11.1758 15.333 11.532L14.3595 13.2172C14.2597 13.3902 14.1017 13.5222 13.9137 13.5896C13.7257 13.657 13.5198 13.6556 13.3328 13.5855L12.42 13.2435C12.1538 13.1438 11.8575 13.1895 11.613 13.3365C11.5587 13.3696 11.5037 13.4016 11.448 13.4325C11.1998 13.5697 11.0123 13.8037 10.965 14.0842L10.8053 15.045C10.7378 15.4523 10.3853 15.75 9.97278 15.75H8.02728C7.61478 15.75 7.26303 15.4515 7.19478 15.045L7.03503 14.0842C6.98853 13.8037 6.80103 13.5698 6.55203 13.4318C6.49642 13.4011 6.44141 13.3693 6.38703 13.3365C6.14328 13.1895 5.84703 13.1438 5.58003 13.2435L4.66728 13.5855C4.48033 13.6556 4.27456 13.6572 4.08656 13.5899C3.89856 13.5226 3.74051 13.3908 3.64053 13.218L2.66778 11.5328C2.56799 11.3597 2.53282 11.1569 2.56852 10.9604C2.60423 10.7639 2.7085 10.5864 2.86278 10.4595L3.61578 9.83925C3.83478 9.65925 3.94353 9.3795 3.93828 9.096C3.93711 9.03226 3.93711 8.96849 3.93828 8.90475C3.94353 8.61975 3.83478 8.3415 3.61578 8.16075L2.86278 7.5405C2.70869 7.41367 2.60454 7.23633 2.56884 7.03997C2.53314 6.84361 2.56819 6.64095 2.66778 6.468L3.64053 4.78275C3.74042 4.6096 3.89854 4.47754 4.08672 4.4101C4.27489 4.34266 4.4809 4.34422 4.66803 4.4145L5.58003 4.7565C5.84703 4.85625 6.14328 4.8105 6.38703 4.6635C6.44103 4.6305 6.49653 4.599 6.55203 4.5675C6.80103 4.43025 6.98853 4.19625 7.03503 3.91575L7.19553 2.955Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> <path d="M11.25 9C11.25 9.59674 11.0129 10.169 10.591 10.591C10.169 11.0129 9.59674 11.25 9 11.25C8.40326 11.25 7.83097 11.0129 7.40901 10.591C6.98705 10.169 6.75 9.59674 6.75 9C6.75 8.40326 6.98705 7.83097 7.40901 7.40901C7.83097 6.98705 8.40326 6.75 9 6.75C9.59674 6.75 10.169 6.98705 10.591 7.40901C11.0129 7.83097 11.25 8.40326 11.25 9Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> System </button> </div> </div> <div class="xl:grid xl:grid-cols-3 xl:gap-8"> <div class="space-y-8"> <p class="text-base leading-6 text-title dark:text-dark-content">Innovation. Community. Security.</p> <div class="flex space-x-6"> <a href="https://github.com/ocaml" class="text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <span class="sr-only">GitHub</span> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd" /> </svg> </a> <a href="https://discord.gg/cCYQbqN" class="text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <span class="sr-only">Discord</span> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M18.9419 5.29661C17.6473 4.69088 16.263 4.25066 14.8157 4C14.638 4.32134 14.4304 4.75355 14.2872 5.09738C12.7487 4.86601 11.2245 4.86601 9.7143 5.09738C9.57116 4.75355 9.3588 4.32134 9.17947 4C7.73067 4.25066 6.3448 4.6925 5.05016 5.29982C2.43887 9.24582 1.73099 13.0938 2.08493 16.8872C3.81688 18.1805 5.49534 18.9662 7.14548 19.4804C7.55291 18.9196 7.91628 18.3235 8.22931 17.6953C7.63313 17.4688 7.06211 17.1892 6.52256 16.8647C6.6657 16.7586 6.80571 16.6478 6.94098 16.5337C10.2318 18.0729 13.8074 18.0729 17.0589 16.5337C17.1958 16.6478 17.3358 16.7586 17.4774 16.8647C16.9362 17.1908 16.3637 17.4704 15.7675 17.697C16.0805 18.3235 16.4423 18.9212 16.8513 19.4819C18.503 18.9678 20.183 18.1822 21.915 16.8872C22.3303 12.4897 21.2056 8.67705 18.9419 5.29661ZM8.67765 14.5543C7.68977 14.5543 6.87963 13.632 6.87963 12.509C6.87963 11.3859 7.67247 10.4621 8.67765 10.4621C9.68285 10.4621 10.493 11.3843 10.4757 12.509C10.4772 13.632 9.68285 14.5543 8.67765 14.5543ZM15.3223 14.5543C14.3344 14.5543 13.5243 13.632 13.5243 12.509C13.5243 11.3859 14.3171 10.4621 15.3223 10.4621C16.3275 10.4621 17.1376 11.3843 17.1203 12.509C17.1203 13.632 16.3275 14.5543 15.3223 14.5543Z" clip-rule="evenodd" /> </svg> </a> <a href="https://twitter.com/ocaml_org" class="text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <span class="sr-only">Twitter</span> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84" /> </svg> </a> <a href="https://watch.ocaml.org/" class="text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <span class="sr-only">Peertube</span> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M5 2V12L12.4998 7.00047" clip-rule="evenodd" /> <path fill-rule="evenodd" d="M5 12V22L12.4998 17.0005" clip-rule="evenodd" /> <path fill-rule="evenodd" d="M12.4998 6.99951V16.9995L19.9995 12" clip-rule="evenodd" /> </svg> </a> <a href="/planet.xml" class="text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary"> <span class="sr-only">RSS</span> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path fill-rule="evenodd" d="M15.2692 22H11.3846C11.3846 16.8462 7.11538 12.6154 2 12.6154V8.73077C9.26923 8.73077 15.2692 14.7308 15.2692 22ZM18 22C18 13.2308 10.7692 6 2 6V2C12.9615 2 22 11.0385 22 22H18Z" clip-rule="evenodd" /> <path fill-rule="evenodd" d="M4.73077 22C6.23893 22 7.46154 20.7774 7.46154 19.2692C7.46154 17.7611 6.23893 16.5385 4.73077 16.5385C3.22261 16.5385 2 17.7611 2 19.2692C2 20.7774 3.22261 22 4.73077 22Z" clip-rule="evenodd" /> </svg> </a> </div> <div class="flex w-full md:hidden"> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border rounded-l rounded-l-full border-r-0" :class='$store.themeSettings.preference === "light" ? "bg-gradient-to-r from-[#FFA932] to-[#C24F1E] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("light")' > <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none" class="mr-2"> <path d="M7 0.5V2.125M11.5962 2.40378L10.4472 3.55283M13.5 7H11.875M11.5962 11.5962L10.4472 10.4472M7 11.875V13.5M3.55283 10.4472L2.40378 11.5962M2.125 7H0.5M3.55283 3.55283L2.40378 2.40378M9.70833 7C9.70833 7.71829 9.42299 8.40717 8.91508 8.91508C8.40717 9.42299 7.71829 9.70833 7 9.70833C6.28171 9.70833 5.59283 9.42299 5.08492 8.91508C4.57701 8.40717 4.29167 7.71829 4.29167 7C4.29167 6.28171 4.57701 5.59283 5.08492 5.08492C5.59283 4.57701 6.28171 4.29167 7 4.29167C7.71829 4.29167 8.40717 4.57701 8.91508 5.08492C9.42299 5.59283 9.70833 6.28171 9.70833 7Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> Light </button> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border border-r-0" :class='$store.themeSettings.preference === "dark" ? "bg-gradient-to-r from-[#0F254F] to-[#0B1228] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("dark")' > <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" class="mr-2"> <path d="M11.1573 7.90842C10.5134 8.17678 9.8226 8.3145 9.125 8.31358C6.20812 8.31358 3.84375 5.94921 3.84375 3.03233C3.84375 2.31192 3.98783 1.62562 4.24892 1C3.28663 1.40144 2.46465 2.07865 1.88651 2.94635C1.30836 3.81404 0.999911 4.83342 1 5.87608C1 8.79296 3.36437 11.1573 6.28125 11.1573C7.32391 11.1574 8.34329 10.849 9.21099 10.2708C10.0787 9.69268 10.7559 8.8707 11.1573 7.90842Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> Dark </button> <button class="flex grow basis-0 justify-center items-center py-2 px-4 text-sm border rounded-r rounded-r-full" :class='$store.themeSettings.preference === "system" ? "bg-gradient-to-r from-[#2B7866] to-[#004039] text-white dark:text-dark-title outline-none" : "bg-white text-content outline-2 outline-card_border dark:outline-dark-separator_30"' @click='$store.themeSettings.setPreference("system")' > <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="mr-2"> <path d="M7.19553 2.955C7.26303 2.5485 7.61553 2.25 8.02803 2.25H9.97278C10.3853 2.25 10.7378 2.5485 10.8053 2.955L10.965 3.91575C11.0123 4.19625 11.1998 4.43025 11.4488 4.56825C11.5043 4.59825 11.559 4.6305 11.6138 4.6635C11.8575 4.8105 12.1538 4.85625 12.42 4.7565L13.3328 4.4145C13.5198 4.34416 13.7258 4.34248 13.9139 4.40978C14.1021 4.47708 14.2603 4.60899 14.3603 4.782L15.3323 6.46725C15.4321 6.64028 15.4672 6.8431 15.4315 7.03962C15.3958 7.23615 15.2916 7.41363 15.1373 7.5405L14.385 8.16075C14.1653 8.3415 14.0565 8.6205 14.0625 8.90475C14.0636 8.9685 14.0636 9.03225 14.0625 9.096C14.0565 9.3795 14.1653 9.6585 14.385 9.83925L15.138 10.4595C15.456 10.722 15.5385 11.1758 15.333 11.532L14.3595 13.2172C14.2597 13.3902 14.1017 13.5222 13.9137 13.5896C13.7257 13.657 13.5198 13.6556 13.3328 13.5855L12.42 13.2435C12.1538 13.1438 11.8575 13.1895 11.613 13.3365C11.5587 13.3696 11.5037 13.4016 11.448 13.4325C11.1998 13.5697 11.0123 13.8037 10.965 14.0842L10.8053 15.045C10.7378 15.4523 10.3853 15.75 9.97278 15.75H8.02728C7.61478 15.75 7.26303 15.4515 7.19478 15.045L7.03503 14.0842C6.98853 13.8037 6.80103 13.5698 6.55203 13.4318C6.49642 13.4011 6.44141 13.3693 6.38703 13.3365C6.14328 13.1895 5.84703 13.1438 5.58003 13.2435L4.66728 13.5855C4.48033 13.6556 4.27456 13.6572 4.08656 13.5899C3.89856 13.5226 3.74051 13.3908 3.64053 13.218L2.66778 11.5328C2.56799 11.3597 2.53282 11.1569 2.56852 10.9604C2.60423 10.7639 2.7085 10.5864 2.86278 10.4595L3.61578 9.83925C3.83478 9.65925 3.94353 9.3795 3.93828 9.096C3.93711 9.03226 3.93711 8.96849 3.93828 8.90475C3.94353 8.61975 3.83478 8.3415 3.61578 8.16075L2.86278 7.5405C2.70869 7.41367 2.60454 7.23633 2.56884 7.03997C2.53314 6.84361 2.56819 6.64095 2.66778 6.468L3.64053 4.78275C3.74042 4.6096 3.89854 4.47754 4.08672 4.4101C4.27489 4.34266 4.4809 4.34422 4.66803 4.4145L5.58003 4.7565C5.84703 4.85625 6.14328 4.8105 6.38703 4.6635C6.44103 4.6305 6.49653 4.599 6.55203 4.5675C6.80103 4.43025 6.98853 4.19625 7.03503 3.91575L7.19553 2.955Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> <path d="M11.25 9C11.25 9.59674 11.0129 10.169 10.591 10.591C10.169 11.0129 9.59674 11.25 9 11.25C8.40326 11.25 7.83097 11.0129 7.40901 10.591C6.98705 10.169 6.75 9.59674 6.75 9C6.75 8.40326 6.98705 7.83097 7.40901 7.40901C7.83097 6.98705 8.40326 6.75 9 6.75C9.59674 6.75 10.169 6.98705 10.591 7.40901C11.0129 7.83097 11.25 8.40326 11.25 9Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/> </svg> System </button> </div> </div> <div class="mt-8 grid grid-cols-2 gap-8 xl:col-span-2 xl:mt-0"> <div class="md:grid md:grid-cols-2 md:gap-8"> <div> <h3 class="text-base font-semibold leading-6 text-title dark:text-dark-content">About OCaml</h3> <ul class="mt-6 space-y-4"> <li> <a href="/changelog" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Changelog</a> </li> <li> <a href="/releases" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Releases</a> </li> <li> <a href="/industrial-users" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Industrial Users</a> </li> <li> <a href="/academic-users" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Academic Users</a> </li> <li> <a href="/about" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Why OCaml</a> </li> </ul> </div> <div class="mt-10 md:mt-0"> <h3 class="text-base font-semibold leading-6 text-title dark:text-dark-content">Resources</h3> <ul class="mt-6 space-y-4"> <li> <a href="/install" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Install OCaml</a> </li> <li> <a href="/docs/get-started" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Get Started</a> </li> <li> <a href="/docs/tools" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Platform Tools</a> </li> <li> <a href="/manual" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Language Manual</a> </li> <li> <a href="/api" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Standard Library API</a> </li> <li> <a href="/books" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Books</a> </li> <li> <a href="/exercises" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Exercises</a> </li> <li> <a href="/papers" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Papers</a> </li> <li> <a href="/play" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">OCaml Playground</a> </li> <li> <a href="/logo" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Logo</a> </li> </ul> </div> </div> <div class="md:grid md:grid-cols-2 md:gap-8"> <div> <h3 class="text-base font-semibold leading-6 text-title dark:text-dark-content">Ecosystem</h3> <ul class="mt-6 space-y-4"> <li> <a href="/packages" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Packages</a> </li> <li> <a href="/community" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Community</a> </li> <li> <a href="/events" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Events</a> </li> <li> <a href="/ocaml-planet" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">OCaml Planet</a> </li> <li> <a href="/jobs" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Jobs</a> </li> </ul> </div> <div class="mt-20 md:mt-0"> <h3 class="text-base font-semibold leading-6 text-title dark:text-dark-content">Policies</h3> <ul class="mt-6 space-y-4"> <li> <a href="/policies/carbon-footprint" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Carbon Footprint</a> </li> <li> <a href="/governance" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Governance</a> </li> <li> <a href="/policies/privacy-policy" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Privacy</a> </li> <li> <a href="/policies/code-of-conduct" class="text-base leading-6 text-content dark:text-dark-title hover:text-primary dark:hover:text-dark-primary">Code of Conduct</a> </li> </ul> </div> </div> </div> </div> </div> <script> document.addEventListener('alpine:init', () => { Alpine.store('themeSettings', { init() { this.storageAccess = localStorage.getItem('storageAccess') this.preference = localStorage.getItem('theme') || "system" this.isSystemDefaultDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches }, selected: '', alertOpen: false, storageAccess: false, preference: undefined, isSystemDefaultDark: false, setPreference(preference) { if (!this.storageAccess) { if (!window.confirm("We will remember your choice in your browser's LocalStorage. Allow this?")) { return; } localStorage.setItem('storageAccess', true) storageAccess = true; } this.selected = preference; this.preference = preference localStorage.setItem('theme', preference) if (preference === 'dark') { document.body.classList.add("dark"); } if (preference === 'light') { document.body.classList.remove("dark"); } if (preference === 'system') { if (this.isSystemDefaultDark) { document.body.classList.add("dark"); } else { document.body.classList.remove("dark"); } localStorage.removeItem('theme') return } }, }) }) </script> </footer> <script> function scrollToTop() { window.scrollTo(0, 0); } window.onscroll = function() { showScrollButton(); }; function showScrollButton() { if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) { document.getElementById("scrollToTop").style.display = "block"; } else { document.getElementById("scrollToTop").style.display = "none"; } } </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10