Created
February 27, 2024 21:39
-
-
Save Walms/a3c4de283785154c57e091d5a86ed3c9 to your computer and use it in GitHub Desktop.
Fizzer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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