Quick Links
  • -Overview
  • -Language Features
  • -JS Interop
  • -Build System
Documentation
Language Manual
Reference for all language features
ReScript & React
First class bindings for ReactJS
GenType
Seamless TypeScript integration
Reanalyze
Dead Code & Termination analysis
Exploration
Packages
Explore third party libraries and bindings
Syntax Lookup
Discover all syntax constructs
APIPlaygroundBlogCommunity
  • Playground
  • Blog
  • Twitter
  • GitHub
  • Forum
Language Manual
Overview
  • Introduction
  • Installation
  • Editor Plugins
  • Migrate to ReScript Syntax
  • Try
Language Features
  • Overview
  • Let Binding
  • Type
  • Primitive Types
  • Tuple
    • Usage
    • Tips & Tricks
  • Record
  • Object
  • Variant
  • Null, Undefined and Option
  • Array & List
  • Function
  • If-Else & Loops
  • Pipe
  • Pattern Matching / Destructuring
  • Mutation
  • JSX
  • Exception
  • Lazy Values
  • Promise
  • Module
  • Import & Export
  • Reserved Keyword
JavaScript Interop
  • Embed Raw JavaScript
  • Shared Data Types
  • External (Bind to Any JS Library)
  • Bind to JS Object
  • Bind to JS Function
  • Import from / Export to JS
  • Bind to Global JS Values
  • JSON
  • Use Illegal Identifier Names
  • Generate Converters & Helpers
  • Browser Support & Polyfills
  • Interop Cheatsheet
Build System
  • Build System Overview
  • Build System Configuration
  • Interop with JS Build Systems
  • Build Performance
Guides
  • Converting from JS
  • Libraries
Extra
  • Newcomer Examples
  • Project Structure
  • FAQ
Docs / Language Manual / Tuple
Edit

You are currently looking at the v6.0 - v8.2 docs (Reason v3.6 syntax edition). You can find the latest manual page here.

(These docs are equivalent to the old BuckleScript docs before the ReScript rebrand)

Tuple

Tuples are a ReScript-specific data structure that don't exist in JavaScript. They are:

  • immutable

  • ordered

  • fix-sized at creation time

  • heterogeneous (can contain different types of values)

Reason (Old Syntax)ML (Older Syntax)JS Output
let ageAndName = (24, "Lil' ReScript");
let my3dCoordinates = (20.0, 30.5, 100.0);

Tuples' types can be used in type annotations as well. Tuple types visually resemble tuples values.

Reason (Old Syntax)ML (Older Syntax)JS Output
let ageAndName: (int, string) = (24, "Lil' ReScript");
// a tuple type alias
type coord3d = (float, float, float);
let my3dCoordinates: coord3d = (20.0, 30.5, 100.0);

Note: there's no tuple of size 1. You'd just use the value itself.

Usage

To get a specific member of a tuple, destructure it:

Reason (Old Syntax)ML (Older Syntax)JS Output
let (_, y, _) = my3dCoordinates; // now you've retrieved y

The _ means you're ignoring the indicated members of the tuple.

Tuples aren't meant to be updated mutatively. You'd create new ones by destructuring the old ones:

Reason (Old Syntax)ML (Older Syntax)JS Output
let coordinates1 = (10, 20, 30);
let (c1x, _, _) = coordinates1;
let coordinates2 = (c1x + 50, 20, 30);

Tips & Tricks

You'd use tuples in handy situations that pass around multiple values without too much ceremony. For example, to return many values:

Reason (Old Syntax)ML (Older Syntax)JS Output
let getCenterCoordinates = () => {
  let x = doSomeOperationsHere();
  let y = doSomeMoreOperationsHere();
  (x, y)
};

Try to keep the usage of tuple local. For data structures that are long-living and passed around often, prefer a record, which has named fields.

Primitive TypesRecord

© 2024 The ReScript Project

Software and assets distribution powered by KeyCDN.

About
  • Community
  • ReScript Association
Find us on