-
Notifications
You must be signed in to change notification settings - Fork 4
2015 005 Addition of Fn module
Author: Andreas Rossberg
Last revised: September 21, 2015
Status: proposed
Discussion: issue #6
signature FN
structure Fn :> FN
The Fn
structure provides various combinators to aid computing with function values.
val id : 'a -> 'a
val const : 'a -> 'b -> 'a
val apply : ('a -> 'b) * 'a -> 'b
val o : ('b -> 'c) * ('a -> 'b) -> ('a -> 'c)
val curry : ('a * 'b -> 'c) -> ('a -> 'b -> 'c)
val uncurry : ('a -> 'b -> 'c) -> ('a * 'b -> 'c)
val flip : ('a * 'b -> 'c) -> ('b * 'a -> 'c)
val repeat : int -> ('a -> 'a) -> ('a -> 'a)
val equal : ''a -> ''a -> bool
val notEqual : ''a -> ''a -> bool
-
id x
returns the valuex
(id
is the polymorphic identity function). -
const x y
returns the value x. -
apply (f, x)
applies the functionf
tox
. Thus, it is equivalent tof a
. -
f o g
is the function composition off
andg
. Thus,(f o g) x
is equivalent tof (g x)
. This function is the same as the globalo
operator and is also part of theGeneral
structure. -
curry f x y
is equivalent tof (x, y)
; i.e.,curry f
transforms the binary functionf
into curried form. -
uncurry f (x, y)
is equivalent tof x y
; i.e.,uncurry f
transforms the curried functionf
into a binary function. This function is the inverse ofcurry
. -
flip f (x, y)
is equivalent tof (y, x)
; i.e.,flip f
flips the argument order of the binary functionf
. -
repeat n f
returns the n-fold composition off
. Ifn
is zero, thenrepeat n f
returns the identity function. Ifn
is negative, then it raises the exceptionDomain
. -
equal a b
a curried version of the polymorphic equality function (=
). -
equal a b
a curried version of the polymorphic inequality function (<>
).
Other combinators could be added. These are the ones that I have needed most in practice.
Adopting this proposal should not affect existing programs.
The need for basic higher-order functions like id
and const
arises all the time in combination with other functionals.
So far, the SML Basis has lacked any of these functions, although they are standard in the libraries of most other functional programming languages.
This module also provides a more natural home for the existing o
operator, but it would also
remain in the General
structure for backward compatibility.
-
[2015-08-21] Reworked function descriptions to follow standard style [JHR].
-
[2015-08-16] Proposed