679 lines
99 KiB
Plaintext
679 lines
99 KiB
Plaintext
[38;5;12mAwesome OCaml[39m
|
||
[38;5;12m=============[39m
|
||
|
||
|
||
|
||
[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12m_[39m[38;5;14m[1mEverything you'll ever need on the road to mastering OCaml.[0m[38;5;12m_[39m
|
||
|
||
[38;5;12mA[39m[38;5;12m [39m[38;5;12mcurated[39m[38;5;12m [39m[38;5;12mlist[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mreferences[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mawesome[39m[38;5;12m [39m[38;5;12mOCaml[39m[38;5;12m [39m[38;5;12mtools,[39m[38;5;12m [39m[38;5;12mframeworks,[39m[38;5;12m [39m[38;5;12mlibraries,[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12marticles.[39m[38;5;12m [39m[38;5;12mAdditionally,[39m[38;5;12m [39m[38;5;12mthere[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mcollection[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mfreely[39m[38;5;12m [39m[38;5;12mavailable[39m[38;5;12m [39m[38;5;12mbooks[39m[38;5;12m [39m[38;5;12m(https://github.com/rizo/awesome-ocaml/tree/master/books),[39m[38;5;12m [39m[38;5;12mpapers[39m[38;5;12m [39m
|
||
[38;5;12m(https://github.com/rizo/awesome-ocaml/tree/master/papers),[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mpresentations[39m[38;5;12m [39m[38;5;12m(https://github.com/rizo/awesome-ocaml/tree/master/presentations).[39m
|
||
|
||
[38;5;12mIf you're looking for comprehensive community-driven content about OCaml, visit 📚[39m[38;5;14m[1mOCamlverse[0m[38;5;12m (https://ocamlverse.github.io/)![39m
|
||
|
||
[38;5;12mFor a quick introduction to the modern OCaml development workflow, consult the [39m[38;5;12mUp and Running with OCaml[39m[38;5;12m (https://ocaml.org/learn/tutorials/up_and_running.html) tutorial.[39m
|
||
|
||
[38;5;12mYour favorite package is not listed? Fork and [39m[38;5;14m[1mcreate a Pull Request[0m[38;5;12m (https://github.com/rizo/awesome-ocaml/edit/master/README.md) to add it![39m
|
||
|
||
[38;2;255;187;0m[4mContents[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mCommunity[0m[38;5;12m (#community)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mAlgorithms and Data Structures[0m[38;5;12m (#algorithms-and-data-structures)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mApplication Libraries[0m[38;5;12m (#application-libraries)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBenchmarking[0m[38;5;12m (#benchmarking)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBlogs[0m[38;5;12m (#blogs)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBooks[0m[38;5;12m (#books)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mVideos[0m[38;5;12m (#videos)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCode Analysis and Linters[0m[38;5;12m (#code-analysis-and-linters)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCompilers and Compiler Tools[0m[38;5;12m (#compilers-and-compiler-tools)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mConcurrency[0m[38;5;12m (#concurrency)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDatabases[0m[38;5;12m (#databases)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDatetime[0m[38;5;12m (#datetime)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDeveloper Tools[0m[38;5;12m (#developer-tools)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mExercises and Short Examples[0m[38;5;12m (#exercises-and-short-examples)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mFormal Software Verification[0m[38;5;12m (#formal-software-verification)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mGeneral[0m[38;5;12m (#general)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mGraphics[0m[38;5;12m (#graphics)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mInternationalization[0m[38;5;12m (#internationalization)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mUser Interface[0m[38;5;12m (#user-interface)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLanguage-related[0m[38;5;12m (#language-related)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLarge Source Code Examples[0m[38;5;12m (#large-source-code-examples)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLogging[0m[38;5;12m (#logging)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMachine Learning[0m[38;5;12m (#machine-learning)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMessaging[0m[38;5;12m (#messaging)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMetaprogramming[0m[38;5;12m (#metaprogramming)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMetrics[0m[38;5;12m (#metrics)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMobile Applications[0m[38;5;12m (#mobile-applications)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mNetworking[0m[38;5;12m (#networking)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOnline Courses[0m[38;5;12m (#online-courses)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mPackage Management[0m[38;5;12m (#package-management)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mParallelism[0m[38;5;12m (#parallelism)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mProject Starter Templates[0m[38;5;12m (#project-starter-templates)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mPrinters helpers[0m[38;5;12m (#printers-helpers)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mQuestions[0m[38;5;12m (#questions)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mRegular Expressions[0m[38;5;12m (#regular-expressions)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mScience and Technical Computing[0m[38;5;12m (#science-and-technical-computing)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSecurity and Cryptography[0m[38;5;12m (#security-and-cryptography)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSemantic Technology[0m[38;5;12m (#semantic-technology)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSerialization[0m[38;5;12m (#serialization)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSystem Programming[0m[38;5;12m (#system-programming)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTesting[0m[38;5;12m (#testing)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mUtilities[0m[38;5;12m (#utilities)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mWeb Development[0m[38;5;12m (#web-development)[39m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;2;30;30;40m[38;5;13m[3m [0m
|
||
|
||
|
||
[38;2;255;187;0m[4mCommunity[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mOfficial OCaml Website[0m[38;5;12m (https://ocaml.org/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml Discourse Web Forum[0m[38;5;12m (https://discuss.ocaml.org/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml Discord Chat[0m[38;5;12m (https://discord.gg/ZBgYuvR)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOfficial OCaml Mailing List[0m[38;5;12m (https://inbox.ocaml.org/caml-list/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml Planet[0m[38;5;12m (https://ocaml.org/community/planet/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml SubReddit[0m[38;5;12m (https://www.reddit.com/r/ocaml/)[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mAlgorithms and Data Structures[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mComparing a Machine Learning Algorithm Implemented in F# and OCaml[0m[38;5;12m (https://philtomson.github.io/blog/2014-05-29-comparing-a-machine-learning-algorithm-implemented-in-f-sharp-and-ocaml/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCamlgraph[0m[38;5;12m (https://github.com/backtracking/ocamlgraph) – A generic graph library for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mods[0m[38;5;12m (https://github.com/owainlewis/ods) – A large collection of data structures and algorithms for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mcombine[0m[38;5;12m (https://github.com/backtracking/combine) – OCaml library for combinatorics .[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDecompress[0m[38;5;12m (https://github.com/mirage/decompress) - A pure OCaml implementation of Zlib.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mKe[0m[38;5;12m (https://github.com/mirage/ke) - Fast implementation of queue (FIFO) in OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDuff[0m[38;5;12m (https://github.com/mirage/duff) - Implementation of Rabin's fingerprint and delta compression by P. MacDonald in OCaml (same as [39m[38;5;14m[1mlibXdiff[0m[38;5;12m (http://www.xmailserver.org/xdiff-lib.html)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mORaft[0m[38;5;12m (https://github.com/komamitsu/oraft) - Library of [39m[38;5;14m[1mRaft consensus algorithm[0m[38;5;12m (https://raft.github.io/raft.pdf) implemented in OCaml[39m
|
||
[38;5;12m- [39m[38;5;14m[1mODiff[0m[38;5;12m (https://github.com/dmtrKovalenko/odiff) – Library of [39m[38;5;14m[1mYIQ NTSC transmission image difference alghoritm[0m[38;5;12m (http://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf) implemented in OCaml and ReasonML.[39m
|
||
|
||
[38;2;255;187;0m[4mApplication Libraries[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mBatteries Included[0m[38;5;12m (https://github.com/ocaml-batteries-team/batteries-included) – A community-maintained foundation library for your OCaml projects.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCmdliner[0m[38;5;12m (https://github.com/dbuenzli/cmdliner) – Declarative definition of command line interfaces for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCore[0m[38;5;12m (https://github.com/janestreet/core) – Jane Street Capital's full-fledged standard library overlay. A portable subset of Core is also available: [39m[38;5;14m[1mCore_kernel[0m[38;5;12m (https://github.com/janestreet/core_kernel).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBase[0m[38;5;12m (https://github.com/janestreet/base) - Jane Street Capital's dependency-free, quick-compiling, fully-portable across any environment that can run OCaml code standard library.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mReact[0m[38;5;12m (http://erratique.ch/software/react) – React is an OCaml module for functional reactive programming (FRP). It provides support for programs with time-varying values, declarative events, and signals.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMinicli[0m[38;5;12m (https://github.com/UnixJunkie/minicli) – Minimalist library for command-line parsing.[39m
|
||
[38;5;12m- [39m[38;5;14m[1measy-format[0m[38;5;12m (https://github.com/mjambon/easy-format) – Pretty-printing library for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-rpc[0m[38;5;12m (https://github.com/mirage/ocaml-rpc) – Light library to deal with RPCs in OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-containers[0m[38;5;12m (https://github.com/c-cube/ocaml-containers) – A lightweight, modular standard library extension, string library, and interfaces to various libraries (bigarrays, Unix, etc.) BSD license.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mBenchmarking[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mcore_bench[0m[38;5;12m (https://github.com/janestreet/core_bench) – Micro-benchmarking library for OCaml by Jane Street.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mGetting Started with Core_bench[0m[38;5;12m (https://github.com/janestreet/core_bench/wiki/Getting-Started-with-Core_bench)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mbenchmark[0m[38;5;12m (https://github.com/Chris00/ocaml-benchmark) – Benchmarking functions for measuring the run-time of functions using latency or throughput.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mBlogs[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mGagallium[0m[38;5;12m (http://gallium.inria.fr/blog/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mType OCaml – Many things about OCaml[0m[38;5;12m (http://typeocaml.com/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml Platform[0m[38;5;12m (https://opam.ocaml.org/blog/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDrup's Thingies[0m[38;5;12m (https://drup.github.io/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mThomas Letan’s articles about OCaml[0m[38;5;12m (https://soap.coffee/~lthms/tags/ocaml.html)[39m
|
||
|
||
[38;2;255;187;0m[4mBooks[0m
|
||
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mMore[0m[38;5;14m[1m [0m[38;5;14m[1mOCaml:[0m[38;5;14m[1m [0m[38;5;14m[1mAlgorithms,[0m[38;5;14m[1m [0m[38;5;14m[1mMethods,[0m[38;5;14m[1m [0m[38;5;14m[1mand[0m[38;5;14m[1m [0m[38;5;14m[1mDiversions[0m[38;5;12m [39m[38;5;12m(https://www.amazon.com/More-OCaml-Algorithms-Methods-Diversions/dp/0957671113/)[39m[38;5;12m [39m[38;5;12m–[39m[38;5;12m [39m[38;5;12mIn[39m[38;5;12m [39m[38;5;12mMore[39m[38;5;12m [39m[38;5;12mOCaml,[39m[38;5;12m [39m[38;5;12mJohn[39m[38;5;12m [39m[38;5;12mWhitington[39m[38;5;12m [39m[38;5;12mtakes[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mmeandering[39m[38;5;12m [39m[38;5;12mtour[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mfunctional[39m[38;5;12m [39m[38;5;12mprogramming[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12mOCaml,[39m[38;5;12m [39m[38;5;12mintroducing[39m[38;5;12m [39m[38;5;12mvarious[39m[38;5;12m [39m
|
||
[38;5;12mlanguage[39m[38;5;12m [39m[38;5;12mfeatures[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mdescribing[39m[38;5;12m [39m[38;5;12msome[39m[38;5;12m [39m[38;5;12mclassic[39m[38;5;12m [39m[38;5;12malgorithms.[39m[38;5;12m [39m[38;5;12mThe[39m[38;5;12m [39m[38;5;12mbook[39m[38;5;12m [39m[38;5;12mends[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mlarge-scale[39m[38;5;12m [39m[38;5;12mexample[39m[38;5;12m [39m[38;5;12mdealing[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mproduction[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mPDF[39m[38;5;12m [39m[38;5;12mfiles.[39m[38;5;12m [39m[38;5;12mThere[39m[38;5;12m [39m[38;5;12mare[39m[38;5;12m [39m[38;5;12mquestions[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12meach[39m[38;5;12m [39m[38;5;12mchapter,[39m[38;5;12m [39m[38;5;12malong[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12mworked-out[39m[38;5;12m [39m[38;5;12manswers[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mhints.[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mHow[0m[38;5;14m[1m [0m[38;5;14m[1mto[0m[38;5;14m[1m [0m[38;5;14m[1mThink[0m[38;5;14m[1m [0m[38;5;14m[1mLike[0m[38;5;14m[1m [0m[38;5;14m[1ma[0m[38;5;14m[1m [0m[38;5;14m[1m(Functional)[0m[38;5;14m[1m [0m[38;5;14m[1mProgrammer[0m[38;5;12m [39m[38;5;12m(http://www.greenteapress.com/thinkocaml/index.html)[39m[38;5;12m [39m[38;5;12mby[39m[38;5;12m [39m[38;5;12mAllen[39m[38;5;12m [39m[38;5;12mDowney[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mNicholas[39m[38;5;12m [39m[38;5;12mMonje[39m[38;5;12m [39m[38;5;12m–[39m[38;5;12m [39m[38;5;12mHow[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mThink[39m[38;5;12m [39m[38;5;12mLike[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mComputer[39m[38;5;12m [39m[38;5;12mScientist[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12man[39m[38;5;12m [39m[38;5;12mintroductory[39m[38;5;12m [39m[38;5;12mprogramming[39m[38;5;12m [39m[38;5;12mtextbook[39m[38;5;12m [39m[38;5;12mbased[39m[38;5;12m [39m[38;5;12mon[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mOCaml[39m[38;5;12m [39m[38;5;12mlanguage.[39m[38;5;12m [39m[38;5;12mIt[39m
|
||
[38;5;12mis[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mmodified[39m[38;5;12m [39m[38;5;12mversion[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mThink[39m[38;5;12m [39m[38;5;12mPython[39m[38;5;12m [39m[38;5;12mby[39m[38;5;12m [39m[38;5;12mAllen[39m[38;5;12m [39m[38;5;12mDowney.[39m[38;5;12m [39m[38;5;12mIt[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12mintended[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mnewcomers[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mprogramming[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12malso[39m[38;5;12m [39m[38;5;12mthose[39m[38;5;12m [39m[38;5;12mwho[39m[38;5;12m [39m[38;5;12mknow[39m[38;5;12m [39m[38;5;12msome[39m[38;5;12m [39m[38;5;12mprogramming[39m[38;5;12m [39m[38;5;12mbut[39m[38;5;12m [39m[38;5;12mwant[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mlearn[39m[38;5;12m [39m[38;5;12mprogramming[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mfunction-oriented[39m[38;5;12m [39m[38;5;12mparadigm,[39m[38;5;12m [39m[38;5;12mor[39m[38;5;12m [39m[38;5;12mthose[39m[38;5;12m [39m[38;5;12mwho[39m[38;5;12m [39m[38;5;12msimply[39m[38;5;12m [39m[38;5;12mwant[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mlearn[39m[38;5;12m [39m[38;5;12mOCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml from the Very Beginning[0m[38;5;12m (http://ocaml-book.com/) by J. Whitington - OCaml from the Very Beginning will appeal both to new programmers and experienced programmers eager to explore functional languages such as OCaml.[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mPearls[0m[38;5;14m[1m [0m[38;5;14m[1mof[0m[38;5;14m[1m [0m[38;5;14m[1mFunctional[0m[38;5;14m[1m [0m[38;5;14m[1mAlgorithm[0m[38;5;14m[1m [0m[38;5;14m[1mDesign[0m[38;5;12m [39m[38;5;12m(https://www.amazon.co.uk/Pearls-Functional-Algorithm-Design-Richard/dp/0521513383)[39m[38;5;12m [39m[38;5;12mby[39m[38;5;12m [39m[38;5;12mRichard[39m[38;5;12m [39m[38;5;12mBird[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mIt[39m[38;5;12m [39m[38;5;12msummarizes[39m[38;5;12m [39m[38;5;12m30[39m[38;5;12m [39m[38;5;12mhard[39m[38;5;12m [39m[38;5;12malgorithmic[39m[38;5;12m [39m[38;5;12mproblems[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mfunction[39m[38;5;12m [39m[38;5;12mprogramming[39m[38;5;12m [39m[38;5;12mworld.[39m[38;5;12m [39m[38;5;12mAlthough[39m[38;5;12m [39m[38;5;12mit[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m
|
||
[38;5;12mHaskell,[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12malgorithm[39m[38;5;12m [39m[38;5;12mproblems[39m[38;5;12m [39m[38;5;12mare[39m[38;5;12m [39m[38;5;12mvery[39m[38;5;12m [39m[38;5;12minteresting,[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mtrying[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12msolve[39m[38;5;12m [39m[38;5;12mthem[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mOCaml[39m[38;5;12m [39m[38;5;12malso[39m[38;5;12m [39m[38;5;12mhelps[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mthinking[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mfunctional[39m[38;5;12m [39m[38;5;12mprogramming.[39m[38;5;12m [39m[38;5;12mPartial[39m[38;5;12m [39m[38;5;12msolutions[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mOCaml[39m[38;5;12m [39m[38;5;12mare[39m[38;5;12m [39m[38;5;14m[1mhere[0m[38;5;12m [39m[38;5;12m(https://github.com/MassD/pearls).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mReal World OCaml[0m[38;5;12m (https://realworldocaml.org/) by Y. Minsky, A. Madhavapeddy, and J. Hickey - Functional Programming for the masses.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mUnix System Programming in OCaml[0m[38;5;12m (https://ocaml.github.io/ocamlunix/) by X. Leroy and D. Rémy – Introduction to Unix Systems Programming, with an emphasis on communications between processes.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mUsing, Understanding, and Unraveling OCaml[0m[38;5;12m (https://caml.inria.fr/pub/docs/u3-ocaml) – This book describes both the OCaml language and the theoretical grounds behind its powerful type system.[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mPurely[0m[38;5;14m[1m [0m[38;5;14m[1mFunctional[0m[38;5;14m[1m [0m[38;5;14m[1mData[0m[38;5;14m[1m [0m[38;5;14m[1mStructures[0m[38;5;12m [39m[38;5;12m(https://www.amazon.co.uk/Purely-Functional-Structures-Chris-Okasaki/dp/0521631246/ref=sr_1_1?ie=UTF8&qid=1406279836&sr=8-1&keywords=functional+data+structures)[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mThis[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mfirst[39m[38;5;12m [39m[38;5;12mor[39m[38;5;12m [39m[38;5;12monly[39m[38;5;12m [39m[38;5;12mbook[39m[38;5;12m [39m[38;5;12mfocus[39m[38;5;12m [39m[38;5;12mon[39m[38;5;12m [39m[38;5;12mvarious[39m
|
||
[38;5;12mdata[39m[38;5;12m [39m[38;5;12mstructures[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mFP[39m[38;5;12m [39m[38;5;12mworld.[39m[38;5;12m [39m[38;5;12mA[39m[38;5;12m [39m[38;5;12mmust-read[39m[38;5;12m [39m[38;5;12mone.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml for Scientists[0m[38;5;12m (http://www.ffconsultancy.com/products/ocaml_for_scientists/) - by Jon Harrop.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml Programming: Correct + Efficient + Beautiful[0m[38;5;12m (https://cs3110.github.io/textbook) - Textbook on Functional Programming and Data Structures in OCaml - by Michael R. Clarkson et al.[39m
|
||
|
||
[38;2;255;187;0m[4mVideos[0m
|
||
|
||
[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mOCaml[0m[38;5;14m[1m [0m[38;5;14m[1mProgramming:[0m[38;5;14m[1m [0m[38;5;14m[1mCorrect[0m[38;5;14m[1m [0m[38;5;14m[1m+[0m[38;5;14m[1m [0m[38;5;14m[1mEfficient[0m[38;5;14m[1m [0m[38;5;14m[1m+[0m[38;5;14m[1m [0m[38;5;14m[1mBeautiful[0m[38;5;12m [39m[38;5;12m(https://www.youtube.com/playlist?list=PLre5AT9JnKShBOPeuiD9b-I4XROIJhkIU)[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mList[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12m200[39m[38;5;12m [39m[38;5;12mbite-sized[39m[38;5;12m [39m[38;5;12mvideos[39m[38;5;12m [39m[38;5;12mrecorded[39m[38;5;12m [39m[38;5;12mby[39m[38;5;12m [39m[38;5;12mMichael[39m[38;5;12m [39m[38;5;12mR.[39m[38;5;12m [39m[38;5;12mClarkson.[39m[38;5;12m [39m[38;5;12mIt[39m[38;5;12m [39m[38;5;12mcan[39m[38;5;12m [39m[38;5;12mbe[39m[38;5;12m [39m[38;5;12mwatched[39m[38;5;12m [39m[38;5;12mindependently[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mtextbook[39m[38;5;12m [39m
|
||
[38;5;12mtitled[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12msame[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mlisted[39m[38;5;12m [39m[38;5;12mabove[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;14m[1mBooks[0m[38;5;14m[1m [0m[38;5;14m[1msection[0m[38;5;12m [39m[38;5;12m(#books).[39m
|
||
|
||
[38;2;255;187;0m[4mCode Analysis and Linters[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mMascot[0m[38;5;12m (http://mascot.x9c.fr/) - Mascot is a style-checker for OCaml sources.[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mpfff[0m[38;5;12m [39m[38;5;12m(https://github.com/returntocorp/pfff)[39m[38;5;12m [39m[38;5;12m–[39m[38;5;12m [39m[38;5;12mpfff[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mset[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mtools[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mAPIs[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mperform[39m[38;5;12m [39m[38;5;12msome[39m[38;5;12m [39m[38;5;12mstatic[39m[38;5;12m [39m[38;5;12manalysis,[39m[38;5;12m [39m[38;5;12mdynamic[39m[38;5;12m [39m[38;5;12manalysis,[39m[38;5;12m [39m[38;5;12mcode[39m[38;5;12m [39m[38;5;12mvisualizations,[39m[38;5;12m [39m[38;5;12mcode[39m[38;5;12m [39m[38;5;12mnavigations,[39m[38;5;12m [39m[38;5;12mor[39m[38;5;12m [39m[38;5;12mstyle-preserving[39m[38;5;12m [39m[38;5;12msource-to-source[39m[38;5;12m [39m[38;5;12mtransformations[39m[38;5;12m [39m[38;5;12msuch[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12mrefactorings[39m[38;5;12m [39m[38;5;12mon[39m
|
||
[38;5;12msource[39m[38;5;12m [39m[38;5;12mcode.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mInfer[0m[38;5;12m (https://github.com/facebook/infer) - Infer is a static analyzer for Java, C and Objective-C[39m
|
||
[38;5;12m- [39m[38;5;14m[1mFrama-C[0m[38;5;12m (http://frama-c.com) - Frama-C is a static analysis and formal proof framework for C and C++.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mflow[0m[38;5;12m (https://github.com/facebook/flow) - flow is a static type checker for JavaScript.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSLAyer[0m[38;5;12m (https://github.com/Microsoft/SLAyer) - SLAyer is an automatic formal verification tool that uses separation logic to verify memory safety of C programs.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMemCAD[0m[38;5;12m (https://github.com/Antique-team/memcad) - MemCAD is an abstract interpreter for shape analysis. MemCAD can verify C programs manipulating complex data structures.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCamelot[0m[38;5;12m (https://github.com/upenn-cis1xx/camelot) - Camelot is a modular and fully configurable OCaml linter and stylechecker.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mcoq-of-ocaml[0m[38;5;12m (https://github.com/formal-land/coq-of-ocaml) - Translator from OCaml to Coq to formally verify OCaml code.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMOPSA[0m[38;5;12m (https://gitlab.com/mopsa/mopsa-analyzer) - MOPSA is a generic framework for building sound static analyzers based on the theory of abstract interpretation.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mProgram analysis[0m
|
||
[38;5;12m- [39m[38;5;14m[1mBAP[0m[38;5;12m (https://github.com/BinaryAnalysisPlatform/bap) - BAP is a reverse engineering and program analysis platform that targets binary programs.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBinCat[0m[38;5;12m (https://github.com/airbus-seclab/bincat) - BinCat is a binary code static analysis toolkit.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mcwe_checker[0m[38;5;12m (https://github.com/fkie-cad/cwe_checker) - cwe_checker finds vulnerable patterns in binary executables.[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mOwi[0m[38;5;12m [39m[38;5;12m(https://github.com/OCamlPro/owi)[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mOwi[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mtoolchain[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mworking[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12mWebAssembly[39m[38;5;12m [39m[38;5;12m(Wasm)[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mOCaml,[39m[38;5;12m [39m[38;5;12mfeaturing[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mpowerful,[39m[38;5;12m [39m[38;5;12mparallel[39m[38;5;12m [39m[38;5;12msymbolic[39m[38;5;12m [39m[38;5;12mexecution[39m[38;5;12m [39m[38;5;12mengine[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mWasm.[39m[38;5;12m [39m[38;5;12mIt[39m[38;5;12m [39m[38;5;12malso[39m[38;5;12m [39m[38;5;12mprovides[39m[38;5;12m [39m[38;5;12mfrontends[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mcompiling[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12manalyzing[39m[38;5;12m [39m[38;5;12mC[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mRust[39m[38;5;12m [39m
|
||
[38;5;12mprograms.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSmt.ml[0m[38;5;12m (https://github.com/formalsec/smtml) - Smt.ml is a frontend OCaml library that interfaces with multiple SMT solvers, enabling seamless integration of solvers like Z3, cvc5, Colibri2, Bitwuzla, and Alt-Ergo within OCaml programs.[39m
|
||
|
||
[38;2;255;187;0m[4mCompilers and Compiler Tools[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mLanguages and Compilers[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mCaramel[0m[38;5;12m (https://caramel.run/) - Caramel is a functional language for building type-safe, scalable, and maintainable applications.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mcDuce[0m[38;5;12m (http://www.cduce.org/) - cDuce is a modern XML-oriented functional language with innovative features.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mCompcert C Compiler[0m[38;5;12m (http://compcert.inria.fr/) - It is a C Compiler supporting most of the ISO C90 and C99 / ANSI C features.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mEff Programming Language[0m[38;5;12m (http://www.eff-lang.org/) - Eff is a functional language with handlers of not only exceptions, but also of other computational effects such as state or I/O.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mHack Programming Language[0m[38;5;12m (https://hacklang.org/)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mHaxe Programming Language[0m[38;5;12m (https://haxe.org/)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mNeko Programming Language[0m[38;5;12m (https://nekovm.org/) - Originally the compiler was written in OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mMazeppa[0m[38;5;12m (https://github.com/mazeppa-dev/mazeppa) - A modern supercompiler for call-by-value functional languages.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mMezzo Programming Language[0m[38;5;12m (https://protz.github.io/mezzo/) - Mezzo is a programming language in the ML tradition, which places strong emphasis on the control of aliasing and access to mutable memory.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOCaml-Java[0m[38;5;12m (http://www.ocamljava.org/) - OCaml to Java bytecode compiler.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOpa Programming Language[0m[38;5;12m (http://opalang.org/)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mRhine[0m[38;5;12m (https://github.com/artagnon/rhine-ml) – A Lisp on LLVM written in OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mRust Programming Language[0m[38;5;12m (https://www.rust-lang.org/) - Originally written in OCaml before bootstrapping.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mQuick C-- Target Language[0m[38;5;12m (http://www.cminusminus.org/) - It is now a dead project. [39m[38;5;14m[1mGithub Repo[0m[38;5;12m (https://github.com/nrnrnr/qc--). [39m[38;5;14m[1mAlternative website[0m[38;5;12m (http://www.cs.tufts.edu/~nr/c--/qc--.html).[39m
|
||
[38;5;12m - [39m[38;5;14m[1mtis-interpreter[0m[38;5;12m (https://github.com/TrustInSoft/tis-interpreter) - An interpreter for finding subtle bugs in programs written in standard C[39m
|
||
|
||
[38;5;12m - [39m[38;5;14m[1mReason[0m[38;5;12m (http://facebook.github.io/reason/) - Friendly syntax & toolchain for OCaml by Facebook.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mRaML[0m[38;5;12m (http://raml.co/index.html) - Resource Aware ML (RaML) is a tool that automatically and statically computes resource-use bounds for OCaml programs.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mLiquid ML[0m[38;5;12m (https://github.com/benfaerber/liquid-ml) - Shopify's Liquid Templating language for OCaml.[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mParser and Lexer Generators[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOpal[0m[38;5;12m (https://github.com/pyrocat101/opal) – Self-contained monadic parser combinators for OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mSedlex[0m[38;5;12m (https://github.com/ocaml-community/sedlex) is a modern, encoding-agnostic (read: Unicode-supporting) lexer generator (the ppx-based successor to [39m[38;5;14m[1mulex[0m[38;5;12m (http://www.cduce.org/download.html#side).)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mMenhir[0m[38;5;12m (http://gallium.inria.fr/~fpottier/menhir/) – Menhir is a LR(1) parser generator for OCaml.[39m
|
||
[48;5;235m[38;5;249m- See **ocaml-parsing** (https://github.com/smolkaj/ocaml-parsing) for a clearer example of using Menhir and Sedlex to produce a useful parser,[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- ... and **Obelisk** (https://github.com/Lelio-Brun/Obelisk), a neat project to produce readable LaTeX, HTML, or plain-text EBNF-style documentation for your grammar.[49m[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocamllex/ocamlyacc[0m[38;5;12m (http://caml.inria.fr/pub/docs/manual-ocaml-4.01/lexyacc.html) – lex and yacc implementation for OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mAngstrom[0m[38;5;12m (https://github.com/inhabitedtype/angstrom) - Parser combinators built for speed and memory efficiency[39m
|
||
[38;5;12m- [39m[38;5;14m[1mArticles[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mKaleidoscope: Implementing a Language with LLVM in Objective Caml¶[0m[38;5;12m (http://llvm.org/docs/tutorial/OCamlLangImpl1.html)[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mConcurrency[0m
|
||
|
||
[38;5;12mTwo[39m[38;5;12m [39m[38;5;12mconcurrency[39m[38;5;12m [39m[38;5;12mlibraries[39m[38;5;12m [39m[38;5;12mexist[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mOCaml:[39m[38;5;12m [39m[38;5;12m_Lwt_[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12m_Async_.[39m[38;5;12m [39m[38;5;12mThey[39m[38;5;12m [39m[38;5;12mprovide[39m[38;5;12m [39m[38;5;12mvery[39m[38;5;12m [39m[38;5;12msimilar[39m[38;5;12m [39m[38;5;12mfunctionality[39m[38;5;12m [39m[38;5;12mbut[39m[38;5;12m [39m[38;5;12mmake[39m[38;5;12m [39m[38;5;12mradically[39m[38;5;12m [39m[38;5;12mdifferent[39m[38;5;12m [39m[38;5;12mdecisions[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12mregards[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12merror[39m[38;5;12m [39m[38;5;12mhandling[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12minternal[39m[38;5;12m [39m[38;5;12mimplementation[39m[38;5;12m [39m[38;5;12mdetails[39m[38;5;12m [39m[38;5;12m(see[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mlinks[39m[38;5;12m [39m[38;5;12mbelow[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mmore[39m[38;5;12m [39m[38;5;12mdetails).[39m
|
||
[38;5;14m[1mReal[0m[38;5;14m[1m [0m[38;5;14m[1mWorld[0m[38;5;14m[1m [0m[38;5;14m[1mOCaml[0m[38;5;12m [39m[38;5;12m(https://realworldocaml.org/)[39m[38;5;12m [39m[38;5;12muses[39m[38;5;12m [39m[38;5;12mAsync,[39m[38;5;12m [39m[38;5;12mbut[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mversion[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;14m[1mcode[0m[38;5;14m[1m [0m[38;5;14m[1mexamples[0m[38;5;14m[1m [0m[38;5;14m[1mtranslated[0m[38;5;14m[1m [0m[38;5;14m[1mto[0m[38;5;14m[1m [0m[38;5;14m[1mLwt[0m[38;5;12m [39m[38;5;12m(https://github.com/dkim/rwo-lwt)[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12malso[39m[38;5;12m [39m[38;5;12mavailable.[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mLibraries[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mLwt[0m[38;5;12m (http://ocsigen.org/lwt/) — A cooperative threads library for OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mAsync[0m[38;5;12m (https://opensource.janestreet.com/async/) — A monadic concurrence library to go with the Core library.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mArticles[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mThe blog post that introduced Async[0m[38;5;12m (https://blog.janestreet.com/announcing-async/)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mA user gives up on Async[0m[38;5;12m (http://rgrinberg.com/posts/abandoning-async/)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mCooperative Concurrency in OCaml: A Core.Std.Async Example[0m[38;5;12m (http://philtomson.github.io/blog/2014/07/09/core-dot-async-example/).[39m
|
||
|
||
[38;5;12mThere is also an ongoing experimental project to make OCaml multiprocessor and multicore aware at [39m[38;5;14m[1mOCaml multicore[0m[38;5;12m (https://github.com/ocamllabs/ocaml-multicore) fork.[39m
|
||
|
||
[38;2;255;187;0m[4mDatabases[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mBindings[0m
|
||
[38;5;12m - [39m[38;5;14m[1mDbm[0m[38;5;12m (https://forge.ocamlcore.org/projects/camldbm/) — A binding to the NDBM/GDBM Unix "databases".[39m
|
||
[38;5;12m - [39m[38;5;14m[1mMongo.ml[0m[38;5;12m (https://massd.github.io/mongo/) – An OCaml driver for Mongodb[39m
|
||
[38;5;12m - [39m[38;5;14m[1mPG'OCaml[0m[38;5;12m (http://pgocaml.forge.ocamlcore.org/) — A type-safe interface to PostgreSQL in pure OCaml.[39m
|
||
[48;5;235m[38;5;249m- **ppx_pgsql** (https://github.com/tizoc/ppx_pgsql) – A syntax extension for embedded SQL queries using PG'OCaml.[49m[39m
|
||
[38;5;12m - [39m[38;5;14m[1mPostgreSQL-OCaml[0m[38;5;12m (https://mmottl.github.io/postgresql-ocaml/) — An interface to PostgreSQL through the C API ([39m[48;5;235m[38;5;249mlibpq[49m[39m[38;5;12m).[39m
|
||
[38;5;12m - [39m[38;5;14m[1mSQLite3[0m[38;5;12m (https://github.com/mmottl/sqlite3-ocaml) — OCaml bindings to the SQLite3 database.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mSqlite3EZ[0m[38;5;12m (https://mlin.github.io/ocaml-sqlite3EZ/) — Thin wrapper for SQLite3 with a simplified interface.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocaml-redis[0m[38;5;12m (https://github.com/0xffea/ocaml-redis) – Redis bindings for OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mmysql[0m[38;5;12m (http://ygrek.org.ua/p/ocaml-mysql/) – Bindings to libmysqlclient for interacting with MySQL databases.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mpgx[0m[38;5;12m (https://github.com/arenadotio/pgx) – A pure OCaml PostgreSQL client library.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mmysql_protocol[0m[38;5;12m (https://github.com/slegrand45/mysql_protocol) – Implementation of MySQL Protocol with the Bitstring library.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mNew Implementations[0m
|
||
[38;5;12m - [39m[38;5;14m[1mIrmin[0m[38;5;12m (https://github.com/mirage/irmin) — A distributed database that follows the same design principles as Git.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mObigstore[0m[38;5;12m (http://obigstore.forge.ocamlcore.org/) — A database with BigTable-like data model atop LevelDB.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mRunOrg[0m[38;5;12m (https://github.com/RunOrg/RunOrg) - It is a WIP database server written in OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mdokeysto[0m[38;5;12m (https://github.com/UnixJunkie/dokeysto) - dumb OCaml key-value store, string keys and string[39m
|
||
[38;5;12m values. Optional on-the-fly LZ4 compression of values or tokyocabinet backend.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOverlays[0m
|
||
[38;5;12m - [39m[38;5;14m[1mSequoia[0m[38;5;12m (https://github.com/andrenth/sequoia) - Sequoia is a type-safe query builder for MySQL/MariaDB and PostgreSQL[39m
|
||
[38;5;12m - [39m[38;5;14m[1mMacaque[0m[38;5;12m (https://github.com/ocsigen/macaque) — Macaque is a library for safe and flexible database queries using comprehensions on top of PG'OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mORM[0m[38;5;12m (https://github.com/mirage/orm) — ORM for SQLite.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mCaqti[0m[38;5;12m (https://github.com/paurkedal/ocaml-caqti) - Cooperative-threaded access to relational data[39m
|
||
[38;5;12m - [39m[38;5;14m[1mCaqti setence preparation, ppx_rapper[0m[38;5;12m (https://github.com/roddyyaga/ppx_rapper)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mArticles[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mImplementing the Binary Memcached Protocol with Ocaml and Bitstring[0m[38;5;12m (https://andreas.github.io/2014/08/22/implementing-the-binary-memcached-protocol-with-ocaml-and-bitstring/)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mInterfacing OCaml and PostgreSQL with Caqti[0m[38;5;12m (https://medium.com/@bobbypriambodo/interfacing-ocaml-and-postgresql-with-caqti-a92515bdaa11)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mFinally, Type-Safe, Extensible and Efficient Language Integrated Query[0m[38;5;12m (https://www.cs.tsukuba.ac.jp/~kam/papers/pepm2016a.pdf) by Oleg and Co. [39m
|
||
[48;5;235m[38;5;249mThe proposed approach is to describe SQL queries in type-safe manner and optimize them (using term rewriting or normalization-by evaluation) before sending to database engine. It potentially could optimize O(n^2) queries to O(n) ones.[49m[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mDatetime[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mISO8601[0m[38;5;12m (https://github.com/sagotch/ISO8601.ml)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mcalendar[0m[38;5;12m (http://calendar.forge.ocamlcore.org/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1modate[0m[38;5;12m (https://github.com/hhugo/odate)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mptime[0m[38;5;12m (http://erratique.ch/software/ptime)[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mDeveloper Tools[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mTry OCaml[0m[38;5;12m (https://try.ocamlpro.com/) – Try OCaml in your web browser.[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mlearn-ocaml[0m[38;5;12m [39m[38;5;12m(https://github.com/ocaml-sf/learn-ocaml).[39m[38;5;12m [39m[38;5;12mWeb[39m[38;5;12m [39m[38;5;12mapp[39m[38;5;12m [39m[38;5;12m(written[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mOCaml)[39m[38;5;12m [39m[38;5;12munderlying[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mlearn-ocaml-corpus.[39m[38;5;12m [39m[38;5;12mCan[39m[38;5;12m [39m[38;5;12mbe[39m[38;5;12m [39m[38;5;12mcustomized[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mserve[39m[38;5;12m [39m[38;5;12mlectures[39m[38;5;12m [39m[38;5;12m(with[39m[38;5;12m [39m[38;5;12mMarkdown[39m[38;5;12m [39m[38;5;12mslides),[39m[38;5;12m [39m[38;5;12mplaygrounds[39m[38;5;12m [39m[38;5;12m(with[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mtoplevel[39m[38;5;12m [39m[38;5;12mprelude),[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12minteractive[39m[38;5;12m [39m[38;5;12mexercises[39m[38;5;12m [39m
|
||
[38;5;12m(with[39m[38;5;12m [39m[38;5;12mOCaml[39m[38;5;12m [39m[38;5;12mtests).[39m[38;5;12m [39m[38;5;12mMIT[39m[38;5;12m [39m[38;5;12mLicense.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mlearn-ocaml.el[0m[38;5;12m (https://github.com/pfitaxel/learn-ocaml.el). Minor mode for Emacs that can display exercise topics and grade exercise solutions, after logging to a Learn-OCaml instance. MIT License.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBetterOCaml[0m[38;5;12m (https://betterocaml.ml) – An efficient, intuitive, and cross-platform web IDE with your OCaml code interpreted and running in your browser![39m
|
||
[38;5;12m- [39m[38;5;14m[1mcodingground[0m[38;5;12m (https://www.tutorialspoint.com/compile_ocaml_online.php) – Compile and execute OCaml code online.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml: Learn & Code iOS app[0m[38;5;12m (https://apps.apple.com/app/ocaml-learn-code/id1547506826) - Learn and execute OCaml code from your iPhone/iPad/Mac.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mJupyter[0m[38;5;12m (https://github.com/akabe/ocaml-jupyter) – An OCaml kernel for the Jupyter notebook.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mutop[0m[38;5;12m (https://github.com/ocaml-community/utop) – Universal toplevel for OCaml with support for multiline edition, history, real-time and context-sensitive completion, colors, and more.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocamlformat[0m[38;5;12m (https://github.com/ocaml-ppx/ocamlformat) - A command-line tool to format OCaml code.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocamlbrowser[0m[38;5;12m (http://caml.inria.fr/pub/docs/manual-ocaml/browser.html) – A source and compiled interface browser, written using LablTk. Included in the standard distribution for ocaml = 4.02.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mghim[0m[38;5;12m (https://github.com/samoht/ghim) – A command-line tool to manage Github Issues.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml Yeoman Generator[0m[38;5;12m (https://github.com/mabrasil/generator-ocaml) – Yeoman generator to scaffold OCaml modules.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mpuml2xml[0m[38;5;12m (https://github.com/khalidbelk/puml2xml) – A PlantUML ([39m[38;5;14m[1m.puml[0m[38;5;12m) to XML ([39m[38;5;14m[1m.xmi[0m[38;5;12m) converter.[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mForeign Function Interface[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mctypes[0m[38;5;12m (https://github.com/ocamllabs/ocaml-ctypes) – Library for binding to C libraries using pure OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocaml-main-program-in-c[0m[38;5;12m (https://github.com/johnwhitington/ocaml-main-program-in-c) – Example build system for making mixed C/Ocaml binaries where the main program is in C.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mModular foreign function bindings[0m[38;5;12m (http://openmirage.org/blog/modular-foreign-function-bindings)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mPy.ml[0m[38;5;12m (https://github.com/thierry-martinez/pyml) - OCaml bindings for Python.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mEditor Integration[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocaml-lsp[0m[38;5;12m (https://github.com/ocaml/ocaml-lsp) - An LSP language server for OCaml that integrates with any editor that understands LSP like [39m[38;5;14m[1mVSCode[0m[38;5;12m (https://github.com/microsoft/vscode), Vim and Emacs.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mmerlin[0m[38;5;12m (https://github.com/ocaml/merlin) – Context sensitive completion for OCaml in Vim and Emacs.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mtuareg[0m[38;5;12m (https://github.com/ocaml/tuareg) - OCaml mode for Emacs that can run the toplevel and the debugger within Emacs.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mopam-switch-mode[0m[38;5;12m (https://github.com/ProofGeneral/opam-switch-mode) - Minor mode for Emacs that extends Tuareg and Merlin with menus to change or reset the opam switch in the ambient Emacs session.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mmerlin-eldoc[0m[38;5;12m (https://github.com/Khady/merlin-eldoc) – Emacs package to provide merlin's features through eldoc.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mvscode-ocaml[0m[38;5;12m (https://github.com/hackwaly/vscode-ocaml) – extension that provides OCaml language support for [39m[38;5;14m[1mVSCode[0m[38;5;12m (https://github.com/microsoft/vscode)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOCaml Debugger[0m[38;5;12m (https://github.com/hackwaly/ocamlearlybird) – extension that provides OCaml Debugger for [39m[38;5;14m[1mVSCode[0m[38;5;12m (https://github.com/microsoft/vscode)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mSublime better ocaml[0m[38;5;12m (https://github.com/whitequark/sublime-better-ocaml) – Better OCaml mode for Sublime Text.[39m
|
||
[48;5;235m[38;5;249m- **Sublime text package** (https://github.com/def-lkb/sublime-text-merlin)[49m[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocp-index[0m[38;5;12m (http://www.typerex.org/ocp-index.html) – Easy access to the interface information of installed OCaml libraries. Provides standalone tools like [39m[48;5;235m[38;5;249mocp-browser[49m[39m[38;5;12m and [39m[48;5;235m[38;5;249mocp-grep[49m[39m[38;5;12m.[39m
|
||
[48;5;235m[38;5;249m- **ocp-browser** (http://www.typerex.org/ocp-index.html#ocp-browser) – Small ncurses-based API and documentation browser.[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- **ocp-index-top** (https://github.com/reynir/ocp-index-top) – Toplevel directive for looking up documentation using ocp-index.[49m[39m
|
||
[48;5;235m[38;5;249m- **Sublime text package** (https://sublime.wbond.net/packages/OCaml%20Autocompletion)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocp-indent[0m[38;5;12m (http://www.typerex.org/ocp-indent.html) – Indentation tool for OCaml, to be used from editors like Emacs and Vim.[39m
|
||
[48;5;235m[38;5;249m- **Vim plugin** (https://github.com/def-lkb/ocp-indent-vim).[49m[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCode coverage[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mBisect_ppx[0m[38;5;12m (https://github.com/aantron/bisect_ppx)[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mExercises and Short Examples[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1m99 problems[0m[38;5;12m (https://ocaml.org/learn/tutorials/99problems.html). 99% of the solutions are [39m[38;5;14m[1mhere[0m[38;5;12m (https://github.com/MassD/99).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mlearn-ocaml-corpus[0m[38;5;12m (https://ocaml-sf.org/learn-ocaml-public/#activity=exercises). Corpus of beginner-to-advanced online exercises (including those from the OCaml MOOC) with automatic grading tests.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mRosetta Code[0m[38;5;12m (http://rosettacode.org/wiki/Category:OCaml)[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mOCaml[0m[38;5;14m[1m [0m[38;5;14m[1mat[0m[38;5;14m[1m [0m[38;5;14m[1mExercism[0m[38;5;12m [39m[38;5;12m(http://exercism.io/languages/ocaml)[39m[38;5;12m [39m[38;5;12m–[39m[38;5;12m [39m[38;5;12mExercism[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12myour[39m[38;5;12m [39m[38;5;12mplace[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mengage[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12mthoughtful[39m[38;5;12m [39m[38;5;12mconversations[39m[38;5;12m [39m[38;5;12mabout[39m[38;5;12m [39m[38;5;12mcode.[39m[38;5;12m [39m[38;5;12mExplore[39m[38;5;12m [39m[38;5;12msimplicity,[39m[38;5;12m [39m[38;5;12midiomatic[39m[38;5;12m [39m[38;5;12mlanguage[39m[38;5;12m [39m[38;5;12mfeatures,[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mexpressive,[39m[38;5;12m [39m[38;5;12mreadable[39m[38;5;12m [39m[38;5;12mcode.[39m[38;5;12m [39m[38;5;14m[1mSolutions[0m[38;5;12m [39m
|
||
[38;5;12m(https://github.com/exercism/xocaml).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mProgramming Language Examples Alike Cookbook[0m[38;5;12m (http://pleac.sourceforge.net/pleac_ocaml/index.html) - The OCaml section of the book is a free reference for solving common programming problems using OCaml.[39m
|
||
|
||
[38;2;255;187;0m[4mFormal Software Verification[0m
|
||
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mCoq[0m[38;5;12m [39m[38;5;12m(https://coq.inria.fr/)[39m[38;5;12m [39m[38;5;12m–[39m[38;5;12m [39m[38;5;12mCoq[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mformal[39m[38;5;12m [39m[38;5;12mproof[39m[38;5;12m [39m[38;5;12mmanagement[39m[38;5;12m [39m[38;5;12msystem.[39m[38;5;12m [39m[38;5;12mIt[39m[38;5;12m [39m[38;5;12mprovides[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mformal[39m[38;5;12m [39m[38;5;12mlanguage[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mwrite[39m[38;5;12m [39m[38;5;12mmathematical[39m[38;5;12m [39m[38;5;12mdefinitions,[39m[38;5;12m [39m[38;5;12mexecutable[39m[38;5;12m [39m[38;5;12malgorithms,[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mtheorems,[39m[38;5;12m [39m[38;5;12mtogether[39m[38;5;12m [39m[38;5;12mwith[39m[38;5;12m [39m[38;5;12man[39m[38;5;12m [39m[38;5;12menvironment[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12msemi-interactive[39m[38;5;12m [39m[38;5;12mdevelopment[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m
|
||
[38;5;12mmachine-checked[39m[38;5;12m [39m[38;5;12mproofs.[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mWhy3[0m[38;5;12m [39m[38;5;12m(http://why3.lri.fr/)[39m[38;5;12m [39m[38;5;12m–[39m[38;5;12m [39m[38;5;12mWhy3[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mplatform[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mdeductive[39m[38;5;12m [39m[38;5;12mprogram[39m[38;5;12m [39m[38;5;12mverification.[39m[38;5;12m [39m[38;5;12mIt[39m[38;5;12m [39m[38;5;12mprovides[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mrich[39m[38;5;12m [39m[38;5;12mlanguage[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mspecification[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mprogramming,[39m[38;5;12m [39m[38;5;12mcalled[39m[38;5;12m [39m[38;5;12mWhyML,[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mrelies[39m[38;5;12m [39m[38;5;12mon[39m[38;5;12m [39m[38;5;12mexternal[39m[38;5;12m [39m[38;5;12mtheorem[39m[38;5;12m [39m[38;5;12mprovers,[39m[38;5;12m [39m[38;5;12mboth[39m[38;5;12m [39m[38;5;12mautomated[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12minteractive,[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m
|
||
[38;5;12mdischarge[39m[38;5;12m [39m[38;5;12mverification[39m[38;5;12m [39m[38;5;12mconditions.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mAlt-Ergo[0m[38;5;12m (http://alt-ergo.lri.fr/) – Alt-Ergo is an open-source SMT solver dedicated to the proof of mathematical formulas generated in the context of program verification.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mGeneral[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mFunctional Programming with OCaml[0m[38;5;12m (https://haifengl.wordpress.com/2014/06/17/ocaml-introduction/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mPython to OCaml: retrospective[0m[38;5;12m (http://roscidus.com/blog/blog/2014/06/06/python-to-ocaml-retrospective/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml for the Masses[0m[38;5;12m (http://queue.acm.org/detail.cfm?id=2038036)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mWhy We Use OCaml[0m[38;5;12m (https://espertech.wordpress.com/2014/07/15/why-we-use-ocaml)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mXen – OCaml Coding Considerations[0m[38;5;12m (http://wiki.xen.org/wiki/OCaml_Coding_Considerations)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMonads are a class of hard drugs[0m[38;5;12m (http://lambda-diode.com/programming/monads-are-a-class-of-hard-drugs)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBeginner's guide to OCaml[0m[38;5;12m (http://blog.nullspace.io/beginners-guide-to-ocaml-beginners-guides.html)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mWhy OCaml, why now?[0m[38;5;12m (http://spyder.wordpress.com/2014/03/16/why-ocaml-why-now/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mA blog about game development in OCaml[0m[38;5;12m (http://cranialburnout.blogspot.ca/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1m(Functional) Alternatives to inheritance[0m[38;5;12m (http://ocamltutorials.blogspot.se/2013/06/alternatives-to-subtyping.html)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mcamlPDF[0m[38;5;12m (https://github.com/johnwhitington/camlpdf) – OCaml library for reading, writing and modifying PDF files.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mslacko[0m[38;5;12m (https://github.com/Leonidas-from-XIV/slacko) – A neat interface for Slack in OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLearn X in Y minutes[0m[38;5;12m (https://learnxinyminutes.com/docs/ocaml/) - Where X=OCaml.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mGraphics[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1m2D[0m
|
||
[38;5;12m - [39m[38;5;14m[1marchimedes[0m[38;5;12m (http://archimedes.forge.ocamlcore.org/) — 2D plotting library.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mcairo2[0m[38;5;12m (https://github.com/Chris00/ocaml-cairo) — Binding to Cairo, a 2D Vector Graphics Library. Integrates well with lablgtk.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mVg[0m[38;5;12m (https://github.com/dbuenzli/vg) – Declarative 2D vector graphics for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1m3D[0m
|
||
[38;5;12m - [39m[38;5;14m[1mglMLite[0m[38;5;12m (https://github.com/fccm/glMLite) — OpenGL bindings for OCaml. Provides an (experimental) functional API. ([39m[38;5;14m[1mhomepage[0m[38;5;12m (http://decapode314.free.fr/ocaml/GL/))[39m
|
||
[38;5;12m - [39m[38;5;14m[1mlablgl[0m[38;5;12m (https://forge.ocamlcore.org/projects/lablgl/) — Interface to OpenGL. Integrates well with lablgtk.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mtgls[0m[38;5;12m (http://erratique.ch/software/tgls) — Thin bindings OpenGL 3.{2,3},4.{0,1,2,3,4} and OpenGL ES {2,3}.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mInternationalization[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mCamomile[0m[38;5;12m (https://github.com/yoriyuki/Camomile/) — A Unicode library for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-m17n[0m[38;5;12m (https://github.com/whitequark/ocaml-m17n) — Multilingualization for OCaml source code. Allows using Unicode identifiers in OCaml source code.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mUucd[0m[38;5;12m (https://github.com/dbuenzli/uucd) — Unicode character database decoder for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mUucp[0m[38;5;12m (https://github.com/dbuenzli/uucp) — Unicode character properties for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mUunf[0m[38;5;12m (https://github.com/dbuenzli/uunf) — Unicode text normalization for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mUuseg[0m[38;5;12m (https://github.com/dbuenzli/uuseg) — Unicode text segmentation for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mUutf[0m[38;5;12m (https://github.com/dbuenzli/uutf) — Non-blocking streaming Unicode codec for OCaml.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mUser Interface[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mlablgtk[0m[38;5;12m (https://garrigue.github.io/lablgtk/) — GTK2 and GTK3 bindings for OCaml with various higher-level facilities to define GUIs.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mlablqml[0m[38;5;12m (https://github.com/Kakadu/lablqml) – QML Qt5 bindings for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mlabltk[0m[38;5;12m (https://forge.ocamlcore.org/projects/labltk/) — Interface to the Tcl/Tk GUI framework. In the standard distribution for ocaml <= 4.01.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTSDL[0m[38;5;12m (http://erratique.ch/software/tsdl) – Tsdl is an OCaml module providing thin bindings to the cross-platform SDL library.[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mLambda-Term[0m[38;5;12m [39m[38;5;12m(https://github.com/ocaml-community/lambda-term)[39m[38;5;12m [39m[38;5;12m–[39m[38;5;12m [39m[38;5;12mLambda-Term[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mcross-platform[39m[38;5;12m [39m[38;5;12mlibrary[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mmanipulating[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mterminal.[39m[38;5;12m [39m[38;5;12mIt[39m[38;5;12m [39m[38;5;12mprovides[39m[38;5;12m [39m[38;5;12man[39m[38;5;12m [39m[38;5;12mabstraction[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mkeys,[39m[38;5;12m [39m[38;5;12mmouse[39m[38;5;12m [39m[38;5;12mevents,[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mcolors,[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12mwell[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mset[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mwidgets[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mwrite[39m[38;5;12m [39m
|
||
[38;5;12mcurses-like[39m[38;5;12m [39m[38;5;12mapplications.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mNotty[0m[38;5;12m (https://github.com/pqwy/notty) - Notty is a declarative terminal library for OCaml, structured around the notion of composable images.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-linenoise[0m[38;5;12m (https://github.com/ocaml-community/ocaml-linenoise) - Self-contained OCaml bindings to linenoise; easy high-level readline functionality in OCaml.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mLanguage-related[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mHigher-Rank Polymorphism in OCaml[0m[38;5;12m (http://devmusings.legiasoft.com/blog/2008/05/23/higher-rank_polymorphism_in_ocaml)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mmikmatch[0m[38;5;12m (https://github.com/mjambon/mikmatch) – OCaml pattern-matching extended with regexps[39m
|
||
[38;5;12m- [39m[38;5;14m[1mInlined records in constructors[0m[38;5;12m (https://www.lexifi.com/ocaml/inlined-records-constructors/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mAlgebraic Data Types[0m[38;5;12m (https://espertech.wordpress.com/2014/07/30/algebraic-data-types/)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mXEN – OCaml Best Practices for Developers[0m[38;5;12m (http://wiki.xen.org/wiki/OCaml_Best_Practices_for_Developers)[39m
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mOCaml[0m[38;5;14m[1m [0m[38;5;14m[1mStyle[0m[38;5;14m[1m [0m[38;5;14m[1mGuide[0m[38;5;14m[1m [0m[38;5;14m[1m(by[0m[38;5;14m[1m [0m[38;5;14m[1mJane[0m[38;5;14m[1m [0m[38;5;14m[1mStreet)[0m[38;5;12m [39m[38;5;12m(https://opensource.janestreet.com/standards/)[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mSee[39m[38;5;12m [39m[38;5;12malso:[39m[38;5;12m [39m[38;5;12m1[39m[38;5;14m[1m [0m[38;5;12m [39m[38;5;12m(https://www.seas.upenn.edu/~cis500/cis500-f06/resources/programming_style.html),[39m[38;5;12m [39m[38;5;12m2[39m[38;5;14m[1m [0m[38;5;12m [39m[38;5;12m(http://www.cs.cornell.edu/Courses/cs312/2001sp/style.html),[39m[38;5;12m [39m[38;5;12m3[39m
|
||
[38;5;12m(https://www.seas.upenn.edu/~cis120/20fa/ocaml_style/).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mA safe but strange way of modifying OCaml compiler[0m[38;5;12m (https://camlspotter.blogspot.com/2012/09/a-safe-but-strange-way-of-modifying.html)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mFiddling with the OCaml Type System[0m[38;5;12m (https://technotroph.wordpress.com/2013/10/25/fiddling-with-the-ocaml-type-system/)[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mLarge Source Code Examples[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mBase[0m[38;5;12m (https://github.com/janestreet/base) - Standard library for OCaml[39m
|
||
[38;5;12m- [39m[38;5;14m[1mcil[0m[38;5;12m (https://github.com/cil-project/cil) - C Intermediate Language[39m
|
||
[38;5;12m- [39m[38;5;14m[1mcoq[0m[38;5;12m (https://github.com/coq/coq) - formal proof management system[39m
|
||
[38;5;12m- [39m[38;5;14m[1mframa-c[0m[38;5;12m (https://git.frama-c.com/pub/frama-c) - platform dedicated to the analysis of source code written in C[39m
|
||
[38;5;12m- [39m[38;5;14m[1mlibguestfs[0m[38;5;12m (https://github.com/libguestfs/libguestfs) - library and tools for accessing and modifying virtual machine disk images[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLiquidsoap[0m[38;5;12m (https://github.com/savonet/liquidsoap) - a swiss-army knife for multimedia streaming, notably used for netradios and webtvs[39m
|
||
[38;5;12m- [39m[38;5;14m[1mmirage[0m[38;5;12m (https://github.com/mirage/mirage) - library operating system that constructs unikernels for secure, high-performance network applications across a variety of cloud computing and mobile platforms[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMLDonkey[0m[38;5;12m (https://github.com/ygrek/mldonkey) - cross-platform multi-network peer-to-peer daemon[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOni2[0m[38;5;12m (https://github.com/onivim/oni2) - Native, lightweight modal code editor.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mpfff[0m[38;5;12m (https://github.com/returntocorp/pfff) - an OCaml API to write static analysis, dynamic analysis, code visualizations, code navigations, or style-preserving source-to-source transformations such as refactorings on source code.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTezos[0m[38;5;12m (https://gitlab.com/tezos/tezos) - a self-upgradable Proof of Stake blockchain[39m
|
||
[38;5;12m- [39m[38;5;14m[1mWHY3[0m[38;5;12m (https://gitlab.inria.fr/why3/why3) - platform for deductive program verification[39m
|
||
[38;5;12m- [39m[38;5;14m[1mxen-api[0m[38;5;12m (https://github.com/xapi-project/xen-api) - management stack that configures and controls Xen-enabled hosts and resource pools, and co-ordinates resources within the pool.[39m
|
||
|
||
[38;2;255;187;0m[4mLogging[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mdolog[0m[38;5;12m (https://github.com/UnixJunkie/dolog) – A dumb OCaml logger.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mVolt[0m[38;5;12m (https://github.com/codinuum/volt) – A variant of the Bolt OCaml logging tool.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mLogs[0m[38;5;12m (http://erratique.ch/software/logs) - Logs provides a logging infrastructure for OCaml.[39m
|
||
|
||
[38;2;255;187;0m[4mMachine Learning[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mLibraries[0m
|
||
[48;5;235m[38;5;249m- **Ocaml-sklearn** (https://github.com/lehy/ocaml-sklearn) scikit-learn for OCaml.[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- **Owl** (https://ocaml.xyz/) - Scientific library with neural networks, algorithmic differentiation and ONNX support.[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- **Object detection convolutional neural network with OCaml (based on Owl)** (https://github.com/owlbarn/owl_mask_rcnn).[49m[39m
|
||
[48;5;235m[38;5;249m- **PyTorch bindings** (https://github.com/LaurentMazare/ocaml-torch) - OCaml bindings for PyTorch.[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOcaml-NN[0m[38;5;12m (https://github.com/ck090/ocaml-nn/tree/main) - Fully functional monadic implementation of a Neural Network (FCNNs) in OCaml[39m
|
||
[38;5;12m- [39m[38;5;14m[1mArticles[0m
|
||
[48;5;235m[38;5;249m- **Deep Learning with OCaml (PyTorch bindings)** (https://blog.janestreet.com/deep-learning-experiments-in-ocaml/).[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- **Transfer Learning with OCaml (PyTorch bindings)** (https://blog.janestreet.com/of-pythons-and-camels/).[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m- **Reinforcement Learning with OCaml (PyTorch bindings)** (https://blog.janestreet.com/playing-atari-games-with-ocaml-and-deep-rl/).[49m[39m
|
||
|
||
[38;2;255;187;0m[4mMessaging[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-zmq[0m[38;5;12m (https://github.com/issuu/ocaml-zmq) – ZeroMQ bindings for OCaml with Async and Lwt wrappers.[39m
|
||
[38;5;12m- [39m[38;5;14m[1monanomsg[0m[38;5;12m (https://github.com/rgrinberg/onanomsg) – nanomsg bindings for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mKafka[0m[38;5;12m (https://github.com/didier-wenzek/ocaml-kafka) – OCaml bindings for Apache Kafka.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mAMQP[0m[38;5;12m (https://github.com/andersfugmann/amqp-client) – AMQP client library for Async and Lwt.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMPI[0m[38;5;12m (https://github.com/xavierleroy/ocamlmpi) – Message Passing Interface bindings for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mMQTT[0m[38;5;12m (https://github.com/j0sh/ocaml-mqtt) – OCaml implementation of the MQTT pubsub protocol.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mcapnp-ocaml[0m[38;5;12m (https://github.com/capnproto/capnp-ocaml) – OCaml code generator plugin for the Cap'n Proto serialization framework.[39m
|
||
|
||
[38;2;255;187;0m[4mMetaprogramming[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mArticles[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mA Guide to Extension Points in OCaml[0m[38;5;12m (http://whitequark.org/blog/2014/04/16/a-guide-to-extension-points-in-ocaml/)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mExtension Points, or how OCaml is becoming more like Lisp[0m[38;5;12m (https://blogs.janestreet.com/extension-points-or-how-ocaml-is-becoming-more-like-lisp)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mSyntax extensions without Camlp4: let's do it![0m[38;5;12m (https://www.lexifi.com/ocaml/syntax-extensions-without-camlp4-lets-do-it/)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mReading Camlp4 – Ambassador to the Computers[0m[38;5;12m (https://ambassadortothecomputers.blogspot.com/p/reading-camlp4.html)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mSyntax Extensions[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mppx_import[0m[38;5;12m (https://github.com/ocaml-ppx/ppx_import) – Import is a syntax extension that allows to pull in types or signatures from other compiled interface files.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mppx_string_interpolate[0m[38;5;12m (https://github.com/sheijk/ppx_string_interpolate) – A simple ppx filter to support string interpolation like [39m[48;5;235m[38;5;249m**%str "value of foo is $(foo)"** [49m[39m[38;5;12m.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mppx_monad[0m[38;5;12m (https://github.com/rizo/ppx_monad) – Monad syntax extension for OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mppx_deriving_yojson[0m[38;5;12m (https://github.com/whitequark/ppx_deriving_yojson) – A Yojson codec generator for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTools and Language Extensions[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mMetaOCaml[0m[38;5;12m (http://okmij.org/ftp/ML/MetaOCaml.html) – an OCaml dialect for multi-stage programming.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mFan[0m[38;5;12m (http://bobzhang.github.io/fan/) – Fan is a compile-time metaprogramming system for OCaml, originally inspired from Camlp4. It's a combination of OCaml and Lispy Macros. It shares the same concrete syntax with OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mcamlp5[0m[38;5;12m (https://camlp5.github.io/) - Camlp5 is a preprocessor-pretty-printer of OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mcamlp4[0m[38;5;12m (http://caml.inria.fr/pub/docs/manual-camlp4/manual002.html) - Camlp4 is part of the standard OCaml distribution and is different from Camlp5.[39m
|
||
|
||
[38;2;255;187;0m[4mMetrics[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mprometheus[0m[38;5;12m (https://github.com/mirage/prometheus) – OCaml client library for Prometheus monitoring.[39m
|
||
|
||
[38;2;255;187;0m[4mMobile Applications[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mArticles[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOCaml on iOS 7 Released[0m[38;5;12m (http://psellos.com/2014/08/2014.08.ocamlxarm-402.html)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOCaml + Cordova = more secured, typed and hybrid mobile applications[0m[38;5;12m (https://dannywillems.github.io/2016/07/14/ocaml-cordova-secured-typed-hybrid-mobile-applications.html)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mBindings[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mCordova plugins[0m[38;5;12m (https://github.com/dannywillems/ocaml-cordova-plugin-list) – List of bindings to Cordova plugins. Get access to native device components like accelerometer, SMS, geolocation, etc in OCaml.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mNetworking[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mHTTP Tools[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocaml-cohttp[0m[38;5;12m (https://github.com/mirage/ocaml-cohttp) – Very lightweight HTTP server using Lwt or Async.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocurl[0m[38;5;12m (https://github.com/ygrek/ocurl) – OCaml bindings to libcurl.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mhttpaf[0m[38;5;12m (https://github.com/inhabitedtype/httpaf) – A high performance, memory efficient, and scalable web server written in OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mpiaf[0m[38;5;12m (https://github.com/anmonteiro/piaf) - Client/server library for HTTP/1.X / HTTP/2 written entirely in OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-dns[0m[38;5;12m (https://github.com/mirage/ocaml-dns) – A pure OCaml implementation of the DNS protocol.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mfluent-logger[0m[38;5;12m (https://github.com/fluent/fluent-logger-ocaml) – Fluentd logger for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mcharrua-unix[0m[38;5;12m (https://github.com/haesbaert/charrua-unix) - charrua-unix is a Unix DHCP daemon based on [39m[38;5;14m[1mcharrua-core[0m[38;5;12m (https://github.com/haesbaert/charrua-core).[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mOnline Courses[0m
|
||
|
||
[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mOCaml[0m[38;5;14m[1m [0m[38;5;14m[1mMOOC:[0m[38;5;14m[1m [0m[38;5;14m[1mIntroduction[0m[38;5;14m[1m [0m[38;5;14m[1mto[0m[38;5;14m[1m [0m[38;5;14m[1mFunctional[0m[38;5;14m[1m [0m[38;5;14m[1mProgramming[0m[38;5;14m[1m [0m[38;5;14m[1min[0m[38;5;14m[1m [0m[38;5;14m[1mOCaml[0m[38;5;12m [39m[38;5;12m(https://www.fun-mooc.fr/en/courses/introduction-functional-programming-ocaml/)[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mVideos[39m[38;5;12m [39m[38;5;12mavailable[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;14m[1mthis[0m[38;5;14m[1m [0m[38;5;14m[1mplaylist[0m[38;5;12m [39m
|
||
[38;5;12m(https://www.youtube.com/playlist?list=PLTBEN441uEY36t5CCrJkdTSv588d3nWN5)[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;14m[1mOCaml[0m[38;5;14m[1m [0m[38;5;14m[1mSoftware[0m[38;5;14m[1m [0m[38;5;14m[1mFoundation[0m[38;5;12m [39m[38;5;12m(https://ocaml-sf.org/)[39m[38;5;12m [39m[38;5;12mYouTube[39m[38;5;12m [39m[38;5;12mchannel.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mCornell University – Data Structures and Functional Programming[0m[38;5;12m (http://www.cs.cornell.edu/Courses/cs3110/2014fa/course_info.php).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mPrinceton University - Functional programming in OCaml[0m[38;5;12m (http://www.cs.princeton.edu/~dpw/courses/cos326-12/).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mUniversity of Illinois[0m[38;5;12m (https://courses.engr.illinois.edu/cs421/fa2014/) - Course that uses OCaml to teach functional programming and programming language design[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mPackage Management[0m
|
||
[38;5;12m- [39m[38;5;14m[1mDistribution[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOPAM[0m[38;5;12m (http://opam.ocamlpro.com/) – A flexible Git-friendly package manager with multiple compiler support.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocamlfind[0m[38;5;12m (http://projects.camlcity.org/projects/findlib.html) — Local OCaml library manager. Used by most of the OCaml ecosystem.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOCaml for Windows[0m[38;5;12m (https://fdopen.github.io/opam-repository-mingw) - opam repository and experimental build for Windows (deprecated since 2021).[39m
|
||
[38;5;12m - [39m[38;5;14m[1mDiskuv OCaml[0m[38;5;12m (https://github.com/diskuv/dkml-installer-ocaml#readme) - Diskuv OCaml distribution for Windows.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mmakorel[0m[38;5;12m (https://github.com/sagotch/makorel) – Release OPAM packages easily.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mesy[0m[38;5;12m (https://github.com/esy/esy) - package.json workflow for native development with Reason/OCaml.[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mBuild Tools[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mdune[0m[38;5;12m (https://github.com/ocaml/dune) – A composable and opinionated build system for OCaml (former jbuilder)[39m
|
||
[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mOasis[0m[38;5;12m [39m[38;5;12m(http://oasis.forge.ocamlcore.org/)[39m[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;12mA[39m[38;5;12m [39m[38;5;12mtool[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mintegrate[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mconfigure,[39m[38;5;12m [39m[38;5;12mbuild[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12minstall[39m[38;5;12m [39m[38;5;12msystem[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12myour[39m[38;5;12m [39m[38;5;12mOCaml[39m[38;5;12m [39m[38;5;12mproject.[39m[38;5;12m [39m[38;5;12mIt[39m[38;5;12m [39m[38;5;12mhelps[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12mcreate[39m[38;5;12m [39m[38;5;12mstandard[39m[38;5;12m [39m[38;5;12mentry[39m[38;5;12m [39m[38;5;12mpoints[39m[38;5;12m [39m[38;5;12min[39m[38;5;12m [39m[38;5;12myour[39m[38;5;12m [39m[38;5;12mbuild[39m[38;5;12m [39m[38;5;12msystem[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mallows[39m[38;5;12m [39m[38;5;12mexternal[39m[38;5;12m [39m[38;5;12mtools[39m[38;5;12m [39m[38;5;12mto[39m[38;5;12m [39m[38;5;12manalyse[39m[38;5;12m [39m[38;5;12myour[39m[38;5;12m [39m[38;5;12mproject[39m[38;5;12m [39m
|
||
[38;5;12measily.[39m
|
||
[48;5;235m[38;5;249m- **oasis2opam** (https://github.com/ocaml/oasis2opam) — Tool to convert OASIS metadata to OPAM package descriptions.[49m[39m
|
||
[38;5;12m - [39m[38;5;14m[1mobuild[0m[38;5;12m (https://github.com/ocaml-obuild/obuild) – Simple package build system for ocaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocaml-makefile[0m[38;5;12m (https://github.com/mmottl/ocaml-makefile) — Easy to use Makefile for small to medium-sized OCaml-projects.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mtopkg[0m[38;5;12m (https://github.com/dbuenzli/topkg) — OPAM-aware packaging system using ocamlbuild.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mBazel[0m[38;5;12m (https://github.com/jin/rules_ocaml) - OCaml rules for [39m[38;5;14m[1mBazel[0m[38;5;12m (https://bazel.build/), Google's multi-language and platform build tool.[39m
|
||
|
||
[38;2;255;187;0m[4mParallelism[0m
|
||
|
||
[38;5;12m(_Note: Sorted from the easier to use to the more flexible._)[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mLibraries[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mParmap[0m[38;5;12m (http://rdicosmo.github.io/parmap/) — Provides easy-to-use parallel map and fold functions.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mForkWork[0m[38;5;12m (https://github.com/mlin/forkwork) — A simple library for forking child processes to perform work on multiple cores.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mFunctory[0m[38;5;12m (http://functory.lri.fr/About.html) — A distributed computing library which facilitates distributed execution of parallelizable computations in a seamless fashion.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mRpc.Parallel[0m[38;5;12m (https://github.com/janestreet/rpc_parallel) — A library for spawning processes on a cluster of machines, and passing typed messages between them.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOcamlnet[0m[38;5;12m (http://projects.camlcity.org/projects/ocamlnet.html) — An enhanced system platform library. Contains the [39m[48;5;235m[38;5;249mnetmulticore[49m[39m[38;5;12m library to compute tasks on as many cores of the machine as needed.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mNproc[0m[38;5;12m (https://github.com/MyLifeLabs/nproc) – Process pool implementation for OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mParany[0m[38;5;12m (https://github.com/UnixJunkie/parany) – Parallelize computation over independent items, even if there is an infinite number of them.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mSklml[0m[38;5;12m (http://sklml.inria.fr) – Functional parallel skeleton compiler and programming system for OCaml programs.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mSPOC[0m[38;5;12m (https://github.com/mathiasbourgoin/SPOC) - Libraries and syntax extensions to offload intensive computations to parallel accelerators (multicore CPUs, GPUs and other accelerators compatible with GPGPU frameworks).[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mArticles[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mWhat is the state of OCaml's parallelization abilities?[0m[38;5;12m (https://stackoverflow.com/questions/6588500/what-is-the-state-of-ocamls-parallelization-abilities)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mParallel programming in multicore OCaml[0m[38;5;12m (https://github.com/ocaml-multicore/parallel-programming-in-multicore-ocaml)[39m
|
||
[38;5;12m - [39m[38;5;14m[1mParallelism programming[0m[38;5;12m (https://v2.ocaml.org/releases/5.0/htmlman/parallelism.html) from the officiel OCaml manual [39m
|
||
[38;5;12m - [39m[38;5;14m[1mAwesome multicore OCaml[0m[38;5;12m (https://github.com/ocaml-multicore/awesome-multicore-ocaml). A compilation of resources[39m
|
||
|
||
[38;2;255;187;0m[4mPrinters helpers[0m
|
||
|
||
[38;5;12m- Reason's native [39m[38;5;12mConsole.log[39m[38;5;12m (https://github.com/reasonml/reason-native/tree/master/src/console#consoleloganything)[39m
|
||
[38;5;12m- [39m[38;5;12mDum[39m[38;5;12m (https://github.com/mjambon/dum#readme)[39m
|
||
[38;5;12m- [39m[38;5;12mInspect[39m[38;5;12m (https://github.com/krohrer/caml-inspect#readme)[39m
|
||
[38;5;12m- [39m[38;5;12mppx_deriving[39m[38;5;14m[1m [0m[38;5;12m (https://github.com/ocaml-ppx/ppx_deriving#usage)’s [39m[48;5;235m[38;5;249m**@@deriving show** [49m[39m[38;5;12m.[39m
|
||
[38;5;12m- [39m[38;5;12mrefl[39m[38;5;14m[1m [0m[38;5;12m (https://github.com/thierry-martinez/refl#basic-usage), a ppx_deriving-like.[39m
|
||
[38;5;12m- [39m[38;5;12mlrt[39m[38;5;14m[1m [0m[38;5;12m (https://github.com/LexiFi/lrt#getting-started), another ppx_deriving-like.[39m
|
||
[38;5;12m- [39m[38;5;12mtpf[39m[38;5;14m[1m [0m[38;5;12m (https://github.com/pqwy/tpf#readme), again a ppx_deriving-like.[39m
|
||
[38;5;12m- [39m[38;5;12mtyperep[39m[38;5;14m[1m [0m[38;5;12m (https://github.com/janestreet/typerep), probably a ppx_deriving-like with ppx_typerep_conv.[39m
|
||
[38;5;12m- [39m[38;5;12mrepr[39m[38;5;12m (https://mirage.github.io/repr/repr/Repr/index.html#val-pp_json), which appears to have the user build the type representation manually from combinators in addition to also having the user pass it where needed.[39m
|
||
[38;5;12m- [39m[38;5;12mdata-encoding[39m[38;5;12m (https://gitlab.com/nomadic-labs/data-encoding/-/blob/master/src/tutorial.md#how-to-build-an-encoding), also fully manual.[39m
|
||
[38;5;12m- [39m[38;5;12mcmon[39m[38;5;14m[1m [0m[38;5;12m (https://github.com/let-def/cmon#documentation), fully manual.[39m
|
||
[38;5;12m- [39m[38;5;12mdyn[39m[38;5;14m[1m [0m[38;5;12m (https://github.com/ocaml/dune/blob/4b95cd3d1b3a62e69a9a9db2bc4af2f9fd2e56d8/otherlibs/dyn/dyn.mli) in Dune. It appears to also be fully manual.[39m
|
||
[38;5;12m- [39m[38;5;12mGenprint[39m[38;5;14m[1m [0m[38;5;12m (https://github.com/progman1/genprintlib#readme)[39m
|
||
[38;5;12m- [39m[38;5;12mOCaml@p[39m[38;5;14m[1m [0m[38;5;12m (https://github.com/tsubame-sp/ocaml_at_p#readme)[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mProject Starter Templates[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mdrom[0m[38;5;12m (https://github.com/OCamlPro/drom/) - The drom tool is a wrapper over opam/dune in an attempt to provide a cargo-like user experience.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mspin[0m[38;5;12m (https://github.com/tmattio/spin) - Reason and Ocaml project generator[39m
|
||
[38;5;12m- [39m[38;5;14m[1mmodern-ocaml[0m[38;5;12m (https://github.com/Khady/modern-ocaml) - Template for an ocaml project with modern tooling[39m
|
||
|
||
[38;2;255;187;0m[4mQuestions[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml polymorphism example other than template function?[0m[38;5;12m (https://stackoverflow.com/questions/14440531/ocaml-polymorphism-example-other-than-template-function)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml - polymorphic print and type losing[0m[38;5;12m (https://stackoverflow.com/questions/7442449/ocaml-polymorphic-print-and-type-losing)[39m
|
||
|
||
|
||
[38;5;12m [39m[38;2;255;187;0m[1m[4mScience and Technical Computing[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mbiocaml[0m[38;5;12m (https://github.com/biocaml/biocaml) – OCaml Bioinformatics Library .[39m
|
||
[38;5;12m- [39m[38;5;14m[1mbistro[0m[38;5;12m (https://github.com/pveber/bistro) – OCaml library for building bioinformatics pipelines.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mlacaml[0m[38;5;12m (https://mmottl.github.io/lacaml/) - OCaml bindings for BLAS/LAPACK (high-performance linear algebra Fortran libraries).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mobandit[0m[38;5;12m (http://freux.fr/oss/obandit.html) - OCaml library for multi-armed bandits.[39m
|
||
[38;5;12m- [39m[38;5;14m[1monumerical[0m[38;5;12m (https://github.com/cheshire/onumerical) – Numerical library for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1moml[0m[38;5;12m (https://github.com/hammerlab/oml) - OCaml library for general numerical work.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocephes[0m[38;5;12m (https://github.com/rleonid/ocephes) - Bindings to frequently used [39m[48;5;235m[38;5;249mC[49m[39m[38;5;12m special functions library.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mslap[0m[38;5;12m (https://github.com/akabe/slap) - A linear algebra library in OCaml with type-based static size checking for matrix operations.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mtensorflow-ocaml[0m[38;5;12m (https://github.com/LaurentMazare/tensorflow-ocaml) – OCaml bindings for TensorFlow.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mowl[0m[38;5;12m (https://github.com/owlbarn/owl) - OCaml numerical library: dense and sparse matrix, linear algebra, regressions, maths and stats functions.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mWHIZARD[0m[38;5;12m (https://whizard.hepforge.org/) - A system designed for the efficient calculation of multi-particle scattering cross sections and simulated event samples.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mRegular Expressions[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mRe[0m[38;5;12m (https://github.com/ocaml/ocaml-re) – a pure OCaml regular expressions library with combinators, supporting several formats (glob, posix, str, etc.).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-pcre[0m[38;5;12m (https://github.com/mmottl/pcre-ocaml) – bindings to the PCRE library (perl-compatible regular expressions)[39m
|
||
[38;5;12m- [39m[38;5;14m[1mHumane-re[0m[38;5;12m (https://github.com/rgrinberg/humane-re) – Humane-re attempts to provide an easy interface for 90% of your regex needs. Courtesy of ocaml-re.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTyre[0m[38;5;12m (https://github.com/Drup/tyre) - Tyre is a set of combinators to build type-safe regular expressions, allowing automatic extraction and modification of matched groups.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mSecurity and Cryptography[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-tls[0m[38;5;12m (https://github.com/mirleft/ocaml-tls) – TLS in pure OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mDigestif[0m[38;5;12m (https://github.com/mirage/digestif) - Hash algorithms (like SHA[39m[48;2;30;30;40m[38;5;13m[3m or BLAKE2[0m[38;5;12m) in OCaml and C.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mcryptokit[0m[38;5;12m (https://github.com/xavierleroy/cryptokit) – The Cryptokit library for OCaml provides a variety of cryptographic primitives that can be used to implement cryptographic protocols in security-sensitive applications.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mnocoiner[0m[38;5;12m (https://github.com/marcoonroad/nocoiner) - A Commitment scheme library for Multi-party computations such as online auctions and gambling.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mnocrypto[0m[38;5;12m (https://github.com/mirleft/ocaml-nocrypto) – A small cryptographic library behind the ocaml-tls project. It is built to be straightforward to use, adhere to functional programming principles, and able to run in a Xen-based unikernel.[39m
|
||
|
||
[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mNote: The differences between [39m[48;5;235m[38;5;249mnocrypto[49m[39m[38;5;12m and [39m[48;5;235m[38;5;249mcryptokit[49m[39m[38;5;12m cryptographic libraries are described in the following blog post: [39m[38;5;14m[1mOCaml-TLS: building the nocrypto library core[0m[38;5;12m (https://mirage.io/blog/introducing-nocrypto).[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mSemantic Technology[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mOCaml-RDF[0m[38;5;12m (https://framagit.org/zoggy/ocaml-rdf) – OCaml library to manipulate RDF graphs and execute Sparql queries.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mSerialization[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1matdgen[0m[38;5;12m (https://github.com/ahrefs/atd) — A serialization compiler for multiple languages (OCaml, Java, Python, Scala, Typescript) with a Binou or JSON format[39m
|
||
[38;5;12m- [39m[38;5;14m[1mbencode[0m[38;5;12m (https://github.com/rgrinberg/bencode) — Bencode (.torrent file format) reader/writer.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mbiniou[0m[38;5;12m (https://github.com/mjambon/biniou) – Extensible binary data format, like JSON but faster.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mcbor[0m[38;5;12m (https://github.com/ygrek/ocaml-cbor) — OCaml native [39m[38;5;14m[1mCBOR[0m[38;5;12m (https://cbor.io/) decoder/encoder.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mjsonm[0m[38;5;12m (http://erratique.ch/software/jsonm) — Non-blocking streaming JSON codec for OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mxmlm[0m[38;5;12m (http://erratique.ch/software/xmlm) — A streaming codec to decode and encode the XML data format.[39m
|
||
[38;5;12m- [39m[38;5;14m[1myojson[0m[38;5;12m (https://github.com/ocaml-community/yojson) — An optimized parsing and printing library for the JSON format.[39m
|
||
[38;5;12m- [39m[38;5;14m[1msexplib[0m[38;5;12m (https://github.com/janestreet/sexplib) – A S-expression parser and printer[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mSystem Programming[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mMirage OS[0m[38;5;12m (https://github.com/mirage/mirage) – Mirage is a programming framework for constructing secure, high-performance network applications across a variety of cloud computing and mobile platforms.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-fat[0m[38;5;12m (https://github.com/mirage/ocaml-fat) – Read and write FAT-format filesystems from OCaml.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-git[0m[38;5;12m (https://github.com/mirage/ocaml-git) – Pure OCaml low-level git bindings.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-vchan[0m[38;5;12m (https://github.com/mirage/ocaml-vchan) – Pure OCaml implementation of the "vchan" shared-memory communication protocol.[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mEmbedded systems[0m
|
||
[38;5;12m - [39m[38;5;14m[1mOMicroB[0m[38;5;12m (https://github.com/stevenvar/omicrob) - A virtual machine designed to run OCaml bytecode on AVR (Arduino for instance) micro-controlers.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOCaPIC[0m[38;5;12m (http://www.algo-prog.info/ocapic/web/index.php?id=OCAPIC:OCAPIC) - An OCaml virtual machine for PIC18 micro-controlers.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocaml-esp32[0m[38;5;12m (https://github.com/sadiqj/ocaml-esp32) - A compiler for ESP32 SoC.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mTesting[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mAlcotest[0m[38;5;12m (https://github.com/mirage/alcotest) – A lightweight and colourful test framework.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mOUnit[0m[38;5;12m (http://ounit.forge.ocamlcore.org/) – OUnit is a unit test framework for OCaml. It allows one to easily create unit-tests for OCaml code. It is based on HUnit, a unit testing framework for Haskell.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mQCheck[0m[38;5;12m (https://github.com/c-cube/qcheck) — QCheck is a property testing library inspired from Haskell's QuickCheck[39m
|
||
[38;5;12m- [39m[38;5;14m[1miTeML[0m[38;5;12m (https://github.com/vincent-hugot/iTeML) (formerly known as [39m[38;5;14m[1mqtest[0m[38;5;12m (http://batteries.vhugot.com/qtest/)) — supports inline pragma's to generate tests.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mKaputt[0m[38;5;12m (http://kaputt.x9c.fr/) — comprehensive testing framework.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mPa_test[0m[38;5;12m (https://ocaml.janestreet.com/ocaml-core/111.28.00/doc/pa_test) — General inline testing macro's.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mTestSimple[0m[38;5;12m (https://github.com/hcarty/ocaml-testsimple) - A lightweight unit testing framework compatible with the [39m[38;5;14m[1mTest Anything Protocol[0m[38;5;12m (https://testanything.org/).[39m
|
||
[38;5;12m- [39m[38;5;14m[1mexpect-test[0m[38;5;12m (https://github.com/janestreet/ppx_expect) — A framework for writing tests in OCaml, similar to [39m[38;5;14m[1mCram[0m[38;5;12m (https://bitheap.org/cram/), developed by [39m[38;5;14m[1mJaneStreet[0m[38;5;12m (https://blog.janestreet.com/testing-with-expectations/). [39m
|
||
|
||
|
||
[38;2;255;187;0m[4mUtilities[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mocaml-cuid[0m[38;5;12m (https://github.com/marcoonroad/ocaml-cuid) - Collision-resistant IDs for server scalability & database performance.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mValidate[0m[38;5;12m (https://github.com/Axot017/validate) - PPX deriver designed to streamline the process of validating records.[39m
|
||
[38;5;12m- [39m[38;5;14m[1mUuidm[0m[38;5;12m (https://erratique.ch/software/uuidm) - Uuidm is an OCaml module implementing 128-bit universally unique identifiers version 3, 5 (name based with MD5, SHA-1 hashing) and 4 (random based) according to RFC 4122.[39m
|
||
[38;5;12m- [39m[38;5;14m[1msqids-ocaml[0m[38;5;12m (https://github.com/sqids/sqids-ocaml) - Official OCaml port of Sqids. Generate short unique IDs from numbers.[39m
|
||
|
||
|
||
[38;2;255;187;0m[4mWeb Development[0m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mFrameworks[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOpium[0m[38;5;12m (https://github.com/rgrinberg/opium) – Sinatra like web toolkit for OCaml.[39m
|
||
[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mOcsigen[0m[38;5;14m[1m [0m[38;5;14m[1mEliom[0m[38;5;12m [39m[38;5;12m(http://ocsigen.org/eliom/)[39m[38;5;12m [39m[38;5;12m–[39m[38;5;12m [39m[38;5;12mEliom[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mfull-featured[39m[38;5;12m [39m[38;5;12mmulti-tier[39m[38;5;12m [39m[38;5;12mframework,[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mdeveloping[39m[38;5;12m [39m[38;5;12mmulti-platform[39m[38;5;12m [39m[38;5;12mWeb[39m[38;5;12m [39m[38;5;12mand[39m[38;5;12m [39m[38;5;12mmobile[39m[38;5;12m [39m[38;5;12mapps[39m[38;5;12m [39m[38;5;12mas[39m[38;5;12m [39m[38;5;12m100%[39m[38;5;12m [39m[38;5;12mOCaml[39m[38;5;12m [39m[38;5;12mdistributed[39m[38;5;12m [39m[38;5;12mapplications.[39m[38;5;12m [39m[38;5;12mIt[39m[38;5;12m [39m[38;5;12mcan[39m[38;5;12m [39m[38;5;12malso[39m[38;5;12m [39m[38;5;12mbe[39m[38;5;12m [39m[38;5;12mused[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mmore[39m[38;5;12m [39m[38;5;12mtraditional[39m[38;5;12m [39m[38;5;12mWeb[39m[38;5;12m [39m[38;5;12mor[39m[38;5;12m [39m[38;5;12mmobile[39m[38;5;12m [39m[38;5;12mapps:[39m[38;5;12m [39m
|
||
[38;5;12mWeb[39m[38;5;12m [39m[38;5;12msites,[39m[38;5;12m [39m[38;5;12msingle[39m[38;5;12m [39m[38;5;12mpage[39m[38;5;12m [39m[38;5;12mapplications,[39m[38;5;12m [39m[38;5;12mREST[39m[38;5;12m [39m[38;5;12mAPI,[39m[38;5;12m [39m[38;5;12metc.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mDream[0m[38;5;12m (https://aantron.github.io/dream/) - Tidy Web framework for OCaml and ReasonML[39m
|
||
[38;5;12m [39m[38;5;12m-[39m[38;5;12m [39m[38;5;14m[1mwebmachine[0m[38;5;12m [39m[38;5;12m(https://github.com/inhabitedtype/ocaml-webmachine)[39m[38;5;12m [39m[38;5;12m–[39m[38;5;12m [39m[38;5;12mA[39m[38;5;12m [39m[38;5;12mREST[39m[38;5;12m [39m[38;5;12mtoolkit[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mOCaml.[39m[38;5;12m [39m[38;5;12mOCaml[39m[38;5;12m [39m[38;5;12mwebmachine[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mlayer[39m[38;5;12m [39m[38;5;12mon[39m[38;5;12m [39m[38;5;12mtop[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mcohttp[39m[38;5;12m [39m[38;5;12mthat[39m[38;5;12m [39m[38;5;12mimplements[39m[38;5;12m [39m[38;5;12ma[39m[38;5;12m [39m[38;5;12mstate-machine-based[39m[38;5;12m [39m[38;5;12mHTTP[39m[38;5;12m [39m[38;5;12mrequest[39m[38;5;12m [39m[38;5;12mprocessor.[39m[38;5;12m [39m[38;5;12mIt's[39m[38;5;12m [39m[38;5;12mparticularly[39m[38;5;12m [39m[38;5;12mwell-suited[39m[38;5;12m [39m[38;5;12mfor[39m[38;5;12m [39m[38;5;12mwriting[39m[38;5;12m [39m
|
||
[38;5;12mRESTful[39m[38;5;12m [39m[38;5;12mAPIs.[39m[38;5;12m [39m[38;5;12mAs[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mname[39m[38;5;12m [39m[38;5;12msuggests,[39m[38;5;12m [39m[38;5;12mthis[39m[38;5;12m [39m[38;5;12mis[39m[38;5;12m [39m[38;5;12man[39m[38;5;12m [39m[38;5;12mOCaml[39m[38;5;12m [39m[38;5;12mport[39m[38;5;12m [39m[38;5;12mof[39m[38;5;12m [39m[38;5;12mthe[39m[38;5;12m [39m[38;5;12mwebmachine[39m[38;5;12m [39m[38;5;12mproject.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mincr_dom[0m[38;5;12m (https://github.com/janestreet/incr_dom) - A library for building dynamic webapps, using Js_of_ocaml[39m
|
||
[38;5;12m - [39m[38;5;14m[1mfmlib_browser[0m[38;5;12m (https://hbr.github.io/fmlib/odoc/fmlib_browser/doc_overview.html) - a library which helps to write web applications which run in the browser in a pure functional style.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocaml-vdom[0m[38;5;12m (https://github.com/LexiFi/ocaml-vdom) - Elm architecture and (V)DOM for OCaml[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mTools[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mCOW[0m[38;5;12m (https://github.com/mirage/ocaml-cow) – Caml on the Web (COW) is a set of parsers and syntax extensions to let you manipulate HTML, CSS, XML, JSON and Markdown directly from OCaml code.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mOcamlnet[0m[38;5;12m (http://projects.camlcity.org/projects/ocamlnet.html)[39m
|
||
[48;5;235m[38;5;249mhas many relevant web libraries —[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m**Nethtml** (http://projects.camlcity.org/projects/dl/ocamlnet-4.0.4/doc/html-main/Nethtml.html)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249mhtml parser,[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m**Netasn1** (http://projects.camlcity.org/projects/dl/ocamlnet-4.0.4/doc/html-main/Netasn1.html)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249mfor ASN.1 parsing,[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m**Netencoding** (http://projects.camlcity.org/projects/dl/ocamlnet-4.0.4/doc/html-main/Netencoding.html)[49m[39m
|
||
[48;5;235m[38;5;249mfor Base64, Quoted Printable, URL encoding and HTML escaping,[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249m**Netmime** (http://projects.camlcity.org/projects/dl/ocamlnet-4.0.4/doc/html-main/Netmime.html)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249mfor MIME processing, etc. See the **list of[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249mmodules** (http://projects.camlcity.org/projects/dl/ocamlnet-4.0.4/doc/html-main/index.html)[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[48;5;235m[38;5;249min Ocamlnet's manual.[49m[39m[48;5;235m[38;5;249m [49m[39m
|
||
[38;5;12m - [39m[38;5;14m[1mtyxml[0m[38;5;12m (http://ocsigen.org/tyxml) — Library to build valid (according to the W3C spec) Html and Svg trees.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mjs_of_ocaml[0m[38;5;12m (http://ocsigen.org/js_of_ocaml) – Js_of_ocaml is a compiler of OCaml bytecode to Javascript. It makes it possible to run Ocaml programs in a Web browser.[39m
|
||
[48;5;235m[38;5;249m- **commonjs_of_ocaml** (https://github.com/AngryLawyer/commonjs_of_ocaml) - Easily import and export CommonJS modules from a js_of_ocaml project.[49m[39m
|
||
[38;5;12m - [39m[38;5;14m[1mReScript[0m[38;5;12m (https://rescript-lang.org/) - ReScript is a robustly typed language that compiles to efficient and human-readable JavaScript.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocaml-uri[0m[38;5;12m (https://github.com/mirage/ocaml-uri) – RFC3986 URI parsing library.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mGoji[0m[38;5;12m (https://github.com/klakplok/goji) – An OCaml bindings generator for JavaScript libraries.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mSyndic[0m[38;5;12m (https://github.com/Cumulus/Syndic) – RSS and Atom feed parsing[39m
|
||
[38;5;12m - [39m[38;5;14m[1mocaml-mustache[0m[38;5;12m (https://github.com/rgrinberg/ocaml-mustache) – mustache.js logic-less templates in OCaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1matdjs[0m[38;5;12m (https://github.com/barko/atdjs) – atd code generator (serialization) for OCaml/js_of_ocaml.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mjingoo[0m[38;5;12m (https://github.com/tategakibunko/jingoo) – OCaml template engine almost compatible with jinja2.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mdispatch[0m[38;5;12m (https://github.com/inhabitedtype/ocaml-dispatch) – Path-based dispatching for client- and server-side applications.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mLambda Soup[0m[38;5;12m (https://github.com/aantron/lambda-soup) - Functional HTML scraping and manipulation with CSS selectors, à la Python's Beautiful Soup.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mMarkup.ml[0m[38;5;12m (https://github.com/aantron/markup.ml) - Error-recovering streaming HTML5 and XML parsers, serializers.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mgen_js_api[0m[38;5;12m (https://github.com/LexiFi/gen_js_api) - gen_js_api aims at simplifying the creation of OCaml bindings for Javascript libraries.[39m
|
||
[38;5;12m - [39m[38;5;14m[1mroutes[0m[38;5;12m (https://github.com/anuragsoni/routes) - Typed routes for OCaml/ReasonML web applications.[39m
|
||
|
||
[38;5;12m- [39m[38;5;14m[1mOpen Source Projects[0m[38;5;12m:[39m
|
||
[38;5;12m - [39m[38;5;14m[1mCumulus[0m[38;5;12m (https://github.com/Cumulus/Cumulus) – Hacker news like website with the OCaml framework Ocsigen[39m
|
||
|
||
[48;5;12m[38;5;11m⟡[49m[39m[38;5;12m [39m[48;2;30;30;40m[38;5;13m[3m [0m
|
||
|
||
[38;5;12m_Inspired by awesome projects line. Discover [39m[38;5;14m[1mmore awesomeness[0m[38;5;12m (https://github.com/bayandin/awesome-awesomeness) :sparkles:._[39m
|
||
|
||
[38;5;12mocaml Github: https://github.com/rizo/awesome-ocaml[39m
|