Nanyx

Fizzbuzzbaz

Fizzbuzz with the rules supplied at runtime, built from pipes and a returned lambda.

module fizzbuzzbaz

-- Fizzbuzzbaz is a variant of fizzbuzz where the rules are supplied at
-- runtime. For example, 3 -> "fizz", 5 -> "buzz", 7 -> "baz", so a multiple
-- of both 3 and 7 is replaced with "fizzbaz".

def playNumber: (divisor: int, word: string, i: int) -> string = { divisor, word, i ->
  if i % divisor == 0 then word else ""
}

def numberGame: list((int, string)) -> (int -> string) = { rules ->
  { i ->
    rules
      \map { divisor, word -> playNumber(divisor = divisor, word = word, i = i) }
      \String.join("")
      \match
        | "" -> "{i}"
        | s -> s
  }
}

def fizzbuzz = numberGame([(3, "fizz"), (5, "buzz"), (7, "baz")])

@entry
def main = {
  for 1..30 | i -> println(fizzbuzz(i))
}

This program lives in the repository as examples/fizzbuzzbaz.nyx.