<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/~yorgey/forest/default.xsl"?>
<fr:tree xmlns:fr="http://www.forester-notes.org" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xml="http://www.w3.org/XML/1998/namespace" root="true" base-url="/~yorgey/forest/">
  <fr:frontmatter>
    <fr:authors>
      <fr:author>
        <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
      </fr:author>
    </fr:authors>
    <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/index/</fr:uri>
    <fr:display-uri>index</fr:display-uri>
    <fr:route>/~yorgey/forest/index/</fr:route>
    <fr:title text="Brent Yorgey">Brent Yorgey</fr:title>
    <fr:meta name="author">false</fr:meta>
  </fr:frontmatter>
  <fr:mainmatter>
    <html:img src="/~yorgey/forest/bafkrmibespfb77qjf3fab42ue3vhje5r4bmkkhcgdecioo7neu3ufd7j3y.jpg" style="float:right" />
    <fr:tree show-metadata="false" numbered="false">
      <fr:frontmatter>
        <fr:authors />
        <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/contact/</fr:uri>
        <fr:display-uri>contact</fr:display-uri>
        <fr:route>/~yorgey/forest/contact/</fr:route>
        <fr:title text="Contact information">Contact information</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
  <html:table>
  
  <html:tr>
  <html:td><html:strong>Office</html:strong></html:td>
 
  <html:td>MC Reynolds 310; <html:mark><fr:link href="https://byorgey.youcanbook.me/" type="external">make an appointment</fr:link></html:mark></html:td>
</html:tr>

  
  <html:tr>
  <html:td><html:strong>Phone</html:strong></html:td>
 
  <html:td>+1 501 450 1377</html:td>
</html:tr>

  
  <html:tr>
  <html:td><html:strong>Email</html:strong></html:td>
 
  <html:td>last name at <html:code>hendrix.edu</html:code></html:td>
</html:tr>

  
  <html:tr>
  <html:td><html:strong>Github</html:strong></html:td>
 
  <html:td><fr:link href="https://github.com/byorgey/" type="external">byorgey</fr:link></html:td>
</html:tr>

  
  <html:tr>
  <html:td><html:strong>IRC</html:strong></html:td>
 
  <html:td><html:code>byorgey</html:code> on LiberaChat</html:td>
</html:tr>

  
  <html:tr>
  <html:td><html:strong>Mastodon</html:strong></html:td>
 
  <html:td><fr:link href="https://mathstodon.xyz/@byorgey" type="external">https://mathstodon.xyz/@byorgey</fr:link></html:td>
</html:tr>

</html:table>
</fr:mainmatter>
    </fr:tree>
    <fr:tree show-metadata="false" numbered="false">
      <fr:frontmatter>
        <fr:authors>
          <fr:author>
            <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
          </fr:author>
        </fr:authors>
        <fr:date>
          <fr:year>2025</fr:year>
          <fr:month>10</fr:month>
          <fr:day>24</fr:day>
        </fr:date>
        <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/0001/</fr:uri>
        <fr:display-uri>0001</fr:display-uri>
        <fr:route>/~yorgey/forest/0001/</fr:route>
        <fr:title text="About this site">About this site</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
        <html:p>This site is a "forest" created using <fr:link href="https://www.forester-notes.org/index/" type="external">Forester</fr:link>. Click on headings to collapse or expand sections, or click on the alphanumeric ID next to a section heading to open the section in a new page.  Type <html:code>Ctrl+K</html:code> to search the graph.</html:p>
      </fr:mainmatter>
    </fr:tree>
    <fr:tree show-metadata="false" numbered="false">
      <fr:frontmatter>
        <fr:authors />
        <fr:date>
          <fr:year>2025</fr:year>
          <fr:month>10</fr:month>
          <fr:day>24</fr:day>
        </fr:date>
        <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/0005/</fr:uri>
        <fr:display-uri>0005</fr:display-uri>
        <fr:route>/~yorgey/forest/0005/</fr:route>
        <fr:title text="Links">Links</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
        <html:ul><html:li>My <fr:link href="/~yorgey/forest/0006/" title="Biography" uri="http://ozark.hendrix.edu/~yorgey/forest/0006/" display-uri="0006" type="local">biography</fr:link></html:li>
  <html:li>How to <fr:link href="/~yorgey/forest/000G/" title="Pronunciation and origin of “Yorgey”" uri="http://ozark.hendrix.edu/~yorgey/forest/000G/" display-uri="000G" type="local">pronounce my last name</fr:link></html:li>
  <html:li>What I'm <fr:link href="/~yorgey/forest/now/" title="Now" uri="http://ozark.hendrix.edu/~yorgey/forest/now/" display-uri="now" type="local">up to right now</fr:link></html:li>
  <html:li>My <fr:link href="/~yorgey/forest/005U/" title="Brent Yorgey › Weeknotes" uri="http://ozark.hendrix.edu/~yorgey/forest/005U/" display-uri="005U" type="local">weekly notes</fr:link></html:li>
  <html:li>The <fr:link href="/~yorgey/forest/000M/" title="Productivity tools" uri="http://ozark.hendrix.edu/~yorgey/forest/000M/" display-uri="000M" type="local">list of productivity tools I use</fr:link></html:li></html:ul>
        <html:p><html:mark>Want to ask me for a letter of reference</html:mark>? <fr:link href="http://ozark.hendrix.edu/~yorgey/pub/reference-guide.pdf" type="external">Read this guide first</fr:link>.</html:p>
      </fr:mainmatter>
    </fr:tree>
    <fr:tree show-metadata="false" numbered="false">
      <fr:frontmatter>
        <fr:authors>
          <fr:author>
            <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
          </fr:author>
        </fr:authors>
        <fr:date>
          <fr:year>2026</fr:year>
          <fr:month>3</fr:month>
          <fr:day>7</fr:day>
        </fr:date>
        <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/009L/</fr:uri>
        <fr:display-uri>009L</fr:display-uri>
        <fr:route>/~yorgey/forest/009L/</fr:route>
        <fr:title text="Statement on LLMs">Statement on LLMs</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
        <html:p>I do not and will not use LLMs, in any form, for any purpose.  Although LLMs are fascinating from a purely technical perspective, I refuse to participate in or contribute to such systems that are built on massive exploitation of human labor and make profligate use of scarce resources.  I also don't think they are actually very good for a lot of the applications people seem excited about.  Even in cases where LLMs are technically good at a task, that does not necessarily mean their use for that task contributes positively to human flourishing.</html:p>
        <html:p>A good way to describe myself is as a <fr:link href="https://sboots.ca/2026/03/11/generative-ai-vegetarianism/" type="external">generative AI vegetarian</fr:link>.  You can find a fuller explanation—and many, many links—at the above essay by Sean Boots, which I agree with almost 100%.</html:p>
        <html:p>On bad days, I find myself feeling more like <fr:link href="https://anthonymoser.github.io/writing/ai/haterdom/2025/08/26/i-am-an-ai-hater.html" type="external">Anthony Moser</fr:link>.</html:p>
      </fr:mainmatter>
    </fr:tree>
    <fr:tree show-metadata="false" expanded="false" numbered="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:date>
          <fr:year>2025</fr:year>
          <fr:month>10</fr:month>
          <fr:day>25</fr:day>
        </fr:date>
        <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/0007/</fr:uri>
        <fr:display-uri>0007</fr:display-uri>
        <fr:route>/~yorgey/forest/0007/</fr:route>
        <fr:title text="News and announcements">News and announcements</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
        <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
          <fr:frontmatter>
            <fr:authors />
            <fr:date>
              <fr:year>2025</fr:year>
              <fr:month>9</fr:month>
              <fr:day>25</fr:day>
            </fr:date>
            <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/005Y/</fr:uri>
            <fr:display-uri>005Y</fr:display-uri>
            <fr:route>/~yorgey/forest/005Y/</fr:route>
            <fr:title text="ZuriHac invited keynote on competitive programming">ZuriHac invited keynote on competitive programming</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <html:p>I gave an <fr:link href="/~yorgey/forest/yorgey-zurihac-2025/" title="Haskell for Competitive Programming (invited keynote)" uri="http://ozark.hendrix.edu/~yorgey/forest/yorgey-zurihac-2025/" display-uri="yorgey-zurihac-2025" type="local">invited keynote talk on competitive programming</fr:link> at <fr:link href="/~yorgey/forest/zurihac-2025/" title="ZuriHac 2025" uri="http://ozark.hendrix.edu/~yorgey/forest/zurihac-2025/" display-uri="zurihac-2025" type="local">ZuriHac 2025</fr:link>.</html:p>
          </fr:mainmatter>
        </fr:tree>
        <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
          <fr:frontmatter>
            <fr:authors />
            <fr:date>
              <fr:year>2025</fr:year>
              <fr:month>1</fr:month>
              <fr:day>23</fr:day>
            </fr:date>
            <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/0008/</fr:uri>
            <fr:display-uri>0008</fr:display-uri>
            <fr:route>/~yorgey/forest/0008/</fr:route>
            <fr:title text="New JFP paper published">New JFP paper published</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <html:p>My paper, <fr:link href="/~yorgey/forest/yorgey-fenwick-2025/" title="You Could Have Invented Fenwick Trees (Functional Pearl)" uri="http://ozark.hendrix.edu/~yorgey/forest/yorgey-fenwick-2025/" display-uri="yorgey-fenwick-2025" type="local">You Could Have Invented Fenwick Trees (Functional Pearl)</fr:link>, is now published in the <fr:link href="/~yorgey/forest/jfp/" title="Journal of Functional Programming" uri="http://ozark.hendrix.edu/~yorgey/forest/jfp/" display-uri="jfp" type="local">Journal of Functional Programming</fr:link>!</html:p>
          </fr:mainmatter>
        </fr:tree>
        <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
          <fr:frontmatter>
            <fr:authors />
            <fr:date>
              <fr:year>2024</fr:year>
              <fr:month>12</fr:month>
              <fr:day>19</fr:day>
            </fr:date>
            <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/0009/</fr:uri>
            <fr:display-uri>0009</fr:display-uri>
            <fr:route>/~yorgey/forest/0009/</fr:route>
            <fr:title text="Haskell Symposium keynote">Haskell Symposium keynote</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <html:p>I gave a keynote presentation at the Haskell Symposium on <fr:link href="/~yorgey/forest/joy-functional-haskell/" title="The Joy of Building (Functional) Languages (invited keynote)" uri="http://ozark.hendrix.edu/~yorgey/forest/joy-functional-haskell/" display-uri="joy-functional-haskell" type="local">The Joy of Building (Functional) Languages (invited keynote)</fr:link>.</html:p>
          </fr:mainmatter>
        </fr:tree>
        <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
          <fr:frontmatter>
            <fr:authors />
            <fr:date>
              <fr:year>2023</fr:year>
              <fr:month>8</fr:month>
              <fr:day>24</fr:day>
            </fr:date>
            <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000A/</fr:uri>
            <fr:display-uri>000A</fr:display-uri>
            <fr:route>/~yorgey/forest/000A/</fr:route>
            <fr:title text="New Disco paper published">New Disco paper published</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <html:p>My paper, <fr:link href="/~yorgey/forest/yorgey-disco-2023/" title="Disco: A Functional Programming Language for Discrete Mathematics" uri="http://ozark.hendrix.edu/~yorgey/forest/yorgey-disco-2023/" display-uri="yorgey-disco-2023" type="local">Disco: A Functional Programming Language for Discrete Mathematics</fr:link>, has been published in the proceedings of <fr:link href="/~yorgey/forest/tfpie-2023/" title="TFPIE '23: Trends in Functional Programming in Education" uri="http://ozark.hendrix.edu/~yorgey/forest/tfpie-2023/" display-uri="tfpie-2023" type="local"><html:em>TFPIE</html:em> '23: Trends in Functional Programming in Education</fr:link>.</html:p>
          </fr:mainmatter>
        </fr:tree>
      </fr:mainmatter>
    </fr:tree>
    <fr:tree show-metadata="false" expanded="false" numbered="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:date>
          <fr:year>2025</fr:year>
          <fr:month>10</fr:month>
          <fr:day>24</fr:day>
        </fr:date>
        <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/0002/</fr:uri>
        <fr:display-uri>0002</fr:display-uri>
        <fr:route>/~yorgey/forest/0002/</fr:route>
        <fr:title text="Teaching">Teaching</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
        <html:p>I teach computer science and mathematics at <fr:link href="/~yorgey/forest/hendrixcollege/" title="Hendrix College" uri="http://ozark.hendrix.edu/~yorgey/forest/hendrixcollege/" display-uri="hendrixcollege" type="local">Hendrix College</fr:link>.</html:p>
        <fr:tree show-metadata="false">
          <fr:frontmatter>
            <fr:authors />
            <fr:date>
              <fr:year>2025</fr:year>
              <fr:month>10</fr:month>
              <fr:day>24</fr:day>
            </fr:date>
            <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/0003/</fr:uri>
            <fr:display-uri>0003</fr:display-uri>
            <fr:route>/~yorgey/forest/0003/</fr:route>
            <fr:title text="Current courses (Spring 2026)">Current courses (Spring 2026)</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <html:p>This spring, I am teaching two courses and one lab section:</html:p>
            <html:ul><html:li><fr:link href="/~yorgey/forest/0020/" title="MATH 240, Discrete Mathematics" uri="http://ozark.hendrix.edu/~yorgey/forest/0020/" display-uri="0020" type="local">MATH 240, Discrete Mathematics</fr:link></html:li>
  <html:li><fr:link href="https://hendrix-cs.github.io/csci365/" type="external">CSCI 365, Functional Programming</fr:link></html:li>
  <html:li>I will also be facilitating one lab section for <fr:link href="https://hendrix-cs.github.io/csci150/" type="external">CSCI 150, Foundations of Computer Science</fr:link>.</html:li></html:ul>
          </fr:mainmatter>
        </fr:tree>
        <fr:tree show-metadata="false" expanded="false">
          <fr:frontmatter>
            <fr:authors />
            <fr:date>
              <fr:year>2025</fr:year>
              <fr:month>10</fr:month>
              <fr:day>24</fr:day>
            </fr:date>
            <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/0004/</fr:uri>
            <fr:display-uri>0004</fr:display-uri>
            <fr:route>/~yorgey/forest/0004/</fr:route>
            <fr:title text="Previous courses">Previous courses</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <fr:tree show-metadata="false">
              <fr:frontmatter>
                <fr:authors />
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>10</fr:month>
                  <fr:day>25</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000I/</fr:uri>
                <fr:display-uri>000I</fr:display-uri>
                <fr:route>/~yorgey/forest/000I/</fr:route>
                <fr:title text="Previous courses taught at Hendrix College">Previous courses taught at <fr:link href="/~yorgey/forest/hendrixcollege/" title="Hendrix College" uri="http://ozark.hendrix.edu/~yorgey/forest/hendrixcollege/" display-uri="hendrixcollege" type="local">Hendrix College</fr:link></fr:title>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:ul><html:li>LBST 150J, The Engaged Citizen: The Art and Science of Creativity (co-taught with <fr:link href="/~yorgey/forest/melissagill/" title="Melissa Gill" uri="http://ozark.hendrix.edu/~yorgey/forest/melissagill/" display-uri="melissagill" type="local">Melissa Gill</fr:link>, F '20)</html:li>
    <html:li>LBST 101, Explorations (F '18, F '20, F '22, F '24)</html:li>
    <html:li>CSCI 150, Foundations of Computer Science (F '15, S '16, S '17, S '18, F '18, S '19, F '19, S '20, S '21, F '22, S '23, F '23, S '24, S '25, F '25, S '26)</html:li>
    <html:li>CSCI 151, Data Structures (F '16, F '17, S '19)</html:li>
    <html:li>MATH 240, Discrete Mathematics (S '20, S '21, S '22, S '23, S '25, S '26)</html:li>
    <html:li>CSCI 322, Computing Systems Organization (S '22, S '24)</html:li>
    <html:li>CSCI 382, Algorithms (S '16, S '17, F '17, F '18, F '19, F '20, F '22, F '23, F '24, F '25)</html:li>
    <html:li>CSCI 360, Programming Languages (F '16, F '18, S '21, S '23, S '25)</html:li>
    <html:li>CSCI 365, Functional Programming (S '16, S '18, S '20, S '22, S '24, S '26)</html:li>
    <html:li>CSCI 410, Senior Seminar (F '16, F '17, F '19, F '20, F '22, F '24)</html:li></html:ul>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="false">
              <fr:frontmatter>
                <fr:authors />
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>10</fr:month>
                  <fr:day>25</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000J/</fr:uri>
                <fr:display-uri>000J</fr:display-uri>
                <fr:route>/~yorgey/forest/000J/</fr:route>
                <fr:title text="Previous courses taught at Williams College">Previous courses taught at <fr:link href="/~yorgey/forest/williamscollege/" title="Williams College" uri="http://ozark.hendrix.edu/~yorgey/forest/williamscollege/" display-uri="williamscollege" type="local">Williams College</fr:link></fr:title>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:ul><html:li>CS 134, Digital Communication and Computation, an Introduction to Computer Science (co-taught with <fr:link href="/~yorgey/forest/billlenhart/" title="Bill Lenhart" uri="http://ozark.hendrix.edu/~yorgey/forest/billlenhart/" display-uri="billlenhart" type="local">Bill Lenhart</fr:link>, F '14)</html:li>
  <html:li>CS 354, Functional Programming and the Art of Recursion (F '14)</html:li>
  <html:li>CS 136, Data Structures and Advanced Programming (S '15)</html:li></html:ul>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="false">
              <fr:frontmatter>
                <fr:authors />
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>10</fr:month>
                  <fr:day>25</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000K/</fr:uri>
                <fr:display-uri>000K</fr:display-uri>
                <fr:route>/~yorgey/forest/000K/</fr:route>
                <fr:title text="Previous courses taught at University of Pennsylvania">Previous courses taught at <fr:link href="/~yorgey/forest/upenn/" title="University of Pennsylvania" uri="http://ozark.hendrix.edu/~yorgey/forest/upenn/" display-uri="upenn" type="local">University of Pennsylvania</fr:link></fr:title>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:ul><html:li>The Art of Recursion (F '12)</html:li>
  <html:li><fr:link href="/~yorgey/forest/000H/" title="CIS 194, Introduction to Haskell" uri="http://ozark.hendrix.edu/~yorgey/forest/000H/" display-uri="000H" type="local">CIS 194, Introduction to Haskell</fr:link> (F '10, S '12, S '13)</html:li>
  <html:li>CIS 500, <fr:link href="https://softwarefoundations.cis.upenn.edu/" type="external">Software Foundations</fr:link> (TA; S '10, S '11)</html:li>
  <html:li>CIS 120, Programming Languages and Techniques I (TA; F '09)</html:li></html:ul>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="false">
              <fr:frontmatter>
                <fr:authors />
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>10</fr:month>
                  <fr:day>25</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000L/</fr:uri>
                <fr:display-uri>000L</fr:display-uri>
                <fr:route>/~yorgey/forest/000L/</fr:route>
                <fr:title text="Other previously taught courses">Other previously taught courses</fr:title>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:ul><html:li>Woodrow Wilson Senior High School, Washington DC</html:li>

<html:ul><html:li>Introduction to Computer Science ('04-'05, '05-'06)</html:li>
  <html:li>AP Computer Science AB ('04-'05, '05-'06)</html:li>
  <html:li>Honors Precalculus ('05-'06)</html:li></html:ul>

<html:li><fr:link href="http://ozark.hendrix.edu/~yorgey/precalc/" type="external">Correspondence course in precalculus</fr:link> with homeschool students ('08-'09)</html:li></html:ul>
              </fr:mainmatter>
            </fr:tree>
          </fr:mainmatter>
        </fr:tree>
      </fr:mainmatter>
    </fr:tree>
    <fr:tree show-metadata="false" expanded="false" numbered="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000C/</fr:uri>
        <fr:display-uri>000C</fr:display-uri>
        <fr:route>/~yorgey/forest/000C/</fr:route>
        <fr:title text="Projects">Projects</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
        <fr:tree show-metadata="false">
          <fr:frontmatter>
            <fr:authors />
            <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000N/</fr:uri>
            <fr:display-uri>000N</fr:display-uri>
            <fr:route>/~yorgey/forest/000N/</fr:route>
            <fr:title text="Disco">Disco</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <html:p><fr:link href="https://github.com/disco-lang/disco" type="external">Disco</fr:link> is a functional
teaching language for <fr:link href="/~yorgey/forest/0020/" title="MATH 240, Discrete Mathematics" uri="http://ozark.hendrix.edu/~yorgey/forest/0020/" display-uri="0020" type="local">discrete mathematics</fr:link>, implemented in
Haskell.  <fr:link href="/~yorgey/forest/heinrichapfelmus/" title="Heinrich Apfelmus" uri="http://ozark.hendrix.edu/~yorgey/forest/heinrichapfelmus/" display-uri="heinrichapfelmus" type="local">Heinrich Apfelmus</fr:link> recently built a <fr:link href="https://disco-lang.github.io/disco-live/" type="external">basic web
UI</fr:link> for students to be able
to use Disco in their browser, and I'm using it to teach <fr:link href="/~yorgey/forest/0020/" title="MATH 240, Discrete Mathematics" uri="http://ozark.hendrix.edu/~yorgey/forest/0020/" display-uri="0020" type="local">MATH 240, Discrete Mathematics</fr:link> this semester.</html:p>
            <fr:tree show-metadata="false">
              <fr:frontmatter>
                <fr:authors />
                <fr:title text="Related talks and papers">Related talks and papers</fr:title>
              </fr:frontmatter>
              <fr:mainmatter>
                <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2023</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>14</fr:day>
                    </fr:date>
                    <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-disco-2023/</fr:uri>
                    <fr:display-uri>yorgey-disco-2023</fr:display-uri>
                    <fr:route>/~yorgey/forest/yorgey-disco-2023/</fr:route>
                    <fr:title text="Disco: A Functional Programming Language for Discrete Mathematics">Disco: A Functional Programming Language for Discrete Mathematics</fr:title>
                    <fr:taxon>Reference</fr:taxon>
                    <fr:meta name="venue">
                      <fr:link href="/~yorgey/forest/tfpie-2023/" title="TFPIE '23: Trends in Functional Programming in Education" uri="http://ozark.hendrix.edu/~yorgey/forest/tfpie-2023/" display-uri="tfpie-2023" type="local"><html:em>TFPIE</html:em> '23: Trends in Functional Programming in Education</fr:link>
                    </fr:meta>
                    <fr:meta name="doi">10.4204/EPTCS.382.4</fr:meta>
                    <fr:meta name="bibtex"><![CDATA[@Inproceedings{yorgey-disco-2023,
  author    = {Yorgey, Brent A.},
  year      = {2023},
  title     = {Disco: A Functional Programming Language for Discrete Mathematics},
  editor    = {Machkasova, Elena},
  booktitle = {{\rm Proceedings Twelfth International Workshop on}
               Trends in Functional Programming in Education,
               {\rm Boston, Massachusetts, USA, 12th January 2023}},
  series    = {Electronic Proceedings in Theoretical Computer Science},
  volume    = {382},
  publisher = {Open Publishing Association},
  pages     = {64-81},
  doi       = {10.4204/EPTCS.382.4},
}]]></fr:meta>
                    <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/disco-tfpie23.pdf</fr:meta>
                    <fr:meta name="repo">https://github.com/disco-lang/disco</fr:meta>
                    <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/disco-tfpie23-talk.pdf</fr:meta>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p><fr:link href="/~yorgey/forest/000N/" title="Disco" uri="http://ozark.hendrix.edu/~yorgey/forest/000N/" display-uri="000N" type="local">Disco</fr:link> is a pure, strict, statically typed functional programming language designed to be used in the setting of a discrete mathematics course. The goals of the language are to introduce students to functional programming concepts early, and to enhance their learning of mathematics by providing a computational platform for them to play with. It features mathematically-inspired notation, property-based testing, equirecursive algebraic types, subtyping, built-in list, bag, and finite set types, a REPL, and student-focused documentation. Disco is implemented in Haskell, with source code available on GitHub, and interactive web-based REPL available through replit.</html:p>
                  </fr:mainmatter>
                </fr:tree>
              </fr:mainmatter>
            </fr:tree>
          </fr:mainmatter>
        </fr:tree>
        <fr:tree show-metadata="false">
          <fr:frontmatter>
            <fr:authors />
            <fr:date>
              <fr:year>2025</fr:year>
              <fr:month>10</fr:month>
              <fr:day>26</fr:day>
            </fr:date>
            <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000O/</fr:uri>
            <fr:display-uri>000O</fr:display-uri>
            <fr:route>/~yorgey/forest/000O/</fr:route>
            <fr:title text="Swarm">Swarm</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <html:p>In the fall of 2021 I started developing a game called <fr:link href="http://github.com/swarm-game/swarm" type="external">Swarm</fr:link> and built a small open-source community around its development.  So far we have made a
few <fr:link href="https://github.com/swarm-game/swarm/releases/tag/0.8.0.0" type="external">official alpha releases</fr:link>, and development continues to hum along.  We finally merged a big <fr:link href="https://github.com/swarm-game/swarm/pull/2540" type="external">import feature</fr:link> to the language. I'm now working on various smaller additions. I've also been writing up some notes about a planned <fr:link href="/~yorgey/forest/000U/" title="Notes on redesign of the Swarm type system" uri="http://ozark.hendrix.edu/~yorgey/forest/000U/" display-uri="000U" type="local">redesign of the type system</fr:link>.</html:p>
          </fr:mainmatter>
        </fr:tree>
        <fr:tree show-metadata="false">
          <fr:frontmatter>
            <fr:authors />
            <fr:date>
              <fr:year>2025</fr:year>
              <fr:month>10</fr:month>
              <fr:day>26</fr:day>
            </fr:date>
            <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000P/</fr:uri>
            <fr:display-uri>000P</fr:display-uri>
            <fr:route>/~yorgey/forest/000P/</fr:route>
            <fr:title text="Applicative inference">Applicative inference</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <html:p>While working on a mini-DSL as part of the <fr:link href="/~yorgey/forest/000O/" title="Swarm" uri="http://ozark.hendrix.edu/~yorgey/forest/000O/" display-uri="000O" type="local">Swarm</fr:link> project, I got an intuitive sense that  the types of DSLs involving an applicative functor can be fully inferred from (suitably restricted) programs that just use regular applicative notation, whereas for monads this would be ambiguous. I have been working, intermittently, on a <fr:link href="https://github.com/byorgey/infer-applicative" type="external">research project</fr:link> to formalize and prove this idea.</html:p>
            <fr:tree show-metadata="false">
              <fr:frontmatter>
                <fr:authors />
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>10</fr:month>
                  <fr:day>26</fr:day>
                </fr:date>
                <fr:title text="Related talks and papers">Related talks and papers</fr:title>
              </fr:frontmatter>
              <fr:mainmatter>
                <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>1</fr:month>
                      <fr:day>30</fr:day>
                    </fr:date>
                    <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/idiomatic-inference-PLV/</fr:uri>
                    <fr:display-uri>idiomatic-inference-PLV</fr:display-uri>
                    <fr:route>/~yorgey/forest/idiomatic-inference-PLV/</fr:route>
                    <fr:title text="Idiomatic Inference for DSLs">Idiomatic Inference for DSLs</fr:title>
                    <fr:taxon>Reference</fr:taxon>
                    <fr:meta name="venue"><fr:link href="/~yorgey/forest/psu/" title="Portland State University" uri="http://ozark.hendrix.edu/~yorgey/forest/psu/" display-uri="psu" type="local">Portland State University</fr:link> PLV seminar</fr:meta>
                    <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/PLV-idiomatic-inference.pdf</fr:meta>
                    <fr:meta name="repo">https://github.com/byorgey/infer-applicative</fr:meta>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>McBride and Paterson's <html:em>idioms</html:em>, or <html:em>applicative functors</html:em>, are a well-known abstraction defining function application in some ambient effectful context.  It would often be useful, especially in the context of designing domain-specific languages, to <html:em>infer</html:em> such "idiomatic'' application, allowing the programmer to use plain function application syntax—but only when doing so is unambiguous.  I will present work in progress characterizing the conditions necessary for this to be possible.</html:p>
                  </fr:mainmatter>
                </fr:tree>
              </fr:mainmatter>
            </fr:tree>
          </fr:mainmatter>
        </fr:tree>
        <fr:tree show-metadata="false">
          <fr:frontmatter>
            <fr:authors />
            <fr:date>
              <fr:year>2025</fr:year>
              <fr:month>10</fr:month>
              <fr:day>28</fr:day>
            </fr:date>
            <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000S/</fr:uri>
            <fr:display-uri>000S</fr:display-uri>
            <fr:route>/~yorgey/forest/000S/</fr:route>
            <fr:title text="Diagrams">Diagrams</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <html:p><fr:link href="https://diagrams.github.io/" type="external">Diagrams</fr:link> is an embedded domain-specific language in <fr:link href="/~yorgey/forest/Haskell/" title="Haskell" uri="http://ozark.hendrix.edu/~yorgey/forest/Haskell/" display-uri="Haskell" type="local">Haskell</fr:link> for creating vector graphics, which I and several other contributors developed starting in 2008.  Development has more or less stopped at this point, but I still keep it updated to compile with the latest versions of GHC and its dependencies.</html:p>
            <fr:tree show-metadata="false">
              <fr:frontmatter>
                <fr:authors />
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>10</fr:month>
                  <fr:day>28</fr:day>
                </fr:date>
                <fr:title text="Diagrams-related talks and papers">Diagrams-related talks and papers</fr:title>
              </fr:frontmatter>
              <fr:mainmatter>
                <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/~yorgey/forest/ryanyates/" title="Ryan Yates" uri="http://ozark.hendrix.edu/~yorgey/forest/ryanyates/" display-uri="ryanyates" type="local">Ryan Yates</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2015</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>30</fr:day>
                    </fr:date>
                    <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yates-yorgey-2015/</fr:uri>
                    <fr:display-uri>yates-yorgey-2015</fr:display-uri>
                    <fr:route>/~yorgey/forest/yates-yorgey-2015/</fr:route>
                    <fr:title text="Diagrams: A Functional EDSL for Vector Graphics">Diagrams: A Functional EDSL for Vector Graphics</fr:title>
                    <fr:taxon>Reference</fr:taxon>
                    <fr:meta name="venue">
                      <fr:link href="/~yorgey/forest/farm-2015/" title="FARM '15: International Workshop on Functional Art, Music, Modelling and Design" uri="http://ozark.hendrix.edu/~yorgey/forest/farm-2015/" display-uri="farm-2015" type="local"><html:em>FARM '15</html:em>: International Workshop on Functional Art, Music, Modelling and Design</fr:link>
                    </fr:meta>
                    <fr:meta name="doi">10.1145/2808083.2808085</fr:meta>
                    <fr:meta name="bibtex"><![CDATA[@inproceedings{yates-yorgey-2015,
  author = {Yates, Ryan and Yorgey, Brent A.},
  title = {Diagrams: a functional EDSL for vector graphics},
  year = {2015},
  isbn = {9781450338066},
  publisher = {Association for Computing Machinery},
  address = {New York, NY, USA},
  url = {https://doi.org/10.1145/2808083.2808085},
  doi = {10.1145/2808083.2808085},
  abstract = {},
  booktitle = {Proceedings of the 3rd ACM SIGPLAN International Workshop on Functional Art, Music, Modelling and Design},
  pages = {4–5},
  numpages = {2},
  keywords = {EDSL, Haskell, diagrams, vector},
  location = {Vancouver, BC, Canada},
  series = {FARM 2015}
}]]></fr:meta>
                    <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/diagrams-FARM.pdf</fr:meta>
                    <fr:meta name="video">https://www.youtube.com/watch?v=oAz8AEf7WDA</fr:meta>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>Diagrams is a domain-specific language for creating vector graphics. We will give a short diagrams tutorial/demo, particularly highlighting the power of a functional, embedded domain-specific language.</html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2013</fr:year>
                      <fr:month>11</fr:month>
                      <fr:day>20</fr:day>
                    </fr:date>
                    <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-diagrams-NYHUG-2013/</fr:uri>
                    <fr:display-uri>yorgey-diagrams-NYHUG-2013</fr:display-uri>
                    <fr:route>/~yorgey/forest/yorgey-diagrams-NYHUG-2013/</fr:route>
                    <fr:title text="Diagrams: Declarative Vector Graphics in Haskell"><html:code>Diagrams</html:code>: Declarative Vector Graphics in Haskell</fr:title>
                    <fr:taxon>Reference</fr:taxon>
                    <fr:meta name="venue">New York Haskell Users' Group</fr:meta>
                    <fr:meta name="video">https://vimeo.com/84104226</fr:meta>
                    <fr:meta name="video">https://vimeo.com/84249042</fr:meta>
                    <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/13-11-25-nyhaskell-diagrams.pdf</fr:meta>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>Over the past ten years, I have solved over 1700 competitive programming problems in Haskell, just for fun (as well as a few that were not fun). I will give a brief introduction to competitive programming and show off some examples demonstrating the unique benefits of Haskell in this context. We will then have a miniature programming contest, open to all—only Haskell allowed!</html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/~yorgey/forest/andygill/" title="Andy Gill" uri="http://ozark.hendrix.edu/~yorgey/forest/andygill/" display-uri="andygill" type="local">Andy Gill</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2013</fr:year>
                      <fr:month>9</fr:month>
                      <fr:day>28</fr:day>
                    </fr:date>
                    <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-active-2013/</fr:uri>
                    <fr:display-uri>yorgey-active-2013</fr:display-uri>
                    <fr:route>/~yorgey/forest/yorgey-active-2013/</fr:route>
                    <fr:title text="Functional Active Animation">Functional Active Animation</fr:title>
                    <fr:taxon>Reference</fr:taxon>
                    <fr:meta name="venue">
                      <fr:link href="/~yorgey/forest/farm-2013/" title="FARM '13: International Workshop on Functional Art, Music, Modelling and Design" uri="http://ozark.hendrix.edu/~yorgey/forest/farm-2013/" display-uri="farm-2013" type="local"><html:em>FARM '13</html:em>: International Workshop on Functional Art, Music, Modelling and Design</fr:link>
                    </fr:meta>
                    <fr:meta name="video">http://www.youtube.com/watch?v=fb2K3h7t8fo</fr:meta>
                  </fr:frontmatter>
                  <fr:mainmatter />
                </fr:tree>
                <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2012</fr:year>
                      <fr:month>9</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-monoids-2012/</fr:uri>
                    <fr:display-uri>yorgey-monoids-2012</fr:display-uri>
                    <fr:route>/~yorgey/forest/yorgey-monoids-2012/</fr:route>
                    <fr:title text="Monoids: Theme and Variations (Functional Pearl)">Monoids: Theme and Variations (Functional Pearl)</fr:title>
                    <fr:taxon>Reference</fr:taxon>
                    <fr:meta name="venue">
                      <fr:link href="/~yorgey/forest/haskell-2012/" title="Haskell '12: Haskell Symposium" uri="http://ozark.hendrix.edu/~yorgey/forest/haskell-2012/" display-uri="haskell-2012" type="local"><html:em>Haskell '12</html:em>: Haskell Symposium</fr:link>
                    </fr:meta>
                    <fr:meta name="doi">10.1145/2430532.2364520</fr:meta>
                    <fr:meta name="bibtex"><![CDATA[@inproceedings{10.1145/2364506.2364520,
  author = {Yorgey, Brent A.},
  title = {Monoids: Theme and Variations (Functional Pearl)},
  year = {2012},
  isbn = {978-1-4503-1574-6},
  publisher = {Association for Computing Machinery},
  address = {New York, NY, USA},
  url = {https://doi.org/10.1145/2364506.2364520},
  doi = {10.1145/2364506.2364520},
  booktitle = {Proceedings of the 2012 Haskell Symposium},
  pages = {105--116},
  numpages = {12},
  keywords = {monoid action, monoid, homomorphism, edsl},
  location = {Copenhagen, Denmark},
  series = {Haskell '12}
}]]></fr:meta>
                    <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/monoid-pearl.pdf</fr:meta>
                    <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/12-09-13-monoid-pearl-HS.pdf</fr:meta>
                    <fr:meta name="video">http://www.youtube.com/watch?v=X-8NCkD2vOw</fr:meta>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>The monoid is a humble algebraic structure, at first glance even downright boring. However, there's much more to monoids than meets the eye. Using examples taken from the diagrams vector graphics framework as a case study, I demonstrate the power and beauty of monoids for library design. The paper begins with an extremely simple model of diagrams and proceeds through a series of incremental variations, all related somehow to the central theme of monoids. Along the way, I illustrate the power of compositional semantics; why you should also pay attention to the monoid's even humbler cousin, the semigroup; monoid homomorphisms; and monoid actions.</html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2012</fr:year>
                      <fr:month>4</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-compositional-drawing-2012/</fr:uri>
                    <fr:display-uri>yorgey-compositional-drawing-2012</fr:display-uri>
                    <fr:route>/~yorgey/forest/yorgey-compositional-drawing-2012/</fr:route>
                    <fr:title text="Embedded, functional, compositional drawing">Embedded, functional, compositional drawing</fr:title>
                    <fr:taxon>Reference</fr:taxon>
                    <fr:meta name="venue">
                      <fr:link href="/~yorgey/forest/williamscollege/" title="Williams College" uri="http://ozark.hendrix.edu/~yorgey/forest/williamscollege/" display-uri="williamscollege" type="local">Williams College</fr:link>
                    </fr:meta>
                  </fr:frontmatter>
                  <fr:mainmatter />
                </fr:tree>
              </fr:mainmatter>
            </fr:tree>
          </fr:mainmatter>
        </fr:tree>
      </fr:mainmatter>
    </fr:tree>
    <fr:tree show-metadata="false" expanded="false" numbered="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:date>
          <fr:year>2025</fr:year>
          <fr:month>10</fr:month>
          <fr:day>28</fr:day>
        </fr:date>
        <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000R/</fr:uri>
        <fr:display-uri>000R</fr:display-uri>
        <fr:route>/~yorgey/forest/000R/</fr:route>
        <fr:title text="Blog">Blog</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
        <html:p>In this forest you'll find short musings and notes; I occasionally post longer-form articles at <fr:link href="https://byorgey.github.io/blog/" type="external">blog :: Brent -&gt; [String]</fr:link>.</html:p>
      </fr:mainmatter>
    </fr:tree>
    <fr:tree show-metadata="false" expanded="false" numbered="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:date>
          <fr:year>2025</fr:year>
          <fr:month>10</fr:month>
          <fr:day>25</fr:day>
        </fr:date>
        <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000F/</fr:uri>
        <fr:display-uri>000F</fr:display-uri>
        <fr:route>/~yorgey/forest/000F/</fr:route>
        <fr:title text="Competitive programming">Competitive programming</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
        <html:p>I enjoy recreational competitive programming, especially in <fr:link href="/~yorgey/forest/Haskell/" title="Haskell" uri="http://ozark.hendrix.edu/~yorgey/forest/Haskell/" display-uri="Haskell" type="local">Haskell</fr:link>.</html:p>
        <html:ul><html:li>I have <fr:link href="http://ozark.hendrix.edu/~yorgey/kattis.html" type="external">solved about 2700 problems</fr:link> on <fr:link href="https://open.kattis.com/" type="external">Open Kattis</fr:link>, over 2000 of them in Haskell.</html:li>
  <html:li>I've written a series of <fr:link href="https://byorgey.github.io/blog/tag/competitive%20programming.html" type="external">blog posts about competitive programming in Haskell</fr:link>.</html:li>
  <html:li>I am the coach of the <fr:link href="/~yorgey/forest/hendrixcollege/" title="Hendrix College" uri="http://ozark.hendrix.edu/~yorgey/forest/hendrixcollege/" display-uri="hendrixcollege" type="local">Hendrix College</fr:link> competitive programming team.</html:li></html:ul>
        <fr:tree show-metadata="false">
          <fr:frontmatter>
            <fr:authors />
            <fr:date>
              <fr:year>2025</fr:year>
              <fr:month>10</fr:month>
              <fr:day>25</fr:day>
            </fr:date>
            <fr:title text="Presentations on competitive programming">Presentations on competitive programming</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>6</fr:month>
                  <fr:day>9</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-zurihac-2025/</fr:uri>
                <fr:display-uri>yorgey-zurihac-2025</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-zurihac-2025/</fr:route>
                <fr:title text="Haskell for Competitive Programming (invited keynote)">Haskell for Competitive Programming (invited keynote)</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/zurihac-2025/" title="ZuriHac 2025" uri="http://ozark.hendrix.edu/~yorgey/forest/zurihac-2025/" display-uri="zurihac-2025" type="local">ZuriHac 2025</fr:link>
                </fr:meta>
                <fr:meta name="video">https://www.youtube.com/watch?v=Bp_mQ62c_74</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>Over the past ten years, I have solved over 1700 competitive programming problems in Haskell, just for fun (as well as a few that were not fun). I will give a brief introduction to competitive programming and show off some examples demonstrating the unique benefits of Haskell in this context. We will then have a miniature programming contest, open to all—only Haskell allowed!</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2021</fr:year>
                  <fr:month>9</fr:month>
                  <fr:day>10</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/comprog-haskell-love/</fr:uri>
                <fr:display-uri>comprog-haskell-love</fr:display-uri>
                <fr:route>/~yorgey/forest/comprog-haskell-love/</fr:route>
                <fr:title text="Competitive Programming in Haskell">Competitive Programming in Haskell</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">Haskell Love</fr:meta>
                <fr:meta name="video">https://www.youtube.com/watch?v=pyHdHZyyYGg</fr:meta>
                <fr:meta name="repo">https://github.com/byorgey/HaskellLove21</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>Competitive programming is an exciting mind sport where competitors race to solve difficult programming tasks as quickly as possible, either individually or as part of a team. It requires sharp problem-solving skills, broad knowledge of algorithms and data structures, and (often) developing a good library of reusable code components ahead of time. Most serious competitive programmers use C++, but this is an arena where Haskell can shine: Haskell's strong type system helps prevent stupid mistakes made in the heat of the moment, and its capability for abstraction allows us to develop versatile libraries and solve problems using a minimum of boilerplate. In this talk, I will livecode a solution to a representative challenge, showing off techniques and libraries along the way.</html:p>
                <html:p>I will also highlight some areas needing work. In some cases, in order to fit within the time limit imposed by the creators of a problem, it is necessary to write code that runs within a small constant multiple of the time taken by a C++ solution. This is possible but difficult; the name of the game is to create libraries of algorithms and data structures that are highly optimized internally but present a flexible and idiomatic interface suitable for use in a contest.</html:p>
                <html:p>I hope that Haskellers of all skill levels will be able to take away something new, and that some will be convinced to take up a new hobby, or contribute some code!</html:p>
              </fr:mainmatter>
            </fr:tree>
          </fr:mainmatter>
        </fr:tree>
      </fr:mainmatter>
    </fr:tree>
    <fr:tree show-metadata="false" expanded="false" numbered="true">
      <fr:frontmatter>
        <fr:authors>
          <fr:author>
            <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
          </fr:author>
        </fr:authors>
        <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/000D/</fr:uri>
        <fr:display-uri>000D</fr:display-uri>
        <fr:route>/~yorgey/forest/000D/</fr:route>
        <fr:title text="Publications">Publications</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
        <fr:tree show-metadata="false">
          <fr:frontmatter>
            <fr:authors>
              <fr:author>
                <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
              </fr:author>
            </fr:authors>
            <fr:title text="Published papers">Published papers</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>1</fr:month>
                  <fr:day>17</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-fenwick-2025/</fr:uri>
                <fr:display-uri>yorgey-fenwick-2025</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-fenwick-2025/</fr:route>
                <fr:title text="You Could Have Invented Fenwick Trees (Functional Pearl)">You Could Have Invented Fenwick Trees (Functional Pearl)</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/jfp/" title="Journal of Functional Programming" uri="http://ozark.hendrix.edu/~yorgey/forest/jfp/" display-uri="jfp" type="local">Journal of Functional Programming</fr:link>
                </fr:meta>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/icfp-2025/" title="ICFP '25: International Conference on Functional Programming" uri="http://ozark.hendrix.edu/~yorgey/forest/icfp-2025/" display-uri="icfp-2025" type="local"><html:em>ICFP '25</html:em>: International Conference on Functional Programming</fr:link>
                </fr:meta>
                <fr:meta name="doi">10.1017/S0956796824000169</fr:meta>
                <fr:meta name="bibtex"><![CDATA[@article{yorgey-2025,
  title = {You could have invented Fenwick trees},
  volume = {35},
  doi = {10.1017/S0956796824000169},
  journal = {Journal of Functional Programming},
  author = {Yorgey, Brent},
  year = {2025},
  pages = {e3}
}]]></fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/Fenwick-ext.pdf</fr:meta>
                <fr:meta name="repo">https://github.com/byorgey/fenwick</fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/fenwick-ICFP.pdf</fr:meta>
                <fr:meta name="video">https://youtu.be/jG2u1z_9_fg</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p><html:em>Fenwick trees</html:em>, also known as <html:em>binary indexed trees</html:em>, are a clever solution to the problem of maintaining a sequence of values while allowing both updates and range queries in sublinear time. Their implementation is concise and efficient—but also somewhat baffling, consisting largely of nonobvious bitwise operations on indices. We begin with <html:em>segment trees</html:em>, a much more straightforward, easy-to-verify, purely functional solution to the problem, and use equational reasoning to explain the implementation of Fenwick trees as an optimized variant, making use of a Haskell EDSL for operations on infinite two's complement binary numbers.</html:p>
                <html:p>See also this <fr:link href="https://byorgey.github.io/blog/posts/2025/01/23/Fenwick.html" type="external">blog post summary</fr:link>.  Published as part of a <fr:link href="https://www.cambridge.org/core/journals/journal-of-functional-programming/collections/program-calculation" type="external">special issue on program calculation</fr:link>.</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2023</fr:year>
                  <fr:month>8</fr:month>
                  <fr:day>14</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-disco-2023/</fr:uri>
                <fr:display-uri>yorgey-disco-2023</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-disco-2023/</fr:route>
                <fr:title text="Disco: A Functional Programming Language for Discrete Mathematics">Disco: A Functional Programming Language for Discrete Mathematics</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/tfpie-2023/" title="TFPIE '23: Trends in Functional Programming in Education" uri="http://ozark.hendrix.edu/~yorgey/forest/tfpie-2023/" display-uri="tfpie-2023" type="local"><html:em>TFPIE</html:em> '23: Trends in Functional Programming in Education</fr:link>
                </fr:meta>
                <fr:meta name="doi">10.4204/EPTCS.382.4</fr:meta>
                <fr:meta name="bibtex"><![CDATA[@Inproceedings{yorgey-disco-2023,
  author    = {Yorgey, Brent A.},
  year      = {2023},
  title     = {Disco: A Functional Programming Language for Discrete Mathematics},
  editor    = {Machkasova, Elena},
  booktitle = {{\rm Proceedings Twelfth International Workshop on}
               Trends in Functional Programming in Education,
               {\rm Boston, Massachusetts, USA, 12th January 2023}},
  series    = {Electronic Proceedings in Theoretical Computer Science},
  volume    = {382},
  publisher = {Open Publishing Association},
  pages     = {64-81},
  doi       = {10.4204/EPTCS.382.4},
}]]></fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/disco-tfpie23.pdf</fr:meta>
                <fr:meta name="repo">https://github.com/disco-lang/disco</fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/disco-tfpie23-talk.pdf</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p><fr:link href="/~yorgey/forest/000N/" title="Disco" uri="http://ozark.hendrix.edu/~yorgey/forest/000N/" display-uri="000N" type="local">Disco</fr:link> is a pure, strict, statically typed functional programming language designed to be used in the setting of a discrete mathematics course. The goals of the language are to introduce students to functional programming concepts early, and to enhance their learning of mathematics by providing a computational platform for them to play with. It features mathematically-inspired notation, property-based testing, equirecursive algebraic types, subtyping, built-in list, bag, and finite set types, a REPL, and student-focused documentation. Disco is implemented in Haskell, with source code available on GitHub, and interactive web-based REPL available through replit.</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/kennyfoner/" title="Kenny Foner" uri="http://ozark.hendrix.edu/~yorgey/forest/kennyfoner/" display-uri="kennyfoner" type="local">Kenny Foner</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2018</fr:year>
                  <fr:month>7</fr:month>
                  <fr:day>30</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-foner-2018/</fr:uri>
                <fr:display-uri>yorgey-foner-2018</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-foner-2018/</fr:route>
                <fr:title text="What's the Difference? A Functional Pearl on Subtracting Bijections">What's the Difference? A Functional Pearl on Subtracting Bijections</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/icfp-2018/" title="ICFP '18: International Conference on Functional Programming" uri="http://ozark.hendrix.edu/~yorgey/forest/icfp-2018/" display-uri="icfp-2018" type="local"><html:em>ICFP '18</html:em>: International Conference on Functional Programming</fr:link>
                </fr:meta>
                <fr:meta name="doi">10.1145/3236796</fr:meta>
                <fr:meta name="bibtex"><![CDATA[@article{yorgey-foner-2018,
  author = {Yorgey, Brent A. and Foner, Kenneth},
  title = {What's the Difference? A Functional Pearl on Subtracting Bijections},
  journal = {Proc. ACM Program. Lang.},
  issue_date = {September 2018},
  volume = {2},
  number = {ICFP},
  month = jul,
  year = {2018},
  issn = {2475-1421},
  pages = {101:1--101:21},
  articleno = {101},
  numpages = {21},
  url = {http://doi.acm.org/10.1145/3236796},
  doi = {10.1145/3236796},
  acmid = {3236796},
  publisher = {ACM},
  address = {New York, NY, USA},
  keywords = {bijection, difference},
}]]></fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/GCBP-author-version.pdf</fr:meta>
                <fr:meta name="repo">https://github.com/kwf/GCBP</fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/GCBP-ICFP-18-slides.pdf</fr:meta>
                <fr:meta name="video">https://www.youtube.com/watch?v=hq9gAe-pmzM</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>It is a straightforward exercise to write a program to "add" two bijections—resulting in a bijection between two sum types, which runs the first bijection on elements from the left summand and the second bijection on the right. It is much less obvious how to "subtract" one bijection from another. This problem has been studied in the context of combinatorics, with several computational principles known for producing the "difference" of two bijections. We consider the problem from a computational and algebraic perspective, showing how to construct such bijections at a high level, avoiding pointwise reasoning or being forced to construct the forward and backward directions separately—without sacrificing performance.</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/satvikchauhan/" title="Satvik Chauhan" uri="http://ozark.hendrix.edu/~yorgey/forest/satvikchauhan/" display-uri="satvikchauhan" type="local">Satvik Chauhan</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/piyushkurur/" title="Piyush P. Kurur" uri="http://ozark.hendrix.edu/~yorgey/forest/piyushkurur/" display-uri="piyushkurur" type="local">Piyush P. Kurur</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2016</fr:year>
                  <fr:month>9</fr:month>
                  <fr:day>8</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/chauhan-kurur-yorgey-2016/</fr:uri>
                <fr:display-uri>chauhan-kurur-yorgey-2016</fr:display-uri>
                <fr:route>/~yorgey/forest/chauhan-kurur-yorgey-2016/</fr:route>
                <fr:title text="How to Twist Pointers without Breaking Them">How to Twist Pointers without Breaking Them</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/haskell-2016/" title="Haskell '16: Haskell Symposium" uri="http://ozark.hendrix.edu/~yorgey/forest/haskell-2016/" display-uri="haskell-2016" type="local"><html:em>Haskell '16</html:em>: Haskell Symposium</fr:link>
                </fr:meta>
                <fr:meta name="doi">10.1145/2976002.2976004</fr:meta>
                <fr:meta name="bibtex"><![CDATA[@inproceedings{chauhan-kurur-yorgey-2016,
 author = {Chauhan, Satvik and Kurur, Piyush P. and Yorgey, Brent A.},
 title = {How to Twist Pointers Without Breaking Them},
 booktitle = {Proceedings of the 9th International Symposium on Haskell},
 series = {Haskell 2016},
 year = {2016},
 isbn = {978-1-4503-4434-0},
 location = {Nara, Japan},
 pages = {51--61},
 numpages = {11},
 url = {http://doi.acm.org/10.1145/2976002.2976004},
 doi = {10.1145/2976002.2976004},
 acmid = {2976004},
 publisher = {ACM},
 address = {New York, NY, USA},
 keywords = {applicative functor, monoid, monoid action, pointer, semi-direct product},
}]]></fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/twisted.pdf</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>Using the theory of monoids and monoid actions, we give a unified
framework that handles three common pointer manipulation tasks,
namely, data serialisation, deserialisation, and memory allocation.
Our main theoretical contribution is the formulation of the notion
of a <html:em>twisted functor</html:em>, a generalisation of the semi-direct product
construction for monoids. We show that semi-direct products and
twisted functors are particularly well suited as an abstraction for
many pointer manipulation tasks.</html:p>
                <html:p>We describe the implementation of these abstractions in the
context of a cryptographic library for Haskell. Twisted functors
allow us to abstract all pointer arithmetic and size calculations into a
few lines of code, significantly reducing the opportunities for buffer
overflows.</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/danpiponi/" title="Dan Piponi" uri="http://ozark.hendrix.edu/~yorgey/forest/danpiponi/" display-uri="danpiponi" type="local">Dan Piponi</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2015</fr:year>
                  <fr:month>1</fr:month>
                  <fr:day>1</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/piponi-yorgey-2015/</fr:uri>
                <fr:display-uri>piponi-yorgey-2015</fr:display-uri>
                <fr:route>/~yorgey/forest/piponi-yorgey-2015/</fr:route>
                <fr:title text="Polynomial Functors Constrained by Regular Expressions">Polynomial Functors Constrained by Regular Expressions</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/mpc-2015/" title="MPC '15: International Conference on Mathematics of Program Construction" uri="http://ozark.hendrix.edu/~yorgey/forest/mpc-2015/" display-uri="mpc-2015" type="local"><html:em>MPC '15</html:em>: International Conference on Mathematics of Program Construction</fr:link>
                </fr:meta>
                <fr:meta name="doi">10.1007/978-3-319-19797-5_6</fr:meta>
                <fr:meta name="bibtex"><![CDATA[@inproceedings{piponi-yorgey-2015,
  title={Polynomial functors constrained by regular expressions},
  author={Piponi, Dan and Yorgey, Brent A.},
  booktitle={International Conference on Mathematics of Program Construction},
  pages={113--136},
  year={2015},
  organization={Springer}
}]]></fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/type-matrices.pdf</fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/type-matrices-mpc-15.pdf</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>We show that every regular language, via some DFA which accepts it, gives rise to a homomorphism from the semiring of polynomial functors to the semiring of <fr:tex display="inline"><![CDATA[n \times  n]]></fr:tex> matrices over polynomial functors. Given some polynomial functor and a regular language, this homomorphism can be used to automatically derive a functor whose values have the same shape as those of the original functor, but whose sequences of leaf types correspond to strings in the language.</html:p>
                <html:p>The primary interest of this result lies in the fact that certain regular languages correspond to previously studied derivative-like operations on polynomial functors, which have proven useful in program construction. For example, the regular language <fr:tex display="inline"><![CDATA[a^* h a^*]]></fr:tex> yields the <html:em>derivative</html:em> of a polynomial functor, and <fr:tex display="inline"><![CDATA[b^* h a^*]]></fr:tex> its <html:em>dissection</html:em>. Using our framework, we are able to unify and lend new perspective on this previous work. For example, it turns out that dissection of polynomial functors corresponds to taking <html:em>divided differences</html:em> of real or complex functions, and, guided by this parallel, we show how to generalize binary dissection to <fr:tex display="inline"><![CDATA[n]]></fr:tex>-ary dissection.</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2012</fr:year>
                  <fr:month>9</fr:month>
                  <fr:day>13</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-monoids-2012/</fr:uri>
                <fr:display-uri>yorgey-monoids-2012</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-monoids-2012/</fr:route>
                <fr:title text="Monoids: Theme and Variations (Functional Pearl)">Monoids: Theme and Variations (Functional Pearl)</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/haskell-2012/" title="Haskell '12: Haskell Symposium" uri="http://ozark.hendrix.edu/~yorgey/forest/haskell-2012/" display-uri="haskell-2012" type="local"><html:em>Haskell '12</html:em>: Haskell Symposium</fr:link>
                </fr:meta>
                <fr:meta name="doi">10.1145/2430532.2364520</fr:meta>
                <fr:meta name="bibtex"><![CDATA[@inproceedings{10.1145/2364506.2364520,
  author = {Yorgey, Brent A.},
  title = {Monoids: Theme and Variations (Functional Pearl)},
  year = {2012},
  isbn = {978-1-4503-1574-6},
  publisher = {Association for Computing Machinery},
  address = {New York, NY, USA},
  url = {https://doi.org/10.1145/2364506.2364520},
  doi = {10.1145/2364506.2364520},
  booktitle = {Proceedings of the 2012 Haskell Symposium},
  pages = {105--116},
  numpages = {12},
  keywords = {monoid action, monoid, homomorphism, edsl},
  location = {Copenhagen, Denmark},
  series = {Haskell '12}
}]]></fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/monoid-pearl.pdf</fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/12-09-13-monoid-pearl-HS.pdf</fr:meta>
                <fr:meta name="video">http://www.youtube.com/watch?v=X-8NCkD2vOw</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>The monoid is a humble algebraic structure, at first glance even downright boring. However, there's much more to monoids than meets the eye. Using examples taken from the diagrams vector graphics framework as a case study, I demonstrate the power and beauty of monoids for library design. The paper begins with an extremely simple model of diagrams and proceeds through a series of incremental variations, all related somehow to the central theme of monoids. Along the way, I illustrate the power of compositional semantics; why you should also pay attention to the monoid's even humbler cousin, the semigroup; monoid homomorphisms; and monoid actions.</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/stephanieweirich/" title="Stephanie Weirich" uri="http://ozark.hendrix.edu/~yorgey/forest/stephanieweirich/" display-uri="stephanieweirich" type="local">Stephanie Weirich</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/juliencretin/" title="Julien Cretin" uri="http://ozark.hendrix.edu/~yorgey/forest/juliencretin/" display-uri="juliencretin" type="local">Julien Cretin</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/spj/" title="Simon Petyon Jones" uri="http://ozark.hendrix.edu/~yorgey/forest/spj/" display-uri="spj" type="local">Simon Petyon Jones</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/dimitriosvytiniotis/" title="Dimitrios Vytiniotis" uri="http://ozark.hendrix.edu/~yorgey/forest/dimitriosvytiniotis/" display-uri="dimitriosvytiniotis" type="local">Dimitrios Vytiniotis</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/josemagalhaes/" title="José Pedro Magalhães" uri="http://ozark.hendrix.edu/~yorgey/forest/josemagalhaes/" display-uri="josemagalhaes" type="local">José Pedro Magalhães</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2012</fr:year>
                  <fr:month>1</fr:month>
                  <fr:day>28</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-promotion-2012/</fr:uri>
                <fr:display-uri>yorgey-promotion-2012</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-promotion-2012/</fr:route>
                <fr:title text="Giving Haskell a Promotion">Giving Haskell a Promotion</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/tldi-2012/" title="TLDI '12: Workshop on Types in Language Design and Implementation" uri="http://ozark.hendrix.edu/~yorgey/forest/tldi-2012/" display-uri="tldi-2012" type="local"><html:em>TLDI '12</html:em>: Workshop on Types in Language Design and Implementation</fr:link>
                </fr:meta>
                <fr:meta name="doi">10.1145/2103786.2103795</fr:meta>
                <fr:meta name="bibtex"><![CDATA[@inproceedings{Yorgey:2012:GHP:2103786.2103795,
  author = {Yorgey, Brent A. and Weirich, Stephanie and Cretin, Julien and Peyton Jones, Simon and Vytiniotis, Dimitrios and Magalh\~{a}es, Jos{\'e} Pedro},
  title = {Giving Haskell a Promotion},
  booktitle = {Proceedings of the 8th ACM SIGPLAN Workshop on Types in Language Design and Implementation},
  series = {TLDI '12},
  year = {2012},
  isbn = {978-1-4503-1120-5},
  location = {Philadelphia, Pennsylvania, USA},
  pages = {53--66},
  numpages = {14},
  url = {http://doi.acm.org/10.1145/2103786.2103795},
  doi = {10.1145/2103786.2103795},
  acmid = {2103795},
  publisher = {ACM},
  address = {New York, NY, USA},
  keywords = {haskell, kinds, polymorphism, promotion},
}]]></fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/promotion.pdf</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>Static type systems strive to be richly expressive while still being simple enough for programmers to use. We describe an experiment that enriches Haskell's kind system with two features promoted from its type system: data types and polymorphism. The new system has a very good power-to-weight ratio: it offers a significant improvement in expressiveness, but, by re-using concepts that programmers are already familiar with, the system is easy to understand and implement.</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/stephanieweirich/" title="Stephanie Weirich" uri="http://ozark.hendrix.edu/~yorgey/forest/stephanieweirich/" display-uri="stephanieweirich" type="local">Stephanie Weirich</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/timsheard/" title="Tim Sheard" uri="http://ozark.hendrix.edu/~yorgey/forest/timsheard/" display-uri="timsheard" type="local">Tim Sheard</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2011</fr:year>
                  <fr:month>9</fr:month>
                  <fr:day>19</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/weirich-yorgey-sheard-2011/</fr:uri>
                <fr:display-uri>weirich-yorgey-sheard-2011</fr:display-uri>
                <fr:route>/~yorgey/forest/weirich-yorgey-sheard-2011/</fr:route>
                <fr:title text="Binders Unbound">Binders Unbound</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/icfp-2011/" title="ICFP '11: International Conference on Functional Programming" uri="http://ozark.hendrix.edu/~yorgey/forest/icfp-2011/" display-uri="icfp-2011" type="local"><html:em>ICFP '11</html:em>: International Conference on Functional Programming</fr:link>
                </fr:meta>
                <fr:meta name="doi">10.1145/2034773.2034818</fr:meta>
                <fr:meta name="bibtex"><![CDATA[@inproceedings{weirich-yorgey-sheard-2011-unbound,
  author = {Weirich, Stephanie and Yorgey, Brent A. and Sheard, Tim},
  title = {Binders Unbound},
  booktitle = {Proceedings of the 16th ACM SIGPLAN International Conference on Functional Programming},
  series = {ICFP '11},
  year = {2011},
  isbn = {978-1-4503-0865-6},
  location = {Tokyo, Japan},
  pages = {333--345},
  numpages = {13},
  url = {http://doi.acm.org/10.1145/2034773.2034818},
  doi = {10.1145/2034773.2034818},
  acmid = {2034818},
  publisher = {ACM},
  address = {New York, NY, USA},
  keywords = {generic programming, haskell, name binding, patterns},
}]]></fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/unbound.pdf</fr:meta>
                <fr:meta name="video">https://dl.acm.org/doi/suppl/10.1145/2034574.2034818/suppl_file/_talk6.mp4</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>Implementors of compilers, program refactorers, theorem provers, proof checkers, and other systems that manipulate syntax know that dealing with name binding is difficult to do well. Operations such as α-equivalence and capture-avoiding substitution seem simple, yet subtle bugs often go undetected. Furthermore, their implementations are tedious, requiring "boilerplate" code that must be updated whenever the object language definition changes.</html:p>
                <html:p>Many researchers have therefore sought to specify binding syntax declaratively, so that tools can correctly handle the details behind the scenes. This idea has been the inspiration for many new systems (such as Beluga, Delphin, FreshML, FreshOCaml, Cαml, FreshLib, and Ott) but there is still room for improvement in expressivity, simplicity and convenience.</html:p>
                <html:p>In this paper, we present a new domain-specific language, Unbound, for specifying binding structure. Our language is particularly expressive - it supports multiple atom types, pattern binders, type annotations, recursive binders, and nested binding (necessary for telescopes, a feature found in dependently-typed languages). However, our specification language is also simple, consisting of just five basic combinators. We provide a formal semantics for this language derived from a locally nameless representation and prove that it satisfies a number of desirable properties.</html:p>
                <html:p>We also present an implementation of our binding specification language as a GHC Haskell library implementing an embedded domain specific language (EDSL). By using Haskell type constructors to represent binding combinators, we implement the EDSL succinctly using datatype-generic programming. Our implementation supports a number of features necessary for practical programming, including flexibility in the treatment of user-defined types, best-effort name preservation (for error messages), and integration with Haskell's monad transformer library.</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2010</fr:year>
                  <fr:month>9</fr:month>
                  <fr:day>30</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-species-2010/</fr:uri>
                <fr:display-uri>yorgey-species-2010</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-species-2010/</fr:route>
                <fr:title text="Species and Functors and Types, Oh My! (Functional Pearl)">Species and Functors and Types, Oh My! (Functional Pearl)</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/haskell-2010/" title="Haskell '10: Haskell Symposium" uri="http://ozark.hendrix.edu/~yorgey/forest/haskell-2010/" display-uri="haskell-2010" type="local"><html:em>Haskell '10</html:em>: Haskell Symposium</fr:link>
                </fr:meta>
                <fr:meta name="doi">10.1145/1863523.186354</fr:meta>
                <fr:meta name="bibtex"><![CDATA[@inproceedings{yorgey-2010-species,
  author = {Yorgey, Brent A.},
  title = {Species and functors and types, oh my!},
  booktitle = {Proceedings of the third ACM Haskell symposium on Haskell},
  series = {Haskell '10},
  year = {2010},
  isbn = {978-1-4503-0252-4},
  location = {Baltimore, Maryland, USA},
  pages = {147--158},
  numpages = {12},
  url = {http://doi.acm.org/10.1145/1863523.1863542},
  doi = {http://doi.acm.org/10.1145/1863523.1863542},
  acmid = {1863542},
  publisher = {ACM},
  address = {New York, NY, USA},
  keywords = {algebraic data types, combinatorial species},
}]]></fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/species-pearl.pdf</fr:meta>
                <fr:meta name="video">http://vimeo.com/16753644</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>The theory of <html:em>combinatorial species</html:em>, although invented as a purely mathematical formalism to unify much of combinatorics, can also serve as a powerful and expressive language for talking about data types. With potential applications to automatic test generation, generic programming, and language design, the theory deserves to be much better known in the functional programming community. This paper aims to teach the basic theory of combinatorial species using motivation and examples from the world of functional programming. It also introduces the <html:code>species</html:code> library, available on Hackage, which is used to illustrate the concepts introduced and can serve as a platform for continued study and research.</html:p>
              </fr:mainmatter>
            </fr:tree>
          </fr:mainmatter>
        </fr:tree>
        <fr:tree show-metadata="false">
          <fr:frontmatter>
            <fr:authors>
              <fr:author>
                <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
              </fr:author>
            </fr:authors>
            <fr:title text="Dissertation">Dissertation</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2014</fr:year>
                  <fr:month>10</fr:month>
                  <fr:day>14</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-species-2015/</fr:uri>
                <fr:display-uri>yorgey-species-2015</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-species-2015/</fr:route>
                <fr:title text="Combinatorial Species and Labelled Structures">Combinatorial Species and Labelled Structures</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">Doctoral dissertation, <fr:link href="/~yorgey/forest/upenn/" title="University of Pennsylvania" uri="http://ozark.hendrix.edu/~yorgey/forest/upenn/" display-uri="upenn" type="local">University of Pennsylvania</fr:link></fr:meta>
                <fr:meta name="bibtex"><![CDATA[@phdthesis{yorgey-2014-thesis,
  author = {Yorgey, Brent A.},
  school = {University of Pennsylvania},
  year = {2014},
  title = {Combinatorial Species and Labelled Structures}
}]]></fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/thesis.pdf</fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/yorgey-defense-slides.pdf</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>The theory of combinatorial species was developed in the 1980s as part of the mathematical subfield of enumerative combinatorics, unifying and putting on a firmer theoretical basis a collection of techniques centered around generating functions. The theory of algebraic data types was developed, around the same time, in functional programming languages such as Hope and Miranda, and is still used today in languages such as Haskell, the ML family, and Scala. Despite their disparate origins, the two theories have striking similarities. In particular, both constitute algebraic frameworks in which to construct structures of interest. Though the similarity has not gone unnoticed, a link between combinatorial species and algebraic data types has never been systematically explored. This dissertation lays the theoretical groundwork for a precise—and, hopefully, useful—bridge bewteen the two theories. One of the key contributions is to port the theory of species from a classical, untyped set theory to a constructive type theory. This porting process is nontrivial, and involves fundamental issues related to equality and finiteness; the recently developed homotopy type theory is put to good use formalizing these issues in a satisfactory way. In conjunction with this port, species as general functor categories are considered, systematically analyzing the categorical properties necessary to define each standard species operation. Another key contribution is to clarify the role of species as labelled shapes, not containing any data, and to use the theory of analytic functors to model labelled data structures, which have both labelled shapes and data associated to the labels. Finally, some novel species variants are considered, which may prove to be of use in explicitly modelling the memory layout used to store labelled data structures.</html:p>
              </fr:mainmatter>
            </fr:tree>
          </fr:mainmatter>
        </fr:tree>
        <fr:tree show-metadata="false">
          <fr:frontmatter>
            <fr:authors>
              <fr:author>
                <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
              </fr:author>
            </fr:authors>
            <fr:title text="Books">Books</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/bcp/" title="Benjamin C. Pierce" uri="http://ozark.hendrix.edu/~yorgey/forest/bcp/" display-uri="bcp" type="local">Benjamin C. Pierce</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/arthuramorim/" title="Arthur Azevedo de Amorim" uri="http://ozark.hendrix.edu/~yorgey/forest/arthuramorim/" display-uri="arthuramorim" type="local">Arthur Azevedo de Amorim</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/ccasin/" title="Chris Casinghino" uri="http://ozark.hendrix.edu/~yorgey/forest/ccasin/" display-uri="ccasin" type="local">Chris Casinghino</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/marcogaboardi/" title="Marco Gaboardi" uri="http://ozark.hendrix.edu/~yorgey/forest/marcogaboardi/" display-uri="marcogaboardi" type="local">Marco Gaboardi</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/michaelgreenberg/" title="Michael Greenberg" uri="http://ozark.hendrix.edu/~yorgey/forest/michaelgreenberg/" display-uri="michaelgreenberg" type="local">Michael Greenberg</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/catalinhritcu/" title="Cătălin Hriţcu" uri="http://ozark.hendrix.edu/~yorgey/forest/catalinhritcu/" display-uri="catalinhritcu" type="local">Cătălin Hriţcu</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/vilhelm/" title="Vilhelm Sjöberg" uri="http://ozark.hendrix.edu/~yorgey/forest/vilhelm/" display-uri="vilhelm" type="local">Vilhelm Sjöberg</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/sf1/</fr:uri>
                <fr:display-uri>sf1</fr:display-uri>
                <fr:route>/~yorgey/forest/sf1/</fr:route>
                <fr:title text="Software Foundations, Volume 1: Logical Foundations">Software Foundations, Volume 1: Logical Foundations</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="external">https://softwarefoundations.cis.upenn.edu/lf-current/index.html</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter />
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/bcp/" title="Benjamin C. Pierce" uri="http://ozark.hendrix.edu/~yorgey/forest/bcp/" display-uri="bcp" type="local">Benjamin C. Pierce</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/arthuramorim/" title="Arthur Azevedo de Amorim" uri="http://ozark.hendrix.edu/~yorgey/forest/arthuramorim/" display-uri="arthuramorim" type="local">Arthur Azevedo de Amorim</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/ccasin/" title="Chris Casinghino" uri="http://ozark.hendrix.edu/~yorgey/forest/ccasin/" display-uri="ccasin" type="local">Chris Casinghino</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/marcogaboardi/" title="Marco Gaboardi" uri="http://ozark.hendrix.edu/~yorgey/forest/marcogaboardi/" display-uri="marcogaboardi" type="local">Marco Gaboardi</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/michaelgreenberg/" title="Michael Greenberg" uri="http://ozark.hendrix.edu/~yorgey/forest/michaelgreenberg/" display-uri="michaelgreenberg" type="local">Michael Greenberg</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/catalinhritcu/" title="Cătălin Hriţcu" uri="http://ozark.hendrix.edu/~yorgey/forest/catalinhritcu/" display-uri="catalinhritcu" type="local">Cătălin Hriţcu</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/vilhelm/" title="Vilhelm Sjöberg" uri="http://ozark.hendrix.edu/~yorgey/forest/vilhelm/" display-uri="vilhelm" type="local">Vilhelm Sjöberg</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/andrewtolmach/" title="Andrew Tolmach" uri="http://ozark.hendrix.edu/~yorgey/forest/andrewtolmach/" display-uri="andrewtolmach" type="local">Andrew Tolmach</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/sf2/</fr:uri>
                <fr:display-uri>sf2</fr:display-uri>
                <fr:route>/~yorgey/forest/sf2/</fr:route>
                <fr:title text="Software Foundations, Volume 2: Programming Language Foundations">Software Foundations, Volume 2: Programming Language Foundations</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="external">https://softwarefoundations.cis.upenn.edu/plf-current/index.html</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter />
            </fr:tree>
          </fr:mainmatter>
        </fr:tree>
        <fr:tree show-metadata="false">
          <fr:frontmatter>
            <fr:authors>
              <fr:author>
                <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
              </fr:author>
            </fr:authors>
            <fr:title text="Presentations">Presentations</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>6</fr:month>
                  <fr:day>9</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-zurihac-2025/</fr:uri>
                <fr:display-uri>yorgey-zurihac-2025</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-zurihac-2025/</fr:route>
                <fr:title text="Haskell for Competitive Programming (invited keynote)">Haskell for Competitive Programming (invited keynote)</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/zurihac-2025/" title="ZuriHac 2025" uri="http://ozark.hendrix.edu/~yorgey/forest/zurihac-2025/" display-uri="zurihac-2025" type="local">ZuriHac 2025</fr:link>
                </fr:meta>
                <fr:meta name="video">https://www.youtube.com/watch?v=Bp_mQ62c_74</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>Over the past ten years, I have solved over 1700 competitive programming problems in Haskell, just for fun (as well as a few that were not fun). I will give a brief introduction to competitive programming and show off some examples demonstrating the unique benefits of Haskell in this context. We will then have a miniature programming contest, open to all—only Haskell allowed!</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>1</fr:month>
                  <fr:day>30</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/idiomatic-inference-PLV/</fr:uri>
                <fr:display-uri>idiomatic-inference-PLV</fr:display-uri>
                <fr:route>/~yorgey/forest/idiomatic-inference-PLV/</fr:route>
                <fr:title text="Idiomatic Inference for DSLs">Idiomatic Inference for DSLs</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue"><fr:link href="/~yorgey/forest/psu/" title="Portland State University" uri="http://ozark.hendrix.edu/~yorgey/forest/psu/" display-uri="psu" type="local">Portland State University</fr:link> PLV seminar</fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/PLV-idiomatic-inference.pdf</fr:meta>
                <fr:meta name="repo">https://github.com/byorgey/infer-applicative</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>McBride and Paterson's <html:em>idioms</html:em>, or <html:em>applicative functors</html:em>, are a well-known abstraction defining function application in some ambient effectful context.  It would often be useful, especially in the context of designing domain-specific languages, to <html:em>infer</html:em> such "idiomatic'' application, allowing the programmer to use plain function application syntax—but only when doing so is unambiguous.  I will present work in progress characterizing the conditions necessary for this to be possible.</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2024</fr:year>
                  <fr:month>9</fr:month>
                  <fr:day>6</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/joy-functional-haskell/</fr:uri>
                <fr:display-uri>joy-functional-haskell</fr:display-uri>
                <fr:route>/~yorgey/forest/joy-functional-haskell/</fr:route>
                <fr:title text="The Joy of Building (Functional) Languages (invited keynote)">The Joy of Building (Functional) Languages (invited keynote)</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/haskell-2024/" title="Haskell '24: Haskell Symposium" uri="http://ozark.hendrix.edu/~yorgey/forest/haskell-2024/" display-uri="haskell-2024" type="local"><html:em>Haskell '24</html:em>: Haskell Symposium</fr:link>
                </fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/HS24-keynote.pdf</fr:meta>
                <fr:meta name="repo">https://github.com/byorgey/HS24-keynote</fr:meta>
                <fr:meta name="video">https://www.youtube.com/watch?v=C8PcRqIToCM</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>For almost as long as I can remember, all my best projects—the ones that I’m proudest of, the ones that have been the most fruitful and brought me the most joy—have all centered around building some kind of language. Perhaps I am just weird, but I think there is something uniquely joyful about not just expressing oneself, but creating a whole new means of expression for oneself and others. I will take you on a tour of some of my most interesting and joyful language-building projects (some of which you have probably heard of, some of which you definitely haven’t), and then we will build a language together!</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2021</fr:year>
                  <fr:month>9</fr:month>
                  <fr:day>10</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/comprog-haskell-love/</fr:uri>
                <fr:display-uri>comprog-haskell-love</fr:display-uri>
                <fr:route>/~yorgey/forest/comprog-haskell-love/</fr:route>
                <fr:title text="Competitive Programming in Haskell">Competitive Programming in Haskell</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">Haskell Love</fr:meta>
                <fr:meta name="video">https://www.youtube.com/watch?v=pyHdHZyyYGg</fr:meta>
                <fr:meta name="repo">https://github.com/byorgey/HaskellLove21</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>Competitive programming is an exciting mind sport where competitors race to solve difficult programming tasks as quickly as possible, either individually or as part of a team. It requires sharp problem-solving skills, broad knowledge of algorithms and data structures, and (often) developing a good library of reusable code components ahead of time. Most serious competitive programmers use C++, but this is an arena where Haskell can shine: Haskell's strong type system helps prevent stupid mistakes made in the heat of the moment, and its capability for abstraction allows us to develop versatile libraries and solve problems using a minimum of boilerplate. In this talk, I will livecode a solution to a representative challenge, showing off techniques and libraries along the way.</html:p>
                <html:p>I will also highlight some areas needing work. In some cases, in order to fit within the time limit imposed by the creators of a problem, it is necessary to write code that runs within a small constant multiple of the time taken by a C++ solution. This is possible but difficult; the name of the game is to create libraries of algorithms and data structures that are highly optimized internally but present a flexible and idiomatic interface suitable for use in a contest.</html:p>
                <html:p>I hope that Haskellers of all skill levels will be able to take away something new, and that some will be convinced to take up a new hobby, or contribute some code!</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2018</fr:year>
                  <fr:month>4</fr:month>
                  <fr:day>6</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-graph-coloring-SAT-CCSC/</fr:uri>
                <fr:display-uri>yorgey-graph-coloring-SAT-CCSC</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-graph-coloring-SAT-CCSC/</fr:route>
                <fr:title text="Graph Coloring with a SAT Solver">Graph Coloring with a SAT Solver</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">CCSC Mid-South</fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/CCSC-nifty-SAT.pdf</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter />
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/richardeisenberg/" title="Richard Eisenberg" uri="http://ozark.hendrix.edu/~yorgey/forest/richardeisenberg/" display-uri="richardeisenberg" type="local">Richard Eisenberg</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/harleyeades/" title="Harley Eades" uri="http://ozark.hendrix.edu/~yorgey/forest/harleyeades/" display-uri="harleyeades" type="local">Harley Eades</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2018</fr:year>
                  <fr:month>1</fr:month>
                  <fr:day>13</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-eisenberg-eades-errors-OBT/</fr:uri>
                <fr:display-uri>yorgey-eisenberg-eades-errors-OBT</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-eisenberg-eades-errors-OBT/</fr:route>
                <fr:title text="Explaining Type Errors">Explaining Type Errors</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/OBT-2018/" title="OBT '18: Off The Beaten Track" uri="http://ozark.hendrix.edu/~yorgey/forest/OBT-2018/" display-uri="OBT-2018" type="local"><html:em>OBT '18</html:em>: Off The Beaten Track</fr:link>
                </fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/explaining-errors.pdf</fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/explaining-errors-slides.pdf</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>Every beginning student of programming—that is, every student with the ill fortune of having a language with a static type system foisted upon them by a well-intentioned yet sadistic instructor—is well-acquainted with the Dreaded Type Error Message. Why do type error messages have to be so terrifying? Can’t we do a better job explaining type errors to programmers?</html:p>
                <html:p>We propose two interrelated theses:
<html:ul><html:li>We ought to move away from static error “messages” and towards interactive error explanations.</html:li>
  <html:li>We ought to consider the problem of generating error explanations in a more systematic, disciplined, and formal way. Explaining errors to users shouldn’t just be relegated to the status of an “engineering issue”, but ought to have all the tools of programming language theory and practice applied to it.</html:li></html:ul></html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/ryanyates/" title="Ryan Yates" uri="http://ozark.hendrix.edu/~yorgey/forest/ryanyates/" display-uri="ryanyates" type="local">Ryan Yates</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2015</fr:year>
                  <fr:month>8</fr:month>
                  <fr:day>30</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yates-yorgey-2015/</fr:uri>
                <fr:display-uri>yates-yorgey-2015</fr:display-uri>
                <fr:route>/~yorgey/forest/yates-yorgey-2015/</fr:route>
                <fr:title text="Diagrams: A Functional EDSL for Vector Graphics">Diagrams: A Functional EDSL for Vector Graphics</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/farm-2015/" title="FARM '15: International Workshop on Functional Art, Music, Modelling and Design" uri="http://ozark.hendrix.edu/~yorgey/forest/farm-2015/" display-uri="farm-2015" type="local"><html:em>FARM '15</html:em>: International Workshop on Functional Art, Music, Modelling and Design</fr:link>
                </fr:meta>
                <fr:meta name="doi">10.1145/2808083.2808085</fr:meta>
                <fr:meta name="bibtex"><![CDATA[@inproceedings{yates-yorgey-2015,
  author = {Yates, Ryan and Yorgey, Brent A.},
  title = {Diagrams: a functional EDSL for vector graphics},
  year = {2015},
  isbn = {9781450338066},
  publisher = {Association for Computing Machinery},
  address = {New York, NY, USA},
  url = {https://doi.org/10.1145/2808083.2808085},
  doi = {10.1145/2808083.2808085},
  abstract = {},
  booktitle = {Proceedings of the 3rd ACM SIGPLAN International Workshop on Functional Art, Music, Modelling and Design},
  pages = {4–5},
  numpages = {2},
  keywords = {EDSL, Haskell, diagrams, vector},
  location = {Vancouver, BC, Canada},
  series = {FARM 2015}
}]]></fr:meta>
                <fr:meta name="pdf">http://ozark.hendrix.edu/~yorgey/pub/diagrams-FARM.pdf</fr:meta>
                <fr:meta name="video">https://www.youtube.com/watch?v=oAz8AEf7WDA</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>Diagrams is a domain-specific language for creating vector graphics. We will give a short diagrams tutorial/demo, particularly highlighting the power of a functional, embedded domain-specific language.</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2013</fr:year>
                  <fr:month>11</fr:month>
                  <fr:day>20</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-diagrams-NYHUG-2013/</fr:uri>
                <fr:display-uri>yorgey-diagrams-NYHUG-2013</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-diagrams-NYHUG-2013/</fr:route>
                <fr:title text="Diagrams: Declarative Vector Graphics in Haskell"><html:code>Diagrams</html:code>: Declarative Vector Graphics in Haskell</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">New York Haskell Users' Group</fr:meta>
                <fr:meta name="video">https://vimeo.com/84104226</fr:meta>
                <fr:meta name="video">https://vimeo.com/84249042</fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/13-11-25-nyhaskell-diagrams.pdf</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>Over the past ten years, I have solved over 1700 competitive programming problems in Haskell, just for fun (as well as a few that were not fun). I will give a brief introduction to competitive programming and show off some examples demonstrating the unique benefits of Haskell in this context. We will then have a miniature programming contest, open to all—only Haskell allowed!</html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2013</fr:year>
                  <fr:month>10</fr:month>
                  <fr:day>29</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-trees-semirings/</fr:uri>
                <fr:display-uri>yorgey-trees-semirings</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-trees-semirings/</fr:route>
                <fr:title text="Trees and Things (with Semirings!)">Trees and Things (with Semirings!)</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">Houghton College</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter />
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/andygill/" title="Andy Gill" uri="http://ozark.hendrix.edu/~yorgey/forest/andygill/" display-uri="andygill" type="local">Andy Gill</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2013</fr:year>
                  <fr:month>9</fr:month>
                  <fr:day>28</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-active-2013/</fr:uri>
                <fr:display-uri>yorgey-active-2013</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-active-2013/</fr:route>
                <fr:title text="Functional Active Animation">Functional Active Animation</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/farm-2013/" title="FARM '13: International Workshop on Functional Art, Music, Modelling and Design" uri="http://ozark.hendrix.edu/~yorgey/forest/farm-2013/" display-uri="farm-2013" type="local"><html:em>FARM '13</html:em>: International Workshop on Functional Art, Music, Modelling and Design</fr:link>
                </fr:meta>
                <fr:meta name="video">http://www.youtube.com/watch?v=fb2K3h7t8fo</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter />
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2012</fr:year>
                  <fr:month>4</fr:month>
                  <fr:day>13</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-compositional-drawing-2012/</fr:uri>
                <fr:display-uri>yorgey-compositional-drawing-2012</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-compositional-drawing-2012/</fr:route>
                <fr:title text="Embedded, functional, compositional drawing">Embedded, functional, compositional drawing</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/williamscollege/" title="Williams College" uri="http://ozark.hendrix.edu/~yorgey/forest/williamscollege/" display-uri="williamscollege" type="local">Williams College</fr:link>
                </fr:meta>
              </fr:frontmatter>
              <fr:mainmatter />
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2010</fr:year>
                  <fr:month>10</fr:month>
                  <fr:day>1</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-type-level-HIW-2010/</fr:uri>
                <fr:display-uri>yorgey-type-level-HIW-2010</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-type-level-HIW-2010/</fr:route>
                <fr:title text="Typed type-level programming with GHC">Typed type-level programming with GHC</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/HIW-2010/" title="HIW '10: Haskell Implementors' Workshop" uri="http://ozark.hendrix.edu/~yorgey/forest/HIW-2010/" display-uri="HIW-2010" type="local"><html:em>HIW '10</html:em>: Haskell Implementors' Workshop</fr:link>
                </fr:meta>
                <fr:meta name="video">http://www.vimeo.com/15480577</fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/typetype-HIW-20101001.pdf</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter />
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2009</fr:year>
                  <fr:month>11</fr:month>
                  <fr:day>24</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-species-2009/</fr:uri>
                <fr:display-uri>yorgey-species-2009</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-species-2009/</fr:route>
                <fr:title text="Random testing—and beyond! with combinatorial species">Random testing—and beyond! with combinatorial species</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/ku/" title="University of Kansas" uri="http://ozark.hendrix.edu/~yorgey/forest/ku/" display-uri="ku" type="local">University of Kansas</fr:link>
                </fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/combtesting-ku-20091124.pdf</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter />
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2008</fr:year>
                  <fr:month>6</fr:month>
                  <fr:day>8</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-mathematics-haskell/</fr:uri>
                <fr:display-uri>yorgey-mathematics-haskell</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-mathematics-haskell/</fr:route>
                <fr:title text="Executable Mathematics: a Whirlwind Introduction to Haskell">Executable Mathematics: a Whirlwind Introduction to Haskell</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">
                  <fr:link href="/~yorgey/forest/williamscollege/" title="Williams College" uri="http://ozark.hendrix.edu/~yorgey/forest/williamscollege/" display-uri="williamscollege" type="local">Williams College</fr:link>
                </fr:meta>
              </fr:frontmatter>
              <fr:mainmatter />
            </fr:tree>
            <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/~yorgey/forest/brentyorgey/" title="Brent A. Yorgey" uri="http://ozark.hendrix.edu/~yorgey/forest/brentyorgey/" display-uri="brentyorgey" type="local">Brent A. Yorgey</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2008</fr:year>
                  <fr:month>3</fr:month>
                  <fr:day>22</fr:day>
                </fr:date>
                <fr:uri>http://ozark.hendrix.edu/~yorgey/forest/yorgey-xmonad-FringeDC/</fr:uri>
                <fr:display-uri>yorgey-xmonad-FringeDC</fr:display-uri>
                <fr:route>/~yorgey/forest/yorgey-xmonad-FringeDC/</fr:route>
                <fr:title text="xmonad: a Haskell Success Story">xmonad: a Haskell Success Story</fr:title>
                <fr:taxon>Reference</fr:taxon>
                <fr:meta name="venue">FringeDC</fr:meta>
                <fr:meta name="slides">http://ozark.hendrix.edu/~yorgey/pub/xmonad.pdf</fr:meta>
              </fr:frontmatter>
              <fr:mainmatter />
            </fr:tree>
          </fr:mainmatter>
        </fr:tree>
      </fr:mainmatter>
    </fr:tree>
  </fr:mainmatter>
  <fr:backmatter>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="References">References</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Context">Context</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Backlinks">Backlinks</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Related">Related</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Contributions">Contributions</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
  </fr:backmatter>
</fr:tree>
