Skip to content

Instantly share code, notes, and snippets.

@aratama
Created February 9, 2016 15:32
Show Gist options
  • Save aratama/219fe26bca4847bbdc2e to your computer and use it in GitHub Desktop.
Save aratama/219fe26bca4847bbdc2e to your computer and use it in GitHub Desktop.
module FizzBazz where
import Prelude (Unit(), (*), const, (++), (+), mod, (/=), (&&))
import Control.Monad.Eff (Eff())
import Control.Monad.Eff.Console (CONSOLE(), print, log)
import Signal ((<~), runSignal, foldp, filter)
import Signal.Time (every, second, delay)
main :: forall eff . Eff (console :: CONSOLE | eff) Unit
main = fizzbazz
where
coutup = foldp (+) 0 (const 1 <~ (every (1.0 * second)))
numbers = print <~ filter (\x -> mod x 3 /= 0 && mod x 5 /= 0) 0 (delay (1.0 * second) coutup)
fizz = log <~ const "Fizz" <~ every (3.0 * second)
bazz = log <~ const "Bazz" <~ every (5.0 * second)
fizzbazz = runSignal (numbers ++ fizz ++ bazz)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment