# Functions

## Function Declaration Syntax

```fsharp
[exported] fun <functionName>[Generics]([Parameters]): <ReturnType> {
    <function body>
}
```

For syntax of `Generics` and `Parameters` - [#common-placeholders-throughout-documentation](../read-before-proceeding#common-placeholders-throughout-documentation "mention")

## Working Example

{% tabs %}
{% tab title="Gauntlet" %}
```fsharp
package main

import "fmt" as fmt
import "golang.org/x/exp/constraints" as constraints

fun isOver[T: constraints.Integer](a: T, b: T): Bool {
  return a > b
} 

fun createGreeting(firstName: String, lastName: String): String {
  return "Hello " + firstName + " " + lastName + "!"
}

fun main(): Unit {
  let age = 28
  let firstName = "John"
  let lastName = "Doe"
  let greeting = createGreeting(firstName, lastName)
  let isAdult = isOver(age, 18)
  fmt.println("Greeting:")
  fmt.println(greeting)
  fmt.println("Adult Status:")
  fmt.println(isAdult)
}
```
{% endtab %}

{% tab title="Transpiled" %}


```go
package main

import fmt "fmt"
import constraints "golang.org/x/exp/constraints"

func isOver[T constraints.Integer](a T, b T) bool {

	return a > b

}

func createGreeting(firstName string, lastName string) string {

	return "Hello " + firstName + " " + lastName + "!"

}

func main() {
	age := 28
	firstName := "John"
	lastName := "Doe"
	greeting := createGreeting(firstName, lastName)
	isAdult := isOver(age, 18)
	fmt.Println("Greeting:")
	fmt.Println(greeting)
	fmt.Println("Adult Status:")
	fmt.Println(isAdult)
	// Eliminates any 'unused variable' errors
	_, _, _, _, _ = age, firstName, greeting, isAdult, lastName

}

```
{% endtab %}

{% tab title="Output" %}
```
Greeting:
Hello John Doe!
Adult Status:
true
```
{% endtab %}
{% endtabs %}

