Homophony Groups in Haskell
andrew.gibiansky.com
andrew.gibiansky.com
Go:
http://blog.gopheracademy.com/moving-to-go
http://blog.iron.io/2013/03/how-we-went-from-30-servers-to-2...
http://blog.gopheracademy.com/day-03-building-a-twelve-facto...
Clojure:
http://blog.getprismatic.com/blog/2013/1/14/bringing-functio...
http://www.infoq.com/presentations/Why-Prismatic-Goes-Faster...
These posts exist and come up from time to time on /r/haskell as well as after the Commercial Users of Functional Programming conference each year. If you go fishing in the /r/haskell archives you'll find quite a few.
Galois makes "highly reliable" software stuff for hardware manufactures and crypto clients.
Edward Kmett is writing/using a Haskell variant for use at the bank where he works.
http://elm-lang.org/ Elm is a FRP/DHTML webapp-building language Haskell variant whose compiler is a Haskell program. Check out Prezi and Evan's blogs Prezi.com recent hired its author Evan Czaplicki
Draw amazing diagrams in Haskell, with Diagrams:
http://projects.haskell.org/diagrams/gallery.html
Yesod (Michael Snoyman) is a full-festured webapp stack. Michael blogs its features.
Ultimately, you don't see large teams using Haskell, and there isn't full integration with all the popular consumer web infrastructure. So instead you have a bunch of small niche products, and the language used to teach mathematical concepts in blogs like Dan Piponi's
But even there the goal is not about adopting Haskell in the large, but using rather using Haskell to create a DSL for end users/employees internally in FB to easily create search/spam filter behaviors.
Still, it's a start.
[1] http://www.haskellcast.com/episode/004-simon-marlow-on-paral...
On the other hand, it turns out that these mathematicians are giving back some great things to the community. People like Edward Kmett have done a lot of work in using category theory in Haskell, and it's given us lovely things like lenses. They can tell us why things things we think should work but dont (some things you can write a Monad instance for, for example, don't obey the monad laws, and more often than not that leads to problems).
The only problem I see if that there are often two different languages being spoken, and it takes a while for us less maths inclined to catch onto why this work is beneficial to us in every day code.
Perhaps when I've got something working, I can write a blog post for you showing my Haskell implementation of a decompressor for LZ4, which is most definitely low level and applicable to the real world (there's lots of pointer arithmetic going on).
Those videos show "real world" application, namely the "redoing make" portion of the playlist.
My personal homophony group is not trivial (I think); in particular, I believe that for all pairs of words I regard as having the same pronunciation, the number of "v"s is the same. The counterexample alleged on the linked page is "veldt = felt", but I (like the Dutch, I believe) pronounce "veldt" with a "v" rather than an "f" sound.
I can reduce everything else to the identity using only (what I think are) uncontroversial homophone pairs, so I claim that every native English speaker of large enough vocabulary has a homophony group that's either trivial or isomorphic to Z (and generated by "v").
(I did need some uncommon words, though I didn't try very hard to avoid them: od, gneiss, phlox, qat, flyte, lam. And some somewhat-uncommon ones: banns, rapt, wright.)
also as an aside, both effect and affect are both verbs and nouns.
Most people I've encountered pronounce the verb "affect" and noun "effect" differently, though the difference can be slight. (schwa for affect vs. short e for effect)
For this comment, I don't want to dive into this post from the perspective of someone who's never studied abstract algebra before, so what I'm about to write won't make much sense to anyone who hasn't. If you know a little bit of group theory, though, you should be able to follow along.
In math-ese, the group under consideration is
<a,b,c,...,z | knight=night, ad=add, arc=ark, ...>
Defining a group this way is called a "group presentation". The symbols to the left of the | are called "generators" and the symbols to the right are called "relations." For example, one presentation of the integers modulo 4 with mod-4 addition is <x | x+x+x+x = 1>
See http://en.wikipedia.org/wiki/Presentation_of_a_group for the gory details.Anyhow, the blog post confused me at first because the "homophony group" is a kind of mathematical double entendre. In algebra one often omits the group operation explicitly, writing "xy" instead of "x.y," where "." is the group operation. This implicit understanding is what makes the "joke" work.
So, on the one hand, we write down the relation "ad=add" in our presentation because ad and add are homophones in English. On the other hand, in group-land, we mean a.d = a.d.d, where (again) "." is the group operation. In group-land, however, there's no sense that "a" is anything special. The 26 symbols "a" to "z" are arbitrary and we could easily write, say,
<σ,b,c,...,z | knight=night, σd=σdd, ...>
or use any other 26 distinct symbols for "a" to "z." The generators tell us what symbols we have at our disposal and the relations tell us how we can reduce combinations of those symbols to the identity element.Math jokes. Oh buddy.
For the CS folks among us, there's a computational problem called the "group isomorphism problem" which asks, "Given two group presentations, are they isomorphic?" This problem is provably undecidable: http://en.wikipedia.org/wiki/Group_isomorphism_problem This means you can't write a single algorithm which takes two arbitrary group presentations as inputs and correctly determines whether the groups as presented are isomorphic.