<?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>Alson Kemp &#187; Turbinado</title>
	<atom:link href="http://www.alsonkemp.com/tag/turbinado/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alsonkemp.com</link>
	<description>Hackfoofery</description>
	<lastBuildDate>Thu, 05 Jan 2012 03:53:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>A Plea For &#8220;cabal install&#8221;</title>
		<link>http://www.alsonkemp.com/haskell/a-plea-for-cabal-install/</link>
		<comments>http://www.alsonkemp.com/haskell/a-plea-for-cabal-install/#comments</comments>
		<pubDate>Fri, 26 Dec 2008 20:43:40 +0000</pubDate>
		<dc:creator>alson</dc:creator>
				<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Turbinado]]></category>
		<category><![CDATA[cabal]]></category>
		<category><![CDATA[cabal install]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.alsonkemp.com/?p=177</guid>
		<description><![CDATA[Updated per Ganesh&#8217;s comments. Over here, Adolfo commented: &#8220;Hi,I tried to do follow the example, but I couldn’t even install the packages, hsx and hs-plugins were impossible. I tried with cabal and manually, and neither of those worked . any suggestion, known issue with this packages?&#8221; I&#8217;ve been busy adding features to Turbinado and haven&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Updated per Ganesh&#8217;s comments.</p>

<hr />

<p>Over <a href="http://www.alsonkemp.com/haskell/turbinado-implementing-a-poor-mans-wiki/" target="_blank">here</a>, Adolfo commented:</p>

<blockquote>&#8220;Hi,I tried to do follow the example, but I couldn’t even install the packages, hsx and hs-plugins were impossible. I tried with cabal and manually, and neither of those worked . any suggestion, known issue with this packages?&#8221;</blockquote>

<p>I&#8217;ve been busy adding features to Turbinado and haven&#8217;t circled back around to making sure that it&#8217;s easy to build, so I can claim a lot of the blame for the build problems.  Turns out to be really important that publicly released packages are easily buildable&#8230;</p>

<p>Thinking back, I have really struggled to build Turbinado&#8230; and I wrote Turbinado!  Turbinado depends on some particular bugfix-ish library releases (e.g. GSomething 0.6.<strong>1</strong>).  With GHC 6.10, a bunch of libraries have broken or have changed so much that they badly break Turbinado.  (I need to specify better the versions in turbinado.cabal.)</p>

<p>At times, I&#8217;ve considered bundling the dependencies into Turbinado so that building Turbinado would be easy, but that&#8217;s always felt like a cop-out.  So I&#8217;m pleading for &#8220;cabal install&#8221;.  Given Turbinado&#8217;s dependence on particular versions of libraries, I would love to able to do:
<pre>cabal install turbinado
  OR  (from /home/alson/turbinado)
cabal build</pre></p>

<h3><a href="http://hackage.haskell.org/trac/hackage/wiki/CabalInstall">Cabal Install</a></h3>

<p>Most casual users of Ruby, Python, Perl, Java, etc, know that those languages have automagic build/dependencies system (respectively, gem, eggs, CPAN, maven).  The tools may be of varying quality, but many <a href="http://www.rubygems.org/read/chapter/1">tutorials</a> include something like &#8220;First, use GEM to install the package: gem install rails&#8221; and demonstrate just how simple it is to get a useful piece of software installed.</p>

<p>This is not the case in Haskell.  I&#8217;d guess that no more than 5% of Haskellers know about the <em>cabal</em> command line tool and &#8220;cabal install&#8221;.  On the other hand, I&#8217;d guess that 95% of novice Rubyers know about &#8220;gem install&#8221;.  These automated build/dependency system are now critical to the success of languages.  As a beginner in Ruby, I always knew that I could easily try out various libraries by using GEM to install bits of software.  I&#8217;m now fairly experienced with Haskell and, <em>partly because of that experience</em>, I <em>don&#8217;t believe</em> that I can easily try out various Haskell libraries.</p>

<p><a href="http://www.cs.chalmers.se/~d00nibro/">Niklas Broberg&#8217;s</a> <a href="http://code.haskell.org/HSP/">HSP</a> is a great example of the challenge of building Haskell programs.  HSP is very nicely separated into modular libraries which: makes it easy to apply pieces of HSP&#8217;s functionality to a program; makes it hard for a human (at least for me) to build any one part of HSP because each part depends on so many other parts.  A build/dependency tool would make HSP much easier to build into existing programs.</p>

<h3>The Plea</h3>

<p>I love using Haskell and Haskell will only get better if more people are able to use it.  IMO, a pre-condition to the growth of the language is a solid, easy to use build/dependency system.  Cabal is that system for GHC and the <em><a href="http://hackage.haskell.org/trac/hackage/wiki/CabalInstall">cabal</a></em> command line tool is a key part of that system.</p>

<p>Unfortunately, the <em>cabal</em> command line tool isn&#8217;t bundled with GHC, but &#8230;  Please get it, build it, use it, report any bugs, compliment the Cabal team, etc.  It&#8217;ll be a great help to the Haskell community.
<pre>darcs get http://darcs.haskell.org/cabal-install
cd cabal-install
sh bootstrap.sh</pre></p>

<h3> Update: Haskell Platform </h3>

<p>Ganesh points out the Haskell Platform Proposal, so it looks as though there is a plan to incorporate the cabal command line tool.  See the following:</p>

<p><a href="http://www.haskell.org/haskellwiki/Haskell_Platform">http://www.haskell.org/haskellwiki/Haskell_Platform</a></p>

<p><a href="http://www.haskell.org/haskellwiki/Haskell_Platform/FAQ">http://www.haskell.org/haskellwiki/Haskell_Platform/FAQ</a></p>

<hr />

<p><del datetime="2008-12-27T01:04:10+00:00">P.S.  Anyone know if the <em>cabal</em> command line tool is going to make it into GHC?</del></p>

<hr />

<p>Links to <em>cabal install</em> information:</p>

<p><a href="http://hackage.haskell.org/trac/hackage/wiki/CabalInstall">http://hackage.haskell.org/trac/hackage/wiki/CabalInstall</a></p>

<p><a href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/cabal-install">http://hackage.haskell.org/cgi-bin/hackage-scripts/package/cabal-install</a></p>

<p><a href="http://ghcmutterings.wordpress.com/2008/11/10/bootstrapping-cabal-install/">http://ghcmutterings.wordpress.com/2008/11/10/bootstrapping-cabal-install/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alsonkemp.com/haskell/a-plea-for-cabal-install/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>A HAML parser for Haskell</title>
		<link>http://www.alsonkemp.com/programming/a-haml-parser-for-haskell/</link>
		<comments>http://www.alsonkemp.com/programming/a-haml-parser-for-haskell/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 05:56:30 +0000</pubDate>
		<dc:creator>alson</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[HAML]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Turbinado]]></category>

		<guid isPermaLink="false">http://www.alsonkemp.com/?p=74</guid>
		<description><![CDATA[HAML&#8216;s lovely. As I&#8217;ve been working with Turbinado, I&#8217;ve been having some issues with HSP. HSP is an insanely impressive piece of software, but its error messages can be a bit unclear. So I started playing around a bit with HAML. Got me wondering &#8220;How easy would be to write a HAML parser in Haskell?&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://haml.hamptoncatlin.com/">HAML</a>&#8216;s lovely.  As I&#8217;ve been working with <a href="http://www.turbinado.org">Turbinado, </a> I&#8217;ve been having some issues with <a href="http://www.cs.chalmers.se/~d00nibro/hsp/">HSP</a>.  HSP is an insanely impressive piece of software, but its error messages can be a bit unclear.   So I started playing around a bit with HAML.  Got me wondering &#8220;How easy would be to write a HAML parser in Haskell?&#8221;</p>

<p>So I tried.  Here&#8217;s a first-pass, to-be-updated [and somewhat incomplete] HAML parser for Haskell. Not all of the features are implemented, but it&#8217;s a start.  It generates <a title="HTML" href="http://hackage.haskell.org/cgi-bin/hackage-scripts/package/xhtml-3000.2.0.1">HTML</a> bits suitable for compilation by GHC.</p>

<h2>Input</h2>


<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;">f <span style="color: #339933; font-weight: bold;">=</span> content
&nbsp;
page <span style="color: #339933; font-weight: bold;">=</span> #content
         <span style="color: #339933; font-weight: bold;">.</span>left<span style="color: #339933; font-weight: bold;">.</span>column
         <span style="color: #339933; font-weight: bold;">%</span>h2 Welcome to our site<span style="color: #339933; font-weight: bold;">!</span>
         <span style="color: #339933; font-weight: bold;">%</span>p <span style="color: #339933; font-weight: bold;">=</span> print<span style="color: #339933; font-weight: bold;">_</span>information
         <span style="color: #339933; font-weight: bold;">%</span>p
           <span style="color: #339933; font-weight: bold;">=</span> print<span style="color: #339933; font-weight: bold;">_</span>inline
         <span style="color: #339933; font-weight: bold;">.</span>right<span style="color: #339933; font-weight: bold;">.</span>column
           <span style="color: #339933; font-weight: bold;">=</span> render
         <span style="color: green;">&#91;</span>abba <span style="color: #339933; font-weight: bold;">=</span> ding<span style="color: #339933; font-weight: bold;">,</span> ding <span style="color: #339933; font-weight: bold;">=</span> abba<span style="color: green;">&#93;</span> dinger</pre></div></div>


<h2>Output</h2>


<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;">f <span style="color: #339933; font-weight: bold;">=</span>
    <span style="color: green;">&#40;</span>stringToHtml <span style="background-color: #3cb371;">&quot;content&quot;</span><span style="color: green;">&#41;</span>
page <span style="color: #339933; font-weight: bold;">=</span>
       <span style="color: green;">&#40;</span><span style="color: green;">&#40;</span>tag <span style="background-color: #3cb371;">&quot;div&quot;</span><span style="color: #339933; font-weight: bold;">!</span><span style="color: green;">&#91;</span>strAttr <span style="background-color: #3cb371;">&quot;id&quot;</span> <span style="background-color: #3cb371;">&quot;content&quot;</span><span style="color: green;">&#93;</span><span style="color: green;">&#41;</span>
         <span style="color: green;">&#40;</span><span style="color: green;">&#40;</span>tag <span style="background-color: #3cb371;">&quot;div&quot;</span><span style="color: #339933; font-weight: bold;">!</span><span style="color: green;">&#91;</span>strAttr <span style="background-color: #3cb371;">&quot;class&quot;</span> <span style="background-color: #3cb371;">&quot;left column&quot;</span><span style="color: green;">&#93;</span><span style="color: green;">&#41;</span>
         <span style="color: green;">&#40;</span><span style="color: green;">&#40;</span>tag <span style="background-color: #3cb371;">&quot;h2&quot;</span><span style="color: green;">&#41;</span>
             <span style="color: green;">&#40;</span>stringToHtml <span style="background-color: #3cb371;">&quot;Welcome to our site!&quot;</span><span style="color: green;">&#41;</span>
         <span style="color: green;">&#41;</span>
         <span style="color: #339933; font-weight: bold;">+++</span>
         <span style="color: green;">&#40;</span><span style="color: green;">&#40;</span>tag <span style="background-color: #3cb371;">&quot;p&quot;</span><span style="color: green;">&#41;</span>
            <span style="color: green;">&#40;</span>stringToHtml print<span style="color: #339933; font-weight: bold;">_</span>information<span style="color: green;">&#41;</span>
         <span style="color: green;">&#41;</span>
         <span style="color: #339933; font-weight: bold;">+++</span>
         <span style="color: green;">&#40;</span><span style="color: green;">&#40;</span>tag <span style="background-color: #3cb371;">&quot;p&quot;</span><span style="color: green;">&#41;</span>
           <span style="color: green;">&#40;</span>stringToHtml print<span style="color: #339933; font-weight: bold;">_</span>inline<span style="color: green;">&#41;</span>
         <span style="color: green;">&#41;</span>
         <span style="color: #339933; font-weight: bold;">+++</span>
         <span style="color: green;">&#40;</span><span style="color: green;">&#40;</span>tag <span style="background-color: #3cb371;">&quot;div&quot;</span><span style="color: #339933; font-weight: bold;">!</span><span style="color: green;">&#91;</span>strAttr <span style="background-color: #3cb371;">&quot;class&quot;</span> <span style="background-color: #3cb371;">&quot;right column&quot;</span><span style="color: green;">&#93;</span><span style="color: green;">&#41;</span>
           <span style="color: green;">&#40;</span>stringToHtml render<span style="color: green;">&#41;</span>
         <span style="color: green;">&#41;</span>
         <span style="color: #339933; font-weight: bold;">+++</span>
         <span style="color: green;">&#40;</span><span style="color: green;">&#40;</span>tag <span style="background-color: #3cb371;">&quot;div&quot;</span><span style="color: #339933; font-weight: bold;">!</span><span style="color: green;">&#91;</span>strAttr <span style="background-color: #3cb371;">&quot;abba&quot;</span> <span style="background-color: #3cb371;">&quot;ding&quot;</span><span style="color: #339933; font-weight: bold;">,</span> strAttr <span style="background-color: #3cb371;">&quot;ding&quot;</span> <span style="background-color: #3cb371;">&quot;abba&quot;</span><span style="color: green;">&#93;</span><span style="color: green;">&#41;</span>
                                    <span style="color: green;">&#40;</span>stringToHtml <span style="background-color: #3cb371;">&quot;dinger&quot;</span><span style="color: green;">&#41;</span>
         <span style="color: green;">&#41;</span>
         <span style="color: green;">&#41;</span>
       <span style="color: green;">&#41;</span></pre></div></div>


<h2>le Code</h2>


<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;"><span style="color: #06c; font-weight: bold;">module</span> Main <span style="color: #06c; font-weight: bold;">where</span>
&nbsp;
<span style="color: #06c; font-weight: bold;">import</span> Text<span style="color: #339933; font-weight: bold;">.</span>ParserCombinators<span style="color: #339933; font-weight: bold;">.</span>Parsec
<span style="color: #06c; font-weight: bold;">import</span> Text<span style="color: #339933; font-weight: bold;">.</span>ParserCombinators<span style="color: #339933; font-weight: bold;">.</span>Parsec<span style="color: #339933; font-weight: bold;">.</span>Language
<span style="color: #06c; font-weight: bold;">import</span> Text<span style="color: #339933; font-weight: bold;">.</span>ParserCombinators<span style="color: #339933; font-weight: bold;">.</span>Parsec<span style="color: #339933; font-weight: bold;">.</span>Pos
<span style="color: #06c; font-weight: bold;">import</span> <span style="color: #06c; font-weight: bold;">qualified</span> Text<span style="color: #339933; font-weight: bold;">.</span>ParserCombinators<span style="color: #339933; font-weight: bold;">.</span>Parsec<span style="color: #339933; font-weight: bold;">.</span>Token <span style="color: #06c; font-weight: bold;">as</span> T
<span style="color: #06c; font-weight: bold;">import</span> Data<span style="color: #339933; font-weight: bold;">.</span><span style="color: #cccc00; font-weight: bold;">Char</span>
<span style="color: #06c; font-weight: bold;">import</span> Data<span style="color: #339933; font-weight: bold;">.</span>List
<span style="color: #06c; font-weight: bold;">import</span> Data<span style="color: #339933; font-weight: bold;">.</span><span style="color: #cccc00; font-weight: bold;">Maybe</span>
<span style="color: #06c; font-weight: bold;">import</span> System<span style="color: #339933; font-weight: bold;">.</span><span style="color: #cccc00; font-weight: bold;">IO</span><span style="color: #339933; font-weight: bold;">.</span>Unsafe
&nbsp;
main <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> s <span style="color: #339933; font-weight: bold;">&lt;-</span> <span style="font-weight: bold;">getContents</span>
          <span style="color: #06c; font-weight: bold;">case</span> <span style="color: green;">&#40;</span>parse mainParser <span style="background-color: #3cb371;">&quot;stdin&quot;</span> s<span style="color: green;">&#41;</span> <span style="color: #06c; font-weight: bold;">of</span>
            Left  err <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="font-weight: bold;">putStrLn</span> <span style="background-color: #3cb371;">&quot;Error: &quot;</span> <span style="color: #339933; font-weight: bold;">&gt;&gt;</span> <span style="font-weight: bold;">print</span> err
            Right hs  <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="font-weight: bold;">putStrLn</span> hs
&nbsp;
<span style="color: #5d478b; font-style: italic;">-- Try to parse HAML, otherwise re-output raw lines</span>
&nbsp;
mainParser <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> whiteSpace
                ls <span style="color: #339933; font-weight: bold;">&lt;-</span> many1 <span style="color: green;">&#40;</span>hamlCode <span style="color: #339933; font-weight: bold;">&lt;|&gt;</span> tilEOL<span style="color: green;">&#41;</span>
                <span style="font-weight: bold;">return</span> <span style="color: #339933; font-weight: bold;">$</span> <span style="font-weight: bold;">unlines</span> ls
<span style="color: #5d478b; font-style: italic;">--</span>
<span style="color: #5d478b; font-style: italic;">-- * HAML lexer</span>
<span style="color: #5d478b; font-style: italic;">--</span>
hamlLexer <span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>makeTokenParser emptyDef
whiteSpace<span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>whiteSpace hamlLexer
lexeme    <span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>lexeme hamlLexer
symbol    <span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>symbol hamlLexer
natural   <span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>natural hamlLexer
parens    <span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>parens hamlLexer
semi      <span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>semi hamlLexer
squares   <span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>squares hamlLexer
stringLiteral<span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>stringLiteral hamlLexer
identifier<span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>identifier hamlLexer
reserved  <span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>reserved hamlLexer
reservedOp<span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>reservedOp hamlLexer
commaSep1 <span style="color: #339933; font-weight: bold;">=</span> T<span style="color: #339933; font-weight: bold;">.</span>commaSep1 hamlLexer
<span style="color: #5d478b; font-style: italic;">--</span>
<span style="color: #5d478b; font-style: italic;">-- * Main HAML parsers</span>
<span style="color: #5d478b; font-style: italic;">--</span>
&nbsp;
<span style="color: #5d478b; font-style: italic;">-- hamlCode is just many identifiers (e.g. 'func a b c' followed by '=' followed by a hamlBlock</span>
<span style="color: #5d478b; font-style: italic;">-- func a b c = %somehaml</span>
hamlCode <span style="color: #339933; font-weight: bold;">=</span> try <span style="color: green;">&#40;</span> <span style="color: #06c; font-weight: bold;">do</span> is <span style="color: #339933; font-weight: bold;">&lt;-</span> many1 identifier
                    symbol <span style="background-color: #3cb371;">&quot;=&quot;</span>
                    currentPos <span style="color: #339933; font-weight: bold;">&lt;-</span> getPosition
                    x <span style="color: #339933; font-weight: bold;">&lt;-</span> manyTill1
                          <span style="color: green;">&#40;</span>lexeme <span style="color: #339933; font-weight: bold;">$</span> hamlBlock<span style="color: green;">&#41;</span>
                          <span style="color: green;">&#40;</span>notSameIndent currentPos<span style="color: green;">&#41;</span>
                    <span style="font-weight: bold;">return</span> <span style="color: #339933; font-weight: bold;">$</span> <span style="color: green;">&#40;</span><span style="font-weight: bold;">concat</span> <span style="color: #339933; font-weight: bold;">$</span> intersperse <span style="background-color: #3cb371;">&quot; &quot;</span> is<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span>
                             <span style="background-color: #3cb371;">&quot; = <span style="background-color: #3cb371; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933; font-weight: bold;">++</span>
                             <span style="color: green;">&#40;</span><span style="font-weight: bold;">concat</span> <span style="color: #339933; font-weight: bold;">$</span> <span style="color: green;">&#40;</span>intersperse <span style="color: green;">&#40;</span>indent currentPos <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;+++<span style="background-color: #3cb371; font-weight: bold;">\n</span>&quot;</span><span style="color: green;">&#41;</span>  <span style="color: #339933; font-weight: bold;">$</span> <span style="font-weight: bold;">filter</span> <span style="color: green;">&#40;</span><span style="font-weight: bold;">not</span> <span style="color: #339933; font-weight: bold;">.</span> <span style="font-weight: bold;">null</span><span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">$</span> x<span style="color: green;">&#41;</span><span style="color: green;">&#41;</span>
                  <span style="color: green;">&#41;</span>
&nbsp;
<span style="color: #5d478b; font-style: italic;">-- A Block may start with some whitespace, then has a valid bit of data</span>
hamlBlock   <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> currentPos <span style="color: #339933; font-weight: bold;">&lt;-</span> getPosition
                 bs <span style="color: #339933; font-weight: bold;">&lt;-</span> manyTill1
                      <span style="color: green;">&#40;</span>pTag <span style="color: #339933; font-weight: bold;">&lt;|&gt;</span> pText<span style="color: green;">&#41;</span>
                      <span style="color: green;">&#40;</span>notSameIndent currentPos<span style="color: green;">&#41;</span>
                 <span style="font-weight: bold;">return</span> <span style="color: #339933; font-weight: bold;">$</span> intercalate <span style="color: green;">&#40;</span>indent currentPos <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;+++<span style="background-color: #3cb371; font-weight: bold;">\n</span>&quot;</span><span style="color: green;">&#41;</span> bs
&nbsp;
pTag    <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span>    currentPos <span style="color: #339933; font-weight: bold;">&lt;-</span> getPosition
                try
                    <span style="color: green;">&#40;</span><span style="color: #06c; font-weight: bold;">do</span> t  <span style="color: #339933; font-weight: bold;">&lt;-</span> lexeme tagParser
                        ts <span style="color: #339933; font-weight: bold;">&lt;-</span> <span style="color: green;">&#40;</span>isInline currentPos <span style="color: #339933; font-weight: bold;">&gt;&gt;</span> char '<span style="color: #339933; font-weight: bold;">/</span>' <span style="color: #339933; font-weight: bold;">&gt;&gt;</span> <span style="font-weight: bold;">return</span> <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span><span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">&lt;|&gt;</span>
                              <span style="color: green;">&#40;</span>hamlBlock<span style="color: green;">&#41;</span>
                        <span style="font-weight: bold;">return</span> <span style="color: #339933; font-weight: bold;">$</span> intercalate <span style="background-color: #3cb371;">&quot;<span style="background-color: #3cb371; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933; font-weight: bold;">$</span> <span style="font-weight: bold;">filter</span> <span style="color: green;">&#40;</span><span style="font-weight: bold;">not</span> <span style="color: #339933; font-weight: bold;">.</span> <span style="font-weight: bold;">null</span><span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">$</span>
                          <span style="color: green;">&#91;</span> <span style="color: green;">&#40;</span>indent currentPos<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;((&quot;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="color: green;">&#40;</span><span style="color: #06c; font-weight: bold;">if</span> <span style="color: green;">&#40;</span><span style="font-weight: bold;">null</span> ts<span style="color: green;">&#41;</span> <span style="color: #06c; font-weight: bold;">then</span> <span style="background-color: #3cb371;">&quot;i&quot;</span> <span style="color: #06c; font-weight: bold;">else</span> <span style="background-color: #3cb371;">&quot;&quot;</span><span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> t  <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;)&quot;</span>
                          <span style="color: #339933; font-weight: bold;">,</span> <span style="color: #06c; font-weight: bold;">if</span> <span style="font-weight: bold;">null</span> ts <span style="color: #06c; font-weight: bold;">then</span> <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span> <span style="color: #06c; font-weight: bold;">else</span> ts
                          <span style="color: #339933; font-weight: bold;">,</span> <span style="color: green;">&#40;</span>indent currentPos<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;)<span style="background-color: #3cb371; font-weight: bold;">\n</span>&quot;</span><span style="color: green;">&#93;</span>
                    <span style="color: green;">&#41;</span>
&nbsp;
pText <span style="color: #339933; font-weight: bold;">=</span> lexeme stringParser
&nbsp;
notSameIndent p <span style="color: #339933; font-weight: bold;">=</span> <span style="color: green;">&#40;</span>eof <span style="color: #339933; font-weight: bold;">&gt;&gt;</span> <span style="font-weight: bold;">return</span> <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span><span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">&lt;|&gt;</span>
                  <span style="color: green;">&#40;</span><span style="color: #06c; font-weight: bold;">do</span> innerPos <span style="color: #339933; font-weight: bold;">&lt;-</span> getPosition
                      <span style="color: #06c; font-weight: bold;">case</span> <span style="color: green;">&#40;</span>sourceColumn p<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">==</span> <span style="color: green;">&#40;</span>sourceColumn innerPos<span style="color: green;">&#41;</span> <span style="color: #06c; font-weight: bold;">of</span>
                                True  <span style="color: #339933; font-weight: bold;">-&gt;</span> pzero
                                False <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="font-weight: bold;">return</span> <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span>
                  <span style="color: green;">&#41;</span>
&nbsp;
<span style="color: #5d478b; font-style: italic;">--</span>
<span style="color: #5d478b; font-style: italic;">-- * Various little parsers</span>
<span style="color: #5d478b; font-style: italic;">--</span>
&nbsp;
tagParser <span style="color: #339933; font-weight: bold;">::</span> CharParser <span style="color: green;">&#40;</span><span style="color: green;">&#41;</span> <span style="color: #cccc00; font-weight: bold;">String</span>
tagParser <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span>     t <span style="color: #339933; font-weight: bold;">&lt;-</span> optionMaybe tagParser'
                   i <span style="color: #339933; font-weight: bold;">&lt;-</span> optionMaybe idParser
                   c <span style="color: #339933; font-weight: bold;">&lt;-</span> optionMaybe <span style="color: green;">&#40;</span>many1 classParser<span style="color: green;">&#41;</span>
                   a <span style="color: #339933; font-weight: bold;">&lt;-</span> optionMaybe attributesParser
                   <span style="color: #06c; font-weight: bold;">if</span> <span style="color: green;">&#40;</span>isJust t <span style="color: #339933; font-weight: bold;">||</span> isJust i <span style="color: #339933; font-weight: bold;">||</span> isJust c <span style="color: #339933; font-weight: bold;">||</span> isJust a<span style="color: green;">&#41;</span>
                     <span style="color: #06c; font-weight: bold;">then</span>
                       <span style="color: #06c; font-weight: bold;">do</span> <span style="font-weight: bold;">return</span> <span style="color: #339933; font-weight: bold;">$</span> <span style="background-color: #3cb371;">&quot;tag <span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="color: green;">&#40;</span>fromMaybe <span style="background-color: #3cb371;">&quot;div&quot;</span> t<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;<span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933; font-weight: bold;">++</span>
                           <span style="color: green;">&#40;</span><span style="color: #06c; font-weight: bold;">if</span> <span style="font-weight: bold;">not</span> <span style="color: green;">&#40;</span>isJust i <span style="color: #339933; font-weight: bold;">||</span> isJust c <span style="color: #339933; font-weight: bold;">||</span> isJust a<span style="color: green;">&#41;</span> <span style="color: #06c; font-weight: bold;">then</span> <span style="background-color: #3cb371;">&quot;&quot;</span> <span style="color: #06c; font-weight: bold;">else</span>
                              <span style="font-weight: bold;">concat</span> <span style="color: #339933; font-weight: bold;">$</span>
                               <span style="color: green;">&#91;</span> <span style="background-color: #3cb371;">&quot;![&quot;</span>
                               <span style="color: #339933; font-weight: bold;">,</span> intercalate <span style="background-color: #3cb371;">&quot;, &quot;</span> <span style="color: #339933; font-weight: bold;">$</span> <span style="font-weight: bold;">filter</span> <span style="color: green;">&#40;</span><span style="font-weight: bold;">not</span> <span style="color: #339933; font-weight: bold;">.</span> <span style="font-weight: bold;">null</span><span style="color: green;">&#41;</span>
                                   <span style="color: green;">&#91;</span> <span style="color: green;">&#40;</span><span style="font-weight: bold;">maybe</span> <span style="background-color: #3cb371;">&quot;&quot;</span> <span style="color: green;">&#40;</span>\i' <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="background-color: #3cb371;">&quot;strAttr <span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>id<span style="background-color: #3cb371; font-weight: bold;">\&quot;</span> <span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933; font-weight: bold;">++</span> i' <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;<span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: green;">&#41;</span> i<span style="color: green;">&#41;</span>
                                   <span style="color: #339933; font-weight: bold;">,</span> <span style="color: green;">&#40;</span><span style="font-weight: bold;">maybe</span> <span style="background-color: #3cb371;">&quot;&quot;</span> <span style="color: green;">&#40;</span>\c' <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="background-color: #3cb371;">&quot;strAttr <span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>class<span style="background-color: #3cb371; font-weight: bold;">\&quot;</span> <span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="color: green;">&#40;</span>intercalate <span style="background-color: #3cb371;">&quot; &quot;</span> c'<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;<span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: green;">&#41;</span> c<span style="color: green;">&#41;</span>
                                   <span style="color: #339933; font-weight: bold;">,</span> <span style="color: green;">&#40;</span><span style="font-weight: bold;">maybe</span> <span style="background-color: #3cb371;">&quot;&quot;</span> <span style="color: green;">&#40;</span>\kv <span style="color: #339933; font-weight: bold;">-&gt;</span> intercalate <span style="background-color: #3cb371;">&quot;, &quot;</span> <span style="color: #339933; font-weight: bold;">$</span> <span style="font-weight: bold;">map</span> <span style="color: green;">&#40;</span>\<span style="color: green;">&#40;</span>k<span style="color: #339933; font-weight: bold;">,</span>v<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="background-color: #3cb371;">&quot;strAttr <span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933; font-weight: bold;">++</span> k <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;<span style="background-color: #3cb371; font-weight: bold;">\&quot;</span> <span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933; font-weight: bold;">++</span> v <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;<span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: green;">&#41;</span> kv<span style="color: green;">&#41;</span> a<span style="color: green;">&#41;</span>
                                   <span style="color: green;">&#93;</span>
                               <span style="color: #339933; font-weight: bold;">,</span> <span style="background-color: #3cb371;">&quot;]&quot;</span><span style="color: green;">&#93;</span>
                           <span style="color: green;">&#41;</span>
                     <span style="color: #06c; font-weight: bold;">else</span> pzero
&nbsp;
tagParser' <span style="color: #339933; font-weight: bold;">::</span> CharParser <span style="color: green;">&#40;</span><span style="color: green;">&#41;</span> <span style="color: #cccc00; font-weight: bold;">String</span>
tagParser' <span style="color: #339933; font-weight: bold;">=</span>  <span style="color: #06c; font-weight: bold;">do</span> char '<span style="color: #339933; font-weight: bold;">%</span>'
                 many1 termChar
&nbsp;
idParser <span style="color: #339933; font-weight: bold;">::</span> CharParser <span style="color: green;">&#40;</span><span style="color: green;">&#41;</span> <span style="color: #cccc00; font-weight: bold;">String</span>
idParser <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> char '#'
              many1 termChar
&nbsp;
classParser <span style="color: #339933; font-weight: bold;">::</span> CharParser <span style="color: green;">&#40;</span><span style="color: green;">&#41;</span> <span style="color: #cccc00; font-weight: bold;">String</span>
classParser <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> char '<span style="color: #339933; font-weight: bold;">.</span>'
                 many1 termChar
&nbsp;
attributesParser <span style="color: #339933; font-weight: bold;">::</span> CharParser <span style="color: green;">&#40;</span><span style="color: green;">&#41;</span> <span style="color: green;">&#91;</span><span style="color: green;">&#40;</span><span style="color: #cccc00; font-weight: bold;">String</span><span style="color: #339933; font-weight: bold;">,</span> <span style="color: #cccc00; font-weight: bold;">String</span><span style="color: green;">&#41;</span><span style="color: green;">&#93;</span>
attributesParser <span style="color: #339933; font-weight: bold;">=</span> squares <span style="color: green;">&#40;</span>commaSep1 attributeParser<span style="color: green;">&#41;</span>
&nbsp;
attributeParser <span style="color: #339933; font-weight: bold;">::</span> CharParser <span style="color: green;">&#40;</span><span style="color: green;">&#41;</span> <span style="color: green;">&#40;</span><span style="color: #cccc00; font-weight: bold;">String</span><span style="color: #339933; font-weight: bold;">,</span> <span style="color: #cccc00; font-weight: bold;">String</span><span style="color: green;">&#41;</span>
attributeParser <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> k <span style="color: #339933; font-weight: bold;">&lt;-</span> identifier
                     symbol <span style="background-color: #3cb371;">&quot;=&quot;</span>
                     cs <span style="color: #339933; font-weight: bold;">&lt;-</span> many1 identifier
                     <span style="font-weight: bold;">return</span> <span style="color: green;">&#40;</span>k<span style="color: #339933; font-weight: bold;">,</span> intercalate <span style="background-color: #3cb371;">&quot; &quot;</span> cs<span style="color: green;">&#41;</span>
&nbsp;
stringParser <span style="color: #339933; font-weight: bold;">::</span> CharParser <span style="color: green;">&#40;</span><span style="color: green;">&#41;</span> <span style="color: #cccc00; font-weight: bold;">String</span>
stringParser <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span>   currentPos <span style="color: #339933; font-weight: bold;">&lt;-</span> getPosition
                    modifier <span style="color: #339933; font-weight: bold;">&lt;-</span> optionMaybe <span style="color: green;">&#40;</span>char '<span style="color: #339933; font-weight: bold;">=</span>' <span style="color: #339933; font-weight: bold;">&lt;|&gt;</span> char '<span style="color: #339933; font-weight: bold;">-</span>'<span style="color: green;">&#41;</span>
                    whiteSpace
                    c <span style="color: #339933; font-weight: bold;">&lt;-</span> alphaNum
                    cs<span style="color: #339933; font-weight: bold;">&lt;-</span> tilEOL
                    <span style="color: #06c; font-weight: bold;">case</span> modifier <span style="color: #06c; font-weight: bold;">of</span>
                      Just '<span style="color: #339933; font-weight: bold;">-</span>' <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="font-weight: bold;">return</span> <span style="color: #339933; font-weight: bold;">$</span> <span style="color: green;">&#40;</span>indent currentPos<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;-&quot;</span> <span style="color: #339933; font-weight: bold;">++</span> c:cs
                      Just '<span style="color: #339933; font-weight: bold;">=</span>' <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="font-weight: bold;">return</span> <span style="color: #339933; font-weight: bold;">$</span> <span style="color: green;">&#40;</span>indent currentPos<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;(stringToHtml &quot;</span> <span style="color: #339933; font-weight: bold;">++</span> c:cs <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;)&quot;</span>
                      Nothing  <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="font-weight: bold;">return</span> <span style="color: #339933; font-weight: bold;">$</span> <span style="color: green;">&#40;</span>indent currentPos<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;(stringToHtml <span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>&quot;</span> <span style="color: #339933; font-weight: bold;">++</span> c:cs <span style="color: #339933; font-weight: bold;">++</span> <span style="background-color: #3cb371;">&quot;<span style="background-color: #3cb371; font-weight: bold;">\&quot;</span>)&quot;</span>
&nbsp;
<span style="color: #5d478b; font-style: italic;">--</span>
<span style="color: #5d478b; font-style: italic;">-- * Utility functions</span>
<span style="color: #5d478b; font-style: italic;">--</span>
&nbsp;
isInline     p <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #06c; font-weight: bold;">do</span> p2 <span style="color: #339933; font-weight: bold;">&lt;-</span> getPosition
                    <span style="color: #06c; font-weight: bold;">case</span> <span style="color: green;">&#40;</span>sourceLine p  <span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">==</span> <span style="color: green;">&#40;</span>sourceLine p2<span style="color: green;">&#41;</span> <span style="color: #06c; font-weight: bold;">of</span>
                      True <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="font-weight: bold;">return</span> <span style="color: green;">&#91;</span><span style="color: green;">&#93;</span>
                      False <span style="color: #339933; font-weight: bold;">-&gt;</span> pzero
isSameIndent p1 p2 <span style="color: #339933; font-weight: bold;">=</span> <span style="color: green;">&#40;</span>sourceColumn p1<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">==</span> <span style="color: green;">&#40;</span>sourceColumn p2<span style="color: green;">&#41;</span>
&nbsp;
tilEOL <span style="color: #339933; font-weight: bold;">=</span> manyTill1 <span style="color: green;">&#40;</span>noneOf <span style="background-color: #3cb371;">&quot;<span style="background-color: #3cb371; font-weight: bold;">\n</span>&quot;</span><span style="color: green;">&#41;</span> eol
eol <span style="color: #339933; font-weight: bold;">=</span> newline <span style="color: #339933; font-weight: bold;">&lt;|&gt;</span> <span style="color: green;">&#40;</span>eof <span style="color: #339933; font-weight: bold;">&gt;&gt;</span> <span style="font-weight: bold;">return</span> '\n'<span style="color: green;">&#41;</span>
&nbsp;
termChar <span style="color: #339933; font-weight: bold;">=</span> satisfy <span style="color: green;">&#40;</span>\c <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#40;</span>isAlphaNum c<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">||</span> <span style="color: green;">&#40;</span>c `<span style="font-weight: bold;">elem</span>` termPunctuation<span style="color: green;">&#41;</span> <span style="color: green;">&#41;</span>
termPunctuation <span style="color: #339933; font-weight: bold;">=</span> <span style="background-color: #3cb371;">&quot;-_&quot;</span>
indent p <span style="color: #339933; font-weight: bold;">=</span> <span style="font-weight: bold;">take</span> <span style="color: green;">&#40;</span>sourceColumn <span style="color: green;">&#40;</span>p<span style="color: green;">&#41;</span> <span style="color: #339933; font-weight: bold;">-</span> <span style="color: red;">1</span><span style="color: green;">&#41;</span> <span style="color: green;">&#40;</span><span style="font-weight: bold;">repeat</span> ' '<span style="color: green;">&#41;</span>
&nbsp;
manyTill1 p e <span style="color: #339933; font-weight: bold;">=</span>  <span style="color: #06c; font-weight: bold;">do</span> ms <span style="color: #339933; font-weight: bold;">&lt;-</span> manyTill p e
                    <span style="color: #06c; font-weight: bold;">case</span> <span style="color: green;">&#40;</span><span style="font-weight: bold;">null</span> ms<span style="color: green;">&#41;</span> <span style="color: #06c; font-weight: bold;">of</span>
                      True  <span style="color: #339933; font-weight: bold;">-&gt;</span> pzero
                      False <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="font-weight: bold;">return</span> ms</pre></div></div>


<p>Golly, but I wish that I&#8217;d cleaned up the code, but there it is in all of its raw, un-thought-through glory&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alsonkemp.com/programming/a-haml-parser-for-haskell/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ANNOUNCE: Turbinado V0.1</title>
		<link>http://www.alsonkemp.com/ruby-on-rails/announce-turbinado-v01/</link>
		<comments>http://www.alsonkemp.com/ruby-on-rails/announce-turbinado-v01/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 06:10:33 +0000</pubDate>
		<dc:creator>alson</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby On rails]]></category>
		<category><![CDATA[Turbinado]]></category>

		<guid isPermaLink="false">http://www.alsonkemp.com/?p=81</guid>
		<description><![CDATA[Posted to the Haskell mailing list: I'd like to announce Turbinado, a very young and raw MVC web framework for Haskell.  While the framework doesn't exactly copy Ruby on Rails, it certainly rhymes...  It's very early days for Turbinado, but the framework is moving along nicely.  There are still issues to be ironed out and [...]]]></description>
			<content:encoded><![CDATA[<p>Posted to the <a title="Haskell" href="ANNOUNCE: Turbinado V0.1">Haskell</a> mailing list:
<pre>I'd like to announce Turbinado, a very young and raw MVC web framework
for Haskell.  While the framework doesn't exactly copy Ruby on Rails,
it certainly rhymes...  It's very early days for Turbinado, but the
framework is moving along nicely.  There are still issues to be ironed
out and architectural details to be decided, so help/contribution would be
very much appreciated.</p>

<p>Turbinado can be found at:
<a rel="nofollow" href="http://www.turbinado.org/" target="_top">http://www.turbinado.org</a></p>

<p>The source can be found at:
<a rel="nofollow" href="http://github.com/alsonkemp/turbinado/tree/master" target="_top">http://github.com/alsonkemp/turbinado/tree/master</a>
(see the /App directory for the code for www.turbinado.org)</p>

<p>Turbinado:
* Provides a fast web server (based on HSP; see
<a rel="nofollow" href="http://turbinado.org/Home/Performance%29;" target="_top">http://turbinado.org/Home/Performance);</a>
* Provides a straightforward organization for your website (courtesy
of Rails);
* Uses simple HTML-like templating (courtesy of HSX);
* Is easily extensible (courtesy of an Environment built out of <em>Map
String Dynamic</em>, not the most type-safe of beasties; Help!);
* Configurable routing (see Config/Routes.hs).</p>

<p>Turbinado is currently lacking:
* Documentation...
* An easy install...
* A database ORM based on HDBC (visibly incomplete and ugly in
Turbinado/Database/ORM);
* Many more HTML helpers;
* Controllers for partials (lightweight "controls" ala ASP.NET);
* Strong error reporting and handling;
* Lots of functionality and plugins;
* ... the favorite feature that you want to develop for Turbinado ...</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alsonkemp.com/ruby-on-rails/announce-turbinado-v01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

