On Tue, 2008-09-30 at 14:54 -0400, Graham Fawcett wrote: > 2008/9/30 wman <[EMAIL PROTECTED]>: > > I got asked how to do one particular thing in excel, which led to discssion > > with "our local MSOffice expert". > > During the discussion I stated that's it too much of a PITA and that I'd > > rather write a script. > > Long story short, I promised him a one-liner to "show the power and beauty > > of Haskell". > > > > I got the csv package from hackage, modified the parseCSVFromFile so it's > > returns IO CSV rather than IO (Either ParseError CSV), and finished with > > following code > > > > (writeFile "output.csv") =<< (liftM printCSV $ liftM (map updateLine) $ > > parseCSVFromFile "input.csv") > > > > Is there room for improvement ? > > Could it still be made into one-liner without modifying the csv module (and > > without resorting to > > case parseCSVFromFile "input.csv" of { Left _ -> []; Right x -> x} > > kind of tricks) ? > > How about: > > parseCSVFromFile "in.csv" >>= return . either (const "error!")
Whenever you see this >>= return . f pattern think liftM or fmap or <$>. > printCSV >>= writeFile "out.csv" (either (const "error!") printCSV <$> parseCSVFromFile "in.csv") >>= writeFile "out.csv" _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe