diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Plugin/Factorial.hs | 29 | ||||
| -rw-r--r-- | src/PluginList.hs | 4 | 
2 files changed, 32 insertions, 1 deletions
| diff --git a/src/Plugin/Factorial.hs b/src/Plugin/Factorial.hs new file mode 100644 index 0000000..f8cfee2 --- /dev/null +++ b/src/Plugin/Factorial.hs @@ -0,0 +1,29 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Plugin.Factorial +    ( factorial +    ) where + +import Text.Regex.TDFA ((=~)) +import TextShow (showt) + +import qualified Message as M +import Plugin.Base + +factorial = Plugin +    { matchRegex  = "^([0-9]+)!$" +    , perform     = factorialAction +    , command     = "<integer>!" +    , description = "Calculate the factorial of <integer>" +    } + +factorialAction :: PluginAction +factorialAction message = do +    case M.textStr message =~ matchRegex factorial :: [[String]] of +        []    -> return $ Left "I didn't understand" +        (m:_) -> do +            let number = last m +            return $ Right $ showt $ calculate $ (read number :: Int) + +calculate :: (Enum a, Num a) => a -> a +calculate n = product [1..n] diff --git a/src/PluginList.hs b/src/PluginList.hs index bfcae7e..7c950c0 100644 --- a/src/PluginList.hs +++ b/src/PluginList.hs @@ -3,6 +3,7 @@ module PluginList      ) where  import Plugin.Base (Plugin) +import Plugin.Factorial  import Plugin.GitHubCommit  import Plugin.GitRemoteSetOrigin @@ -10,6 +11,7 @@ import Plugin.GitRemoteSetOrigin  -- cause a circular import.  plugins :: [Plugin]  plugins = -    [ gitHubCommit +    [ factorial +    , gitHubCommit      , gitRemoteSetOrigin      ] | 
