# Weekend Coding Kata Challenge – Fizzbuzz TDD Using Haskell

I wanted to check out different stacks recently. The goal is to pick an interesting new language and go deep on some aspects of it – understanding how to implement a simple web server with or without the language-specific framework. The main thing is to implement everything in TDD.

I had a brief look at Haskell in mid last year. It was really weird and mind-blowing when I first got to know Haskell. I had always planned to revisit the language, so I did it. Here is my Fizzbuzz kata implementation using the Haskell stack.

https://github.com/suryast/fizzbuzz-hs

``````module FizzBuzzSpec (spec) where

import Test.Hspec
import FizzBuzz

spec :: Spec
spec =
describe "fizzBuzz" \$ do

it "should print fizz if divisable by 3" \$
-- | Given
let input = 3
expected = "fizz"

-- | When
actual = fizzBuzz input

-- | Then
in actual `shouldBe` expected

it "should print the input if not divisable by 3 or 5" \$
-- | Given
let input = 4
expected = "4"

-- | When
actual = fizzBuzz input

-- | Then
in actual `shouldBe` expected

it "should print buzz if not divisable by 5" \$
-- | Given
let input = 5
expected = "buzz"

-- | When
actual = fizzBuzz input

-- | Then
in actual `shouldBe` expected

it "should print fizzbuzz if not divisable by 15" \$
-- | Given
let input = 15
expected = "fizzbuzz"

-- | When
actual = fizzBuzz input

-- | Then
in actual `shouldBe` expected``````
``````module FizzBuzz where

fizzBuzz :: Int -> [Char]
fizzBuzz input = if fizz(input) ++ buzz(input) == ""
then show input
else fizz(input) ++ buzz(input)

fizz :: Int -> [Char]
fizz input = if mod input 3 == 0 then "fizz" else ""

buzz :: Int -> [Char]
buzz input = if mod input 5 == 0 then "buzz" else ""``````

Setting up the Haskell’s Stack/Cabal stack was quite time-consuming, and it took the most time. Learning about the syntax and how to write tests using Hspec was quite exciting otherwise. I am quite keen to learn more about Haskell in the future.