tag:blogger.com,1999:blog-1777990983847811806.post3028020977435416066..comments2023-03-17T01:06:43.096-07:00Comments on Haskell for all: A very general API for relational joinsGabriella Gonzalezhttp://www.blogger.com/profile/01917800488530923694noreply@blogger.comBlogger2125tag:blogger.com,1999:blog-1777990983847811806.post-70503956832018848932015-02-03T14:48:44.019-08:002015-02-03T14:48:44.019-08:00Amazing!Amazing!Anonymoushttps://www.blogger.com/profile/18335957121025186789noreply@blogger.comtag:blogger.com,1999:blog-1777990983847811806.post-3839626518411069392014-12-10T17:58:56.664-08:002014-12-10T17:58:56.664-08:00I've made something very similar to these befo...I've made something very similar to these before to describe the interface to a database system. I called the composition of a function with Maybe a "partial function" (which unfortunately is strongly associated with computability) and a function with known keys an "enumerable partial function". The known keys can be viewed as a meet semi-lattice with an absorbing element bottom. This doesn't cover All keys, which I handled by considering any bounded lattice where we can test for bottom. A nice thing about working with lattices is when implementing the database you can define generalized indexed search trees elegantly in terms of a lattice equipped with a measure. In a way you are breaking each relation into the product of a lattice that can be reasoned about and a function that can't.<br /><br />What I didn't realize, and your post demonstrates very nicely, is that the bounded lattice gives rise to an Alternative instance.Anonymoushttps://www.blogger.com/profile/01185623407674742870noreply@blogger.com