Skip to content

Purely functional data structures for OCaml, translated from Chris Okasaki's book "Purely Functional Data Structures"

License

Notifications You must be signed in to change notification settings

mmottl/pure-fun

Repository files navigation

Pure-Fun - Purely Functional Data Structures for OCaml

Overview

Pure-Fun is an SML-to-OCaml translation of source examples from the book:

Purely Functional Data Structures
Chris Okasaki
Cambridge University Press, 1998
Copyright © 1998 Cambridge University Press

Translation Notes

The first nine chapters are complete. The remaining chapters require polymorphic recursion, a feature not available in OCaml at the time. Contributions for these chapters are welcome.

This translation follows the original code, with some necessary adjustments:

No Base Module

Each module copies relevant contents from the base module for easier testing, eliminating inter-module dependencies.

Naming Conventions

  • Module Types: Written in uppercase, with words separated by underscores.
  • Exceptions: Follow the same rule as module types.
  • Module Implementations: Uses PascalCase by capitalizing the first letter of each word without using underscores. For example, ModuleName.

Currying

The implementation curries parameters where appropriate. Functions hidden by signature restrictions do not curry tuples representing named types, aiding comprehension.

Unused Parameters

The implementation prefixes unused parameters with an underscore (_).

Lazy Evaluation

The syntax for lazy evaluation differs from the original. Expressions requiring lazy evaluation have type lazy. The code utilizes OCaml's pattern matching on lazy values and a prefix operator (!$) to force evaluation. The lazy keyword creates lazy expressions.

Chapter 4 includes a test function at the end, introducing lazy evaluation and streams. Uncomment it to explore lazy evaluation.

Efficiency Notes

Optimize purely functional data structures by adjusting garbage collector settings. If performance is lacking, consider increasing the garbage collector's memory overhead parameter. Generally, the implemention is highly efficient.

Contributing

Submit bug reports, feature requests, and contributions via the GitHub issue tracker.

For the latest updates, visit: https://mmottl.github.io/pure-fun

About

Purely functional data structures for OCaml, translated from Chris Okasaki's book "Purely Functional Data Structures"

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages