715 search results for ""

Showing 651 - 700
  1. Sets

    Introduction

    type elt = string for the elements, and type t = Set.Make(String).t for the sets. This module also defines two types: After naming the newly-created module StringSet , OCaml's toplevel displays t

    Data Structures
  2. File Manipulation

    Reading

    Standard in_channel : stdin Commonly used functions: open_in , open_in_bin , close_in , close_in_noerr Open the file to obtain an in_channel Read characters from the channel. Reading consum

    Tutorials
  3. Operators

    Allowed Operators

    OCaml has a subtle syntax; not everything is allowed as an operator symbol. An operator symbol is an identifier with a special syntax, so it must have the following structure:

    Advanced Topics
  4. A Tour of OCaml

    Lists

    Note that the x :: v pattern in the second matching expression is used to destructure the list into its head x and tail v , where head is the first element of the list and tail is the rest o

    First Steps
  5. OCaml-CI

    What is OCaml-CI?

    OCaml-CI is a continuous integration service specifically designed for OCaml projects hosted on GitHub (and GitLab). It's built on the OCurrent pipeline framework and is hosted at ocaml.ci.dev .

    Additional Tooling
  6. Higher Order Functions

    Mapping

    This is called mapping . For example, if we have a list of users, maybe we want to get a list of usernames. Or if we have an optional password, we may want to encrypt it only if it is set. In cont

    Introduction
  7. File Manipulation

    Writing

    Standard out_channel s: stdout , stderr Commonly used functions: open_out , open_out_bin , flush , close_out , close_out_noerr Open the file to obtain an out_channel Write to the channel

    Tutorials
  8. Profiling

    Arrays

    So arrays of floats are unboxed, as expected. (Each float in the array is 8 bytes long.) The assembler syntax is rather complex, but the bracketed expression -4(%ecx, %eax, 4) means "at the ad

    Guides
  9. A Tour of OCaml

    Conclusion

    In this tutorial, OCaml was used interactively. The next tutorial, Your First OCaml Program , shows you how to write OCaml files, how to compile them, and how to kickstart a project. <!-- 1. Values

    First Steps
  10. Sets

    Creating a Set

    There's another relevant function StringSet.of_seq: string Seq.t -> StringSet.t that creates a set from a sequence . Converting a list into a set using StringSet.of_list : A set with a sing

    Data Structures
  11. OCaml-CI

    Key Features

    Automatic multi-version testing : Tests against multiple OCaml compiler versions Multi-platform support : Tests on different operating systems Smart caching : Docker layer caching makes rebuilds fast

    Additional Tooling
  12. Preprocessors and PPXs

    Writing a PPX

    If you want to write your own PPX, the place to start is ppxlib's documentation .

    Advanced Topics
  13. Lists

    Sorting Lists

    The function Fun.flip reverses a binary function parameter order. The function List.sort , given a comparison function of type 'a -> 'a -> int (zero if equal, negative if first smaller, p

    Introduction
  14. Options

    Conclusion

    The option type in OCaml provides a powerful and type-safe way to represent values that may be absent, avoiding the pitfalls of exceptions. By leveraging functions such as map , join , get , va

    Data Structures
  15. Operators

    Prefix Operator

    First character, either: ? ~ ! Following characters, at least one if the first character is ? or ~ , optional otherwise: $ & * + - / = > @ ^ | % <

    Advanced Topics
  16. Error Handling

    Runtime Crashes

    Although OCaml is a very safe language, it is possible to trigger unrecoverable errors at runtime.

    Guides
  17. Maps

    Checking if a Key is Contained in a Map

    To check if a key is a member of a map, use the mem function:

    Data Structures
  18. Profiling

    Summary

    Write your program as simply as possible. If it takes too long to run, profile it to find out where it's spending its time and concentrate optimisations on just those areas. Check for unintention

    Guides
  19. Functors

    heap.ml

    <!-- TODO: Create this section When several implementations of the same interface are needed at runtime, functors allow sharing of their common parts. ## Multiple Implementation of the Same Signat

    Module System
  20. File Manipulation

    Seeking

    Whenever you write or read something to or from a channel, the current position changes to the next character after what you just wrote or read. Occasionally, you may want to skip to a particular

    Tutorials
  21. Configuring Your Editor

    Emacs

    A major mode, which, among other things, supports syntax highlighting and the structuring of indentation levels A minor mode, which will interact with a language server (such as ocaml-lsp-server ).

    Tooling
  22. Sets

    Subtracting a Set from Another

    With the function StringSet.diff , we can remove the elements of the second set from the first set.

    Data Structures
  23. Modules

    Introduction

    Note : The files that illustrate this tutorial are available as a Git repo . Modules are collections of definitions grouped together. This is the basic means to organise OCaml software. Separate co

    Module System
  24. Objects

    Objects Without Class

    Here we examine how to use objects pretty much like records, without necessarily using classes.

    Advanced Topics
  25. Profiling

    Floats

    string_of_float isn't polymorphic, but suppose we have a polymorphic function foo : 'a -> unit taking one polymorphic argument. If we call foo with %eax containing 7, then this is equivalen

    Guides
  26. Comparison of Standard Containers

    Stack

    Adding an element: O(1) Taking an element: O(1) Length: O(1) OCaml stacks are mutable last-in-first-out (LIFO) data structures. They are just like lists except they are mutable, i.e., adding an

    Resources
  27. OCaml-CI

    Step 4: Add a Status Badge (Optional)

    Add this to your README:

    Additional Tooling
  28. OCaml-CI

    Testing Locally

    This runs a local web interface at http://localhost:8080 showing how your project would be built. You can test how OCaml-CI would build your project locally:

    Additional Tooling
  29. Libraries With Dune

    Conclusion

    The OCaml module system allows organising a project in many ways. Dune provides several means to arrange modules into libraries.

    Module System
  30. Basic Data Types and Pattern Matching

    Variants

    Variants are also called tagged unions . They relate to the concept of disjoint union .

    Introduction
  31. Lists

    Folds

    Here are some more redefinitions of familiar functions in terms of fold_left or fold_right . Can you work out how they operate? Unfortunately, the order of evaluation here is such that larg

    Introduction
  32. Functors

    Conclusion

    Functor application essentially works the same way as function application: passing parameters and getting results. The difference is that we are passing modules instead of values. Beyond comfort, it

    Module System
  33. OCaml-CI

    The OCaml-CI CLI

    The CLI allows you to interact with OCaml-CI programmatically — checking build status, viewing logs, cancelling or rebuilding jobs.

    Additional Tooling
  34. Maps

    Creating a Map

    Example 2 : By Adding an Element Example 1 : By Annotation When you create your new map with an annotation By adding an element to the map: The type of the values can be specified in two ways: T

    Data Structures
  35. Error Handling

    Documentation

    <!-- $MDX skip --> Functions that can raise exceptions should be documented like this:

    Guides
  36. Maps

    Merging Maps

    pick_fst picks the result's value from the first map pick_snd picks the result's value from the second map drop drops both entries in the result map Here are examples of duplicate key resolut

    Data Structures
  37. Loops and Recursions

    Approach 2

    The imperative approach uses a while loop that is broken out of using an exception.

    Introduction
  38. Using OCaml with GitHub Actions

    Basic Usage

    Create .github/workflows/ci.yml :

    Additional Tooling
  39. Profiling

    Speed

    But you will need to know some assembler to get the most out of this section. Don't be afraid! I'll help you out by translating the assembler into a C-like pseudocode (after all C is just a porta

    Guides
  40. OCaml-CI

    Installation & Usage

    Or install it as ocaml-ci . You can run it via dune:

    Additional Tooling
  41. Sets

    Intersection of Two Sets

    With the function StringSet.inter , we can compute the intersection of two sets.

    Data Structures
  42. Arrays

    Map an Array

    The Array.map function creates a new array by applying a given function to each element of an array. For example, we can get an array containing the square of each number in the even_numbers ar

    Data Structures
  43. OCaml-CI

    Requirements

    You need a capability file ( ocaml-ci.cap ) which grants access to the API. This file must be provided to you by the OCaml-CI administrators.

    Additional Tooling
  44. Arrays

    Conclusion

    In this tutorial, we covered the basics of arrays in OCaml, including how to create and manipulate them, as well as some of the most useful functions and use cases. Please refer to the standard libr

    Data Structures
  45. OCaml on Windows

    WSL2

    After you have installed WSL2 and chosen one Linux distribution (we suggest Ubuntu LTS ), you can follow the Installing OCaml: Installation for Linux and macOS steps. If you only need to run O

    Resources
  46. Comparison of Standard Containers

    Queue

    Adding an element: O(1) Taking an element: O(1) Length: O(1) OCaml queues are mutable first-in-first-out (FIFO) data structures.

    Resources
  47. Sets

    Filtering a Set

    The function StringSet.filter of type (string -> bool) -> StringSet.t -> StringSet.t creates a new set by keeping the elements that satisfy a predicate from an existing set.

    Data Structures
  48. Profiling

    .data

    .long writes a word (4 bytes) to the current segment. .byte writes a single byte. .ascii writes a string of bytes (NOT nul-terminated). .space writes the given number of zero bytes. Normall

    Guides
  49. Maps

    Filtering a Map

    To filter a map, use the filter function. It takes a predicate to filter entries and a map. It returns a new map containing the entries satisfying the predicate.

    Data Structures
  50. Preprocessors and PPXs

    PPXs

    PPxs are a different kind of preprocessor—one that does not run on the textual source code, but rather on the parsing result: the Abstract Syntax Tree (AST), which in the OCaml compiler is call

    Advanced Topics