aboutsummaryrefslogtreecommitdiff
path: root/src/content/chapter1_functions/lesson04_generic_functions/code.gleam
blob: e232bf8cdc135b2dfdae5fd934d22b504a778496 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import gleam/io

pub fn main() {
  let add_one = fn(x) { x + 1 }
  let exclaim = fn(x) { x <> "!" }

  // Invalid, Int and String are not the same type
  // twice(10, exclaim)

  // Here the type variable is replaced by the type Int
  io.debug(twice(10, add_one))

  // Here the type variable is replaced by the type String
  io.debug(twice("Hello", exclaim))
}

fn twice(argument: value, function: fn(value) -> value) -> value {
  function(function(argument))
}