This is the latest docs version
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
Belt Module
Overview
Belt
submodules
  • Array
  • Float
  • HashMap
    • String
    • Int
    HashSet
    • String
    • Int
    Id
    • MakeHashable
    • MakeHashableU
    • MakeComparable
    • MakeComparableU
  • Int
  • List
  • Map
    • Dict
    • String
    • Int
    MutableMap
    • String
    • Int
  • MutableQueue
  • MutableSet
    • String
    • Int
  • MutableStack
  • Option
  • Range
  • Result
    • t
      t
    • v
      getExn
    • v
      mapWithDefaultU
    • v
      mapWithDefault
    • v
      mapU
    • v
      map
    • v
      flatMapU
    • v
      flatMap
    • v
      getWithDefault
    • v
      isOk
    • v
      isError
    • v
      eqU
    • v
      eq
    • v
      cmpU
    • v
      cmp
  • Set
    • Dict
    • String
    • Int
    SortArray
    • String
    • Int
    API / Belt / Result

    Result

    Result types are really useful to describe the result of a certain operation without relying on exceptions or option types.

    This module gives you useful utilities to create and combine Result data.

    t

    RESCRIPT
    type t<'a, 'b> = result<'a, 'b> = Ok('a) | Error('b)

    getExn

    RESCRIPT
    let getExn: t<'a, 'b> => 'a

    getExn(res): when res is Ok(n), returns n when res is Error(m), raise an exception

    Examples

    RESCRIPT
    Belt.Result.getExn(Belt.Result.Ok(42)) == 42 Belt.Result.getExn(Belt.Result.Error("Invalid data")) /* raises exception */

    mapWithDefaultU

    RESCRIPT
    let mapWithDefaultU: (t<'a, 'c>, 'b, 'a => 'b) => 'b

    mapWithDefault

    RESCRIPT
    let mapWithDefault: (t<'a, 'c>, 'b, 'a => 'b) => 'b

    mapWithDefault(res, default, f): When res is Ok(n), returns f(n), otherwise default.

    Examples

    RESCRIPT
    let ok = Belt.Result.Ok(42) Belt.Result.mapWithDefault(ok, 0, (x) => x / 2) == 21 let error = Belt.Result.Error("Invalid data") Belt.Result.mapWithDefault(error, 0, (x) => x / 2) == 0

    mapU

    RESCRIPT
    let mapU: (t<'a, 'c>, 'a => 'b) => t<'b, 'c>

    map

    RESCRIPT
    let map: (t<'a, 'c>, 'a => 'b) => t<'b, 'c>

    map(res, f): When res is Ok(n), returns Ok(f(n)). Otherwise returns res unchanged. Function f takes a value of the same type as n and returns an ordinary value.

    Examples

    RESCRIPT
    let f = (x) => sqrt(Belt.Int.toFloat(x)) Belt.Result.map(Ok(64), f) == Ok(8.0) Belt.Result.map(Error("Invalid data"), f) == Error("Invalid data")

    flatMapU

    RESCRIPT
    let flatMapU: (t<'a, 'c>, 'a => t<'b, 'c>) => t<'b, 'c>

    flatMap

    RESCRIPT
    let flatMap: (t<'a, 'c>, 'a => t<'b, 'c>) => t<'b, 'c>

    flatMap(res, f): When res is Ok(n), returns f(n). Otherwise, returns res unchanged. Function f takes a value of the same type as n and returns a Belt.Result.

    Examples

    RESCRIPT
    let recip = (x) => if (x !== 0.0) { Belt.Result.Ok(1.0 /. x) } else { Belt.Result.Error("Divide by zero") } Belt.Result.flatMap(Ok(2.0), recip) == Ok(0.5) Belt.Result.flatMap(Ok(0.0), recip) == Error("Divide by zero") Belt.Result.flatMap(Error("Already bad"), recip) == Error("Already bad")

    getWithDefault

    RESCRIPT
    let getWithDefault: (t<'a, 'b>, 'a) => 'a

    getWithDefault(res, defaultValue): If res is Ok(n), returns n, otherwise default

    Examples

    RESCRIPT
    Belt.Result.getWithDefault(Ok(42), 0) == 42 Belt.Result.getWithDefault(Error("Invalid Data"), 0) == 0

    isOk

    RESCRIPT
    let isOk: t<'a, 'b> => bool

    isOk(res): Returns true if res is of the form Ok(n), false if it is the Error(e) variant.

    isError

    RESCRIPT
    let isError: t<'a, 'b> => bool

    isError(res): Returns true if res is of the form Error(e), false if it is the Ok(n) variant.

    eqU

    RESCRIPT
    let eqU: (t<'a, 'c>, t<'b, 'd>, ('a, 'b) => bool) => bool

    eq

    RESCRIPT
    let eq: (t<'a, 'c>, t<'b, 'd>, ('a, 'b) => bool) => bool

    eq(res1, res2, f): Determine if two Belt.Result variables are equal with respect to an equality function. If res1 and res2 are of the form Ok(n) and Ok(m), return the result of f(n, m). If one of res1 and res2 are of the form Error(e), return false If both res1 and res2 are of the form Error(e), return true

    Examples

    RESCRIPT
    let good1 = Belt.Result.Ok(42) let good2 = Belt.Result.Ok(32) let bad1 = Belt.Result.Error("invalid") let bad2 = Belt.Result.Error("really invalid") let mod10equal = (a, b) => mod(a, 10) === mod(b, 10) Belt.Result.eq(good1, good2, mod10equal) == true Belt.Result.eq(good1, bad1, mod10equal) == false Belt.Result.eq(bad2, good2, mod10equal) == false Belt.Result.eq(bad1, bad2, mod10equal) == true

    cmpU

    RESCRIPT
    let cmpU: (t<'a, 'c>, t<'b, 'd>, ('a, 'b) => int) => int

    cmp

    RESCRIPT
    let cmp: (t<'a, 'c>, t<'b, 'd>, ('a, 'b) => int) => int

    cmp(res1, res2, f): Compare two Belt.Result variables with respect to a comparison function. The comparison function returns -1 if the first variable is "less than" the second, 0 if the two variables are equal, and 1 if the first is "greater than" the second.

    If res1 and res2 are of the form Ok(n) and Ok(m), return the result of f(n, m). If res1 is of the form Error(e) and res2 of the form Ok(n), return -1 (nothing is less than something) If res1 is of the form Ok(n) and res2 of the form Error(e), return 1 (something is greater than nothing) If both res1 and res2 are of the form Error(e), return 0 (equal)

    Examples

    RESCRIPT
    let good1 = Belt.Result.Ok(59) let good2 = Belt.Result.Ok(37) let bad1 = Belt.Result.Error("invalid") let bad2 = Belt.Result.Error("really invalid") let mod10cmp = (a, b) => Pervasives.compare(mod(a, 10), mod(b, 10)) Belt.Result.cmp(Ok(39), Ok(57), mod10cmp) == 1 Belt.Result.cmp(Ok(57), Ok(39), mod10cmp) == (-1) Belt.Result.cmp(Ok(39), Error("y"), mod10cmp) == 1 Belt.Result.cmp(Error("x"), Ok(57), mod10cmp) == (-1) Belt.Result.cmp(Error("x"), Error("y"), mod10cmp) == 0
    Types and values
    • t
      t
    • v
      getExn
    • v
      mapWithDefaultU
    • v
      mapWithDefault
    • v
      mapU
    • v
      map
    • v
      flatMapU
    • v
      flatMap
    • v
      getWithDefault
    • v
      isOk
    • v
      isError
    • v
      eqU
    • v
      eq
    • v
      cmpU
    • v
      cmp

    © 2024 The ReScript Project

    Software and assets distribution powered by KeyCDN.

    About
    • Community
    • ReScript Association
    Find us on