<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">IRC – Haskell – Aelve Guide</title><id>https://guide.aelve.com/haskell/feed/category/e8ccmlfv</id><updated>2016-08-24T14:31:25Z</updated><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/feed/category/e8ccmlfv"/><entry><id>q2cfbw2t</id><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">irc-core</title><updated>2016-08-24T14:31:25Z</updated><content xmlns:ns="http://www.w3.org/2005/Atom" ns:type="html">&lt;h1&gt;  &lt;span class=&#34;item-name&#34;&gt;irc-core&lt;/span&gt;

  
  (&lt;a href=&#34;https://hackage.haskell.org/package/irc-core&#34;&gt;Hackage&lt;/a&gt;)
&lt;/h1&gt;&lt;p&gt;Library for parsing and rendering IRC message in a high and low-level format.&lt;/p&gt;
&lt;h2&gt;Pros&lt;/h2&gt;&lt;ul&gt;&lt;p&gt;&lt;li&gt;Parser handles IRCv3 message-tags&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Permissive parser handles a range of IRC server outputs&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Support for splitting up MODE arguments&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Complete list of reply codes&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Integrates into an existing event loop&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Offers both low-level and high-level message views&lt;/li&gt;&lt;/p&gt;&lt;/ul&gt;&lt;h2&gt;Cons&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;&lt;h2&gt;Ecosystem&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://hackage.haskell.org/package/glirc&#34;&gt;glirc&lt;/a&gt; is a console based IRC client that is implemented on top of &lt;code&gt;irc-core&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/glguy/irc-core/blob/v2/bot/src/Main.hs&#34;&gt;irc-core-bot&lt;/a&gt; is a simple echo-bot example using &lt;code&gt;irc-core&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
</content><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/irc-e8ccmlfv#item-q2cfbw2t"/></entry><entry><id>asf8whnb</id><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">irc-client</title><updated>2016-08-23T23:16:09Z</updated><content xmlns:ns="http://www.w3.org/2005/Atom" ns:type="html">&lt;h1&gt;  &lt;span class=&#34;item-name&#34;&gt;irc-client&lt;/span&gt;

  
  (&lt;a href=&#34;https://hackage.haskell.org/package/irc-client&#34;&gt;Hackage&lt;/a&gt;)
&lt;/h1&gt;&lt;p&gt;A library that aims not to provide a full-blown “bot experience”, but some low-level building blocks for IRC clients.&lt;/p&gt;
&lt;h2&gt;Pros&lt;/h2&gt;&lt;ul&gt;&lt;p&gt;&lt;li&gt;Very simple setup&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Nice types&lt;/li&gt;&lt;/p&gt;&lt;/ul&gt;&lt;h2&gt;Cons&lt;/h2&gt;&lt;ul&gt;&lt;p&gt;&lt;li&gt;Event handling is kind of awkward and requires a lot of duplication because of partial handlers.&lt;/li&gt;&lt;/p&gt;&lt;/ul&gt;&lt;h2&gt;Notes&lt;/h2&gt;&lt;h1&gt;&lt;span id=&#34;item-notes-asf8whnb-gotchas&#34;&gt;&lt;/span&gt;Gotchas&lt;/h1&gt;&lt;ul&gt;
&lt;li&gt;Adding &lt;code&gt;defaultEventHandlers&lt;/code&gt; to your &lt;code&gt;_eventHandlers&lt;/code&gt; is a good idea for basic setup.&lt;/li&gt;
&lt;li&gt;You can handle every kind of &lt;a href=&#34;https://tools.ietf.org/html/rfc2812#section-5.1&#34;&gt;defined server response&lt;/a&gt; by using &lt;code&gt;ENumeric&lt;/code&gt; and &lt;code&gt;Numeric&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
</content><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/irc-e8ccmlfv#item-asf8whnb"/></entry><entry><id>ybu64qif</id><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">ircbot</title><updated>2016-08-23T14:12:47Z</updated><content xmlns:ns="http://www.w3.org/2005/Atom" ns:type="html">&lt;h1&gt;  &lt;span class=&#34;item-name&#34;&gt;ircbot&lt;/span&gt;

  
  (&lt;a href=&#34;https://hackage.haskell.org/package/ircbot&#34;&gt;Hackage&lt;/a&gt;)
&lt;/h1&gt;&lt;p&gt;A library to create an IRC bot, from 2012. It heavily uses Monad Transformers so might not be very beginner friendly.&lt;/p&gt;
&lt;h2&gt;Pros&lt;/h2&gt;&lt;ul&gt;&lt;p&gt;&lt;li&gt;Integrates into mtl&lt;/li&gt;&lt;/p&gt;&lt;/ul&gt;&lt;h2&gt;Cons&lt;/h2&gt;&lt;ul&gt;&lt;p&gt;&lt;li&gt;No way to wait for the bot to finish, since the function only returns a &lt;code&gt;ThreadId&lt;/code&gt;.&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Uses &lt;code&gt;irc&lt;/code&gt;, which only provides a &lt;em&gt;very&lt;/em&gt; thin layer of typing around the IRC protocol, no types for the different kinds of commands for example. You need to read the RFC.&lt;/li&gt;&lt;/p&gt;&lt;/ul&gt;&lt;h2&gt;Notes&lt;/h2&gt;&lt;h1&gt;&lt;span id=&#34;item-notes-ybu64qif-discussion&#34;&gt;&lt;/span&gt;Discussion&lt;/h1&gt;&lt;p&gt;Profpatsch: I had to drop this library because the composability stops at it only returning a &lt;code&gt;ThreadId&lt;/code&gt;. I haven’t found a way how it wants you to integrate further IO.&lt;/p&gt;
</content><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/irc-e8ccmlfv#item-ybu64qif"/></entry></feed>