<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">The records problem – Haskell – Aelve Guide</title><id>https://guide.aelve.com/haskell/feed/category/hogy1n17</id><updated>2018-11-19T09:39:34Z</updated><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/feed/category/hogy1n17"/><entry><id>i9677p0v</id><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">row-types</title><updated>2018-11-19T09:39:34Z</updated><content xmlns:ns="http://www.w3.org/2005/Atom" ns:type="html">&lt;h1&gt;  &lt;span class=&#34;item-name&#34;&gt;row-types&lt;/span&gt;

  
  (&lt;a href=&#34;https://hackage.haskell.org/package/row-types&#34;&gt;Hackage&lt;/a&gt;)
&lt;/h1&gt;&lt;p&gt;Row-types is a library of open records and variants for Haskell&lt;/p&gt;
&lt;h2&gt;Pros&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;&lt;h2&gt;Cons&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;</content><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/the-records-problem-hogy1n17#item-i9677p0v"/></entry><entry><id>ycgi7y2l</id><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">superrecord</title><updated>2017-07-06T12:04:53Z</updated><content xmlns:ns="http://www.w3.org/2005/Atom" ns:type="html">&lt;h1&gt;  &lt;span class=&#34;item-name&#34;&gt;superrecord&lt;/span&gt;

  
  (&lt;a href=&#34;https://hackage.haskell.org/package/superrecord&#34;&gt;Hackage&lt;/a&gt;)
&lt;/h1&gt;&lt;h2&gt;Pros&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;&lt;h2&gt;Cons&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;</content><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/the-records-problem-hogy1n17#item-ycgi7y2l"/></entry><entry><id>p5zwue8s</id><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">rawr</title><updated>2016-08-27T11:14:18Z</updated><content xmlns:ns="http://www.w3.org/2005/Atom" ns:type="html">&lt;h1&gt;  &lt;span class=&#34;item-name&#34;&gt;rawr&lt;/span&gt;

  
  (&lt;a href=&#34;https://hackage.haskell.org/package/rawr&#34;&gt;Hackage&lt;/a&gt;)
&lt;/h1&gt;&lt;p&gt;Extensible records using GHC 8 features.&lt;/p&gt;
&lt;h2&gt;Pros&lt;/h2&gt;&lt;ul&gt;&lt;p&gt;&lt;li&gt;Do not require Template Haskell to use.&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Only &lt;code&gt;base&lt;/code&gt; dependency.&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Support pattern matching, merging and partitioning (row-polymorphism) on anonymous records.&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Support both lazy and strict fields.&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Provide overloaded labels which can be used as field selectors or lenses.&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Minimal performance overhead and memory footprint.&lt;/li&gt;&lt;/p&gt;&lt;/ul&gt;&lt;h2&gt;Cons&lt;/h2&gt;&lt;ul&gt;&lt;p&gt;&lt;li&gt;Requires GHC &amp;gt;= 8.0.&lt;/li&gt;&lt;/p&gt;&lt;p&gt;&lt;li&gt;Only support type-level &lt;code&gt;Symbol&lt;/code&gt; as indexes. (Unlike &lt;code&gt;Vinyl&lt;/code&gt;)&lt;/li&gt;&lt;/p&gt;&lt;/ul&gt;&lt;h2&gt;Ecosystem&lt;/h2&gt;&lt;p&gt;None, as the package is still very new.&lt;/p&gt;
</content><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/the-records-problem-hogy1n17#item-p5zwue8s"/></entry><entry><id>tnu820kh</id><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">vinyl</title><updated>2016-08-25T00:11:51Z</updated><content xmlns:ns="http://www.w3.org/2005/Atom" ns:type="html">&lt;h1&gt;  &lt;span class=&#34;item-name&#34;&gt;vinyl&lt;/span&gt;

  
  (&lt;a href=&#34;https://hackage.haskell.org/package/vinyl&#34;&gt;Hackage&lt;/a&gt;)
&lt;/h1&gt;&lt;h2&gt;Pros&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;&lt;h2&gt;Cons&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;</content><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/the-records-problem-hogy1n17#item-tnu820kh"/></entry><entry><id>k24z9tju</id><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">records</title><updated>2016-08-25T00:11:48Z</updated><content xmlns:ns="http://www.w3.org/2005/Atom" ns:type="html">&lt;h1&gt;  &lt;span class=&#34;item-name&#34;&gt;records&lt;/span&gt;

  
  (&lt;a href=&#34;https://hackage.haskell.org/package/records&#34;&gt;Hackage&lt;/a&gt;)
&lt;/h1&gt;&lt;h2&gt;Pros&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;&lt;h2&gt;Cons&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;</content><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/the-records-problem-hogy1n17#item-k24z9tju"/></entry><entry><id>e6uhxk06</id><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">lens</title><updated>2016-08-25T00:11:37Z</updated><content xmlns:ns="http://www.w3.org/2005/Atom" ns:type="html">&lt;h1&gt;  &lt;span class=&#34;item-name&#34;&gt;lens&lt;/span&gt;

  
  (&lt;a href=&#34;https://hackage.haskell.org/package/lens&#34;&gt;Hackage&lt;/a&gt;)
&lt;/h1&gt;&lt;p&gt;lens is commonly used to make working with records easier (though it doesn&#39;t provide &lt;em&gt;everything&lt;/em&gt; that we might want from a records system). Things that are possible with lens:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Updating records: set a field with &lt;code&gt;field .~ x&lt;/code&gt;, apply a function to a field with &lt;code&gt;field %~ f&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Updating nested records: just chain field names like &lt;code&gt;foo.bar.baz %~ f&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Having several records with the same field name: see &lt;a href=&#34;http://hackage.haskell.org/package/lens/docs/Control-Lens-TH.html#v:makeFields&#34;&gt;&lt;code&gt;makeFields&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;“Subtyping”, i.e. being able to say that a record is a subset of another record: see &lt;a href=&#34;http://hackage.haskell.org/package/lens/docs/Control-Lens-TH.html#v:makeClassy&#34;&gt;&lt;code&gt;makeClassy&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Pros&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;&lt;h2&gt;Cons&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;</content><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/the-records-problem-hogy1n17#item-e6uhxk06"/></entry><entry><id>vy6q335h</id><title xmlns:ns="http://www.w3.org/2005/Atom" ns:type="text">bookkeeper</title><updated>2016-08-25T00:11:28Z</updated><content xmlns:ns="http://www.w3.org/2005/Atom" ns:type="html">&lt;h1&gt;  &lt;a href=&#34;https://turingjump.com/blog/bookkeeper/&#34; class=&#34;item-name&#34;&gt;bookkeeper&lt;/a&gt;

  
  (&lt;a href=&#34;https://hackage.haskell.org/package/bookkeeper&#34;&gt;Hackage&lt;/a&gt;)
&lt;/h1&gt;&lt;h2&gt;Pros&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;&lt;h2&gt;Cons&lt;/h2&gt;&lt;ul&gt;&lt;/ul&gt;</content><link xmlns:ns="http://www.w3.org/2005/Atom" ns:href="https://guide.aelve.com/haskell/the-records-problem-hogy1n17#item-vy6q335h"/></entry></feed>