Types of Operators in F#

Introduction

F# contains a number of basic operators. Operators are a more aesthetic way to call a function. This is an interesting and compelling feature in F#. F# supports two types of Operators. The Prefix and the Infix type. F# provide a diverse set of Operators which you can use with Boolean, numeric, string and Collection Type. The Operators defined in F# and its libraries are too numerous.

Prefix Operators

A Prefix operator is an operator that has one operand. Prefix means that the operator precedes its operand such as (-a). A Prefix operator appears before its operand.

Infix Operators

An Infix operator is an operator that appears between the first and second operands. An Infix operator takes two or more arguments. It will take a form like (a+b).

Operator Overloading

F# operators are overloaded, which means you can use more than one Type with an operator and both operands must be the same type. Otherwise the compiler will generate an Error. F# also allows the user to define and redefine operators. Operators in F# follow a set of rules like C# for operator overloading, therefore, any class in the BCL or any .NET libraries written to support operator overloading in C# will support it in F#. You can use the + Operator to concatenate strings as well as to add a System.TimeSpan to a System.DateTime, because these types support an overload of + operator.

Example-

let words = "Dea " + "and " + "Dazzy"
open System
let nextyear =
    DateTime.Now + new TimeSpan(365, 0, 0, 0, 0)

Operators are not values like functions, so they cannot be passed to other functions as a parameter. However if you need to use an Operator as a value, you can do this by surrounding it in parentheses. Then the Operator will behave like a Function.

The user can define their own Operator or redefine any of the existing ones. Consider the following example that redefines + to perform a Subtraction.

Example-

Redefine a  Operator
let (+) X Y = X - Y
printfn "%i" (6 + 4)

Output-

Redefine a Operator

Operators

Math Operators in F#

The given table shows Math Operators.

Operator Name Form of Expression Description
abs abs a Overloaded absolute value
acos acos a Overloaded inverse cosine
asin asin a Overloaded inverse sine
atan atan a Overloaded inverse tangent
atan2 atan2 ab Overloaded of inverse tangent of  a/b
ceil ceil a Overloaded floating point ceiling
cos cos a Overloaded cosine
cosh cosh a Overloaded Hyperbolic Cosine
exp exp a Overloaded exponent
floor floor a Overloaded floating point floor
log log a Overloaded natural logarithm
log10 log10 a Overloaded base-10 logarithm
(**) a**y Overloaded exponential
pown pown ab Overloaded integer exponential
round round a Overloaded rounding
sign sign a Overloaded sign function
sin sin a Overloaded sine function
sinh sinh a Overloaded hyperbolic sine function
sqrt sqrt a Overloaded square root function
tan tan a Overloaded tangent function
tanh tanh a Overloaded hyperbolic tangent function

The Basic Arithmetic Operators in F#

The given table shows the Arithmetic operators.

Operator Name Form Of Expression Description
(+) a+b Overloaded addition
(-) a-b Overloaded subtraction
(*) a*b Overloaded multiplication
(/) a/b Overloaded divison
(%) a%b Overloaded modulus
(~-) -a Overloaded unary negation
not not a Boolean negation

Bitwise Manipulation Operators in F#.
The given table shows Bitwise Operators.
Operator Name Form of Expression Description
(>>>) a>>>b Overloaded bitwise shift left
(<<<) a<<<b Overloaded arithmetic shift right shift
(^^^) a^^^b Overloaded bitwise exclusive or
(&&&) a&&&b Overloaded bitwise and
(|||) a|||b Overloaded bitwise or
(~~~) ~~~a Overloaded bitwise negation

Comparison and Equality Operators in F#
The given table shows the Comparison and Equality operators.
Operator Name Form of Expression Description
(>) a>b Generic less-than
(>=) a>=b Generic less-than-or-equal
(<) a<b Generic greater-than
(<=) a<=b Generic greater-than-or-equal
(=) a=b Generic equality
(<>) a<>b Generic disequality
max max ab Generic maximum
min min ab Generic minimum

Exception Operators in F#
The given table shows Exception operators.
Operator Name Form of Expression Description
failwith failwith a Raise a FailureException exception
invalid_arg invalid_arg a Raise an ArgumentException exception
raise raise a Raise an exception
rethrow rethrow{} Special Operator to raise an exception

Pipelining and Composition Operators in F#
The given table shows the composition and pipelining Operators.
Operator Name Form of Expression Description
(|>) a |> f pipelining
(>>) f>>g function composition
(<|) f<|a backward pipelining
(<<) g<<f backward function composition
ignore ignore a compute and discard a value

Pair Operators in F#
The given table shows the pair Operators.
Operator Name Form of Expression Description
fst fst p Take the first element of a pair
snd snd p Take the second Element of a Pair

Object Transform operators in F#
The given table shows the Object Transform operators.
Operator Name Form of Expression Description
box box b Convert to object representation
hash hash b Generic hashing operator
sizeof sizeof<type> Compute the size of a value of given type
typeof typeof<type> Compute the system type representation of given type
typedefof typedefof<type> Compute the System type representation of given types and calls
unbox unbox b Convert from object representation
ref ref b Allocate a mutable reference cell
(!) !b Read a mutable reference cell

Note: Some Operators have been added in the CTP release and new to existing users like pown and also some operators give special type when you apply them on Floating point argument with unit of measure annotations.
Example-

How to generate a factorial of a given number with a negation operator in F# interactive.

Setting environment for using Microsoft Visual Studio 2010 x86 tools.

D:\Dea saddler\VC>fsi.exe

Microsoft (R) F# 2.0 Interactive build 4.0.30319.1
Copyright (c) Microsoft Corporation. All Rights Reserved.

For help type #help;;

> !10
- ;;
val it : int = 3628800
>

Output-

Factorial example

Summary

In this article I have covered all types of operators in F#.


Similar Articles