{- This file is part of irc-fun-messages. - - Written in 2015 by fr33domlover . - - ♡ Copying is an act of love. Please copy, reuse and share. - - The author(s) have dedicated all copyright and related and neighboring - rights to this software to the public domain worldwide. This software is - distributed without any warranty. - - You should have received a copy of the CC0 Public Domain Dedication along - with this software. If not, see - . -} module Network.Irc.Messages.Internal.Util ( showt , listOf , req0 , req1 , req2 , req3 , req4 , req5 , req6 , req0m1 , req1m2 , req2m3 , req3m4 , min1 ) where import Data.Text (Text, pack) import Network.Irc.Messages.Internal.Types import Network.Irc.Types import Text.Regex.Applicative showt :: Int -> Text showt = pack . show listOf :: Regex a -> Regex [a] listOf re = (:) <$> re <*> many (sym ',' *> re) req0 :: [Parameter] -> Either AnalysisError Message -> Either AnalysisError Message req0 [] f = f req0 l _ = Left $ WrongNumArgs (length l) (Just $ Exactly 0) req1 :: [Parameter] -> (Parameter -> Either AnalysisError Message) -> Either AnalysisError Message req1 [p1] f = f p1 req1 l _ = Left $ WrongNumArgs (length l) (Just $ Exactly 1) req2 :: [Parameter] -> (Parameter -> Parameter -> Either AnalysisError Message) -> Either AnalysisError Message req2 [p1, p2] f = f p1 p2 req2 l _ = Left $ WrongNumArgs (length l) (Just $ Exactly 2) req3 :: [Parameter] -> (Parameter -> Parameter -> Parameter -> Either AnalysisError Message) -> Either AnalysisError Message req3 [p1, p2, p3] f = f p1 p2 p3 req3 l _ = Left $ WrongNumArgs (length l) (Just $ Exactly 3) req4 :: [Parameter] -> ( Parameter -> Parameter -> Parameter -> Parameter -> Either AnalysisError Message ) -> Either AnalysisError Message req4 [p1, p2, p3, p4] f = f p1 p2 p3 p4 req4 l _ = Left $ WrongNumArgs (length l) (Just $ Exactly 4) req5 :: [Parameter] -> ( Parameter -> Parameter -> Parameter -> Parameter -> Parameter -> Either AnalysisError Message ) -> Either AnalysisError Message req5 [p1, p2, p3, p4, p5] f = f p1 p2 p3 p4 p5 req5 l _ = Left $ WrongNumArgs (length l) (Just $ Exactly 5) req6 :: [Parameter] -> ( Parameter -> Parameter -> Parameter -> Parameter -> Parameter -> Parameter -> Either AnalysisError Message ) -> Either AnalysisError Message req6 [p1, p2, p3, p4, p5,p6] f = f p1 p2 p3 p4 p5 p6 req6 l _ = Left $ WrongNumArgs (length l) (Just $ Exactly 6) req0m1 :: [Parameter] -> (Maybe Parameter -> Either AnalysisError Message) -> Either AnalysisError Message req0m1 [] f = f Nothing req0m1 [p1] f = f $ Just p1 req0m1 l _ = Left $ WrongNumArgs (length l) (Just $ Between 0 1) req1m2 :: [Parameter] -> (Parameter -> Maybe Parameter -> Either AnalysisError Message) -> Either AnalysisError Message req1m2 [p1] f = f p1 Nothing req1m2 [p1, p2] f = f p1 (Just p2) req1m2 l _ = Left $ WrongNumArgs (length l) (Just $ Between 1 2) req2m3 :: [Parameter] -> ( Parameter -> Parameter -> Maybe Parameter -> Either AnalysisError Message ) -> Either AnalysisError Message req2m3 [p1, p2] f = f p1 p2 Nothing req2m3 [p1, p2, p3] f = f p1 p2 (Just p3) req2m3 l _ = Left $ WrongNumArgs (length l) (Just $ Between 2 3) req3m4 :: [Parameter] -> ( Parameter -> Parameter -> Parameter -> Maybe Parameter -> Either AnalysisError Message ) -> Either AnalysisError Message req3m4 [p1, p2, p3] f = f p1 p2 p3 Nothing req3m4 [p1, p2, p3, p4] f = f p1 p2 p3 (Just p4) req3m4 l _ = Left $ WrongNumArgs (length l) (Just $ Between 3 4) min1 :: [Parameter] -> (Parameter -> [Parameter] -> Either AnalysisError Message) -> Either AnalysisError Message min1 [] _ = Left $ WrongNumArgs 0 (Just $ AtLeast 1) min1 (p1:ps) f = f p1 ps