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 ] |