Skip to content

Instantly share code, notes, and snippets.

@erochest
Created August 8, 2014 11:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save erochest/d673e3b6bce5d45adac9 to your computer and use it in GitHub Desktop.
Save erochest/d673e3b6bce5d45adac9 to your computer and use it in GitHub Desktop.
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE KindSignatures #-}
{-# OPTIONS_GHC -Wall #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module FizzBuzz where
import Control.Applicative
import Data.Maybe
import Data.Monoid
instance Monoid a => Monoid (ZipList a) where
mempty = pure mempty
mappend = liftA2 mappend
(>~) :: forall (f :: * -> *) a. (Monoid (f a), Applicative f)
=> Int -> a -> ZipList (f a)
m >~ a = ZipList . cycle $ replicate (m - 1) mempty ++ [pure a]
fizzbuzz :: [String]
fizzbuzz = getZipList $ fromMaybe . show <$> ZipList [(1 :: Int)..] <*> 3 >~ "fizz" <> 5 >~ "buzz"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment