[Haskell-beginners] learning to use Haskell types
mpm at alumni.caltech.edu
Sat Aug 15 10:36:46 EDT 2009
This is really a general question, but any advice is welcome.
I'm currently working through Typeclassopedia and all the tutorials it
links to. I'm really enjoying it, but a kind of scary question is: when I
begin to write "real" software in Haskell, how will I find natural places
to use the types and how will I make the transition to idiomatic Haskell?
[Note: the main application I have for Haskell is my music composition
hobby. I plan to use Haskell to write software for editing music and for
computer-assisted composition (CAC). CAC means the computer does some of
the tedious work involved in searching for, and evaluation of, combinations
of musical themes. All my algorithms are personal to my own process. There
is no off-the-shelf software that can help me. That's why it's fortunate
I'm a programmer. The CAC features need to be tightly integrated into a
musical score editor, hence I have to write that too. Really quite a fun
project, and even if it takes two years, I will get years and years of
enjoyment from it!]
Then it occurred to me that a common theme in Haskell is to provide a way
to express a solution to a problem in an expressive form that is natural to
that problem. So maybe what I need to do is stop thinking, "Where can I use
this type," and instead dream up ways to express ideas in a simple and
natural form, then make use of Haskell types and type classes to make that
expressive form a reality.
For example, in a music editor, there are many actions that create new
notes. A note needs many pieces of information to describe it: the note's
place in time, its duration, dynamics, whether tied to successive notes,
type of flag or beam... Much of this information can be inferred from the
context in which the note is created, and so a natural expressive language
would bring a new note into existence with a minimal need for providing
details. Those details would be inferred from the context. So that's a
Reader monad right there.
More information about the Beginners