Skip to content

Instantly share code, notes, and snippets.

@Walms
Created February 27, 2024 21:39
Show Gist options
  • Save Walms/a3c4de283785154c57e091d5a86ed3c9 to your computer and use it in GitHub Desktop.
Save Walms/a3c4de283785154c57e091d5a86ed3c9 to your computer and use it in GitHub Desktop.
Fizzer
type FizzBuzzer = int -> string
module FizzBuzzer =
type ValidFizzBuzzer = private ValidFizzBuzzer of FizzBuzzer
let createFizzBuzzer (possibleFizzBuzzer: FizzBuzzer) : Result<ValidFizzBuzzer, string> =
if possibleFizzBuzzer 3 = "Fizz" then
Ok (ValidFizzBuzzer possibleFizzBuzzer)
else
Error "Cannot create a ValidFizzBuzzer must return 'Fizz' for 3"
let runner (fizzBuzzer:Result<ValidFizzBuzzer, string> ) : string list =
match fizzBuzzer with
| Ok (ValidFizzBuzzer fb) ->
[0 .. 10 ] |> List.map fb
| Error e -> [e]
[<EntryPoint>]
let main args : int =
let badBuzzer = fun (x :int ) -> "Buzz"
let goodBuzzer =
fun (x :int ) ->
match x % 3, x % 5 with
| 0, 0 -> "FizzBuzz"
| 0, _ -> "Fizz"
| _, 0 -> "Buzz"
| _, _ -> string x
printfn "Running badBuzzer"
badBuzzer |> FizzBuzzer.createFizzBuzzer |> FizzBuzzer.runner |> List.iter (printfn "%s")
printfn "Running goodBuzzer"
goodBuzzer |> FizzBuzzer.createFizzBuzzer |> FizzBuzzer.runner |> List.iter (printfn "%s")
0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment