Primary dispatcher for functional programming
UseFunction.RdUseFunction manages the dispatching for multipart functions in lambda.r. This is used internally by lambda.r.
Arguments
- fn
The function reference that is being applied
- fn.name
The name of a function that uses functional dispatching. This is just the name of the function being defined
- type.fn
The function representing the type constructor
- type.name
The name of the type
- ...
The arguments that are passed to dispatched functions
Examples
# Note that these are trivial examples for pedagogical purposes. Due to their
# trivial nature, most of these examples can be implemented more concisely
# using built-in R features.
reciprocal(x) %::% numeric : numeric
reciprocal(x) %when% {
x != 0
} %as% {
1 / x
}
reciprocal(x) %::% character : numeric
reciprocal(x) %as% {
reciprocal(as.numeric(x))
}
seal(reciprocal)
print(reciprocal)
#> <function>
#> [[1]]
#> reciprocal(x) %::% numeric:numeric
#> reciprocal(x) %when% {
#> x != 0
#> } %:=% ...
#> [[2]]
#> reciprocal(x) %::% character:numeric
#> reciprocal(x) %:=% ...
reciprocal(4)
#> [1] 0.25
reciprocal("4")
#> [1] 0.25