8 ms·
School of Haskell Goes Beta
- hosh 14y agoLady's Illustrated Primer, ha! I've been working my way through "Learn You a Haskell For Great Good". I worked my way up around functors and monads. Then I stopped for a while. This new School will be interesting :-)
- tunesmith 14y agoYeah, this will be interesting. I've also been going through Learn You A Haskell, making an Anki deck as I go. Slow work, but Anki will help me retain everything I'm learning.
- ehamberg 14y agoSlightly off-topic: How much do you break down concepts when using Anki to learn a programming language? I use Anki for tonnes of stuff, but haven't used it for learning programming languages/APIs.
- tunesmith 14y agoGood question, I think about that a lot. So far it seems that it's better to break down too much rather than not enough. Because at worst you'll have easy cards. In other decks I have some puzzles that require more steps than I can do in my head, and I always feel annoyed when those cards come up. For programming languages, it seems like a good fit to use it for rules and syntax, and the principles behind why the language works the way it does. I don't think I'll use it to ask me how to write scripts, though.
- monkeyfacebag 14y agoAs excited as this makes me, I am way more excited to hear about the "full blown Haskell IDE" they mention. Is this a cloud service?
- efnx 14y agoIt may be leksah, which is currently available on hackage, though I've never been able to get it to compile (I haven't tried that hard)...
- mlinksva 14y agoNot likely leksah http://fpcomplete.com/designing-the-haskell-ide/ http://fpcomplete.com/designing-the-haskell-ide/
- FPguy 14y agoFP Complete is currently developing a Haskell IDE which will be exposed as a cloud service. Gregg Lebovitz talks about it here: http://www.youtube.com/watch?v=IM_OSykXKxM http://www.youtube.com/watch?v=IM_OSykXKxM
- skwosh 14y agoHope this goes into a lot of depth... My main issue with existing books and tutorials is that I'm left in the dark about the more interesting/advanced parts of Haskell. Some of the areas I would like to have a better understanding: - More advanced kinds of monads e.g. Logic, Continuation - Monad Transformers - Arrows - Rank-N types - GADTs - Category theoretical ideas e.g. Bananas and Lenses - Type derivatives and TypeClass abuse c.f. Conor McBride - Control patterns like Iteratees, Generic Zippers c.f. Oleg Kiselyov, Chung-Chieh Shan I have an intuitive grasp of the above, but to me Haskell is more about programming with types than anything functional. On the practical side, it seems like Haskell excels as a language processor, and parsing/compilation would be a great way to explore how to structure certain kinds of applications (like web servers, graphics pipelines, etc). Please don't make it too real-world, I already have bash ;)
- dysoco 14y agoI'd say you should take a look at research papers for those topics: But it's true, we are lacking advanced Haskell books.
- skwosh 14y agoFor me, there's a pretty big gap between the available educational materials and research papers. My understanding of the academic stuff is mostly intuitive. It isn't until I read a paper like Monadic Parser Combinators [1] or sigfpe's blog [2] that it really becomes concrete. I find that for a lot of higher-level ideas much of the heavy lifting isn't necessarily through application of functional ideas per se, but through more sophisticated type gymnastics. Because expressions are often written in short-hand (to expose structure), as well abbreviated and underspecified (to get the compiler to do the work), making sense of academic code can be a challenge. In another life I'd have dedicated more time to learning the fundamentals (of Programming Language Theory and Category Theory), because I find the whole field insanely facinating. Maybe I'm looking for a short-cut but there isn't one? [1] http://eprints.nottingham.ac.uk/237/1/monparsing.pdf http://eprints.nottingham.ac.uk/237/1/monparsing.pdf [2] http://blog.sigfpe.com/ http://blog.sigfpe.com/
- yarou 14y agoSigned up. :) This is my nth attempt at learning Haskell, but I have a fairly good handle on most of the basics.
- hexonexxon 14y agoalas waiting list doubt i'll switch from scheme but still interested
- Ixiaus 14y agoAny Haskell web-application framework is awesome - Yesod in particular as it has the most active community and written material for it. I've lately been working on an (unpublished) project using Haskell+Yesod+Fay+Clay and it's remarkable how productive I am; in that most of my time is spent figuring out my types, writing the code, then...it's done? In Python I run into a lot of programmer related bugs that Haskell's rigid type system prevents. It can't prevent logic/flow "bugs" but it does keep a lot of other bugs out that would normally have me spending potential future hours fixing/debugging. It's also not just the type safety that increases my productivity, it's also...Haskell. Abstraction in Haskell can make for very concise and correct programs. Fay and Clay are particularly awesome too. Haskell definitely has a learning curve, there was a steep curve for me and I already had significant functional programming experience (Erlang & Scheme). I'm really happy to see these guys taking that on!
- pekk 14y agoThe correct way to use Python is to write unit tests. Don't blame your tools when you don't know how to use them correctly.
- batgaijin 14y agoThank you for your time, enlightened one.
- efnx 14y agoWhat it comes down to is that Haskell's type system eliminates whole categories of bugs because of the language. Having the correct way to use the language outside of the language itself, as an addition, in the case of Python or Ruby or (insert interpreted language here) makes for lots of extra debugging time.
- pekk 14y agoWhen you use a programming language, you use its ecosystem. Haskell has its own tools and norms outside "the language itself" which I am obligated to take advantage of. If I develop software in Haskell, but completely ignore these tools, and make complaints which have DIRECTLY to do with my non-use of available facilities, I do not then have the right to say that Haskell is broken and objectively worse than language X. It does not follow. Writing unit tests is not hard. Nor is it rare or exceptional. Wrestling Haskell's type system is not necessarily easy. Overall, making programs do the right thing is a big problem in any language, including Haskell, and one hopes that any system of significant size is being tested properly whether it uses a static type system or not. The use of a type system is not in itself an objective slam dunk for Haskell over Python or anything else.
- bpolania 14y agoI learned Haskell in my first algorithm course in the University, mine was the last class ever to do it in that university, the following semester they switched completely to Pascal and later to Java. These are good news, I just can't wait to see that IDE.
- shurane 14y agoIsn't switching from Haskell to Pascal or Java a huge switch? That's a change in thinking style, even!
- maximveksler 14y agoHN never fails, just as I was browsing the web after reading pg assay about programming languages and the story of how he built what is now yahoo shop using lisp and deciding that instead of lisp I will learn Haskell this comes along. Looks very good and hope that it won’t be /too/ easy start without any challenges...
- jhuni 14y agoYou should still learn Lisp unless you are certain that Haskell is already in the perfect form for what you want to do. Lisp gives you unprecedented freedom to transform the language into the form that suits you best.
- tikhonj 14y agoThat's not really unlike Haskell: in Haskell, you just have a different set of tools for transforming the language. I just came off a largish project in Racket, and do appreciate that it's very flexible. However, I've found Haskell to be roughly as flexible in practice. Haskell has surprisingly flexible syntax and semantics, and I've found it very easy to have parts of my program with radically different semantics from normal Haskell. You can very easily layer on things like non-determinism, logic programming, error-handling, asynchronous programming or even continuations onto Haskell code. And since it's lazy by default, you do not have to do anything special to add new control structures--you don't even need to use the macro system. (Which, of course, Racket does much better--template Haskell works, but it's a bit of a pain.) I've also spent some time embedding DSLs in both Racket and Haskell, and have found that they are about roughly equally convenient. Racket is more flexible syntactically--it's very easy to do things like inspect variable names and the like. Haskell, on the other hand, has some very lightweight tools (laziness, do notation and a very spartan syntax) that make it very easy to change its semantics. The type system--especially things like GADTs--also makes life much easier for DSLs.
- eru 14y ago> (laziness, do notation and a very spartan syntax) I do not know whether spartan is the right adjective. The Haskell syntax is rather bendable, but that's because you can do almost everything with the basic tools of operators and function calls. On the other hand, the Haskell syntax space is rather crowded already, and it's not trivial to add without hitting something that's already there.
- arocks 14y agoThis is a very promising approach. I was blown away when they actually executed a web application and the working web page was shown inside an IFRAME. This means that I could learn programming from any device, even a tablet, without needing to install anything.
- FPguy 14y agoThanks. One of our design points in fact is that you can use the School from a tablet. We're still a bit concerned about Safari performance on the iPad, but we're on the case!
- pohl 14y agoI suspect that you are not running into safari's performance limits so much. I think it's more likely that your client-side code is doing something that interferes with the browser's event loop, and is thereby preventing the browser from processing ordinary operations like doubletap-to-zoom, scrolling, pinch-to-zoom, etc. If you have a lot of JavaScript operations to perform, sometimes you need to defer some of them until the next time the event loop comes around — so that the browser can "breathe", as it were. GWT, for example, has a DeferredCommand and IncrementalCommand facility for this situation. I believe they are just wrapping the setTimeout(func, 0) trick. (See link below.) If Fay does not have such a facility, then you may need to do some upstream work to teach it how. http://b.javascript.info/tutorial/events-and-timing-depth#asynchronous-events http://b.javascript.info/tutorial/events-and-timing-depth#as... But I guarantee that even an iPad 2 should have enough oomph to tackle your modest needs. It does just just fine on more intensive things like Google docs, spreadsheets, reader, and plus. And Facebook. If, for example, I have not yet asked the monads tutorial to compile and run a snippet, then the browser's JS thread should be entirely quiescent and the event loop should be responsive to my zoom, pan, and rotation requests. That it isn't implicates your code (and/or the code Fay emits) — not the browser. I hope the creators of Fay considered this while architecting it. If they didn't, it's unlikely that they would have arrived at the correct solution by accident, because ordinarily compilers never need to worry about being "a good citizen" to a browser's event loop. Best of luck. I envy that you get to work on this!
- silverlake 14y agoHow is this better than working through a book? If I can't download and install Haskell, then learning the language is the least of my problems.
- tikhonj 14y agoThe important part is to engage newcomers. This is easiest to do if there is no barrier to playing with Haskell. They can always install Haskell once they're a bit more familiar with it and see why it's awesome. If you're already planning to learn Haskell and have a book about it, this is useful because it lets the author of the tutorial integrate the material more closely with the language environment. This makes things like little exercises to illustrate a particular point easier to do.
- misleading_name 14y agojust got my log in