Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://www.haskell.org/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. general comments requested (Michael Mossey) 2. Re: general comments requested (Stephen Tetley) 3. Template Haskell confusion (Alex Rozenshteyn) 4. Re: general comments requested (Michael Mossey) 5. Re: general comments requested (Heinrich Apfelmus) ---------------------------------------------------------------------- Message: 1 Date: Sat, 17 Jul 2010 12:35:42 -0700 From: Michael Mossey <m...@alumni.caltech.edu> Subject: [Haskell-beginners] general comments requested To: beginners@haskell.org Message-ID: <4c42060e.3040...@alumni.caltech.edu> Content-Type: text/plain; charset=ISO-8859-1; format=flowed I'm wondering if I could get really general comments on my program... like notes about language features I'm failing to take advantage of. This is part of a program to convert MusicXML to a simpler representation which I then manipulate. Most of the data is defined in MusDoc.Data: <http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27679#a27679> and the functions are defined in MusDoc.FromXml: <http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27678#a27678> A module called XmlAccess can access various interesting parts of the MusicXML document in a way that lets me ignore most of its complexity: <http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27680#a27680> MusicXML Haskell module can be found here: <http://hackage.haskell.org/package/musicxml> Thanks, Mike ------------------------------ Message: 2 Date: Sat, 17 Jul 2010 21:29:36 +0100 From: Stephen Tetley <stephen.tet...@gmail.com> Subject: Re: [Haskell-beginners] general comments requested To: Michael Mossey <m...@alumni.caltech.edu> Cc: beginners@haskell.org Message-ID: <aanlktim5lg7nq8ns9bcfqlnnhucugritxyhcajzeu...@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-1 Hi Michael It looks fine - with one big exception. Tracking down /undefined/ can be quite tedious, there is no indication at run time which particular undefined signalled the exit - I'd recommend you always throw an error with an identifiable string. Also, I wonder if the the MusicXML library on Hackage was auto-generated at least in part? It would be nicer to work with if it used constructors and field-labels more, rather than long tuples; though there isn't much you can do about that. Best wishes Stephen ------------------------------ Message: 3 Date: Sat, 17 Jul 2010 18:45:17 -0400 From: Alex Rozenshteyn <rpglove...@gmail.com> Subject: [Haskell-beginners] Template Haskell confusion To: beginners <beginners@haskell.org> Message-ID: <aanlktim4ox2kuaopcc5rs1bq1z2_cp3xn5omw-zxu...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" I'm trying to learn Template Haskell. I decided to try to write a mapTup function which takes function and a tuple (e.g. mapTup id (1,"hi",'a') ) and, well, applies the function to each cell. The closest I've gotten so far is this: > {-# LANGUAGE TemplateHaskell #-} > module MapTup > where > import Language.Haskell.TH > import Control.Monad > > mapTup fun tup = do > funE <- runQ $ [| $fun |] > TupE tupContents <- runQ $ [| $tup |] > return $ TupE $ map (AppE funE) tupContents The problem is that I can't figure out how to get the representation of the values bound to fun and tup. Sorry if I'm wording this badly. My head hurts from meta-programming ;) -- Alex R -------------- next part -------------- An HTML attachment was scrubbed... URL: http://www.haskell.org/pipermail/beginners/attachments/20100717/24c0f1d5/attachment-0001.html ------------------------------ Message: 4 Date: Sat, 17 Jul 2010 15:54:58 -0700 From: Michael Mossey <m...@alumni.caltech.edu> Subject: Re: [Haskell-beginners] general comments requested To: haskellbeginners <beginners@haskell.org> Message-ID: <4c4234c2.2000...@alumni.caltech.edu> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Thanks, Stephen. I didn't realize I had left all those undefined's in there. I don't know of the origin of the MusicXML package. One nice thing is that reading the source for it, and looking at what fields go in the tuples, give a clue about the valid combinations of elements in MusicXML. Otherwise, I had at my disposal only some MusicXML tutorials, which don't go into depth. I supposed I could look at the XMD file or whatever that's called (the document that defines MusicXML) but I am not currently familiar with how to read those. Mike Stephen Tetley wrote: > Hi Michael > > It looks fine - with one big exception. > > Tracking down /undefined/ can be quite tedious, there is no indication > at run time which particular undefined signalled the exit - I'd > recommend you always throw an error with an identifiable string. > > Also, I wonder if the the MusicXML library on Hackage was > auto-generated at least in part? > > It would be nicer to work with if it used constructors and > field-labels more, rather than long tuples; though there isn't much > you can do about that. > > Best wishes > > Stephen ------------------------------ Message: 5 Date: Sun, 18 Jul 2010 14:31:34 +0200 From: Heinrich Apfelmus <apfel...@quantentunnel.de> Subject: [Haskell-beginners] Re: general comments requested To: beginners@haskell.org Message-ID: <i1us76$pv...@dough.gmane.org> Content-Type: text/plain; charset=UTF-8; format=flowed Michael Mossey wrote: > I'm wondering if I could get really general comments on my program... > like notes about language features I'm failing to take advantage of. > > This is part of a program to convert MusicXML to a simpler > representation which I then manipulate. Most of the data is defined in > MusDoc.Data: > > <http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27679#a27679> > > and the functions are defined in MusDoc.FromXml: > > <http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27678#a27678> > > A module called XmlAccess can access various interesting parts of the > MusicXML document in a way that lets me ignore most of its complexity: > > <http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27680#a27680> I'm not familiar enough with the problem domain to say anything about the large scale organization of your code. But on a per-function scale, you have a few helper functions that are best expressed with list comprehension and combinators like fold or listToMaybe instead of general recursion. For instance, I recommend to write -- in module MusDoc.XmlAccess headerScoreParts = ... where remainder = [part | Part_List_2 scorePart <- pl_s] -- in module MusDoc.FromXml xScorePart = ... where ... lookupMidiInstr scInstrId = listToMaybe . filter ((scInstrId==) . A.midiInstrumentId) In a sense, the Haskell Prelude and standard libraries come with a superb "domain specific language for manipulating (some) lists" which is much easier to understand and visualize than general recursion. :) Concerning the MusicXML package itself, I think the use of 7-tuples in the MusicXML package for data types like Score_Header is creepy. I do admit that it has some interesting, yet ghastly appeal due to its regularity, but frankly, I think this is bad design. For instance, consider the following randomly chosen example data Orientation_ = Orientation_1 | Orientation_2 deriving (Eq, Show) read_Orientation_ :: Data.Char.String -> Result Orientation_ read_Orientation_ "over" = return Orientation_1 read_Orientation_ "under" = return Orientation_2 I am rather dissatisfied that the constructors are named Orientation_1 and Orientation_2 instead of Over and Under , and that read_Orientation is not a member of a type class or thelike. I can only hope that this code was generated automatically ... Regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com ------------------------------ _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners End of Beginners Digest, Vol 25, Issue 41 *****************************************