Fuzion Logo
fuzion-lang.dev — The Fuzion Language Portal
JavaScript seems to be disabled. Functionality is limited.

id.fz


# This file is part of the Fuzion language implementation.
#
# The Fuzion language implementation is free software: you can redistribute it
# and/or modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, version 3 of the License.
#
# The Fuzion language implementation is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License along with The
# Fuzion language implementation.  If not, see <https://www.gnu.org/licenses/>.


# -----------------------------------------------------------------------
#
#  Tokiwa Software GmbH, Germany
#
#  Source code of Fuzion standard library feature id
#
#  Author: Fridtjof Siebert (siebert@tokiwa.software)
#
# -----------------------------------------------------------------------

# id -- routine implementing the identity function
#
# When called, this feature returns its argument
#
#
public id(T type, x T) T => x


# identity -- feature returing the unary identity function
#
# When called, this feature returns a unary function that implements the
# identity for the given type.
#
# In most cases, you can use `id` instead and rely on partial application to
# create a Function instance, e.g. you can use any of these to produce the same
# result
#
#     all_true(s Sequence bool) => s ∀ id
#     all_true(s Sequence bool) => s ∀ (x -> id bool x)
#     all_true(s Sequence bool) => s ∀ (x -> id x)
#     all_true(s Sequence bool) => s ∀ (identity bool)
#
# or, using an intermediate field,
#
#     all_true(s Sequence bool) => { f (bool)->bool := id;               s ∀ f }
#     all_true(s Sequence bool) => { f (bool)->bool := (x -> id bool x); s ∀ f }
#     all_true(s Sequence bool) => { f (bool)->bool := (x -> id x);      s ∀ f }
#     all_true(s Sequence bool) => { f (bool)->bool := identity bool;    s ∀ f }
#
public identity(T type) T->T => id

last changed: 2025-07-10