lambdabot-4.2.1: Plugin/Fresh.hs
{-# LANGUAGE TemplateHaskell, MultiParamTypeClasses #-}
-- | Haskell project name generation
-- semi-joke
module Plugin.Fresh (theModule) where
import Plugin
$(plugin "Fresh")
instance Module FreshModule Integer where
moduleCmds _ = ["freshname"]
moduleHelp _ _ = "freshname. Return a unique Haskell project name."
moduleDefState _ = return 0
moduleSerialize _ = Just stdSerial
process_ _ _ _ = withMS $ \n f -> do
f (n+1)
return ["Ha" ++ reverse (freshname n)]
freshname :: Integer -> String
freshname i
| i == 0 = [chr (ord 'a')]
| r == 0 = [chr (ord 'a' + (fromIntegral a))]
| otherwise = chr (ord 'a' + (fromIntegral a)) : freshname r
where
(r,a) = i `quotRem` 26