Accessor Function

tuple_test = script do
let
my_key_value = (“Key”, 1)
my_coordinate = (1.0 : Decimal, 2.0 : Decimal, 3.0 : Decimal)

assert (fst my_key_value == “Key”)
assert (snd my_key_value == 1)
assert (my_key_value._1 == “Key”)
assert (my_key_value._2 == 1)

assert (my_coordinate == (fst3 my_coordinate, snd3 my_coordinate, thd3 my_coordinate))

Not getting what fst3, snd3…thd3 are ? Doc syas they are accessor fxns but not able to print their value using debug

You can largely ignore them. Here is a snippet of code that will hopefully illustrate matters:

module Main where

import Daml.Script
import DA.Tuple (fst3, snd3, thd3)

setup : Script ()
setup = script do
  let pair = (1, 2)
  let triplet = ("a", "b", "c")

  assert $ pair._1 == 1
  assert $ pair._2 == 2
  assert $ triplet._1 == "a"
  assert $ triplet._2 == "b"
  assert $ triplet._3 == "c"

  assert $ fst pair == 1
  assert $ snd pair == 2
  assert $ fst3 triplet == "a"
  assert $ snd3 triplet == "b"
  assert $ thd3 triplet == "c"

The functions fst and snd work only on 2-element tuples and, respectively, get you the first and second element of that pair. The function fst3, snd3, and thd3 wirk only on tuples of 3 elements and get you, respectively, the first, second, and third element of that triplet.

They are largely made redundant by the existence of the ._x notation, which works on tuple size 2 to 5 included. (For tuples or size larger than 5 you do not get any accessor so pattern matching is your only option. You really should not be using tuples of size larger than 5.)

1 Like