<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LAMBDAPHONE &#187; release</title>
	<atom:link href="http://coder.bsimmons.name/blog/tag/release/feed/" rel="self" type="application/rss+xml" />
	<link>http://coder.bsimmons.name/blog</link>
	<description>fragmentary ideas  ䷿  intellectual what-nots  ䷷  and haskell programming  ䷴</description>
	<lastBuildDate>Sun, 29 Jan 2012 17:24:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>simple-actors 0.1.0 released</title>
		<link>http://coder.bsimmons.name/blog/2011/10/simple-actors-0-1-0-released/</link>
		<comments>http://coder.bsimmons.name/blog/2011/10/simple-actors-0-1-0-released/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 18:02:50 +0000</pubDate>
		<dc:creator>jberryman</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://coder.bsimmons.name/blog/?p=583</guid>
		<description><![CDATA[<p>Just a quick announcement of the release of <a href="http://hackage.haskell.org/packages/archive/simple-actors/0.1.0/doc/html/Control-Concurrent-Actors.html">simple-actors</a>, a DSL-style haskell library for more structured concurrent programs via the <a href="http://en.wikipedia.org/wiki/Actor_model">Actor Model</a>. You can fork it on <a href="https://github.com/jberryman/simple-actors">github</a>, and install it via cabal with a </p>
<blockquote><p>cabal</p></blockquote><p>&#8230; <a href="http://coder.bsimmons.name/blog/2011/10/simple-actors-0-1-0-released/" class="read_more">   [ R E A D &#124; M O R E ]</a></p>]]></description>
			<content:encoded><![CDATA[<p>Just a quick announcement of the release of <a href="http://hackage.haskell.org/packages/archive/simple-actors/0.1.0/doc/html/Control-Concurrent-Actors.html">simple-actors</a>, a DSL-style haskell library for more structured concurrent programs via the <a href="http://en.wikipedia.org/wiki/Actor_model">Actor Model</a>. You can fork it on <a href="https://github.com/jberryman/simple-actors">github</a>, and install it via cabal with a </p>
<blockquote><p>cabal install simple-actors
</p></blockquote>
<p>This version is significantly more coherent, powerful and simple than the original 0.0.1 version (which was something I just whipped together for a blog post I haven&#8217;t gotten around to writing yet).</p>
<p>Let me know if you have any comments or suggestions!</p>
]]></content:encoded>
			<wfw:commentRss>http://coder.bsimmons.name/blog/2011/10/simple-actors-0-1-0-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Module &#8216;chan-split&#8217; released</title>
		<link>http://coder.bsimmons.name/blog/2011/07/module-chan-split-released/</link>
		<comments>http://coder.bsimmons.name/blog/2011/07/module-chan-split-released/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 02:17:09 +0000</pubDate>
		<dc:creator>jberryman</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[IO]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://coder.bsimmons.name/blog/?p=571</guid>
		<description><![CDATA[<h2>Whaa?</h2>
<p>chan-split is a haskell library that is a wrapper around <a href="http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Concurrent-Chan.html"><code>Control.Concurrent.Chan</code></a>s that separates a Chan into a readable side and a writable side. </p>
<p>We also provide two other modules: <code>Data.Cofunctor</code> (because there didn&#8217;t seem to be one&#8230; <a href="http://coder.bsimmons.name/blog/2011/07/module-chan-split-released/" class="read_more">   [ R E A D &#124; M O R E ]</a></p>]]></description>
			<content:encoded><![CDATA[<h2>Whaa?</h2>
<p>chan-split is a haskell library that is a wrapper around <a href="http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Concurrent-Chan.html"><code>Control.Concurrent.Chan</code></a>s that separates a Chan into a readable side and a writable side. </p>
<p>We also provide two other modules: <code>Data.Cofunctor</code> (because there didn&#8217;t seem to be one anywhere), and <code>Control.Concurrent.Chan.Class</code>. The latter creates two classes: <code>ReadableChan</code> and <code>WritableChan</code>, making the fundamental chan functions polymorphic, and defining an instance for standard <code>Chan</code> as well as <code>MVar</code> (an MVar is a singleton bounded channel, wanna fight about it?).</p>
<h2>Why?</h2>
<p>Having separate read/write sides makes it easier to reason about your code, supports doing some cool things (defining <code>Functor</code> and <code>Cofunctor</code> instances), and makes more sense (e.g. the function of <a href="http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Concurrent-Chan.html#t:dupChan">dupChan</a> in the base library is much easier to understand as an operation that happens on an <code>OutChan</code>).</p>
<p>Also I use it in (the coming new, less stupid version of) my module <a href="http://hackage.haskell.org/package/simple-actors">simple-actors</a>.</p>
<h2>Where?</h2>
<p>You can get it with a:</p>
<blockquote><p>cabal install chan-split</p></blockquote>
<p>And check out the <a href="http://hackage.haskell.org/package/chan-split">docs on hackage</a>. Or check out the <a href="https://github.com/jberryman/chan-split">source on github</a> and send me pull requests.</p>
<h1>Usage</h1>
<p>Let&#8217;s write the numbers 1 &#8211; 10 to the InChan and read them as a stream in the OutChan:</p>
<p><blockquote class="vimblock"><br />
<span class="lnr">&nbsp;1&nbsp;</span><span class="Structure">module</span>&nbsp;<span class="Normal">Main</span><br />
<span class="lnr">&nbsp;2&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Structure">where</span><br />
<span class="lnr">&nbsp;3&nbsp;</span><br />
<span class="lnr">&nbsp;4&nbsp;</span><span class="PreProc">import</span>&nbsp;<span class="Normal">Control.Concurrent.Chan.Split</span><br />
<span class="lnr">&nbsp;5&nbsp;</span><span class="PreProc">import</span>&nbsp;<span class="Normal">Control.Concurrent</span>(<span class="Function">forkIO</span>)<br />
<span class="lnr">&nbsp;6&nbsp;</span><br />
<span class="lnr">&nbsp;7&nbsp;</span><span class="Function">main</span>&nbsp;<span class="Operator">=</span>&nbsp;<span class="Statement">do</span><br />
<span class="lnr">&nbsp;8&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Comment">-- Instead of a single Chan, we initialize a pair of (InChan,OutChan)</span><br />
<span class="lnr">&nbsp;9&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;(inC,outC)&nbsp;<span class="Operator">&lt;-</span>&nbsp;newSplitChan<br />
<span class="lnr">10&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Comment">-- fork a writer on the InChan</span><br />
<span class="lnr">11&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;forkIO&nbsp;<span class="Operator">$</span>&nbsp;writeStuffTo&nbsp;inC&nbsp;[<span class="Number">1</span><span class="Operator">..</span><span class="Number">10</span>]<br />
<span class="lnr">12&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="Comment">-- read from the OutChan in the main thread:</span><br />
<span class="lnr">13&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;getStuffOutOf&nbsp;outC&nbsp;<span class="Operator">&gt;&gt;=</span><br />
<span class="lnr">14&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mapM_&nbsp;print&nbsp;<span class="Operator">.</span>&nbsp;take&nbsp;<span class="Number">10</span>&nbsp;<br />
<br /></blockquote></p>
<p>And we&#8217;ll make <code>writeStuffTo</code> and <code>getStuffOutOf</code>, simply be the standard functions. Note that <code>writeListToChan</code> is actually polymorphic.</p>
<p><blockquote class="vimblock"><br />
<span class="lnr">16&nbsp;</span><span class="Function">writeStuffTo</span>&nbsp;::&nbsp;InChan&nbsp;Int&nbsp;<span class="Operator">-&gt;</span>&nbsp;[Int]&nbsp;<span class="Operator">-&gt;</span>&nbsp;IO&nbsp;()<br />
<span class="lnr">17&nbsp;</span><span class="Function">writeStuffTo</span>&nbsp;<span class="Operator">=</span>&nbsp;writeList2Chan<br />
<span class="lnr">18&nbsp;</span><br />
<span class="lnr">19&nbsp;</span><span class="Function">getStuffOutOf</span>&nbsp;::&nbsp;OutChan&nbsp;Int&nbsp;<span class="Operator">-&gt;</span>&nbsp;IO&nbsp;[Int]<br />
<span class="lnr">20&nbsp;</span><span class="Function">getStuffOutOf</span>&nbsp;<span class="Operator">=</span>&nbsp;getChanContents<br />
<br /></blockquote></p>
<p>Now I&#8217;ll demonstrate the use of our Functor and Cofunctor instances by re-defining those two functions above, after importing our Cofunctor class</p>
<p><blockquote class="vimblock"><br />
<span class="lnr">17&nbsp;</span><span class="PreProc">import</span>&nbsp;<span class="Normal">Data.Cofunctor</span><br />
<span class="lnr">18&nbsp;</span><br />
<span class="lnr">19&nbsp;</span><span class="Operator">...</span><br />
<span class="lnr">20&nbsp;</span><br />
<span class="lnr">21&nbsp;</span><span class="Comment">-- we could convert the [Int] to [String] here but will instead demonstrate the</span><br />
<span class="lnr">22&nbsp;</span><span class="Comment">-- Cofmap instance:</span><br />
<span class="lnr">23&nbsp;</span><span class="Function">writeStuffTo</span>&nbsp;::&nbsp;InChan&nbsp;String&nbsp;<span class="Operator">-&gt;</span>&nbsp;[Int]&nbsp;<span class="Operator">-&gt;</span>&nbsp;IO&nbsp;()<br />
<span class="lnr">24&nbsp;</span><span class="Function">writeStuffTo</span>&nbsp;<span class="Operator">=</span>&nbsp;writeList2Chan&nbsp;<span class="Operator">.</span>&nbsp;cofmap&nbsp;show<br />
<span class="lnr">25&nbsp;</span><br />
<span class="lnr">26&nbsp;</span><span class="Comment">-- likewise this demonstrates the Functor instance of OutChan:</span><br />
<span class="lnr">27&nbsp;</span><span class="Function">getStuffOutOf</span>&nbsp;::&nbsp;OutChan&nbsp;String&nbsp;<span class="Operator">-&gt;</span>&nbsp;IO&nbsp;[Int]<br />
<span class="lnr">28&nbsp;</span><span class="Function">getStuffOutOf</span>&nbsp;<span class="Operator">=</span>&nbsp;getChanContents&nbsp;<span class="Operator">.</span>&nbsp;fmap&nbsp;read<br />
<br /></blockquote></p>
<p>All right, leave your love or hate and stay tuned for the new (less stupider) simple-actors lib.</p>
]]></content:encoded>
			<wfw:commentRss>http://coder.bsimmons.name/blog/2011/07/module-chan-split-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>simple-actors: a simple Actor Model concurrency library</title>
		<link>http://coder.bsimmons.name/blog/2011/05/simple-actors-a-simple-actor-model-concurrency-library/</link>
		<comments>http://coder.bsimmons.name/blog/2011/05/simple-actors-a-simple-actor-model-concurrency-library/#comments</comments>
		<pubDate>Mon, 30 May 2011 19:31:13 +0000</pubDate>
		<dc:creator>jberryman</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[monads]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://coder.bsimmons.name/blog/?p=568</guid>
		<description><![CDATA[<blockquote><p><strong>EDIT:</strong> I&#8217;ve just released <a href="http://hackage.haskell.org/packages/archive/simple-actors/0.1.0/doc/html/Control-Concurrent-Actors.html">version 0.1.0</a> of this library. It is a complete re-write / re-think that I think makes the library much more attractive, simple and powerful. There won&#8217;t be any more dramatic API changes.</p></blockquote>
<p>I was in&#8230; <a href="http://coder.bsimmons.name/blog/2011/05/simple-actors-a-simple-actor-model-concurrency-library/" class="read_more">   [ R E A D &#124; M O R E ]</a></p>]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>EDIT:</strong> I&#8217;ve just released <a href="http://hackage.haskell.org/packages/archive/simple-actors/0.1.0/doc/html/Control-Concurrent-Actors.html">version 0.1.0</a> of this library. It is a complete re-write / re-think that I think makes the library much more attractive, simple and powerful. There won&#8217;t be any more dramatic API changes.</p></blockquote>
<p>I was in need of a simple, tight library implementing the <a href="http://en.wikipedia.org/wiki/Actor_model">Actor Model of concurrency</a> and didn&#8217;t find one on hackage, so I wrote my own. You can check out the docs <a href="http://hackage.haskell.org/package/simple-actors-0.0.1">here</a> and get it with a </p>
<blockquote><p>$ cabal install simple-actors</p></blockquote>
<p>The library is really just a thin layer around <code>Chan</code>s, and I made no great effort to ensure that the library conforms to any particular formal definition of the actor model, but rather tried to make an idiomatic haskell library for more structured concurrent programming.</p>
<p>I&#8217;ve been going all sorts of ways with this and would appreciate any feedback anyone would like to share.</p>
<p>I&#8217;ll be using it in some (hopefully fun and interesting) posts in the near future, to model concurrent systems, and also exploring creating a more involved concurrency library. So stay tuned if that&#8217;s what you&#8217;re into.</p>
]]></content:encoded>
			<wfw:commentRss>http://coder.bsimmons.name/blog/2011/05/simple-actors-a-simple-actor-model-concurrency-library/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Magic Haskell code completions in Vim!</title>
		<link>http://coder.bsimmons.name/blog/2011/05/magic-haskell-code-completions-in-vim/</link>
		<comments>http://coder.bsimmons.name/blog/2011/05/magic-haskell-code-completions-in-vim/#comments</comments>
		<pubDate>Sat, 07 May 2011 05:09:33 +0000</pubDate>
		<dc:creator>jberryman</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimscript]]></category>

		<guid isPermaLink="false">http://coder.bsimmons.name/blog/?p=559</guid>
		<description><![CDATA[<blockquote><p><strong>UPDATE</strong>: This project is on hold for now. Many people have pointed out that the snipMate VIM plugin can probably handle many of these completions. I may make a collection of those at some point, but I no longer have</p></blockquote><p>&#8230; <a href="http://coder.bsimmons.name/blog/2011/05/magic-haskell-code-completions-in-vim/" class="read_more">   [ R E A D &#124; M O R E ]</a></p>]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>UPDATE</strong>: This project is on hold for now. Many people have pointed out that the snipMate VIM plugin can probably handle many of these completions. I may make a collection of those at some point, but I no longer have much interest in finishing this.</p></blockquote>
<p>I&#8217;m trying something new: putting code-in-progress up on github while I work on it. So! I love haskell so freaking much I&#8217;ve started creating a vimscript to improve the <em>typeability</em> of the language in the vim editor, and the working name is: <a href="https://github.com/jberryman/haskomplete.vim">haskomplete.vim</a></p>
<p>The script looks at the context of your cursor and fills in stuff when you type <strong>CTRL-H</strong>. For instance, this:</p>
<blockquote><p><code>func1, func2 </code></p></blockquote>
<p>becomes&#8230;</p>
<blockquote><p><code>func1, func2 :: ^<br />
func1 = undefined<br />
func2 = undefined</code></p></blockquote>
<p>&#8230;with the cursor positioned where I show the carat.</p>
<p>Check out the <strong>README.md</strong> on github for installation details.</p>
<p>I&#8217;ve only implemented a few of my planned completions so far. I&#8217;ll give another shout when it&#8217;s more complete. </p>
<p>In the meantime please <a href="http://help.github.com/pull-requests/">send me a pull request</a> with bug fixes, your own awesome completions, etc. or just tell me how much you think you might love it. I would love if this became something of a community project.</p>
]]></content:encoded>
			<wfw:commentRss>http://coder.bsimmons.name/blog/2011/05/magic-haskell-code-completions-in-vim/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PEZ: the Potentially-Excellent Zipper library release</title>
		<link>http://coder.bsimmons.name/blog/2011/04/pez-zipper-library-released/</link>
		<comments>http://coder.bsimmons.name/blog/2011/04/pez-zipper-library-released/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 20:07:35 +0000</pubDate>
		<dc:creator>jberryman</dc:creator>
				<category><![CDATA[haskell]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[TypeSystem]]></category>
		<category><![CDATA[zipper]]></category>

		<guid isPermaLink="false">http://coder.bsimmons.name/blog/?p=554</guid>
		<description><![CDATA[<p>I&#8217;m happy to announce the release of a <a href="http://hackage.haskell.org/package/pez">zipper library I named <strong>PEZ</strong></a>! I&#8217;ve been learning and building this silly library almost as long as I&#8217;ve been learning haskell. It&#8217;s not as great as it could be, but I&#8217;m&#8230; <a href="http://coder.bsimmons.name/blog/2011/04/pez-zipper-library-released/" class="read_more">   [ R E A D &#124; M O R E ]</a></p>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m happy to announce the release of a <a href="http://hackage.haskell.org/package/pez">zipper library I named <strong>PEZ</strong></a>! I&#8217;ve been learning and building this silly library almost as long as I&#8217;ve been learning haskell. It&#8217;s not as great as it could be, but I&#8217;m releasing it now because it&#8217;s about time.</p>
<p>You can check it out with a:</p>
<blockquote><p><code>cabal install pez</code></p></blockquote>
<p>The library provides a generic <a href="http://www.haskell.org/haskellwiki/Zipper">zipper</a> that can be used on all types in the Typeable class, for which the user defines (or generates) lenses from the excellent <a href="http://hackage.haskell.org/package/fclabels">fclabels</a> package.</p>
<p>Since <code>Typeable</code> instances are deriveable in GHC and fclabels lenses can be generated with a line of TH code, this makes for a very pain-free and intuitive zipper. </p>
<p>The <a href="http://hackage.haskell.org/packages/archive/base/latest/doc/html/Data-Typeable.html">Typeable class</a> gives us the ability to move up and down through complex mutually-recursive structures, even &#8220;down through&#8221; reversible computations!</p>
<p>The lenses from &#8216;fclabels&#8217; give us a way of referring to elements in data types in a way that is composable, allowing us to store our history as continuations and provide powerful mechanisms for &#8220;saving&#8221; a path through a data structure.</p>
<p>There is more to do: in particular I haven&#8217;t yet examined any of the performance characteristics of the approach I take, but please try it out and let me know how it works for you!</p>
]]></content:encoded>
			<wfw:commentRss>http://coder.bsimmons.name/blog/2011/04/pez-zipper-library-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk
Database Caching 1/20 queries in 0.031 seconds using disk

Served from: coder.bsimmons.name @ 2012-02-05 11:27:27 -->
