-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Common types for IRC related packages
--
-- This library provides types useful to programs and libraries working
-- with Internet Relay Chat (IRC). It allows basic IRC concepts like
-- channel, nickname, message and so on to be used by IRC parsers and IRC
-- clients and IRC servers without unnecessary duplication of type
-- definitions.
--
-- Note that the library possibly doesn't yet fully handle all the types
-- related to the various IRC messages types, for example user and
-- channel modes. These are added gradually, and patches are welcome.
--
-- All the text based types use strict Data.Text.Text. This allows
-- efficient processing of message text while supporting character-based
-- operations that require recognizing Unicode.
--
-- If you are writing a simple IRC client module, you can probably use
-- Network.Irc.Types.Base, which contains the subset you'll likely
-- need. But if you're writing an IRC message parser or serializer,
-- you'll probably want to use Network.Irc.Types, which contains
-- all the types.
@package irc-fun-types
@version 0.2
module Network.Irc.Types.Base
-- | IRC server hostname, e.g. orwell.freenode.net
newtype Hostname
Hostname :: Text -> Hostname
[unHostname] :: Hostname -> Text
-- | An IRC service name.
newtype ServiceName
ServiceName :: Text -> ServiceName
[unServiceName] :: ServiceName -> Text
-- | System user name, i.e. the first part of user@host.tld
newtype Username
Username :: Text -> Username
[unUsername] :: Username -> Text
-- | IRC nickname
newtype Nickname
Nickname :: Text -> Nickname
[unNickname] :: Nickname -> Text
-- | IRC channel name (including the prefix character), e.g.
-- #freepost
newtype Channel
Channel :: Text -> Channel
[unChannel] :: Channel -> Text
-- | IRC protocol command name, i.e. PRIVMSG
newtype CmdName
CmdName :: Text -> CmdName
[unCmdName] :: CmdName -> Text
-- | IRC protocol numeric command number
newtype CmdNumber
CmdNumber :: Int -> CmdNumber
[unCmdNumber] :: CmdNumber -> Int
-- | IRC message parameter, e.g. second word in JOIN #freepost
type Parameter = Text
-- | Chat message content, i.e. a message or a part of a text message meant
-- to be sent or received between people through IRC.
newtype MsgContent
MsgContent :: Text -> MsgContent
[unMsgContent] :: MsgContent -> Text
-- | IRC connection password.
newtype Password
Password :: Text -> Password
[unPassword] :: Password -> Text
-- | IRC channel password.
newtype ChannelKey
ChannelKey :: Text -> ChannelKey
[unChannelKey] :: ChannelKey -> Text
-- | IRC channel topic line.
newtype ChannelTopic
ChannelTopic :: Text -> ChannelTopic
[unChannelTopic] :: ChannelTopic -> Text
-- | A user's "real name" as kept by the IRC server.
newtype RealName
RealName :: Text -> RealName
[unRealName] :: RealName -> Text
-- | An optional comment used by several IRC commands, e.g. a part message,
-- which is a line shown when a user leaves a channel.
newtype Comment
Comment :: Text -> Comment
[unComment] :: Comment -> Text
-- | Network port number.
newtype PortNumber
PortNumber :: Int -> PortNumber
[unPortNumber] :: PortNumber -> Int
-- | IRC privilege status for a user in the context of a specific channel.
data Privilege
Regular :: Privilege
Voice :: Privilege
Operator :: Privilege
-- | IRC channel privacy settings.
data ChannelPrivacy
Secret :: ChannelPrivacy
Private :: ChannelPrivacy
Public :: ChannelPrivacy
instance GHC.Show.Show Network.Irc.Types.Base.ChannelPrivacy
instance GHC.Classes.Eq Network.Irc.Types.Base.ChannelPrivacy
instance GHC.Show.Show Network.Irc.Types.Base.Privilege
instance GHC.Classes.Eq Network.Irc.Types.Base.Privilege
instance GHC.Show.Show Network.Irc.Types.Base.PortNumber
instance GHC.Classes.Eq Network.Irc.Types.Base.PortNumber
instance GHC.Show.Show Network.Irc.Types.Base.Comment
instance GHC.Show.Show Network.Irc.Types.Base.RealName
instance GHC.Show.Show Network.Irc.Types.Base.ChannelTopic
instance GHC.Show.Show Network.Irc.Types.Base.ChannelKey
instance GHC.Classes.Eq Network.Irc.Types.Base.ChannelKey
instance GHC.Show.Show Network.Irc.Types.Base.Password
instance GHC.Classes.Eq Network.Irc.Types.Base.Password
instance Data.String.IsString Network.Irc.Types.Base.MsgContent
instance GHC.Base.Monoid Network.Irc.Types.Base.MsgContent
instance GHC.Show.Show Network.Irc.Types.Base.MsgContent
instance GHC.Show.Show Network.Irc.Types.Base.CmdNumber
instance GHC.Classes.Eq Network.Irc.Types.Base.CmdNumber
instance GHC.Show.Show Network.Irc.Types.Base.CmdName
instance GHC.Classes.Eq Network.Irc.Types.Base.CmdName
instance Data.Hashable.Class.Hashable Network.Irc.Types.Base.Channel
instance GHC.Show.Show Network.Irc.Types.Base.Channel
instance GHC.Classes.Eq Network.Irc.Types.Base.Channel
instance Data.Hashable.Class.Hashable Network.Irc.Types.Base.Nickname
instance GHC.Show.Show Network.Irc.Types.Base.Nickname
instance GHC.Classes.Eq Network.Irc.Types.Base.Nickname
instance GHC.Show.Show Network.Irc.Types.Base.Username
instance GHC.Classes.Eq Network.Irc.Types.Base.Username
instance GHC.Show.Show Network.Irc.Types.Base.ServiceName
instance GHC.Classes.Eq Network.Irc.Types.Base.ServiceName
instance GHC.Show.Show Network.Irc.Types.Base.Hostname
instance GHC.Classes.Eq Network.Irc.Types.Base.Hostname
module Network.Irc.Types
-- | IRC message prefix.
data Prefix
-- | The server which sends the message
PrefixServer :: Hostname -> Prefix
-- | The user which sends the message (if the message comes from a user)
PrefixNick :: Nickname -> (Maybe Username) -> (Maybe Host) -> Prefix
-- | User address containing a name part (as in "user") and an optional
-- host part (as in "user@host").
data UserAddress
UserAddress :: Username -> (Maybe Host) -> UserAddress
-- | Some IRC commands operate on a target, that is either a single user or
-- an entire IRC server.
data Target
NickTarget :: Nickname -> Target
ServerTarget :: Hostname -> Target
-- | An IP address.
data Address
IPv4 :: Text -> Address
IPv6 :: Text -> Address
-- | A host, either a hostname (e.g. irc.freenode.net) or an IP
-- address, or a cloak assigned by the server.
data Host
HostByName :: Hostname -> Host
HostByAddr :: Address -> Host
HostCloak :: Text -> Host
-- | An IRC command code. Either a named command, or a numeric one.
data Command
NamedCmd :: CmdName -> Command
NumericCmd :: CmdNumber -> Command
-- | Part of a Mask.
data MaskPart
-- | A literal character.
MaskChar :: Char -> MaskPart
-- | A wildcard which matches a single character.
MaskWildOne :: MaskPart
-- | A wildcard which matches zero or more characters.
MaskWildMany :: MaskPart
-- | A pattern for matching host and server names. A mask in the protocol
-- is a string which consists of literal characters and wildcards. There
-- are two wildcards: ?, which matches a single
-- character; *, which matches any number of characters
-- (zero or more).
newtype Mask
Mask :: [MaskPart] -> Mask
-- | Some IRC command parameters are targets, and one way to specify a
-- target is using a Mask.
data TargetMask
-- | Host mask, prefixed with # in the protocol. Selects
-- all the users whose host matches the mask.
HostMask :: Mask -> TargetMask
-- | Server mask, prefixed with $ in the protocol. Selects
-- all the users connected to a server which matches the mask.
ServerMask :: Mask -> TargetMask
-- | A generic IRC message. It consists of a sender prefix, command name
-- (string or numeric) and optionally a list of parameters.
data GenericMessage
GenericMessage :: Maybe Prefix -> Command -> [Text] -> GenericMessage
[gmPrefix] :: GenericMessage -> Maybe Prefix
[gmCommand] :: GenericMessage -> Command
[gmParams] :: GenericMessage -> [Text]
-- | An IRC message of a specific type. This includes only messages whose
-- command is a name. Messages with a numeric command are handled in the
-- Network.IRC.Fun.Messages.Reply module.
data SpecificMessage
SpecificMessage :: (Maybe Prefix) -> Message -> SpecificMessage
-- | Some IRC commands have targets. For example, to which channel to send
-- a given text message. Targets are specified as parameters in IRC
-- messages.
data MessageTarget
-- | An IRC channel.
ChannelTarget :: Channel -> MessageTarget
-- | An IRC user. Possible combinations in the protocol are:
--
--
-- - Address (address host is required)
-- - Address and server (address host is optional)
-- - Nickname
-- - Nickname and address (address host is required)
--
UserTarget :: (Maybe Nickname) -> (Maybe UserAddress) -> (Maybe Hostname) -> MessageTarget
-- | A mask which matches the server or host of the users to whom the
-- message should be sent.
MaskTarget :: TargetMask -> MessageTarget
-- | A server query. Can be sent through a StatsMessage.
data Query
-- | TODO
Connections :: Query
-- | TODO
CommandUsage :: Query
-- | TODO
PrivilegedUsers :: Query
-- | TODO
Uptime :: Query
-- | TODO
OtherQuery :: Char -> Query
-- | An IRC message of specific type (excluding the optional sender prefix,
-- see SpecificMessage).
data Message
PassMessage :: Password -> Message
NickMessage :: Nickname -> Message
-- | first bool = whether invisible, second bool = whether sees wallops
UserMessage :: Username -> Bool -> Bool -> RealName -> Message
OperMessage :: Username -> Password -> Message
-- | first list: modes to remove (-), second list: modes to add (+)
UserModeMessage :: Nickname -> [UserMode] -> [UserMode] -> Message
ServiceMessage :: Nickname -> Mask -> Text -> Message
QuitMessage :: (Maybe Comment) -> Message
SQuitMessage :: Hostname -> Comment -> Message
JoinMessage :: (Maybe ([Channel], [ChannelKey])) -> Message
PartMessage :: [Channel] -> (Maybe Comment) -> Message
ChannelModeMessage :: [ChannelMode] -> [ChannelMode] -> Message
TopicMessage :: Channel -> (Maybe ChannelTopic) -> Message
NamesMessage :: [Channel] -> (Maybe Hostname) -> Message
ListMessage :: [Channel] -> (Maybe Hostname) -> Message
InviteMessage :: Nickname -> Channel -> Message
KickMessage :: [Channel] -> [Username] -> (Maybe Comment) -> Message
PrivMsgMessage :: MessageTarget -> MsgContent -> Message
PrivActionMessage :: MessageTarget -> MsgContent -> Message
NoticeMessage :: MessageTarget -> MsgContent -> Message
MotdMessage :: (Maybe Hostname) -> Message
LusersMessage :: (Maybe (Mask, Maybe Hostname)) -> Message
VersionMessage :: (Maybe (Either Hostname Mask)) -> Message
StatsMessage :: (Maybe (Query, Maybe (Either Hostname Mask))) -> Message
LinksMessage :: (Maybe (Maybe (Either Hostname Mask), Mask)) -> Message
TimeMessage :: (Maybe (Either Hostname Mask)) -> Message
ConnectMessage :: Hostname -> PortNumber -> (Either Hostname Mask) -> Message
TraceMessage :: (Maybe Target) -> Message
AdminMessage :: (Maybe Target) -> Message
InfoMessage :: (Maybe Target) -> Message
ServlistMessage :: (Maybe (Mask, Maybe Text)) -> Message
SQueryMessage :: ServiceName -> MsgContent -> Message
WhoMessage :: (Maybe (Mask, Bool)) -> Message
WhoisMessage :: (Maybe Hostname) -> [Mask] -> Message
WhowasMessage :: [Nickname] -> (Maybe (Int, Maybe Hostname)) -> Message
KillMessage :: Nickname -> Comment -> Message
PingMessage :: Hostname -> (Maybe Hostname) -> Message
PongMessage :: Hostname -> (Maybe Hostname) -> Message
ErrorMessage :: Text -> Message
AwayMessage :: (Maybe MsgContent) -> Message
RehashMessage :: Message
DieMessage :: Message
RestartMessage :: Message
SummonMessage :: Username -> (Maybe (Hostname, Maybe Channel)) -> Message
UsersMessage :: (Maybe Hostname) -> Message
WallopsMessage :: MsgContent -> Message
UserhostMessage :: [Nickname] -> Message
IsonMessage :: [Nickname] -> Message
-- | An error occuring while analyzing a parsed IRC protocol message into a
-- specific message type, such as JoinMessage.
data AnalysisError
WrongNumArgs :: Int -> (Maybe ArgSpec) -> AnalysisError
InvalidArg :: (Maybe Int) -> (Maybe Text) -> (Maybe Text) -> AnalysisError
OtherError :: Text -> AnalysisError
-- | Specifies the number of parameter a certain IRC message type accepts.
data ArgSpec
Exactly :: Int -> ArgSpec
AtLeast :: Int -> ArgSpec
AtMost :: Int -> ArgSpec
Between :: Int -> Int -> ArgSpec
OneOf :: [Int] -> ArgSpec
-- | TODO
data UserMode
UModeInvisible :: UserMode
UModeCallerID :: UserMode
UModeSeeWallops :: UserMode
UModeDeaf :: UserMode
UModeNoForwarding :: UserMode
UModeBlockUnidentified :: UserMode
UModeConnectedViaSSL :: UserMode
UModeAway :: UserMode
UModeRestricted :: UserMode
UModeOperator :: UserMode
UModeLocalOperator :: UserMode
UModeSeeNotices :: UserMode
UModeOther :: Char -> UserMode
-- | TODO
data ChannelMode
CModeCreator :: ChannelMode
CModeOperator :: ChannelMode
CModeVoice :: ChannelMode
CModeAnonymous :: ChannelMode
CModeInviteOnly :: ChannelMode
CModeModerated :: ChannelMode
CModeNoMessagesFromOutside :: ChannelMode
CModeQuiet :: ChannelMode
CModePrivate :: ChannelMode
CModeSecret :: ChannelMode
CModeServerReop :: ChannelMode
CModeTopicSettableByChannelOpOnly :: ChannelMode
CModeKey :: (Maybe ChannelKey) -> ChannelMode
CModeUserLimit :: (Maybe Int) -> ChannelMode
CModeBanMask :: (Maybe Mask) -> ChannelMode
CModeExceptionMask :: (Maybe Mask) -> ChannelMode
CModeInvitationMask :: (Maybe Mask) -> ChannelMode
CModeOther :: Char -> [Text] -> ChannelMode
CModeFreenodeQuiet :: (Maybe Mask) -> ChannelMode
data ChannelModeType
ModeTypeList :: ChannelModeType
ModeTypeSetting :: ChannelModeType
ModeTypeMaybeSetting :: ChannelModeType
ModeTypeFlag :: ChannelModeType
-- | TODO
data GenericReply
GenericReply :: Hostname -> CmdNumber -> Target -> [Parameter] -> GenericReply
[grSender] :: GenericReply -> Hostname
[grCode] :: GenericReply -> CmdNumber
[grTarget] :: GenericReply -> Target
[grParams] :: GenericReply -> [Parameter]
-- | TODO
data Reply
-- | TODO
WelcomeReply :: Reply
-- | TODO
YourHostReply :: Reply
-- | TODO
CreatedReply :: Reply
-- | TODO
MyInfoReply :: Reply
-- | TODO
BounceReply :: Reply
-- | TODO
ISupportReply :: Reply
-- | TODO
UserHostReply :: Reply
-- | TODO
IsOnReply :: Reply
-- | TODO
AwayReply :: Reply
-- | TODO
UnAwayReply :: Reply
-- | TODO
NoAwayReply :: Reply
-- | TODO
WhoIsUserReply :: Reply
-- | TODO
WhoIsServerReply :: Reply
-- | TODO
WhoIsOperatorReply :: Reply
-- | TODO
WhoIsIdleReply :: Reply
-- | TODO
EndOfWhoIsReply :: Reply
-- | TODO
WhoIsChannelsReply :: Reply
-- | TODO
WhoWasUserReply :: Reply
-- | TODO
EndOfWhoWasReply :: Reply
-- | TODO
ListStartReply :: Reply
-- | TODO
ListReply :: Reply
-- | TODO
ListEndReply :: Reply
-- | TODO
UniqueOpIsReply :: Reply
-- | TODO
ChannelModeIsReply :: Reply
-- | TODO
NoTopicReply :: Reply
-- | TODO
TopicReply :: Reply
-- | TODO
InvitingReply :: Reply
-- | TODO
SummoningReply :: Reply
-- | TODO
InviteListReply :: Reply
-- | TODO
EndOfInviteListReply :: Reply
-- | TODO
ExceptListReply :: Reply
-- | TODO
EndOfExceptListReply :: Reply
-- | TODO
VersionReply :: Reply
-- | TODO
WhoReply :: Reply
-- | TODO
EndOfWhoReply :: Reply
-- | Lists members of IRC channels. Sent when JOINing a channel to list the
-- users in that channel, or as a response to the NAMES command.
NamesReply :: ChannelPrivacy -> Channel -> [(Privilege, Nickname)] -> Reply
-- | Sent after a sequence of 0 or more NameReplys, to signal that
-- the list transmission is finished.
EndOfNamesReply :: Reply
-- | TODO
LinksReply :: Reply
-- | TODO
EndOfLinksReply :: Reply
-- | TODO
BanListReply :: Reply
-- | TODO
EndOfBanListReply :: Reply
-- | TODO
InfoReply :: Reply
-- | TODO
EndOfInfoReply :: Reply
-- | TODO
MotdStartReply :: Reply
-- | TODO
MessageOfTheDayReply :: Reply
-- | TODO
EndOfMessageOfTheDayReply :: Reply
-- | TODO
YoureOperReply :: Reply
-- | TODO
RehashingReply :: Reply
-- | TODO
YoureServiceReply :: Reply
-- | TODO
TimeReply :: Reply
-- | TODO
UsersStartReply :: Reply
-- | TODO
UsersReply :: Reply
-- | TODO
EndOfUsersReply :: Reply
-- | TODO
NoUsersReply :: Reply
-- | TODO
TraceLinkReply :: Reply
-- | TODO
TraceConnectingReply :: Reply
-- | TODO
TraceHandshakeReply :: Reply
-- | TODO
TraceUnknownReply :: Reply
-- | TODO
TraceOperatorReply :: Reply
-- | TODO
TraceUserReply :: Reply
-- | TODO
TraceServerReply :: Reply
-- | TODO
TraceServiceReply :: Reply
-- | TODO
TraceNewTypeReply :: Reply
-- | TODO
TraceClassReply :: Reply
-- | TODO
TraceReconnectReply :: Reply
-- | TODO
TraceLogReply :: Reply
-- | TODO
TraceEndReply :: Reply
-- | TODO
StatsLinkInfoReply :: Reply
-- | TODO
StatsCommandsReply :: Reply
-- | TODO
EndOfStatsReply :: Reply
-- | TODO
StatsUptimeReply :: Reply
-- | TODO
StatsOLineReply :: Reply
-- | TODO
UModeIsReply :: Reply
-- | TODO
ServListReply :: Reply
-- | TODO
ServListEndReply :: Reply
-- | TODO
LuserClientReply :: Reply
-- | TODO
LuserOpReply :: Reply
-- | TODO
LuserUnknownReply :: Reply
-- | TODO
LuserChannelsReply :: Reply
-- | TODO
LuserMeReply :: Reply
-- | TODO
AdminMeReply :: Reply
-- | TODO
AdminLocation1Reply :: Reply
-- | TODO
AdminLocation2Reply :: Reply
-- | TODO
AdminEmailReply :: Reply
-- | TODO
TryAgainReply :: Reply
-- | An IRC server numeric reply of a specific type.
data SpecificReply
SpecificReply :: Hostname -> Target -> Reply -> SpecificReply
instance GHC.Show.Show Network.Irc.Types.AnalysisError
instance GHC.Show.Show Network.Irc.Types.ArgSpec
instance GHC.Show.Show Network.Irc.Types.SpecificReply
instance GHC.Show.Show Network.Irc.Types.Reply
instance GHC.Classes.Eq Network.Irc.Types.Reply
instance GHC.Show.Show Network.Irc.Types.GenericReply
instance GHC.Show.Show Network.Irc.Types.ReservedErrorCode
instance GHC.Classes.Eq Network.Irc.Types.ReservedErrorCode
instance GHC.Show.Show Network.Irc.Types.ReservedReplyCode
instance GHC.Classes.Eq Network.Irc.Types.ReservedReplyCode
instance GHC.Show.Show Network.Irc.Types.ErrorReplyCode
instance GHC.Classes.Eq Network.Irc.Types.ErrorReplyCode
instance GHC.Show.Show Network.Irc.Types.CommandResponseCode
instance GHC.Classes.Eq Network.Irc.Types.CommandResponseCode
instance GHC.Show.Show Network.Irc.Types.SpecificMessage
instance GHC.Show.Show Network.Irc.Types.Message
instance GHC.Show.Show Network.Irc.Types.ChannelMode
instance GHC.Classes.Eq Network.Irc.Types.ChannelMode
instance GHC.Show.Show Network.Irc.Types.UserMode
instance GHC.Classes.Eq Network.Irc.Types.UserMode
instance GHC.Show.Show Network.Irc.Types.Query
instance GHC.Show.Show Network.Irc.Types.MessageTarget
instance GHC.Show.Show Network.Irc.Types.GenericMessage
instance GHC.Show.Show Network.Irc.Types.TargetMask
instance GHC.Classes.Eq Network.Irc.Types.TargetMask
instance GHC.Show.Show Network.Irc.Types.Mask
instance GHC.Classes.Eq Network.Irc.Types.Mask
instance GHC.Show.Show Network.Irc.Types.MaskPart
instance GHC.Classes.Eq Network.Irc.Types.MaskPart
instance GHC.Show.Show Network.Irc.Types.Command
instance GHC.Classes.Eq Network.Irc.Types.Command
instance GHC.Show.Show Network.Irc.Types.Prefix
instance GHC.Classes.Eq Network.Irc.Types.Prefix
instance GHC.Show.Show Network.Irc.Types.UserAddress
instance GHC.Classes.Eq Network.Irc.Types.UserAddress
instance GHC.Show.Show Network.Irc.Types.Host
instance GHC.Classes.Eq Network.Irc.Types.Host
instance GHC.Show.Show Network.Irc.Types.Address
instance GHC.Classes.Eq Network.Irc.Types.Address
instance GHC.Show.Show Network.Irc.Types.Target
instance GHC.Classes.Eq Network.Irc.Types.Target