irc-fun-messages-0.4: src/Network/Irc/Messages/Internal/Util.hs
{- This file is part of irc-fun-messages.
-
- Written in 2015 by fr33domlover <fr33domlover@rel4tion.org>.
-
- ♡ 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
- <http://creativecommons.org/publicdomain/zero/1.0/>.
-}
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